- Rust stable (via rustup)
- just — task runner
- Docker — for cross-platform test runs and isolated Linux environments (optional but recommended)
git clone <repo>
cd rmf
cargo buildjust build # debug build
just test # run tests
just check # fmt + clippy + test (run before pushing)
just fmt-fix # auto-formatAll CI checks must pass before a PR is merged. Run just check locally first.
- Keep the single-file structure (
src/main.rs) unless the change genuinely warrants a module split. - New CLI flags go in
Args; document them inREADME.md. - If the change affects deletion behavior, add a test in
cargo testand verify withjust docker-test.
just test # unit tests and basic functionality
just fmt-check # formatting check
just clippy # lintingjust docker-test # full integration suite in isolated Linux container
just docker-bench-* # performance benchmarks, defined in justfileWhy Docker tests? They provide a clean, reproducible Linux environment to test edge cases (empty dirs, symlinks, nested trees, protected path rejection) that may behave differently on your local machine. This is especially important for cross-platform correctness.
Releases are automated via .github/workflows/release.yml. Push a v* tag to trigger a build for all supported targets and publish a GitHub Release with attached binaries.
git tag v0.2.0
git push origin v0.2.0Targets built:
x86_64-unknown-linux-gnux86_64-unknown-linux-muslaarch64-unknown-linux-gnuaarch64-unknown-linux-muslx86_64-apple-darwinaarch64-apple-darwinx86_64-pc-windows-msvcaarch64-pc-windows-msvc