|
86 | 86 | git config user.name "github-actions[bot]" |
87 | 87 | git config user.email "github-actions[bot]@users.noreply.github.com" |
88 | 88 |
|
89 | | - - name: Prepare v1.0.0-beta.1 for semantic-release (real run only) |
90 | | - if: github.event.inputs.dry_run != 'true' |
91 | | - run: | |
92 | | - set -e |
93 | | - # semantic-release uses "git tag --merged main" and git notes; tag must be in main history and have note. |
94 | | - if ! git rev-parse --verify v1.0.0-beta.1 >/dev/null 2>&1; then exit 0; fi |
95 | | - RELEASE_COMMIT=$(git log main -1 --format=%H --grep="chore(release): 1.0.0-beta.1" 2>/dev/null || true) |
96 | | - if [ -z "$RELEASE_COMMIT" ]; then |
97 | | - RELEASE_COMMIT=$(git merge-base main origin/master 2>/dev/null || git rev-parse HEAD~1) |
98 | | - fi |
99 | | - CURRENT=$(git rev-parse v1.0.0-beta.1) |
100 | | - if [ "$CURRENT" != "$RELEASE_COMMIT" ]; then |
101 | | - git tag -d v1.0.0-beta.1 2>/dev/null || true |
102 | | - git tag -a v1.0.0-beta.1 "$RELEASE_COMMIT" -m "chore: 1.0.0-beta.1" |
103 | | - git push origin v1.0.0-beta.1 --force |
104 | | - echo "Moved v1.0.0-beta.1 from $CURRENT to $RELEASE_COMMIT." |
105 | | - fi |
106 | | - git notes --ref semantic-release-v1.0.0-beta.1 add -f -m '{"channels":["beta"]}' v1.0.0-beta.1 |
107 | | - git push origin refs/notes/semantic-release-v1.0.0-beta.1 |
108 | | - echo "Tag and note pushed; re-fetching so semantic-release sees them." |
109 | | - git fetch origin '+refs/tags/*:refs/tags/*' '+refs/notes/*:refs/notes/*' |
110 | | -
|
111 | 89 | - name: Add semantic-release note (dry run only) |
112 | 90 | if: github.event.inputs.dry_run == 'true' |
113 | 91 | run: | |
@@ -161,13 +139,31 @@ jobs: |
161 | 139 | env: |
162 | 140 | GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} |
163 | 141 | run: | |
| 142 | + set -e |
164 | 143 | if [ "${{ github.event.inputs.dry_run }}" = "true" ]; then |
165 | 144 | echo "Running semantic-release in DRY RUN mode..." |
166 | 145 | npx semantic-release --dry-run 2>&1 | tee semantic-release.log || true |
167 | | - # Extract "The next release version is X" for use in summary step |
168 | 146 | grep -oE "The next release version is [^[:space:]]+" semantic-release.log 2>/dev/null | sed 's/The next release version is //' > next-version.txt || echo "" > next-version.txt |
169 | 147 | else |
170 | | - echo "Running semantic-release (REAL release)..." |
| 148 | + # Prepare v1.0.0-beta.1 IN THIS SAME STEP so semantic-release sees it as last release (avoids "tag already exists"). |
| 149 | + # semantic-release uses "git tag --merged main" and git notes; tag must be in main history and have note. |
| 150 | + if git rev-parse --verify v1.0.0-beta.1 >/dev/null 2>&1; then |
| 151 | + RELEASE_COMMIT=$(git log main -1 --format=%H --grep="chore(release): 1.0.0-beta.1" 2>/dev/null || true) |
| 152 | + if [ -z "$RELEASE_COMMIT" ]; then |
| 153 | + RELEASE_COMMIT=$(git merge-base main origin/master 2>/dev/null || git rev-parse HEAD~1) |
| 154 | + fi |
| 155 | + CURRENT=$(git rev-parse v1.0.0-beta.1) |
| 156 | + if [ "$CURRENT" != "$RELEASE_COMMIT" ]; then |
| 157 | + git tag -d v1.0.0-beta.1 2>/dev/null || true |
| 158 | + git tag -a v1.0.0-beta.1 "$RELEASE_COMMIT" -m "chore: 1.0.0-beta.1" |
| 159 | + git push origin v1.0.0-beta.1 --force |
| 160 | + echo "Moved v1.0.0-beta.1 from $CURRENT to $RELEASE_COMMIT." |
| 161 | + fi |
| 162 | + git notes --ref semantic-release-v1.0.0-beta.1 add -f -m '{"channels":["beta"]}' v1.0.0-beta.1 |
| 163 | + git push origin refs/notes/semantic-release-v1.0.0-beta.1 |
| 164 | + git fetch origin '+refs/tags/*:refs/tags/*' '+refs/notes/*:refs/notes/*' |
| 165 | + echo "Prepared v1.0.0-beta.1; running semantic-release..." |
| 166 | + fi |
171 | 167 | npx semantic-release |
172 | 168 | fi |
173 | 169 |
|
|
0 commit comments