Repository navigation
130 lines (111 loc) · 4.53 KB
/
Copy pathfinalize-release.yml
File metadata and controls
130 lines (111 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
name: Finalize Release
# Runs automatically when a release PR is merged into main.
# Creates the git tag, GitHub Release, and opens a back-merge PR to develop.
on:
pull_request:
types: [closed]
branches: [main]
jobs:
finalize-release:
name: Tag, Release, and Back-merge
# Only run when a release PR is actually merged (not just closed)
if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout main
uses: actions/checkout@v7
with:
ref: main
fetch-depth: 0
token: ${{ secrets.RELEASE_PAT }}
- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Extract release info from branch name
id: release
env:
HEAD_REF: ${{ github.event.pull_request.head.ref }}
run: |
BRANCH="$HEAD_REF"
# Branch name is release/vX.Y.Z or release/vX.Y.Z-beta
TAG="${BRANCH#release/}"
if ! [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$ ]]; then
echo "::error::Unexpected release branch format: $BRANCH"
exit 1
fi
SEMVER="${TAG#v}"
# Determine if this is a pre-release
if echo "$SEMVER" | grep -q '-'; then
PRERELEASE="true"
else
PRERELEASE="false"
fi
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "semver=${SEMVER}" >> $GITHUB_OUTPUT
echo "prerelease=${PRERELEASE}" >> $GITHUB_OUTPUT
- name: Check if tag already exists
run: |
if git rev-parse "${{ steps.release.outputs.tag }}" >/dev/null 2>&1; then
echo "::error::Tag ${{ steps.release.outputs.tag }} already exists. Skipping."
exit 1
fi
- name: Create annotated tag
run: |
TAG="${{ steps.release.outputs.tag }}"
git tag -a "$TAG" -m "Release $TAG"
git push origin "$TAG"
echo "Created and pushed tag: $TAG"
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.RELEASE_PAT }}
TAG: ${{ steps.release.outputs.tag }}
SEMVER: ${{ steps.release.outputs.semver }}
PRERELEASE: ${{ steps.release.outputs.prerelease }}
run: |
PRERELEASE_FLAG=""
if [ "$PRERELEASE" = "true" ]; then
PRERELEASE_FLAG="--prerelease"
fi
gh release create "$TAG" \
--title "$TAG" \
--generate-notes \
$PRERELEASE_FLAG
- name: Delete release branch
env:
HEAD_REF: ${{ github.event.pull_request.head.ref }}
run: |
BRANCH="$HEAD_REF"
git push origin --delete "$BRANCH" || true
echo "Deleted branch: $BRANCH"
- name: Create back-merge PR (main → develop)
env:
GH_TOKEN: ${{ secrets.RELEASE_PAT }}
TAG: ${{ steps.release.outputs.tag }}
run: |
BACKMERGE_BRANCH="backmerge/${TAG}"
# Create a branch from main for the back-merge
git checkout -b "$BACKMERGE_BRANCH" main
git push origin "$BACKMERGE_BRANCH"
# Create the PR
gh pr create \
--base develop \
--head "$BACKMERGE_BRANCH" \
--title "Back-merge ${TAG} from main into develop" \
--body "Automatic back-merge after release ${TAG}. Merge this to keep \`develop\` in sync with \`main\`."
- name: Summary
run: |
echo "## Release Finalized :rocket:" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Tag:** ${{ steps.release.outputs.tag }}" >> $GITHUB_STEP_SUMMARY
echo "- **Version:** ${{ steps.release.outputs.semver }}" >> $GITHUB_STEP_SUMMARY
echo "- **Pre-release:** ${{ steps.release.outputs.prerelease }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### What happened" >> $GITHUB_STEP_SUMMARY
echo "1. ✅ Tag \`${{ steps.release.outputs.tag }}\` created" >> $GITHUB_STEP_SUMMARY
echo "2. ✅ GitHub Release created with auto-generated notes" >> $GITHUB_STEP_SUMMARY
echo "3. ✅ Publish workflow triggered (NuGet)" >> $GITHUB_STEP_SUMMARY
echo "4. ✅ Back-merge PR opened to develop" >> $GITHUB_STEP_SUMMARY