OMA ships through GitHub Releases assets only. The root package.json.version is the single release base for both lanes.
dev→ alpha prerelease lanemain→ stable release lane
package.json.versionmust always be a stable base version (x.y.z).- Alpha tags use
v<base>-alpha.<n>. - Stable tags use
v<base>. - Alpha numbering is derived from existing remote tags for the same base.
- If an alpha/stable tag for the current commit already exists, workflows reuse it instead of creating a new tag.
Use this local script to inspect and validate release state before pushing or running CI:
bun run release:flow status [--json]
bun run release:flow status --refresh-refs [--json]
bun run release:flow check --lane alpha|stable|both [--json]Add --refresh-refs when you want the report to fetch and evaluate origin/main, origin/dev, and tags before printing the result.
What it reports:
- current branch + working-tree clean status
- local
main/devbranch heads and resolved versions - resolved alpha/stable tag target for the current workspace base
- base version relation (
same-base,post-stable-bump,drift,unknown) - whether
mainis contained indevhistory (when determinable locally)
The check mode is intended for local validation only and can be run in JSON mode for
automation: bun run release:flow check --lane both --json.
CI runs for pull requests plus pushes to dev and main.
Enforced checks:
bun run release:auditbun run format:checkbun run lintbun run typecheckbun run testbun run buildOMA_E2E=true bun test ./test/e2e/oma-workflow.e2e.tswhen provider credentials are available
After a successful CI push run on dev:
- resolve the release base from
package.json.version - reuse any existing
v<base>-alpha.<n>tag already pointing atHEAD - otherwise create the next deterministic alpha tag
- create/update the GitHub prerelease
- upload tarballs, checksums, and Linux packages as release assets
After a successful CI push run on main:
- resolve the stable tag
v<base>frompackage.json.version - reuse the tag on reruns when it already points at
HEAD - create/update the GitHub release
- upload release assets
- bump
devto the next patch base so alpha numbering resets for the next cycle
If a release already exists but asset upload needs to be rebuilt, run Release Assets with workflow_dispatch and pass tag_name.
Main Source Policy rejects pull requests to main unless:
- the head branch is exactly
dev - the head repository is the same repository
This keeps stable releases sourced from the dev lane.
Supported distribution paths:
install.sh- direct download from GitHub Releases assets
.deb/.rpmassets attached to GitHub Releasesoma upgradefrom the stable lane by default or the alpha lane with--channel alpha
Unsupported distribution paths:
- package-registry publishing
- legacy release PR automation
- package registry installs as a release channel
Remote prerequisites still owned outside this repo change:
devandmainmust exist remotely- workflow tokens must be allowed to push tags and the post-release
devbump commit - required checks/rulesets must later be aligned with the new
CIandMain Source Policyworkflow names
Treat changes to these paths as release-sensitive:
package.jsoninstall.shscripts/**.github/workflows/**.github/PULL_REQUEST_TEMPLATE.mdREADME.mdREADME.tr.mdRELEASE.mddocs/getting-started.mddocs/v2/release-evidence-matrix.mdpackages/cli/src/commands/upgrade.tspackages/cli/src/i18n.ts
- reintroduce package-registry publishing for OMA
- reintroduce legacy release PR automation
- create stable releases from branches other than
main - merge to
mainfrom anything other than same-repodev - store prerelease intent inside
package.json.version