Skip to content

Add cut-release / publish-release workflows#2799

Merged
mcp-commander[bot] merged 1 commit into
mainfrom
release-automation
May 27, 2026
Merged

Add cut-release / publish-release workflows#2799
mcp-commander[bot] merged 1 commit into
mainfrom
release-automation

Conversation

@localden

Copy link
Copy Markdown
Contributor

Automates the two manual steps of cutting a spec revision so the release tracker can dispatch them and the result is reproducible.

cut-release.ymlworkflow_dispatch(version, kind, dry_run)

kind Effect Review
rc Tags current main as <version>-RC and publishes a prerelease. Spec content stays under docs/specification/draft/ — no file changes, no PR.
final Copies draft/docs/specification/<version>/ and schema/<version>/, runs npm run generate, inserts the new version into docs/docs.json nav, resets draft/changelog.mdx, opens PR release/<version>. Existing CODEOWNERS ruleset → @modelcontextprotocol/core-maintainers approval required to merge.

Both paths validate YYYY-MM-DD and refuse to overwrite an existing tag/dir. Inputs are passed through env: (not ${{ }} in run:); third-party action is SHA-pinned.

publish-release.yml

Fires on push to main when a release/<version> PR merges: creates the GA tag + GitHub Release. Idempotent (skips if the tag already exists).

Why

Today each release is a hand-authored PR (#1887, #232, …) followed by a manually drafted GitHub Release. This makes the file promotion + nav patch deterministic, keeps the human check at the CODEOWNERS review on the Final PR, and gives the release tracker (modelcontextprotocol/mcp-spec-tpm) a dispatch target so the RC/Final cut shows up as a single button on the release plan.

cut-release.yml (workflow_dispatch, inputs: version, kind, dry_run):
- kind=rc: tag current main as <version>-RC and publish a prerelease.
  Spec content stays under docs/specification/draft/ — no file changes,
  no PR.
- kind=final: copy draft/ → docs/specification/<version>/ and
  schema/<version>/, regenerate schema artifacts, patch docs/docs.json
  nav, reset the draft changelog, and open a release PR. Existing
  CODEOWNERS rules require core-maintainers approval to merge.
Both paths validate YYYY-MM-DD and refuse to overwrite an existing
tag/dir. Inputs are passed via env, not interpolated into run:.

publish-release.yml: on merge of a release/<version> PR to main, create
the GA tag + GitHub Release. Idempotent — skips if the tag exists.
@localden localden requested review from a team as code owners May 27, 2026 05:59
@localden

Copy link
Copy Markdown
Contributor Author

/lgtm force

Action for automating the release process.

@mcp-commander mcp-commander Bot added the accepted SEP accepted by core maintainers, but still requires final wording and reference implementation. label May 27, 2026

@mcp-commander mcp-commander Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved on behalf of @localden via /lgtm force.

@mcp-commander mcp-commander Bot enabled auto-merge (squash) May 27, 2026 06:05
@mcp-commander mcp-commander Bot merged commit 8dd044e into main May 27, 2026
9 checks passed
@mcp-commander mcp-commander Bot deleted the release-automation branch May 27, 2026 06:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accepted SEP accepted by core maintainers, but still requires final wording and reference implementation.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant