feat: add workflow to publish v1.x releases on tag push (#1367)
This commit is contained in:
parent
1014d9f79c
commit
2bb7f47834
2 changed files with 147 additions and 0 deletions
105
.github/workflows/release-v1x.yml
vendored
Normal file
105
.github/workflows/release-v1x.yml
vendored
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
# Publish v1.x releases when a v1.* tag is pushed
|
||||
# This allows releasing from the v1.x branch without switching GitHub's default branch
|
||||
#
|
||||
# Automatic (latest v1.x):
|
||||
# git checkout v1.x
|
||||
# npm version patch # bumps version and creates tag
|
||||
# git push origin v1.x --tags
|
||||
#
|
||||
# Manual (for older minor versions like v1.23.x):
|
||||
# 1. Create a release branch: git checkout -b release/1.23 v1.23.1
|
||||
# 2. Apply your fixes
|
||||
# 3. Bump version: npm version patch # creates v1.23.2 tag
|
||||
# 4. Push: git push origin release/1.23 --tags
|
||||
# 5. Run this workflow manually from GitHub Actions, specifying the tag
|
||||
#
|
||||
# The workflow will automatically build, test, and publish to npm.
|
||||
|
||||
name: Publish v1.x
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v1.*'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ref:
|
||||
description: 'Git ref to release (tag, e.g., v1.23.2)'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ inputs.ref || github.ref }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.ref || github.ref }}
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 24
|
||||
cache: npm
|
||||
|
||||
- run: npm ci
|
||||
- run: npm run check
|
||||
- run: npm run build
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [18, 24]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.ref || github.ref }}
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: npm
|
||||
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build, test]
|
||||
environment: release
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.ref || github.ref }}
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 24
|
||||
cache: npm
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
|
||||
- run: npm ci
|
||||
|
||||
- name: Determine npm tag
|
||||
id: npm-tag
|
||||
run: |
|
||||
VERSION=$(node -p "require('./package.json').version")
|
||||
# Use "release-X.Y" as tag for v1.x releases
|
||||
# This allows users to install specific minor versions:
|
||||
# npm install @modelcontextprotocol/sdk@release-1.25
|
||||
MAJOR_MINOR=$(echo "$VERSION" | cut -d. -f1,2)
|
||||
echo "tag=release-${MAJOR_MINOR}" >> $GITHUB_OUTPUT
|
||||
|
||||
- run: npm publish --provenance --access public --tag ${{ steps.npm-tag.outputs.tag }}
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
|
@ -60,6 +60,48 @@ pnpm --filter @modelcontextprotocol/examples-server exec tsx src/simpleStreamabl
|
|||
pnpm --filter @modelcontextprotocol/examples-client exec tsx src/simpleStreamableHttp.ts
|
||||
```
|
||||
|
||||
## Releasing v1.x Patches
|
||||
|
||||
The `v1.x` branch contains the stable v1 release. To release a patch:
|
||||
|
||||
### Latest v1.x (e.g., v1.25.3)
|
||||
|
||||
```bash
|
||||
git checkout v1.x
|
||||
git pull origin v1.x
|
||||
# Apply your fix or cherry-pick commits
|
||||
npm version patch # Bumps version and creates tag (e.g., v1.25.3)
|
||||
git push origin v1.x --tags
|
||||
```
|
||||
|
||||
The tag push automatically triggers the release workflow.
|
||||
|
||||
### Older minor versions (e.g., v1.23.2)
|
||||
|
||||
For patching older minor versions that aren't on the `v1.x` branch:
|
||||
|
||||
```bash
|
||||
# 1. Create a release branch from the last release tag
|
||||
git checkout -b release/1.23 v1.23.1
|
||||
|
||||
# 2. Apply your fixes (cherry-pick or manual)
|
||||
git cherry-pick <commit-hash>
|
||||
|
||||
# 3. Bump version and push
|
||||
npm version patch # Creates v1.23.2 tag
|
||||
git push origin release/1.23 --tags
|
||||
```
|
||||
|
||||
Then manually trigger the "Publish v1.x" workflow from [GitHub Actions](https://github.com/modelcontextprotocol/typescript-sdk/actions/workflows/release-v1x.yml), specifying the tag (e.g., `v1.23.2`).
|
||||
|
||||
### npm Tags
|
||||
|
||||
v1.x releases are published with `release-X.Y` npm tags (e.g., `release-1.25`), not `latest`. To install a specific minor version:
|
||||
|
||||
```bash
|
||||
npm install @modelcontextprotocol/sdk@release-1.25
|
||||
```
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
This project follows our [Code of Conduct](CODE_OF_CONDUCT.md). Please review it before contributing.
|
||||
|
|
|
|||
Loading…
Reference in a new issue