fix(task-management): support git worktrees in router root detection … #74
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |