Skip to content

Commit ecd9495

Browse files
authored
New Release Flow (#1531)
* publish to gradle and maven after desktop platforms have succeeded * draft release workflow * specify a release environment to require a manual approval
1 parent 6bfbf86 commit ecd9495

1 file changed

Lines changed: 138 additions & 56 deletions

File tree

.github/workflows/release.yml

Lines changed: 138 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
name: Releases
22
on:
3-
release:
4-
types: [published]
3+
push:
4+
tags:
5+
- 'processing-*'
56

67
jobs:
78
version:
@@ -21,12 +22,36 @@ jobs:
2122
# Set outputs for use in later jobs or steps
2223
echo "revision=$REVISION" >> $GITHUB_OUTPUT
2324
echo "version=$VERSION" >> $GITHUB_OUTPUT
25+
26+
create-draft:
27+
name: Create draft release
28+
runs-on: ubuntu-latest
29+
needs: version
30+
permissions:
31+
contents: write
32+
env:
33+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34+
GH_REPO: ${{ github.repository }}
35+
TAG: ${{ github.ref_name }}
36+
VERSION: ${{ needs.version.outputs.version }}
37+
steps:
38+
- name: Create draft release
39+
run: |
40+
if gh release view "$TAG" >/dev/null 2>&1; then
41+
echo "Release for $TAG already exists; leaving it as-is."
42+
else
43+
gh release create "$TAG" \
44+
--draft \
45+
--title "Processing $VERSION" \
46+
--generate-notes
47+
fi
48+
2449
reference:
2550
name: Publish Processing Reference to release
2651
runs-on: ubuntu-latest
2752
permissions:
2853
contents: write
29-
needs: version
54+
needs: [version, create-draft]
3055
steps:
3156
- name: Checkout Website Repository
3257
uses: actions/checkout@v4
@@ -42,17 +67,23 @@ jobs:
4267
run: npm run build
4368
- name: Make reference.zip
4469
run: npm run zip
70+
- name: Stage reference asset
71+
env:
72+
VERSION: ${{ needs.version.outputs.version }}
73+
run: |
74+
mkdir -p release-assets
75+
cp reference.zip "release-assets/processing-${VERSION}-reference.zip"
4576
- name: Upload reference to release
46-
uses: svenstaro/upload-release-action@v2
77+
uses: softprops/action-gh-release@v2
4778
with:
48-
repo_token: ${{ secrets.GITHUB_TOKEN }}
49-
asset_name: processing-${{ needs.version.outputs.version }}-reference.zip
50-
file: reference.zip
79+
draft: true
80+
tag_name: ${{ github.ref_name }}
81+
files: release-assets/processing-${{ needs.version.outputs.version }}-reference.zip
5182

5283
publish-maven:
5384
name: Publish Processing Libraries to Maven Central
5485
runs-on: ubuntu-latest
55-
needs: version
86+
needs: [version, release-windows, release-macos, release-linux]
5687
steps:
5788
- name: Checkout Repository
5889
uses: actions/checkout@v4
@@ -78,7 +109,7 @@ jobs:
78109
publish-gradle:
79110
name: Publish Processing Plugins to Gradle Plugin Portal
80111
runs-on: ubuntu-latest
81-
needs: version
112+
needs: [version, release-windows, release-macos, release-linux]
82113
steps:
83114
- name: Checkout Repository
84115
uses: actions/checkout@v4
@@ -97,7 +128,7 @@ jobs:
97128

98129
ORG_GRADLE_PROJECT_version: ${{ needs.version.outputs.version }}
99130
ORG_GRADLE_PROJECT_group: ${{ vars.GRADLE_GROUP }}
100-
131+
101132
- name: Publish internal plugins to Gradle Plugin Portal
102133
run: ./gradlew -c gradle/plugins/settings.gradle.kts publishPlugins
103134
env:
@@ -114,7 +145,7 @@ jobs:
114145
release-windows:
115146
name: (windows/${{ matrix.arch }}) Create Processing Release
116147
runs-on: ${{ matrix.os }}
117-
needs: version
148+
needs: [version, create-draft]
118149
permissions:
119150
contents: write
120151
strategy:
@@ -154,24 +185,27 @@ jobs:
154185
timestamp-rfc3161: http://timestamp.acs.microsoft.com
155186
timestamp-digest: SHA256
156187

157-
- name: Upload portable version
158-
uses: svenstaro/upload-release-action@v2
159-
with:
160-
repo_token: ${{ secrets.GITHUB_TOKEN }}
161-
asset_name: processing-${{ needs.version.outputs.version }}-windows-${{ matrix.arch }}-portable.zip
162-
file: app/build/compose/binaries/main/Processing-${{ needs.version.outputs.version }}.zip
188+
- name: Stage release assets
189+
shell: bash
190+
env:
191+
VERSION: ${{ needs.version.outputs.version }}
192+
ARCH: ${{ matrix.arch }}
193+
run: |
194+
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"
163197
164-
- name: Upload installer
165-
uses: svenstaro/upload-release-action@v2
198+
- name: Upload release assets
199+
uses: softprops/action-gh-release@v2
166200
with:
167-
repo_token: ${{ secrets.GITHUB_TOKEN }}
168-
asset_name: processing-${{ needs.version.outputs.version }}-windows-${{ matrix.arch }}.msi
169-
file: app/build/compose/binaries/main/msi/Processing-${{ needs.version.outputs.version }}.msi
201+
draft: true
202+
tag_name: ${{ github.ref_name }}
203+
files: release-assets/*
170204

171205
release-macos:
172206
name: (macOS/${{ matrix.arch }}) Create Processing Release
173207
runs-on: macos-latest
174-
needs: version
208+
needs: [version, create-draft]
175209
permissions:
176210
contents: write
177211
strategy:
@@ -209,24 +243,26 @@ jobs:
209243
ORG_GRADLE_PROJECT_compose.desktop.mac.notarization.password: ${{ secrets.PROCESSING_APP_PASSWORD }}
210244
ORG_GRADLE_PROJECT_compose.desktop.mac.notarization.teamID: ${{ secrets.PROCESSING_TEAM_ID }}
211245

212-
- name: Upload portables to release
213-
uses: svenstaro/upload-release-action@v2
214-
with:
215-
repo_token: ${{ secrets.GITHUB_TOKEN }}
216-
asset_name: processing-${{ needs.version.outputs.version }}-macos-${{ matrix.arch }}-portable.zip
217-
file: app/build/compose/binaries/main/Processing-${{ needs.version.outputs.version }}.zip
246+
- name: Stage release assets
247+
env:
248+
VERSION: ${{ needs.version.outputs.version }}
249+
ARCH: ${{ matrix.arch }}
250+
run: |
251+
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"
218254
219-
- name: Upload installers to release
220-
uses: svenstaro/upload-release-action@v2
255+
- name: Upload release assets
256+
uses: softprops/action-gh-release@v2
221257
with:
222-
repo_token: ${{ secrets.GITHUB_TOKEN }}
223-
asset_name: processing-${{ needs.version.outputs.version }}-macos-${{ matrix.arch }}.dmg
224-
file: app/build/compose/binaries/main/dmg/Processing-${{ needs.version.outputs.version }}.dmg
258+
draft: true
259+
tag_name: ${{ github.ref_name }}
260+
files: release-assets/*
225261

226262
release-linux:
227263
name: (linux/${{ matrix.arch }}) Create Processing Release
228264
runs-on: ${{ matrix.os }}
229-
needs: version
265+
needs: [version, create-draft]
230266
permissions:
231267
contents: write
232268
strategy:
@@ -254,19 +290,22 @@ jobs:
254290
ORG_GRADLE_PROJECT_revision: ${{ needs.version.outputs.revision }}
255291
ORG_GRADLE_PROJECT_compose.desktop.verbose: true
256292

257-
- name: Upload portable to release
258-
uses: svenstaro/upload-release-action@v2
259-
with:
260-
repo_token: ${{ secrets.GITHUB_TOKEN }}
261-
asset_name: processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}-portable.zip
262-
file: app/build/compose/binaries/main/Processing-${{ needs.version.outputs.version }}.zip
293+
- name: Stage release assets
294+
env:
295+
VERSION: ${{ needs.version.outputs.version }}
296+
ARCH: ${{ matrix.arch }}
297+
DEB: ${{ matrix.deb }}
298+
run: |
299+
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"
263302
264-
- name: Upload installer to release
265-
uses: svenstaro/upload-release-action@v2
303+
- name: Upload release assets
304+
uses: softprops/action-gh-release@v2
266305
with:
267-
repo_token: ${{ secrets.GITHUB_TOKEN }}
268-
asset_name: processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}.deb
269-
file: app/build/compose/binaries/main/deb/processing_${{ needs.version.outputs.version }}-1_${{ matrix.deb }}.deb
306+
draft: true
307+
tag_name: ${{ github.ref_name }}
308+
files: release-assets/*
270309

271310
- name: Add artifact
272311
uses: actions/upload-artifact@v4
@@ -278,7 +317,7 @@ jobs:
278317
release-linux-snap:
279318
name: (linux/${{ matrix.arch }}) Create Processing Snap Release
280319
runs-on: ${{ matrix.os }}
281-
needs: [version, release-linux]
320+
needs: [version, create-draft, release-linux]
282321
permissions:
283322
contents: write
284323
strategy:
@@ -316,12 +355,22 @@ jobs:
316355
ORG_GRADLE_PROJECT_snapname: ${{ vars.SNAP_NAME }}
317356
ORG_GRADLE_PROJECT_snapconfinement: ${{ vars.SNAP_CONFINEMENT }}
318357

358+
- name: Stage release assets
359+
env:
360+
VERSION: ${{ needs.version.outputs.version }}
361+
ARCH: ${{ matrix.arch }}
362+
DEB: ${{ matrix.deb }}
363+
SNAP_NAME: ${{ vars.SNAP_NAME }}
364+
run: |
365+
mkdir -p release-assets
366+
cp "app/build/compose/binaries/main/${SNAP_NAME}_${VERSION}_${DEB}.snap" "release-assets/processing-${VERSION}-linux-${ARCH}.snap"
367+
319368
- name: Upload snap to release
320-
uses: svenstaro/upload-release-action@v2
369+
uses: softprops/action-gh-release@v2
321370
with:
322-
repo_token: ${{ secrets.GITHUB_TOKEN }}
323-
asset_name: processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}.snap
324-
file: app/build/compose/binaries/main/${{ vars.SNAP_NAME }}_${{ needs.version.outputs.version }}_${{ matrix.deb }}.snap
371+
draft: true
372+
tag_name: ${{ github.ref_name }}
373+
files: release-assets/processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}.snap
325374

326375
- name: Upload snap to Snap Store
327376
run: snapcraft upload --release=beta app/build/compose/binaries/main/${{ vars.SNAP_NAME }}_${{ needs.version.outputs.version }}_${{ matrix.deb }}.snap
@@ -330,7 +379,7 @@ jobs:
330379
release-linux-flatpak:
331380
name: (linux/${{ matrix.arch }}) Create Processing Flatpak Release
332381
runs-on: ${{ matrix.os }}
333-
needs: [ version, release-linux ]
382+
needs: [version, create-draft, release-linux]
334383
container:
335384
image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-48
336385
options: --privileged
@@ -375,9 +424,42 @@ jobs:
375424
cache-key: flatpak-builder-${{ github.sha }}
376425
arch: ${{ matrix.farch }}
377426

427+
- name: Stage release assets
428+
env:
429+
VERSION: ${{ needs.version.outputs.version }}
430+
ARCH: ${{ matrix.arch }}
431+
run: |
432+
mkdir -p release-assets
433+
cp processing.flatpak "release-assets/processing-${VERSION}-linux-${ARCH}.flatpak"
434+
378435
- name: Upload Flatpak to release
379-
uses: svenstaro/upload-release-action@v2
436+
uses: softprops/action-gh-release@v2
380437
with:
381-
repo_token: ${{ secrets.GITHUB_TOKEN }}
382-
asset_name: processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}.flatpak
383-
file: processing.flatpak
438+
draft: true
439+
tag_name: ${{ github.ref_name }}
440+
files: release-assets/processing-${{ needs.version.outputs.version }}-linux-${{ matrix.arch }}.flatpak
441+
442+
publish-release:
443+
name: Publish release
444+
runs-on: ubuntu-latest
445+
environment: release
446+
needs:
447+
- version
448+
- create-draft
449+
- reference
450+
- publish-maven
451+
- publish-gradle
452+
- release-windows
453+
- release-macos
454+
- release-linux
455+
- release-linux-snap
456+
- release-linux-flatpak
457+
permissions:
458+
contents: write
459+
env:
460+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
461+
GH_REPO: ${{ github.repository }}
462+
TAG: ${{ github.ref_name }}
463+
steps:
464+
- name: Mark release as published
465+
run: gh release edit "$TAG" --draft=false --latest

0 commit comments

Comments
 (0)