Skip to content

Commit 3b66396

Browse files
author
strausr
committed
fix(release): run v1.0.0-beta.1 prepare inside Release step (real run)
Inline tag move + note add + re-fetch into the same step as npx semantic-release when not dry run, so semantic-release always sees the prepared tag/note.
1 parent cdb658d commit 3b66396

1 file changed

Lines changed: 20 additions & 24 deletions

File tree

.github/workflows/release.yml

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -86,28 +86,6 @@ jobs:
8686
git config user.name "github-actions[bot]"
8787
git config user.email "github-actions[bot]@users.noreply.github.com"
8888
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-
11189
- name: Add semantic-release note (dry run only)
11290
if: github.event.inputs.dry_run == 'true'
11391
run: |
@@ -161,13 +139,31 @@ jobs:
161139
env:
162140
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
163141
run: |
142+
set -e
164143
if [ "${{ github.event.inputs.dry_run }}" = "true" ]; then
165144
echo "Running semantic-release in DRY RUN mode..."
166145
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
168146
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
169147
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
171167
npx semantic-release
172168
fi
173169

0 commit comments

Comments
 (0)