This document describes the current release contract for CPU Affinity Tool.
It is intentionally narrow and truthful:
- stable releases are Windows-only
- Windows stable tags publish
cpu-affinity-tool.exe - Linux beta prerelease tags publish a raw Linux binary, a
tar.gz, andSHA256SUMS.txt - CI validates the Linux beta build/test/clippy path from source on pinned Ubuntu runners; desktop-session smoke remains manual beta validation
- there is no installer, AppImage, Flatpak, code signing, or winget package in the current release contract
Use these files together:
docs/release-checklist.mddocs/linux-beta-release-checklist.mddocs/release-smoke-matrix.md.github/workflows/ci.yml.github/workflows/release.yml.github/workflows/release-linux-beta.ymlchangelogs/vX.Y.Z.txtchangelogs/linux-beta-vX.Y.Z-N.txt
Release publishing is tag-based.
Normal branch and pull-request CI runs both:
- the Windows release-path validation job
- the Linux beta build/test validation job on
ubuntu-24.04
Stable Windows publishing and Linux beta publishing are separate workflows with separate tag namespaces.
When a stable tag matching v* is pushed:
- GitHub Actions runs the Windows release job
- the workflow validates the tag format against
vX.Y.Z - the workflow confirms
Cargo.tomlversion matchesX.Y.Z - the workflow requires
changelogs/vX.Y.Z.txt - the workflow runs formatting,
cargo clippy --features windows --bin cpu-affinity-tool -- -D warnings,libs/os_apitests,cargo test --features windows --bin cpu-affinity-tool, andcargo build --release --features windows --bin cpu-affinity-tool - the workflow uploads
cpu-affinity-tool.exe - a publish job on
ubuntu-24.04creates the GitHub Release with the body fromchangelogs/vX.Y.Z.txt
When a Linux beta tag matching linux-beta-v* is pushed:
- GitHub Actions runs the Linux beta prerelease job on
ubuntu-24.04 - the workflow validates the tag format against
linux-beta-vX.Y.Z-N - the workflow confirms
Cargo.tomlversion matchesX.Y.Z - the workflow requires
changelogs/linux-beta-vX.Y.Z-N.txt - the workflow runs formatting, Linux clippy,
libs/os_apitests, Linux binary tests, and the Linux release build - the workflow publishes a prerelease with:
cpu-affinity-tool-linux-x86_64cpu-affinity-tool-linux-x86_64.tar.gzSHA256SUMS.txt
Before pushing a stable Windows tag, align:
- Git tag:
vX.Y.Z Cargo.tomlversionchangelogs/vX.Y.Z.txt- release-facing docs if platform or process truth changed
- if the release includes the first shipped schema
v7build, call out that the first explicit save upgradesstate.jsontov7; loading pre-v6state writes an additionalstate.json.pre-v6*backup before that save, whilev6tov7does not
Before pushing a Linux beta tag, align:
- Git tag:
linux-beta-vX.Y.Z-N Cargo.tomlversion:X.Y.Zchangelogs/linux-beta-vX.Y.Z-N.txt- Linux beta release-facing docs if platform or process truth changed
- if the prerelease includes the first shipped schema
v7build, call out that the first explicit save upgradesstate.jsontov7; loading pre-v6state writes an additionalstate.json.pre-v6*backup before that save, whilev6tov7does not
- Update
Cargo.tomlto the target version. - Create or update
changelogs/vX.Y.Z.txt. - Run the release checklist in
docs/release-checklist.md. - Run the manual smoke from
docs/release-smoke-matrix.md. - Push the release commit.
- Push the stable tag
vX.Y.Z. - Confirm the GitHub Release workflow succeeded and published
cpu-affinity-tool.exe.
- Confirm
Cargo.tomlalready contains the target base versionX.Y.Z. - Create or update
changelogs/linux-beta-vX.Y.Z-N.txt. - Run the Linux beta checklist in
docs/linux-beta-release-checklist.md. - Push the release commit if needed.
- Push the Linux beta tag
linux-beta-vX.Y.Z-N. - Confirm the prerelease workflow succeeded and published the Linux beta assets.
Stable published artifact:
cpu-affinity-tool.exe
Linux beta prerelease artifacts:
cpu-affinity-tool-linux-x86_64cpu-affinity-tool-linux-x86_64.tar.gzSHA256SUMS.txt
Current non-goals for these workflows:
- installer creation
- AppImage
- Flatpak
- code signing
- winget or choco publication
- Linux stable release parity
Those can be added later, but they are not part of the current release truth.
Each stable or Linux beta release note file in changelogs/ should follow this structure:
## [X.Y.Z] - YYYY-MM-DD
### Summary
- Short high-level release summary
### Added
- New capabilities
### Changed
- Behavior changes, docs changes, workflow changes
### Fixed
- Bug fixes
### Known issues
- Current limitations worth calling out
### Download
- Link or note pointing to the GitHub Release artifact- Use docs/github-metadata.md for manual GitHub UI settings such as repository description, topics, and social preview.