Files
Sam Morrow 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
don't actually create a PR (#589)
2025-06-26 17:39:50 +02:00

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