Release checklist
No step below implies that a release or registry publication has occurred.
Source and version
- Clean checkout on the intended protected revision; CI green.
- Git author and repository destination verified.
- One explicit version across all workspace crates and the extension.
- Changelog contains complete notes for that version.
- Documentation no longer describes the selected version as unpublished.
- No signing files, environment files, generated platform artifacts, or developer-specific paths tracked.
Licensing
- Run
python3 scripts/check-licenses.py --generate; inspect the inventory diff instead of accepting it mechanically. - Run
python3 scripts/check-licenses.pywith no stale inventory. - Confirm RustFerry root licenses and the release license bundle are present.
- Record the Slint license path for every generated mobile binary considered for attachment. Do not attach such binaries when the choice is unresolved.
- Confirm release notes retain the official
#MadeWithSlintbadge unchanged and explain the downstream publisher’s attribution or alternate-license duty. - Recheck third-party notices if the VSIX gains any production npm import.
Rust and packages
-
cargo fmt --all -- --check -
cargo clippy --locked --workspace --all-targets --all-features -- -D warnings -
cargo test --locked --workspace --all-targets --all-features -
RUSTDOCFLAGS="-D warnings" cargo doc --locked --workspace --all-features --no-deps -
python3 scripts/check-release-contract.pyreports every internal edge exact. -
cargo package --workspace --exclude rustferry-worker-macos --locked --list -
cargo package --workspace --exclude rustferry-worker-macos --locked -
cargo publish --workspace --exclude rustferry-worker-macos --dry-run --locked -
python3 scripts/check-release-archives.py --check-sources --target-dir target/package-source-check target/package/*.crate - Inspect all nine
.cratearchives and their normalized manifests; confirm both canonical license files are regular root members.
VS Code extension
-
npm cifromeditors/vscode. -
npm run checkpasses, including VSIX structural smoke. -
npm run test:hostpasses with the intended realcargo-ferrybinary. - Ordinary Rust stays inactive; a
ferry.tomlworkspace auto-activates, registers commands, discovers the project, and opens its manifest. -
npm run perfresults reviewed and recorded with host and revision context. - Views and trust gating checked manually when their behavior changed.
- VSIX size and SHA-256 recorded from the final bytes.
Platform evidence
- Android and iOS Simulator artifact workflows green for the release commit.
- Exact artifact validation recorded; no simulator/device/signing claim beyond observed evidence.
- Physical-device binaries excluded unless signing, installation, launch, and required license notices were actually validated.
Release assembly
- Run the
Draft releaseworkflow with the exact workspace version andcreate_draft_releasedisabled. - Download the release assembly. Verify package count, schema, versioned VSIX,
license bundle, notes, and every entry in
SHA256SUMS. - Confirm the release commit has successful exact-SHA
pushjobs for CI, VS Code, both platform artifacts, and mdBook/Pages. - Keep the assembly private until registry publication and registry-only smoke testing succeed.
Registry and Marketplace publication
- Publish crates manually in the order documented in Rust package readiness, waiting for registry visibility between dependency groups.
- Verify local crates.io authentication without printing or passing the token; stop before the first upload when
cargo loginis still required. - Verify each crate version, tarball, checksum, dependency metadata, docs.rs build, and registry timestamp.
- Install
cargo-ferryfrom crates.io into an isolated Cargo root; generate and check a project without a runtime-path override. - Publish the already-inspected VSIX to Marketplace only through a protected
manual
vscode-marketplaceenvironment with a required reviewer and theVSCE_PATEnvironment secret. - Verify the Marketplace workflow consumed the successful assembly run from
the exact release revision and used
vsce publish --pre-releasewithout a token argument. - Verify Marketplace version and install the public extension into an isolated VS Code profile.
- Create and push annotated tag
v0.1.0from the verifiedmastercommit. - Create GitHub Release
RustFerry 0.1.0as a pre-release with manually reviewed notes covering packages, installation, Rust 1.92, validation limits, and Slint licensing. - Verify the tag target, pre-release flag, notes, links, and any intentional assets.
- Create the next patch
Unreleasedchangelog section and commit release closeout. - Track migration from the temporary global Marketplace PAT to Microsoft Entra ID or trusted publishing before December 1, 2026.
Failure and rollback policy
- Query crates.io before retrying any timed-out upload.
- Record the last verified package when publication stops partway through.
- Never overwrite a published version or change its dependency contract.
- Do not yank a healthy prerequisite because a later package failed. Fix only unpublished packages when compatible; otherwise prepare the next patch release.
- Yank only for a concrete security, legal, or unusable-package defect, and record the reason and replacement version.