-
Notifications
You must be signed in to change notification settings - Fork 0
Release Process
Releases are produced by .github/workflows/release.yml on a v* tag push. The workflow:
- Promotes the
## Unreleasedheading inCHANGELOG.md(and the wiki mirror) to## [vTAG] -- DATEvia.github/scripts/Update-Changelog.ps1. - Configures + builds the umbrella exe, driver DLL, and C# face-tracking host.
- Runs every
*_tests.exeunderbuild/artifacts/Release/; any non-zero exit fails the release. - Stages a driver tree under
release/_stage_<version>/with the loader-prefixeddriver_01wkopenvr.dll, the face-tracking host artifacts, the umbrella exe, andopenvr_api.dll. - Builds five zip artifacts: one umbrella + four per-feature mirrors. Each mirror is identical to the umbrella plus one
enable_<feature>.flagpre-dropped underdriver_wkopenvr/resources/. - Builds the NSIS installer (
WKOpenVR-v<version>-Setup.exe). - Generates the release body via
.github/scripts/Generate-ReleaseNotes.ps1from the promoted changelog plus per-file SHA256 manifest. - Publishes the umbrella release on this repo (zip + installer).
- Mirrors the release to each sibling repo using
MIRROR_RELEASE_TOKEN, attaching that feature's mirror zip. - Pushes the promoted CHANGELOG.md back to
mainvia GraphQLcreateCommitOnBranchso the commit is server-side signed by GitHub's bot key.
The mirror step needs a fine-grained PAT with contents: read and write scoped to all four mirror repos:
RealWhyKnot/WKOpenVR-SpaceCalibratorRealWhyKnot/WKOpenVR-SmoothingRealWhyKnot/WKOpenVR-InputHealthRealWhyKnot/WKOpenVR-VRCFT
Store as the MIRROR_RELEASE_TOKEN secret on this repo (Settings -> Secrets and variables -> Actions). Without it, the umbrella release publishes but the four mirror steps fail -- acceptable for a smoke test, fix before promoting any real version. Widening the token to add a new mirror repo is an in-place edit on the PAT under github.com/settings/tokens?type=beta; no need to regenerate.
The ## Unreleased section in CHANGELOG.md is auto-appended by .github/workflows/changelog-append.yml from conventional-commit subjects (feat, fix, perf, refactor, etc.) pushed to main. The release workflow renames ## Unreleased to ## [v<tag>] -- <date> at promotion time. The promoted file is the same one that lands in main after publish, so git log -- CHANGELOG.md shows the canonical history.
Hand-editing the release body is not part of the workflow. Extra prose for a tag goes in release/<tag>/extra-details.md if needed; the body generator picks that up.
Two hooks enforce the version-stamp convention on .githooks/:
-
prepare-commit-msgappends the currentversion.txtstamp to the subject if (and only if) the subject is clean. It rejects fresh commits whose subjects already carry a stamp -- the hook is the single source of truth; pre-stamps by humans or agents go stale on the next build. -
commit-msgrejects subjects with more than one stamp.
.github/workflows/commit-msg-check.yml mirrors the rule on the server so a push that bypassed the local hooks (a fresh clone where build.ps1 hasn't activated core.hooksPath yet, --no-verify, an API commit) still surfaces as a failed check in the Actions tab.
Don't push test tags to the live repo. The workflow does five public releases per tag (umbrella + four mirrors) and pushes a server-signed changelog-promotion commit at the end; a "test" tag would leak all of that publicly. Validate workflow changes locally with js-yaml for parse, mirror the packaging step by extracting the PowerShell from the YAML and running it against the existing build artifacts, or use a private fork for end-to-end runs.
Reference
Modules
Issues