High-performance cache policies and supporting data structures.
This document explains how CacheKit’s release cycle works in practice: what runs in CI,
what makes main “releasable”, and how a version becomes a GitHub Release and (optionally)
a crates.io publish.
For the hands-on, step-by-step release procedure, see Releasing CacheKit.
main.main should always be releasable. CI is set up so that obvious breakages are caught
before merge (format/lint/tests/docs/audit/MSRV).vX.Y.Z (example: v0.1.0)vX.Y.Z-alpha / vX.Y.Z-rc.1, etc.v. In Cargo.toml, use 0.1.0-alpha, not v0.1.0-alpha.main (.github/workflows/ci.yml)CI runs on:
pull_request targeting mainpush to mainWhat it does (project-specific):
cargo fmt --checkcargo clippy --all-targets --all-features -- -D warningscargo test --all-features --all-targets on Linux/macOS/WindowsRUSTDOCFLAGS='-Dwarnings' cargo doc --no-deps --all-featuresrustsec/audit-checkcargo bench --no-fail-fast (only on main, not required for PRs)cargo check --all-features on Rust 1.85.0Local equivalents (useful before opening a PR):
cargo fmt
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-features --all-targets
RUSTDOCFLAGS='-Dwarnings' cargo doc --no-deps --all-features
.github/workflows/release.yml)The release workflow runs on:
push tags matching v*.*.*Important:
v0.1.0.v0.1.0-alpha or v0.2.0-rc.1 unless you
expand the trigger pattern.What the workflow does:
origin/main.cargo package and cargo publish --dry-run.crates.io publishing:
CARGO_REGISTRY_TOKEN is set.cargo publish using that token..github/workflows/maintenance.yml)Maintenance runs on a schedule and manually (workflow_dispatch) to catch:
.github/workflows/jekyll-gh-pages.yml)On each push to main (or manually), GitHub Pages builds the site from docs/ via Jekyll.
This is for the documentation site under the repo’s Pages URL (not cargo doc output).
In a PR that targets main:
Cargo.toml version = "X.Y.Z(...)" (no v).CHANGELOG.md for that version/date.cargo benchscripts/update_docs_benchmarks.sh target/criterion docs/benchmarks.mdmainMerge once CI is green. This keeps main always in a releasable state.
Tag the exact commit on main you want to release.
vX.Y.Z) will trigger the automated release workflow.vX.Y.Z-alpha, etc.) currently will not trigger the release
workflow with the default tag pattern.For stable tags, GitHub Actions validates, creates the GitHub Release, and optionally publishes to crates.io if configured.
[Unreleased] in CHANGELOG.md ready for the next cycle.v*.*.* (stable) unless you change
the workflow trigger.CARGO_REGISTRY_TOKEN is configured as a repository
variable (or update the workflow to use secrets).docs/
folder builds successfully with Jekyll.