3deaca89fd
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
Docker / build (push) Has been cancelled
Unit Tests / build (macos-latest) (push) Has been cancelled
Unit Tests / build (ubuntu-latest) (push) Has been cancelled
Unit Tests / build (windows-latest) (push) Has been cancelled
License Check / license-check (push) Has been cancelled
Lint / lint (push) Has been cancelled
178 lines
6.6 KiB
YAML
178 lines
6.6 KiB
YAML
name: Release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: 'Release tag (e.g., v0.0.0)'
|
|
required: true
|
|
default: 'v0.0.0'
|
|
type: string
|
|
confirm:
|
|
description: 'Type "CONFIRM" to proceed with the release'
|
|
required: true
|
|
type: string
|
|
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
validate:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Validate confirmation
|
|
if: ${{ github.event.inputs.confirm != 'CONFIRM' }}
|
|
run: |
|
|
echo "::error::You must type 'CONFIRM' to proceed with the release"
|
|
exit 1
|
|
|
|
- name: Validate tag format
|
|
run: |
|
|
TAG="${{ github.event.inputs.tag }}"
|
|
if [[ ! $TAG =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$ ]]; then
|
|
echo "::error::Tag must be in format vX.Y.Z or vX.Y.Z-suffix (e.g., v1.0.0 or v1.0.0-rc1)"
|
|
exit 1
|
|
fi
|
|
|
|
release:
|
|
needs: validate
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
tag: ${{ steps.tag-release.outputs.tag }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Configure Git
|
|
run: |
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
|
|
- name: Switch to next branch
|
|
run: |
|
|
git checkout next
|
|
git pull origin next
|
|
|
|
- name: Check next branch is up-to-date with main
|
|
id: branch-check
|
|
run: |
|
|
echo "Checking if next branch is up-to-date with main..."
|
|
|
|
# Fetch latest main branch
|
|
git fetch origin main
|
|
|
|
# Check if next is behind main
|
|
BEHIND_COUNT=$(git rev-list --count next..origin/main)
|
|
AHEAD_COUNT=$(git rev-list --count origin/main..next)
|
|
|
|
echo "Next branch is ${AHEAD_COUNT} commits ahead of main"
|
|
echo "Next branch is ${BEHIND_COUNT} commits behind main"
|
|
|
|
if [ "$BEHIND_COUNT" -gt 0 ]; then
|
|
echo "::error::❌ Next branch is ${BEHIND_COUNT} commits behind main. Please update next branch with the latest changes from main before creating a release."
|
|
echo "To fix this, run: git checkout next && git merge main"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$AHEAD_COUNT" -eq 0 ]; then
|
|
echo "::warning::⚠️ Next branch has no new commits compared to main. Are you sure you want to create a release?"
|
|
fi
|
|
|
|
echo "✅ Next branch is up-to-date with main (${AHEAD_COUNT} commits ahead)"
|
|
echo "branch-check-success=true" >> $GITHUB_OUTPUT
|
|
|
|
- name: Check if tag already exists
|
|
run: |
|
|
TAG="${{ github.event.inputs.tag }}"
|
|
if git tag -l | grep -q "^${TAG}$"; then
|
|
echo "::error::Tag ${TAG} already exists"
|
|
exit 1
|
|
fi
|
|
if git ls-remote --tags origin | grep -q "refs/tags/${TAG}$"; then
|
|
echo "::error::Tag ${TAG} already exists on remote"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Tag the release
|
|
id: tag-release
|
|
run: |
|
|
TAG="${{ github.event.inputs.tag }}"
|
|
git tag -a "${TAG}" -m "Release ${TAG}"
|
|
echo "✅ Created tag ${TAG}"
|
|
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Push tag
|
|
run: |
|
|
TAG="${{ github.event.inputs.tag }}"
|
|
git push origin "${TAG}"
|
|
echo "✅ Pushed tag ${TAG}"
|
|
|
|
- name: Wait for release to be created
|
|
run: |
|
|
TAG="${{ github.event.inputs.tag }}"
|
|
echo "Waiting for GitHub to create the draft release..."
|
|
|
|
# Wait up to 2 minutes for the release to appear
|
|
for i in {1..24}; do
|
|
if gh release view "${TAG}" >/dev/null 2>&1; then
|
|
echo "✅ Draft release created"
|
|
break
|
|
fi
|
|
echo "Waiting for release to be created... (${i}/24)"
|
|
sleep 5
|
|
done
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
summary:
|
|
needs: [validate, release]
|
|
runs-on: ubuntu-latest
|
|
if: always() && needs.release.result == 'success'
|
|
|
|
steps:
|
|
- name: Release Summary
|
|
run: |
|
|
TAG="${{ needs.release.outputs.tag }}"
|
|
|
|
echo "## 🎉 Release $TAG has been initiated!"
|
|
echo ""
|
|
echo "### Next steps:"
|
|
echo "1. 📋 Check https://github.com/${{ github.repository }}/releases for the draft release to show up"
|
|
echo "2. ✏️ Edit the new release, delete the existing notes and click the auto-generate button GitHub provides"
|
|
echo "3. ✨ Add a section at the top calling out the main features"
|
|
echo "4. 🚀 Publish the release"
|
|
echo "5. � Create a Pull Request from 'next' to 'main' branch with title 'Release $TAG'"
|
|
echo "6. �🔀 Merge the pull request into main"
|
|
echo "7. 📢 Post message in #gh-mcp-releases channel in Slack and then share to the other mcp channels"
|
|
echo ""
|
|
echo "### Resources:"
|
|
echo "- 📦 Draft Release: https://github.com/${{ github.repository }}/releases/tag/$TAG"
|
|
echo "- 🔄 Create PR: https://github.com/${{ github.repository }}/compare/main...next"
|
|
echo ""
|
|
echo "The release process is now ready for your review and completion!"
|
|
|
|
# Also output as job summary
|
|
cat << EOF >> $GITHUB_STEP_SUMMARY
|
|
## 🎉 Release $TAG has been initiated!
|
|
|
|
### Next steps:
|
|
1. 📋 Check [releases page](https://github.com/${{ github.repository }}/releases) for the draft release to show up
|
|
2. ✏️ Edit the new release, delete the existing notes and click the auto-generate button GitHub provides
|
|
3. ✨ Add a section at the top calling out the main features
|
|
4. 🚀 Publish the release
|
|
5. � [Create a Pull Request](https://github.com/${{ github.repository }}/compare/main...next) from 'next' to 'main' branch with title 'Release $TAG'
|
|
6. �🔀 Merge the pull request into main
|
|
7. 📢 Post message in #gh-mcp-releases channel in Slack and then share to the other mcp channels
|
|
|
|
### Resources:
|
|
- 📦 [Draft Release](https://github.com/${{ github.repository }}/releases/tag/$TAG)
|
|
- 🔄 [Create PR](https://github.com/${{ github.repository }}/compare/main...next)
|
|
|
|
The release process is now ready for your review and completion!
|
|
EOF
|