# Contributing ## Design Rusticlone must stay out of the way of someone taking their first desktop or server backup: easy to configure, easy to use and forget. Rustic profiles hold most of the configuration, and Rusticlone adds few flags and environment variables of its own. The README is the only public document for now, so it has to be a complete guide. ## Setup ```sh cargo install cargo-binstall rustup component add rust-analyzer # needed by cargo xtask acyclic cargo binstall cargo-nextest cargo-insta rustic-rs cargo-deny ``` Or open the repository in its dev container (`.devcontainer`), which sets all of this up on Linux. ## Trying it out On Linux, this runs Rusticlone on a two-profile collection: ```sh S=$(mktemp -d) export XDG_CONFIG_HOME=$S/.config XDG_CACHE_HOME=$S/.cache RUSTICLONE_STATE_DIR=$S/state RUSTICLONE_LISTEN=127.0.0.1:32999 mkdir -p $S/.config/rustic $S/docs echo hello > $S/docs/a.txt cat > $S/.config/rustic/Docs-hdd.toml < $S/.config/rustic/Docs-cloud.toml <` shows that line under the entry. ## Release process 1. Every push to main updates a release PR, in which release-plz sets the version and the changelog from the PR titles since the last release. 2. Merging it tags `vX.Y.Z` and drafts a GitHub release. 3. The tag starts [release.yml](.github/workflows/release.yml), where cargo-dist builds the binaries and installers. 4. The publish and post-announce jobs in `[workspace.metadata.dist]` of `Cargo.toml` then publish the packages. Their workflows in `.github/workflows` can be run again for a tag by hand.