You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Versioning policy: patch default, release:minor label, manual major #80
Owner decision, 2026-10-04: releases were being bumped wrong. Small changes are patch bumps, a minor bump marks a release, and a major bump is only ever made by hand. Each segment holds 999 versions.
The policy
Event
Bump
Example
A PR merged into staging (the live beta)
PATCH
0.27.3 → 0.27.4
staging released to main
MINOR
0.27.4 → 0.28.0
A person runs the release workflow with bump: major
MAJOR
0.28.0 → 1.0.0
Ceiling 999. Patch 999 rolls into the next minor (x.y.999 → x.y+1.0). Minor 999 does not roll into a major: the run fails and asks for a manual major.
Manual override.workflow_dispatch takes bump: patch|minor|major. A major is only allowed from a manual run.
No labels. The branch decides the bump. There is no release:minor label (none was created).
Released versions are not renumbered. The policy applies from the next release.
Shared implementation (nyuchi/.github)
.github/actions/next-version: the calculator (next-version.mjs, zero dependencies, with tests) and a composite action. It computes the next version from the highest tag, or checks a version written into the repo.
reusable-staging-release.yml: on a push to staging, tag the next patch with GITHUB_TOKEN, so tag-triggered publish workflows do not run for beta builds. It can also make a GitHub pre-release.
reusable-auto-tag.yml: before tagging a version read from a file, check it against the policy (main = next minor). With no version-command, it computes the version instead.
Docs: AGENTS.md, CONTRIBUTING.md and profile.
Callers pin each workflow and the action to a commit SHA.
Repos
Tracked in the comments below as each PR merges.
Related: the staging branch and live beta subdomain for every repo (separate issue). Once a repo has staging, merges there are patches and only the staging → main release is a minor.
feat(workflows): staging releases are patches, main releases are minors #82: reusable-staging-release.yml (new) and the policy check plus computed mode in reusable-auto-tag.yml, with Versioning docs in AGENTS.md, CONTRIBUTING.md and the profile. Pin for the workflows:@924e5b4d0983d31379aedbec02b990793f29c792
Adopting it in a repo: add .github/workflows/staging-version.yml. On a push to staging it calls reusable-staging-release.yml@924e5b4, with workflow permissions contents: read and job permissions contents: write. Then point the main release at the next-version action, or at reusable-auto-tag.yml@924e5b4 with a workflow_dispatchbump input. Staging tags are pushed with GITHUB_TOKEN, so push: tags publish workflows do not fire for beta builds.
The title still says "release:minor label" from the first brief. That approach was replaced: no label exists, and the branch decides the bump. Per-repo PRs follow in the comments below.
Callers of reusable-auto-tag. All are now pinned to 924e5b4, take a workflow_dispatchbump input (a major only by hand), and have staging-version.yml, which does nothing until a staging branch exists. Each also has docs and, where the repo keeps a changelog, a CHANGELOG note. All seven PRs merged with green checks.
❌ 403 on tag push. This was already failing in the 4 runs before this PR: RELEASE_BUMP_TOKEN cannot push to this repo. The policy check passed (2.1.0-beta.1, first release, tag mcp-v2.1.0-beta.1). Owner: grant the PAT access to this repo, then re-run.
None of these has a staging branch yet. Until one exists, every release to main must be a minor, so each one uses up a minor version. All seven are candidates for the staging-branch rollout.
Follow-up from the 2026-10-06 staging-to-main releases (code review on the release PRs): reusable-staging-release.yml tags whatever commit started the run and never checks the branch. Every caller's staging-version.yml keeps workflow_dispatch, and once the file is on main (already the case in auto-seo-manager, data-infra, nyuchi-docs, web-services and others) the Actions "Run workflow" form defaults to main. A manual run without switching branch would put a beta patch tag and a "(beta)" pre-release on a main commit and move the shared version sequence on.
Recommendation: guard it once, upstream — in the reusable workflow, refuse (or no-op) when github.ref != 'refs/heads/staging' unless ref: is passed explicitly — then bump the pinned SHA in callers. That fixes every repo at once instead of diverging the caller template per repo. Manual-only, so not urgent.
Activity
fix(actions): a version that is already tagged needs no policy check
feat(actions): next-version, the org versioning policy in one place (#81
feat(workflows): staging releases are patches, main releases are mino…
bryanfawcett commentedon Oct 4, 2026
The shared implementation is merged:
next-versionaction, calculator and tests. Pin:nyuchi/.github/.github/actions/next-version@de909ab7468d998ba2cf87416ac2042616eba75dreusable-staging-release.yml(new) and the policy check plus computed mode inreusable-auto-tag.yml, with Versioning docs in AGENTS.md, CONTRIBUTING.md and the profile. Pin for the workflows:@924e5b4d0983d31379aedbec02b990793f29c792Adopting it in a repo: add
.github/workflows/staging-version.yml. On a push tostagingit callsreusable-staging-release.yml@924e5b4, with workflow permissionscontents: readand job permissionscontents: write. Then point the main release at the next-version action, or atreusable-auto-tag.yml@924e5b4with aworkflow_dispatchbumpinput. Staging tags are pushed withGITHUB_TOKEN, sopush: tagspublish workflows do not fire for beta builds.The title still says "release:minor label" from the first brief. That approach was replaced: no label exists, and the branch decides the bump. Per-repo PRs follow in the comments below.
feat(workflows): reusable-staging-release takes the version to bump f…
docs(changelog): name the PR
ci: release under the org versioning policy (#17)
ci: release under the org versioning policy
ci: release under the org versioning policy (#91)
ci: release under the org versioning policy (#15)
ci: release under the org versioning policy (#23)
bryanfawcett commentedon Oct 4, 2026
Callers of reusable-auto-tag. All are now pinned to
924e5b4, take aworkflow_dispatchbumpinput (a major only by hand), and havestaging-version.yml, which does nothing until astagingbranch exists. Each also has docs and, where the repo keeps a changelog, a CHANGELOG note. All seven PRs merged with green checks.RELEASE_BUMP_TOKENcannot push to this repo. The policy check passed (2.1.0-beta.1, first release, tagmcp-v2.1.0-beta.1). Owner: grant the PAT access to this repo, then re-run.None of these has a
stagingbranch yet. Until one exists, every release tomainmust be a minor, so each one uses up a minor version. All seven are candidates for the staging-branch rollout.ci(release): follow the org versioning policy (#242)
ci(release): follow the org versioning policy (#67)
ci(auto-tag): follow the org versioning policy (#71)
68 remaining items
ci: tag merges into staging and run CI on staging (#14) (#15)
ci: tag each release to main as the next minor (#57)
chore(release): v4.5.0 (#453)
release: host-derived MCP resource URL, staging beta, .DS_Store (#28)
ci: tag staging merges as patches; Worker beta from staging as a prev…
ci: tag staging merges as patches; Worker beta from staging as a prev…
docs: keep main's versioning-policy text on staging (#76)
bryanfawcett commentedon Oct 6, 2026
Follow-up from the 2026-10-06 staging-to-main releases (code review on the release PRs):
reusable-staging-release.ymltags whatever commit started the run and never checks the branch. Every caller'sstaging-version.ymlkeepsworkflow_dispatch, and once the file is onmain(already the case in auto-seo-manager, data-infra, nyuchi-docs, web-services and others) the Actions "Run workflow" form defaults tomain. A manual run without switching branch would put a beta patch tag and a "(beta)" pre-release on amaincommit and move the shared version sequence on.Recommendation: guard it once, upstream — in the reusable workflow, refuse (or no-op) when
github.ref != 'refs/heads/staging'unlessref:is passed explicitly — then bump the pinned SHA in callers. That fixes every repo at once instead of diverging the caller template per repo. Manual-only, so not urgent.🤖 Generated with Claude Code
chore: version 1.9.0 for the release to main (#17)
chore: version 1.8.0 for the release to main (#19)
fix(workflows): reusable-staging-release refuses to tag anything but …
chore: version 0.2.0 for the release to main (#94)
feat(workflows): release-version-check, the enterprise required versi…
release: release-version-check and staging tagging (#92)
chore(rust): Mzizi Roots crates 0.2.0 (#463)