# Cicero

Toolbox to help automate Rust CI builds with plain Rust.

Current goal is to provide helper functions, which are useful independent of how you structure your CI code.
But you likely still want to structure your CI code according to the [cargo-xtask](https://github.com/matklad/cargo-xtask) pattern.

## Features

### Path Handling

Access paths in your repository with compile-time checks.

```rust
use cicero::path::repo_path;

let readme = repo_path!("README.md");
let doc_src = repo_path!("doc/src/");
```

For more information, see [Cicero Path](https://crates.io/crates/cicero_path).


### CLI Management (feature: `commands`)

Automatically install CLIs when needed, independent from the CLIs in your other projects.

```rust,no_run
use cicero::commands::*;

pub static CROSS: Cli = Crate::new("cross").into_cli();

CROSS.command()
    .arg("build")
    .arg("--release")
    .arg("--target=aarch64-unknown-linux-gnu")
    .status();
```

For more information, see [Cicero Commands](https://crates.io/crates/cicero_commands).


### Tracing (feature: `tracing`, default-enabled)

Call `cicero::init::tracing()` at the start of your main-function to setup logging output.

You can then use the [`tracing` crate](https://crates.io/crates/tracing) to write out messages.  
In particular with more complex workflows, using `#[tracing::instrument]` on significant functions  
is helpful to discern where the logging output belongs to.


## Changelog

You can find the changelog here: <https://codeberg.org/trem/cicero/src/branch/main/CHANGELOG.md>
