@@ -190,15 +190,15 @@ jobs:
190190 echo "dmg_path=$DMG_OUTPUT" >> "$GITHUB_OUTPUT"
191191
192192 - name : Sign DMG
193- if : steps.signing.outputs.enabled == 'true'
193+ if : steps.signing.outputs.enabled == 'true' && !contains(github.ref_name, '-')
194194 run : |
195195 codesign --force \
196196 --sign "${{ secrets.MAC_CSC_NAME }}" \
197197 --timestamp \
198198 "${{ steps.dmg.outputs.dmg_path }}"
199199
200200 - name : Notarize DMG
201- if : steps.signing.outputs.enabled == 'true'
201+ if : steps.signing.outputs.enabled == 'true' && !contains(github.ref_name, '-')
202202 run : |
203203 xcrun notarytool submit "${{ steps.dmg.outputs.dmg_path }}" \
204204 --apple-id "${{ secrets.APPLE_ID }}" \
@@ -208,11 +208,11 @@ jobs:
208208 timeout-minutes : 15
209209
210210 - name : Staple notarization ticket
211- if : steps.signing.outputs.enabled == 'true'
211+ if : steps.signing.outputs.enabled == 'true' && !contains(github.ref_name, '-')
212212 run : xcrun stapler staple "${{ steps.dmg.outputs.dmg_path }}"
213213
214214 - name : Validate stapled DMG
215- if : steps.signing.outputs.enabled == 'true'
215+ if : steps.signing.outputs.enabled == 'true' && !contains(github.ref_name, '-')
216216 run : |
217217 xcrun stapler validate "${{ steps.dmg.outputs.dmg_path }}"
218218 spctl -a -vv -t install "${{ steps.dmg.outputs.dmg_path }}"
@@ -286,20 +286,33 @@ jobs:
286286 TAG="${INPUT_TAG}"
287287 fi
288288
289- if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
290- echo "::error::Release tag must look like v1.5.0; got '${TAG}'"
289+ if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-(rc|beta|alpha)\.[0-9]+)? $ ]]; then
290+ echo "::error::Release tag must look like v1.5.0 or v1.5.0-rc.1 ; got '${TAG}'"
291291 exit 1
292292 fi
293293
294294 VERSION="${TAG#v}"
295+ # Strip pre-release suffix (e.g. "1.5.0-rc.1" -> "1.5.0") for package.json comparison.
296+ STABLE_VERSION="${VERSION%%-*}"
295297 PACKAGE_VERSION="$(node -p 'require("./package.json").version')"
296- if [[ "$PACKAGE_VERSION" != "$VERSION " ]]; then
297- echo "::error::package.json version ${PACKAGE_VERSION} does not match release tag ${TAG}"
298+ if [[ "$PACKAGE_VERSION" != "$STABLE_VERSION " ]]; then
299+ echo "::error::package.json version ${PACKAGE_VERSION} does not match stable version ${STABLE_VERSION} from tag ${TAG}"
298300 exit 1
299301 fi
300302
303+ if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-(rc|beta|alpha)\.[0-9]+$ ]]; then
304+ PRERELEASE_FLAG="--prerelease"
305+ IS_PRERELEASE="true"
306+ else
307+ PRERELEASE_FLAG=""
308+ IS_PRERELEASE="false"
309+ fi
310+
301311 echo "tag=$TAG" >> "$GITHUB_OUTPUT"
302312 echo "version=$VERSION" >> "$GITHUB_OUTPUT"
313+ echo "stable_version=$STABLE_VERSION" >> "$GITHUB_OUTPUT"
314+ echo "is_prerelease=$IS_PRERELEASE" >> "$GITHUB_OUTPUT"
315+ echo "prerelease_flag=$PRERELEASE_FLAG" >> "$GITHUB_OUTPUT"
303316
304317 - name : Download Windows installer
305318 uses : actions/download-artifact@v4
@@ -329,8 +342,9 @@ jobs:
329342
330343 - name : Publish release assets
331344 env :
332- GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
345+ GH_TOKEN : ${{ secrets.OPENSCREEN_RELEASE_TOKEN }}
333346 TAG : ${{ steps.release.outputs.tag }}
347+ PRERELEASE_FLAG : ${{ steps.release.outputs.prerelease_flag }}
334348 run : |
335349 mapfile -t FILES < <(find artifacts -type f | sort)
336350 if [[ "${#FILES[@]}" -eq 0 ]]; then
@@ -341,13 +355,22 @@ jobs:
341355 if gh release view "$TAG" >/dev/null 2>&1; then
342356 gh release upload "$TAG" "${FILES[@]}" --clobber
343357 else
358+ # shellcheck disable=SC2086
344359 gh release create "$TAG" "${FILES[@]}" \
345360 --target "$GITHUB_SHA" \
346361 --title "$TAG" \
347- --generate-notes
362+ --generate-notes \
363+ $PRERELEASE_FLAG
348364 fi
349365
350- gh release edit "$TAG" \
351- --draft=false \
352- --latest \
353- --title "$TAG"
366+ if [[ -n "$PRERELEASE_FLAG" ]]; then
367+ gh release edit "$TAG" \
368+ --draft=false \
369+ --latest=false \
370+ --title "$TAG"
371+ else
372+ gh release edit "$TAG" \
373+ --draft=false \
374+ --latest \
375+ --title "$TAG"
376+ fi
0 commit comments