Releasing - poli0981/frameledger GitHub Wiki
The full documents are docs/13_CI_CD.md and docs/11_UPDATER.md.
The workflows
| Workflow | Runs on | Does |
|---|---|---|
.github/workflows/ci.yml |
pushes to main, pull requests |
./build.ps1 check, and on a pull request the changelog check. |
.github/workflows/codeql.yml |
pushes and pull requests to main, weekly |
CodeQL for C# and C++. |
.github/workflows/rules-publish.yml |
a change to the detection rules or their validator | Fails when an anti-cheat entry is removed. |
.github/workflows/release.yml |
a pushed v* tag; by hand, a rehearsal |
Builds, gates and publishes a release. |
.github/workflows/wiki.yml |
a successful release; by hand | Builds this wiki from wiki/ and guide/ and publishes it to the Wiki tab. |
Cutting a release
- One pull request moves the
[Unreleased]entries ofCHANGELOG.mdunder a## [x.y.z]or## [x.y.z-beta.N]heading with an Updating from note, and updates the release lines inREADME.md, the accuracy statement (legal/ACCURACY.mdand its copies) andLIMITATIONS.md.VERSIONchanges only with the numeric core. - After it merges, a signed tag
vx.y.z(orvx.y.z-beta.N) on the merge commit startsrelease.yml:- it checks the tag against
VERSIONand that the changelog has the section; - reads the build id from the clean checkout, before anything is edited;
- writes the release date into the legal documents;
- runs the whole gate;
- publishes the App and the agent (self-contained, ReadyToRun) and checks the published tree, the build id in the native binaries included;
- packs them with Velopack, with a delta from the previous release;
- writes
SHA256SUMS.txt; - creates the GitHub release from the changelog section, marked pre-release for a beta.
- it checks the tag against
- The wiki follows:
wiki.ymlruns when the release run succeeds. - Check the published assets against
SHA256SUMS.txt, and the update feed.
Releases are not code-signed, so every release says so and publishes its checksums.
How users get it
Velopack reads GitHub Releases. Settings ▸ Updates ▸ Channel is Automatic by default: a pre-release looks for pre-releases, a release for releases. A new version downloads in the background and installs only when FrameLedger restarts — never while a game is being recorded.