@@ -113,7 +113,7 @@ jobs:
113
113
114
114
# Extract version from branch name if it's a release branch
115
115
if [[ "$CURRENT_BRANCH" =~ ^release/([0-9]+\.[0-9]+) ]]; then
116
- echo "prerelease_tag=${BASH_REMATCH[1]}- rc" >> $GITHUB_OUTPUT
116
+ echo "prerelease_tag=rc" >> $GITHUB_OUTPUT
117
117
else
118
118
# Use branch name as prerelease tag (sanitized)
119
119
SANITIZED_BRANCH=$(echo "$CURRENT_BRANCH" | sed 's/[^a-zA-Z0-9-]/-/g')
@@ -140,16 +140,59 @@ jobs:
140
140
- name : Install dependencies
141
141
run : pnpm install
142
142
143
- - name : Enter prerelease mode if needed
144
- if : steps.release-strategy.outputs.use_prerelease == 'true'
143
+ - name : Check current prerelease state
144
+ id : check-prerelease
145
145
run : |
146
- PRERELEASE_TAG="${{ steps.release-strategy.outputs.prerelease_tag }}"
147
- echo "Entering prerelease mode with tag: $PRERELEASE_TAG"
146
+ if [ -f .changeset/pre.json ]; then
147
+ echo "Currently in prerelease mode"
148
+ echo "in_prerelease=true" >> $GITHUB_OUTPUT
149
+ # Extract the current prerelease tag from pre.json
150
+ CURRENT_TAG=$(node -e "console.log(JSON.parse(require('fs').readFileSync('.changeset/pre.json', 'utf8')).tag)")
151
+ echo "current_tag=$CURRENT_TAG" >> $GITHUB_OUTPUT
152
+ else
153
+ echo "Not in prerelease mode"
154
+ echo "in_prerelease=false" >> $GITHUB_OUTPUT
155
+ fi
148
156
157
+ - name : Exit prerelease mode if transitioning to normal release
158
+ if : steps.check-prerelease.outputs.in_prerelease == 'true' && steps.release-strategy.outputs.use_prerelease == 'false'
159
+ run : |
160
+ echo "Exiting prerelease mode to perform normal release"
149
161
if [ "${{ github.event.inputs.dry_run }}" != "true" ]; then
150
- pnpm changeset pre enter "$PRERELEASE_TAG"
162
+ pnpm changeset pre exit
163
+ # Commit the pre.json removal
164
+ git add .
165
+ git commit -m "chore: exit prerelease mode" || true
166
+ else
167
+ echo "DRY RUN: Would exit prerelease mode"
168
+ fi
169
+
170
+ - name : Enter or update prerelease mode if needed
171
+ if : steps.release-strategy.outputs.use_prerelease == 'true'
172
+ run : |
173
+ PRERELEASE_TAG="${{ steps.release-strategy.outputs.prerelease_tag }}"
174
+
175
+ # Check if we're already in prerelease mode with the same tag
176
+ if [ "${{ steps.check-prerelease.outputs.in_prerelease }}" == "true" ]; then
177
+ if [ "${{ steps.check-prerelease.outputs.current_tag }}" == "$PRERELEASE_TAG" ]; then
178
+ echo "Already in prerelease mode with tag: $PRERELEASE_TAG"
179
+ else
180
+ echo "Switching prerelease tag from ${{ steps.check-prerelease.outputs.current_tag }} to $PRERELEASE_TAG"
181
+ if [ "${{ github.event.inputs.dry_run }}" != "true" ]; then
182
+ # Exit current prerelease mode and enter new one
183
+ pnpm changeset pre exit
184
+ pnpm changeset pre enter "$PRERELEASE_TAG"
185
+ else
186
+ echo "DRY RUN: Would switch prerelease tag to $PRERELEASE_TAG"
187
+ fi
188
+ fi
151
189
else
152
- echo "DRY RUN: Would enter prerelease mode with tag $PRERELEASE_TAG"
190
+ echo "Entering prerelease mode with tag: $PRERELEASE_TAG"
191
+ if [ "${{ github.event.inputs.dry_run }}" != "true" ]; then
192
+ pnpm changeset pre enter "$PRERELEASE_TAG"
193
+ else
194
+ echo "DRY RUN: Would enter prerelease mode with tag $PRERELEASE_TAG"
195
+ fi
153
196
fi
154
197
155
198
- name : Check for changesets
@@ -223,18 +266,6 @@ jobs:
223
266
pnpm changeset tag
224
267
git push --tags
225
268
226
- - name : Exit prerelease mode if needed
227
- if : steps.release-strategy.outputs.use_prerelease == 'true' && github.event.inputs.dry_run != 'true' && steps.check-changesets.outputs.has_changesets == 'true'
228
- run : |
229
- echo "Exiting prerelease mode"
230
- pnpm changeset pre exit || true
231
- # Commit the pre.json removal if it exists
232
- if [ -f .changeset/pre.json ]; then
233
- git add .changeset/pre.json
234
- git commit -m "chore: exit prerelease mode" || true
235
- CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
236
- git push origin "refs/heads/$CURRENT_BRANCH:refs/heads/$CURRENT_BRANCH" || true
237
- fi
238
269
239
270
- name : Trigger release creation
240
271
if : ${{ github.event.inputs.dry_run != 'true' && steps.check-changesets.outputs.has_changesets == 'true' }}
@@ -258,17 +289,16 @@ jobs:
258
289
run : |
259
290
echo "DRY RUN SUMMARY:"
260
291
echo "================"
261
- if [ "${{ steps.release-strategy.outputs.use_prerelease }}" == "true" ]; then
292
+ if [ "${{ steps.check-prerelease.outputs.in_prerelease }}" == "true" ] && [ "${{ steps.release-strategy.outputs.use_prerelease }}" == "false" ]; then
293
+ echo "Would exit prerelease mode before versioning"
294
+ fi
295
+ if [ "${{ steps.release-strategy.outputs.use_prerelease }}" == "true" ] && [ "${{ steps.check-prerelease.outputs.in_prerelease }}" == "false" ]; then
262
296
echo "Would enter prerelease mode: ${{ steps.release-strategy.outputs.prerelease_tag }}"
263
297
fi
264
298
echo "Would version packages according to changesets"
265
299
echo "Would commit with message: chore: release"
266
300
echo "Would create and push tags"
267
301
echo "Would publish packages to npm"
268
-
269
- if [ "${{ steps.release-strategy.outputs.use_prerelease }}" == "true" ]; then
270
- echo "Would exit prerelease mode after publishing"
271
- fi
272
302
echo ""
273
303
echo "Current git status:"
274
304
git status
0 commit comments