Repository navigation
Releases: tomtom215/github-backup-rust
Releases · tomtom215/github-backup-rust
Release list
github-backup v0.3.2
Maintenance release focused on the release pipeline, distribution
strategy, supply-chain hardening, mutation-testing coverage, and
CI/docs polish. No runtime behaviour changes for end users; all
existing configurations and command-line flags are unchanged.
Changed
- Release distribution: dropped crates.io; releases are now binary +
Docker only. Every workspace crate is markedpublish = false,
thepublish/publish-dry-run/packagejobs and the protected
crates-ioGitHub Environment have been removed from
.github/workflows/release.yml, andCARGO_REGISTRY_TOKENis no
longer referenced. Users install via one of three methods, in
recommended order:- Pre-built binary from the GitHub Releases page (five targets:
Linux x86_64/aarch64, macOS x86_64/aarch64, Windows x86_64),
each with a.sha256checksum and SLSA Level 2 build
provenance attestation. - Multi-arch container image from GHCR
(ghcr.io/tomtom215/github-backup-rust:<tag>), wired up with
a Docker Compose file at the repo root that supports local,
S3, B2, MinIO, and Codeberg profiles and reads secrets from a
.envfile (template:compose.example.env). cargo install --git https://github.com/tomtom215/github-backup-rust --tag v0.3.2 github-backup.
The rationale is thatgithub-backupis a CLI application, not a
reusable library — the workspace split exists for internal code
organisation, not for third-party consumption. Dropping crates.io
removes the operational burden of seven name reservations, seven
docs.rs builds, and per-release intra-workspace version-pin
synchronisation.
- Pre-built binary from the GitHub Releases page (five targets:
- Multi-stage release pipeline (
.github/workflows/release.yml):
validate → ci → security → binaries → github-release → docker.
The validate job enforces semver tag format, checks
[workspace.package].versionagainst the tag, verifies every
intra-workspace dependency line (if any carryversion =pins),
and requires a matching## [X.Y.Z]CHANGELOG entry before any
build runs. - Intra-workspace
version =pins dropped from the root
Cargo.toml. With every member markedpublish = false, only the
path =source is used to resolve internal dependencies, so there
is nothing to keep in lock-step every release. - Portfolio-grade docs, manifests, and CI polish (PR #16): the
rootREADME.md,ARCHITECTURE.md, every per-crateCargo.toml
(descriptions, keywords, categories, documentation links), the full
mdBook (docs/src/**),Dockerfile,clippy.toml, anddeny.toml
have been reviewed and aligned.README.mdand
docs/src/getting-started/installation.mdhave been rewritten
around the new binary / Docker / source install story. docker-compose.ymlnow pulls from GHCR by default via a
shared YAML anchor (image: ghcr.io/tomtom215/github-backup-rust),
mounts./backups→/backupand./config.toml→
/etc/github-backup/config.toml, and fails fast if required
secrets are missing from.env.build: .remains available as a
commented-out override for local development. A new
compose.example.envtemplate ships at the repo root.mdBookpinned to0.4.40in CI and the Pages workflow to
match the version that themdbook-linkcheckbackend is known to
be compatible with.- Pages deployment publishes
docs/book/html/instead of
docs/book/. Enabling thelinkcheckbackend causes mdBook to
emit each backend into its own subdirectory, so the HTML tree is
now one level deeper.
Added
- SLSA Level 2 build provenance attestations for every pre-built
binary produced by the release pipeline, verifiable with
gh attestation verify. - Mutation-testing configuration (
.cargo/mutants.toml): curated
exclude list for generated / panic-only /#[cfg(...)]-gated code
paths socargo mutantsproduces actionable survivors only. A
workflow_dispatch-only CI job runs the full mutation suite
on-demand without blocking every push to main. - Pagination malformed-URL tests in
github-backup-clientand
rate-limit edge-case tests to catch mutants that would
otherwise silently degrade GitHub API retry/backoff behaviour. BackupRunHistory::pushregression tests covering the
deduplication and ordering mutants flagged bycargo mutants.cargo-auditconfiguration (.cargo/audit.toml) with an
explicit ignore entry and rationale for the informationalrand
advisory that does not affect this project.
Fixed
- Release workflow
validatejob could never succeed: the awk
extractor for[workspace.package].versionused the greedy regex
.*"to strip theversion = "prefix, which matched through the
closing quote and left an empty string. The job then always
reported "could not parse[workspace.package].version" and
failed before comparing against the tag. Replaced with^[^"]*"
so the strip stops at the first quote. Deploy Book to GitHub Pagesworkflow failed with "The command
mdbook-linkcheckwasn't found":book.tomlenables
[output.linkcheck], but the Pages workflow only installed
mdbookitself. The link checker is now installed alongside
mdBook, matching the existingci.ymlstep.is_process_alivefalse positive on macOS:kill(0, 0)
returns success on BSDs for PID 0 (the kernel swapper), which
caused the lockfile staleness check to treat a stale lock with
PID 0 as still held. The check now rejects PID 0 explicitly.- macOS CI permissions test that relied on
chmod 000being
honoured when the test runs as root. cargo-denyadvisoriescheck now runs withcontents: read
permissions in CI; the previous implicit default blocked the
step on pull requests from forks.BackupEvent::RepoCompletedmissing error field and related
dead_codeclippy errors surfaced by the mutation-testing work.- Rustdoc intra-doc link ambiguity for the
writemodule and
several broken internal mdBook links that surfaced after the
link-check backend was added.
Security
- Dependency audit: all advisories reviewed and either fixed,
upgraded away, or explicitly ignored with justification in
.cargo/audit.toml. The release pipeline now runs
cargo-deny check licenses bans advisories sourcesas a gating
job before any binary or container image is produced.