Skip to content

ci: support MCP v1 maintenance releases - #225

Merged
Larry-Osakwe merged 2 commits into
mainfrom
larry/mcp-v1-release-plumbing
Aug 6, 2026
Merged

ci: support MCP v1 maintenance releases#225
Larry-Osakwe merged 2 commits into
mainfrom
larry/mcp-v1-release-plumbing

Conversation

@Larry-Osakwe

Copy link
Copy Markdown
Contributor

Port of typescript-sdk #146 so both SDK release pipelines work the same way, ahead of the keycardai-mcp 1.x/2.x split (ECO-195). Same reviewer-facing shape: bump PRs can target main or release/mcp-v1, a manual forced-increment path exists for establishing 1.0.0/2.0.0, and MCP_RELEASES.md documents the sequence.

What's in it

  • scripts/bump_package.py gains --target-branch (parametrizes the pull/reset, bump-branch parent, PR base, direct-merge fast-forward ref, and tag commit) and --increment (forces major/minor/patch via cz bump --increment X --allow-no-commit)
  • Bump branches are namespaced by release line (bump/release-mcp-v1/keycardai-mcp-1.0.1) so a 1.x and a main bump of the same package can't collide
  • bump-package.yml gains workflow_dispatch with target_branch/increment inputs; main.yml triggers on release/mcp-v1 pushes and passes target_branch: ${{ github.ref_name }} through
  • scripts/test_bump_package.py mirrors typescript-sdk's coverage; python3 -m unittest discover -s scripts runs 6 tests green

Two deliberate divergences from #146

  1. No dist-tag machinery. PyPI has none; release.yml is already tag-triggered and branch-agnostic, so publishing from the maintenance branch needs zero changes. Dependency ranges (keycardai-mcp<2) steer resolvers instead — documented in MCP_RELEASES.md.
  2. Only keycardai-mcp bumps from the branch. typescript-sdk also releases its aggregate @keycardai/sdk from the maintenance line because it re-exports mcp; the Python root keycardai package has no dependency on keycardai-mcp, so the branch filter is mcp-only.

Verification

  • python3 -m unittest discover -s scripts -p 'test_*.py' — 6 passed
  • All three workflows parse (PyYAML)
  • ruff check clean on both scripts
  • changelog.py changes still returns clean output

Rollout (after ECO-195's PR is approved)

  1. Release keycardai-mcp@1.0.0 from main (forced major) while main still carries mcp<2.0.
  2. Create release/mcp-v1 at the 1.0.0 commit.
  3. Merge feat(keycardai-mcp)!: port to mcp 2.0 (ECO-195) #218; its feat! squash title makes cz cut 2.0.0 automatically.
  4. Update packages/fastmcp's cap to keycardai-mcp>=1,<2 in the same window.

Note: the bump workflow currently fails in both SDK repos for an unrelated reason — the new SDK release app's SDK_RELEASE_APP_ID secret was never provisioned (asked in Slack). This PR neither depends on nor fixes that.

🤖 Generated with Claude Code

Port of typescript-sdk #146 so the two release pipelines stay symmetric,
ahead of the keycardai-mcp 1.x/2.x split (ECO-195).

- bump PRs can target main or release/mcp-v1: bump_package.py gains
  --target-branch, parametrizing the pull/reset, the bump branch parent,
  the PR base, the direct-merge fast-forward ref, and the tag commit
- release-line-namespaced bump branches (bump/<line>/<pkg>-<version>) so
  a 1.x and a main bump of the same package cannot collide on one ref
- --increment forces major/minor/patch via cz --increment
  --allow-no-commit, for deliberate majors and establishing new lines
- bump-package.yml gains workflow_dispatch with target_branch/increment;
  main.yml triggers on release/mcp-v1 pushes, restricted there to
  keycardai-mcp (unlike typescript-sdk, the root keycardai package does
  not depend on keycardai-mcp, so no aggregate releases from the branch)
- MCP_RELEASES.md documents the lines and the one-time establishment
  sequence; PyPI has no dist-tags, so dependency ranges steer resolvers
  and nothing changes in how versions publish
- scripts/test_bump_package.py mirrors the typescript-sdk test coverage:
  branch naming/sanitization, pull/reset targets, forced-increment
  forwarding, PR base branch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comment thread .github/workflows/main.yml Outdated
package_name: ${{ matrix.package.package_name }}
package_dir: ${{ matrix.package.package_dir }}
target_branch: ${{ github.ref_name }}
secrets: inherit No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: eol at eof

@Larry-Osakwe
Larry-Osakwe merged commit 409981c into main Aug 6, 2026
10 of 14 checks passed
@Larry-Osakwe
Larry-Osakwe deleted the larry/mcp-v1-release-plumbing branch August 6, 2026 18:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants