cicero_distribution

Crates.iocicero_distribution
lib.rscicero_distribution
version0.4.1
created_at2024-09-07 09:07:13.565209+00
updated_at2025-05-19 17:51:25.768122+00
descriptionBundle distribution files in CI code.
homepage
repositoryhttps://codeberg.org/trem/cicero/
max_upload_size
id1367059
size75,593
(trem-rs)

documentation

README

Unstable: Cicero Distibution

Need to pack multiple files into a distribution?
Cicero provides an API for specifying the file structure and then deferring to your functions to provide the contents:

use std::{fs, path::Path};
use cicero_distribution::Distribution;
use cicero_path::repo_path;

fn main() -> anyhow::Result<()> {
    let distribution = Distribution::new("myproject")?;

    distribution
        .add_file_from_path("README.md", repo_path!("README.md"))?
        .add_file("myproject", |file| build_backend_executable(file))?;

    distribution
        .dir_unstructured("public", |dir| build_frontend(dir))?;

    let distribution_dir = distribution.bundle_as_dir()?;
    Ok(())
}

fn build_frontend(out_dir: &Path) -> anyhow::Result<()> {
    let build_out_dir: &Path = unimplemented!();
    fs::rename(build_out_dir, out_dir)?;
    Ok(())
}

fn build_backend_executable(out_file: &Path) -> anyhow::Result<()> {
    let build_out_file: &Path = unimplemented!();
    fs::rename(build_out_file, out_file)?;
    Ok(())
}

Advantages to this approach:

  1. File structure is documented and trivially correct.

  2. Conflicts due to two code locations modifying the same files are practically eliminated.

  3. Obvious where to jump into the code to change a portion of the distribution.

  4. Less path wrangling. Your function has the complete path passed to it. No need to modify it further.

  5. Your functions become naturally testable. You can pass a temporary path (e.g. from assert_fs) instead and assert on that.

Mind that this API may still see larger changes, as more features are implemented.

Commit count: 0

cargo fmt