Skip to content

Commit 8b13be8

Browse files
authored
release candidate process for before full-release (#1558)
1 parent 3a43b70 commit 8b13be8

1 file changed

Lines changed: 59 additions & 17 deletions

File tree

.github/workflows/release.yml

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,39 @@ jobs:
1010
outputs:
1111
revision: ${{ steps.tag_info.outputs.revision }}
1212
version: ${{ steps.tag_info.outputs.version }}
13+
is_prerelease: ${{ steps.tag_info.outputs.is_prerelease }}
14+
asset_version: ${{ steps.tag_info.outputs.asset_version }}
15+
release_title: ${{ steps.tag_info.outputs.release_title }}
1316
steps:
1417
- name: Extract version and revision
1518
id: tag_info
1619
shell: bash
1720
run: |
21+
# Tags are shaped processing-<revision>-<version>[-rc<N>].
22+
# A trailing -rc<N> marks a release candidate (a public GitHub
23+
# prerelease); without it the tag is a final release.
1824
TAG_NAME="${GITHUB_REF#refs/tags/}"
1925
REVISION=$(echo "$TAG_NAME" | cut -d'-' -f2)
2026
VERSION=$(echo "$TAG_NAME" | cut -d'-' -f3)
27+
RC=$(echo "$TAG_NAME" | cut -d'-' -f4)
2128
2229
# Set outputs for use in later jobs or steps
2330
echo "revision=$REVISION" >> $GITHUB_OUTPUT
2431
echo "version=$VERSION" >> $GITHUB_OUTPUT
2532
33+
# The packaged version stays numeric (installer formats require it);
34+
# the RC marker only rides along in the release title and asset names.
35+
if [ -n "$RC" ]; then
36+
RC_UPPER=$(echo "$RC" | tr '[:lower:]' '[:upper:]')
37+
echo "is_prerelease=true" >> $GITHUB_OUTPUT
38+
echo "asset_version=${VERSION}-${RC}" >> $GITHUB_OUTPUT
39+
echo "release_title=Processing ${VERSION} ${RC_UPPER}" >> $GITHUB_OUTPUT
40+
else
41+
echo "is_prerelease=false" >> $GITHUB_OUTPUT
42+
echo "asset_version=${VERSION}" >> $GITHUB_OUTPUT
43+
echo "release_title=Processing ${VERSION}" >> $GITHUB_OUTPUT
44+
fi
45+
2646
create-draft:
2747
name: Create draft release
2848
runs-on: ubuntu-latest
@@ -33,7 +53,7 @@ jobs:
3353
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3454
GH_REPO: ${{ github.repository }}
3555
TAG: ${{ github.ref_name }}
36-
VERSION: ${{ needs.version.outputs.version }}
56+
TITLE: ${{ needs.version.outputs.release_title }}
3757
steps:
3858
- name: Create draft release
3959
run: |
@@ -42,7 +62,7 @@ jobs:
4262
else
4363
gh release create "$TAG" \
4464
--draft \
45-
--title "Processing $VERSION" \
65+
--title "$TITLE" \
4666
--generate-notes
4767
fi
4868
@@ -69,21 +89,23 @@ jobs:
6989
run: npm run zip
7090
- name: Stage reference asset
7191
env:
72-
VERSION: ${{ needs.version.outputs.version }}
92+
ASSET_VERSION: ${{ needs.version.outputs.asset_version }}
7393
run: |
7494
mkdir -p release-assets
75-
cp reference.zip "release-assets/processing-${VERSION}-reference.zip"
95+
cp reference.zip "release-assets/processing-${ASSET_VERSION}-reference.zip"
7696
- name: Upload reference to release
7797
uses: softprops/action-gh-release@v2
7898
with:
7999
draft: true
80100
tag_name: ${{ github.ref_name }}
81-
files: release-assets/processing-${{ needs.version.outputs.version }}-reference.zip
101+
files: release-assets/processing-${{ needs.version.outputs.asset_version }}-reference.zip
82102

83103
publish-maven:
84104
name: Publish Processing Libraries to Maven Central
85105
runs-on: ubuntu-latest
86106
needs: [version, release-windows, release-macos, release-linux]
107+
# Release candidates must not notify Maven Central.
108+
if: ${{ needs.version.outputs.is_prerelease != 'true' }}
87109
steps:
88110
- name: Checkout Repository
89111
uses: actions/checkout@v4
@@ -110,6 +132,8 @@ jobs:
110132
name: Publish Processing Plugins to Gradle Plugin Portal
111133
runs-on: ubuntu-latest
112134
needs: [version, release-windows, release-macos, release-linux]
135+
# Release candidates must not notify the Gradle Plugin Portal.
136+
if: ${{ needs.version.outputs.is_prerelease != 'true' }}
113137
steps:
114138
- name: Checkout Repository
115139
uses: actions/checkout@v4
@@ -189,11 +213,12 @@ jobs:
189213
shell: bash
190214
env:
191215
VERSION: ${{ needs.version.outputs.version }}
216+
ASSET_VERSION: ${{ needs.version.outputs.asset_version }}
192217
ARCH: ${{ matrix.arch }}
193218
run: |
194219
mkdir -p release-assets
195-
cp "app/build/compose/binaries/main/Processing-${VERSION}.zip" "release-assets/processing-${VERSION}-windows-${ARCH}-portable.zip"
196-
cp "app/build/compose/binaries/main/msi/Processing-${VERSION}.msi" "release-assets/processing-${VERSION}-windows-${ARCH}.msi"
220+
cp "app/build/compose/binaries/main/Processing-${VERSION}.zip" "release-assets/processing-${ASSET_VERSION}-windows-${ARCH}-portable.zip"
221+
cp "app/build/compose/binaries/main/msi/Processing-${VERSION}.msi" "release-assets/processing-${ASSET_VERSION}-windows-${ARCH}.msi"
197222
198223
- name: Upload release assets
199224
uses: softprops/action-gh-release@v2
@@ -246,11 +271,12 @@ jobs:
246271
- name: Stage release assets
247272
env:
248273
VERSION: ${{ needs.version.outputs.version }}
274+
ASSET_VERSION: ${{ needs.version.outputs.asset_version }}
249275
ARCH: ${{ matrix.arch }}
250276
run: |
251277
mkdir -p release-assets
252-
cp "app/build/compose/binaries/main/Processing-${VERSION}.zip" "release-assets/processing-${VERSION}-macos-${ARCH}-portable.zip"
253-
cp "app/build/compose/binaries/main/dmg/Processing-${VERSION}.dmg" "release-assets/processing-${VERSION}-macos-${ARCH}.dmg"
278+
cp "app/build/compose/binaries/main/Processing-${VERSION}.zip" "release-assets/processing-${ASSET_VERSION}-macos-${ARCH}-portable.zip"
279+
cp "app/build/compose/binaries/main/dmg/Processing-${VERSION}.dmg" "release-assets/processing-${ASSET_VERSION}-macos-${ARCH}.dmg"
254280
255281
- name: Upload release assets
256282
uses: softprops/action-gh-release@v2
@@ -293,12 +319,13 @@ jobs:
293319
- name: Stage release assets
294320
env:
295321
VERSION: ${{ needs.version.outputs.version }}
322+
ASSET_VERSION: ${{ needs.version.outputs.asset_version }}
296323
ARCH: ${{ matrix.arch }}
297324
DEB: ${{ matrix.deb }}
298325
run: |
299326
mkdir -p release-assets
300-
cp "app/build/compose/binaries/main/Processing-${VERSION}.zip" "release-assets/processing-${VERSION}-linux-${ARCH}-portable.zip"
301-
cp "app/build/compose/binaries/main/deb/processing_${VERSION}-1_${DEB}.deb" "release-assets/processing-${VERSION}-linux-${ARCH}.deb"
327+
cp "app/build/compose/binaries/main/Processing-${VERSION}.zip" "release-assets/processing-${ASSET_VERSION}-linux-${ARCH}-portable.zip"
328+
cp "app/build/compose/binaries/main/deb/processing_${VERSION}-1_${DEB}.deb" "release-assets/processing-${ASSET_VERSION}-linux-${ARCH}.deb"
302329
303330
- name: Upload release assets
304331
uses: softprops/action-gh-release@v2
@@ -358,21 +385,24 @@ jobs:
358385
- name: Stage release assets
359386
env:
360387
VERSION: ${{ needs.version.outputs.version }}
388+
ASSET_VERSION: ${{ needs.version.outputs.asset_version }}
361389
ARCH: ${{ matrix.arch }}
362390
DEB: ${{ matrix.deb }}
363391
SNAP_NAME: ${{ vars.SNAP_NAME }}
364392
run: |
365393
mkdir -p release-assets
366-
cp "app/build/compose/binaries/main/${SNAP_NAME}_${VERSION}_${DEB}.snap" "release-assets/processing-${VERSION}-linux-${ARCH}.snap"
394+
cp "app/build/compose/binaries/main/${SNAP_NAME}_${VERSION}_${DEB}.snap" "release-assets/processing-${ASSET_VERSION}-linux-${ARCH}.snap"
367395
368396
- name: Upload snap to release
369397
uses: softprops/action-gh-release@v2
370398
with:
371399
draft: true
372400
tag_name: ${{ github.ref_name }}
373-
files: release-assets/processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}.snap
401+
files: release-assets/processing-${{ needs.version.outputs.asset_version }}-linux-${{ matrix.arch }}.snap
374402

375403
- name: Upload snap to Snap Store
404+
# Release candidates must not push to the Snap Store.
405+
if: ${{ needs.version.outputs.is_prerelease != 'true' }}
376406
run: snapcraft upload --release=beta app/build/compose/binaries/main/${{ vars.SNAP_NAME }}_${{ needs.version.outputs.version }}_${{ matrix.deb }}.snap
377407
env:
378408
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.PROCESSING_SNAPCRAFT_TOKEN }}
@@ -426,18 +456,18 @@ jobs:
426456

427457
- name: Stage release assets
428458
env:
429-
VERSION: ${{ needs.version.outputs.version }}
459+
ASSET_VERSION: ${{ needs.version.outputs.asset_version }}
430460
ARCH: ${{ matrix.arch }}
431461
run: |
432462
mkdir -p release-assets
433-
cp processing.flatpak "release-assets/processing-${VERSION}-linux-${ARCH}.flatpak"
463+
cp processing.flatpak "release-assets/processing-${ASSET_VERSION}-linux-${ARCH}.flatpak"
434464
435465
- name: Upload Flatpak to release
436466
uses: softprops/action-gh-release@v2
437467
with:
438468
draft: true
439469
tag_name: ${{ github.ref_name }}
440-
files: release-assets/processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}.flatpak
470+
files: release-assets/processing-${{ needs.version.outputs.asset_version }}-linux-${{ matrix.arch }}.flatpak
441471

442472
publish-release:
443473
name: Publish release
@@ -454,12 +484,24 @@ jobs:
454484
- release-linux
455485
- release-linux-snap
456486
- release-linux-flatpak
487+
# Run once nothing has failed. publish-maven/publish-gradle are skipped for
488+
# release candidates, and a skipped dependency would otherwise skip this job.
489+
if: ${{ !failure() && !cancelled() }}
457490
permissions:
458491
contents: write
459492
env:
460493
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
461494
GH_REPO: ${{ github.repository }}
462495
TAG: ${{ github.ref_name }}
496+
IS_PRERELEASE: ${{ needs.version.outputs.is_prerelease }}
463497
steps:
464498
- name: Mark release as published
465-
run: gh release edit "$TAG" --draft=false --latest
499+
run: |
500+
# Release candidates go out as a public prerelease (downloadable, but
501+
# not marked "latest" so package-manager watchers ignore them); final
502+
# releases are marked latest.
503+
if [ "$IS_PRERELEASE" = "true" ]; then
504+
gh release edit "$TAG" --draft=false --prerelease
505+
else
506+
gh release edit "$TAG" --draft=false --latest
507+
fi

0 commit comments

Comments
 (0)