maincopy-server 0.1.0

Self-hosted publishing server with exact previews and explicit release approval
Documentation
use std::{env, error::Error, io, path::PathBuf};

#[path = "build_support/frontend.rs"]
mod frontend_build_support;
#[path = "build_support/frontend_digest.rs"]
mod frontend_digest_contract;
#[path = "build_support/frontend_io.rs"]
mod frontend_io;

fn main() -> Result<(), Box<dyn Error>> {
    println!("cargo::rerun-if-changed=build.rs");
    println!("cargo::rerun-if-changed=build_support/frontend.rs");
    println!("cargo::rerun-if-changed=build_support/frontend_digest.rs");
    println!("cargo::rerun-if-changed=build_support/frontend_io.rs");
    println!("cargo::rerun-if-changed=frontend");
    println!("cargo::rerun-if-changed=frontend/css");
    println!("cargo::rerun-if-changed=migrations");

    let manifest_dir = required_path("CARGO_MANIFEST_DIR")?;
    let out_dir = required_path("OUT_DIR")?;
    let input_paths = frontend_build_support::compile_frontend(&manifest_dir, &out_dir)?;
    for input in input_paths {
        println!("cargo::rerun-if-changed={}", input.display());
    }
    Ok(())
}

fn required_path(name: &'static str) -> Result<PathBuf, io::Error> {
    env::var_os(name).map(PathBuf::from).ok_or_else(|| {
        io::Error::new(
            io::ErrorKind::NotFound,
            format!("Cargo did not provide required environment variable {name}"),
        )
    })
}