Skip to content

Sync next branch with main #590

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Jun 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ on:
schedule:
- cron: "27 0 * * *"
push:
branches: ["main"]
branches: ["main", "next"]
# Publish semver tags as releases.
tags: ["v*.*.*"]
pull_request:
branches: ["main"]
branches: ["main", "next"]

env:
# Use docker.io for Docker Hub if empty
Expand Down
55 changes: 55 additions & 0 deletions .github/workflows/pr-base-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: PR Base Branch Check

on:
pull_request:
types: [opened, edited, synchronize]
branches:
- main

permissions:
pull-requests: write
contents: read

jobs:
check-base-branch:
runs-on: ubuntu-latest
if: github.event.pull_request.base.ref == 'main'

steps:
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
const message = `πŸ‘‹ Hi there!

It looks like this PR is targeting the \`main\` branch. To help maintain our development workflow, please change the base reference to \`next\` instead.

__If this is a bug fix that requires a patch release __ (e.g., a critical bug that needs to be fixed before the next release)__, please leave the base branch as \`main\`.__

You can change this by:
1. Clicking the "Edit" button next to the PR title
2. Changing the base branch from \`main\` to \`next\`
3. Clicking "Update pull request"

Thanks for your contribution! πŸš€`;

// Check if we've already commented
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});

const botComment = comments.data.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('please change the base reference to')
);

if (!botComment) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: message
});
}
177 changes: 177 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
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
Loading