Skip to content

fix(task-management): support git worktrees in router root detection … #74

fix(task-management): support git worktrees in router root detection …

fix(task-management): support git worktrees in router root detection … #74

name: Create Release
# This workflow creates git tags and GitHub releases after version bump PRs are merged.
# It detects when a version bump PR (with 'version-bump' label) is merged and creates
# the corresponding tag and release automatically.
on:
push:
branches: [main]
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., 0.5.0)'
required: false
type: string
permissions:
contents: write
jobs:
check-if-version-bump:
name: Check if Version Bump PR Merged
runs-on: ubuntu-latest
outputs:
should_release: ${{ steps.check.outputs.should_release }}
version: ${{ steps.check.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 2
- name: Check if this was a version bump PR merge
id: check
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
const fs = require('fs');
// Manual trigger - use provided version
if (context.eventName === 'workflow_dispatch' && context.payload.inputs.version) {
core.setOutput('should_release', 'true');
core.setOutput('version', context.payload.inputs.version);
console.log(`Manual release triggered for version: ${context.payload.inputs.version}`);
return;
}
// Get the commit that triggered this workflow
const commit = context.sha;
// Find PRs that were merged with this commit
const { data: prs } = await github.rest.repos.listPullRequestsAssociatedWithCommit({
owner: context.repo.owner,
repo: context.repo.repo,
commit_sha: commit
});
// Check if any of these PRs had the version-bump label
const versionBumpPR = prs.find(pr =>
pr.labels.some(label => label.name === 'version-bump')
);
if (versionBumpPR) {
console.log(`Version bump PR detected: #${versionBumpPR.number}`);
// Read VERSION file to get the new version
const version = fs.readFileSync('VERSION', 'utf8').trim();
core.setOutput('should_release', 'true');
core.setOutput('version', version);
console.log(`Will create release for version: ${version}`);
} else {
console.log('Not a version bump PR - skipping release creation');
core.setOutput('should_release', 'false');
}
create-tag-and-release:
name: Create Git Tag and GitHub Release
runs-on: ubuntu-latest
needs: check-if-version-bump
if: needs.check-if-version-bump.outputs.should_release == 'true'
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Check if tag already exists
id: check_tag
run: |
VERSION="${{ needs.check-if-version-bump.outputs.version }}"
if git rev-parse "v$VERSION" >/dev/null 2>&1; then
echo "tag_exists=true" >> $GITHUB_OUTPUT
echo "⚠️ Tag v$VERSION already exists"
else
echo "tag_exists=false" >> $GITHUB_OUTPUT
echo "✅ Tag v$VERSION does not exist - will create"
fi
- name: Create git tag
if: steps.check_tag.outputs.tag_exists == 'false'
run: |
VERSION="${{ needs.check-if-version-bump.outputs.version }}"
echo "Creating tag: v$VERSION"
git tag "v$VERSION"
git push origin "v$VERSION"
echo "## ✅ Git Tag Created" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Tag:** v$VERSION" >> $GITHUB_STEP_SUMMARY
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
- name: Extract release notes from CHANGELOG
id: release_notes
run: |
VERSION="${{ needs.check-if-version-bump.outputs.version }}"
if [ -f CHANGELOG.md ]; then
RELEASE_NOTES=$(awk '/^## \['"$VERSION"'\]/{flag=1; next} /^## \[/{flag=0} flag' CHANGELOG.md)
if [ -z "$RELEASE_NOTES" ]; then
RELEASE_NOTES="Release v$VERSION
See [CHANGELOG.md](CHANGELOG.md) for details."
fi
else
RELEASE_NOTES="Release v$VERSION"
fi
echo "$RELEASE_NOTES" > /tmp/release_notes.md
echo "## 📝 Release Notes Preview" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
cat /tmp/release_notes.md >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
- name: Check if release already exists
id: check_release
run: |
VERSION="${{ needs.check-if-version-bump.outputs.version }}"
if gh release view "v$VERSION" >/dev/null 2>&1; then
echo "release_exists=true" >> $GITHUB_OUTPUT
echo "⚠️ Release v$VERSION already exists"
else
echo "release_exists=false" >> $GITHUB_OUTPUT
echo "✅ Release v$VERSION does not exist - will create"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub release
if: steps.check_release.outputs.release_exists == 'false'
run: |
VERSION="${{ needs.check-if-version-bump.outputs.version }}"
echo "Creating GitHub release: v$VERSION"
gh release create "v$VERSION" \
--title "v$VERSION" \
--notes-file /tmp/release_notes.md \
--latest
echo "## 🚀 GitHub Release Created" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Release:** v$VERSION" >> $GITHUB_STEP_SUMMARY
echo "- **URL:** https://github.com/${{ github.repository }}/releases/tag/v$VERSION" >> $GITHUB_STEP_SUMMARY
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Summary
if: always()
run: |
VERSION="${{ needs.check-if-version-bump.outputs.version }}"
TAG_EXISTS="${{ steps.check_tag.outputs.tag_exists }}"
RELEASE_EXISTS="${{ steps.check_release.outputs.release_exists }}"
echo "" >> $GITHUB_STEP_SUMMARY
echo "---" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📊 Release Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Version:** v$VERSION" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "$TAG_EXISTS" = "true" ]; then
echo "- ⏭️ Git tag already existed (skipped)" >> $GITHUB_STEP_SUMMARY
else
echo "- ✅ Git tag created" >> $GITHUB_STEP_SUMMARY
fi
if [ "$RELEASE_EXISTS" = "true" ]; then
echo "- ⏭️ GitHub release already existed (skipped)" >> $GITHUB_STEP_SUMMARY
else
echo "- ✅ GitHub release created" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "🎉 **Release v$VERSION is now available!**" >> $GITHUB_STEP_SUMMARY