-
Notifications
You must be signed in to change notification settings - Fork 73
334 lines (290 loc) · 12.1 KB
/
build-pack-release.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
name: Build, Pack, Release
# Controls when the action will run.
on:
pull_request:
branches: [ master ]
types: [ closed ]
jobs:
build-and-create-draft:
# Only run if it was a PR merge
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Parse version
id: parse-version
run: |
version=$(cat src/main/java/Main.java | grep -Po '(?<=futureRestoreGUIVersion = \").*(?=\")')
echo $version > version.txt
echo "::set-output name=version::$version"
- name: Set up JDK 19
uses: actions/setup-java@v3
with:
java-version: 19
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build Jar
run: ./gradlew shadowJar
# Upload this built jar
- name: Upload final jar
uses: actions/upload-artifact@v3
with:
name: fat-jar
path: ./build/libs/FutureRestore GUI-1.0-all.jar
- name: Upload version
uses: actions/upload-artifact@v3
with:
name: version
path: version.txt
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.parse-version.outputs.version }}
release_name: FutureRestore GUI — v${{ steps.parse-version.outputs.version }}
draft: true
prerelease: false
- name: Create upload URL file
env:
UPLOAD_URL: ${{ steps.create_release.outputs.upload_url }}
run: echo $UPLOAD_URL > upload-url.txt
- name: Upload release's upload URL
uses: actions/upload-artifact@v3
with:
name: upload-url
path: upload-url.txt
- name: Create release ID file
env:
RELEASE_ID: ${{ steps.create_release.outputs.id }}
run: echo $RELEASE_ID > release-id.txt
- name: Upload release's upload URL
uses: actions/upload-artifact@v3
with:
name: release-id
path: release-id.txt
ubuntu-pack:
needs: [ build-and-create-draft ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 19
uses: actions/setup-java@v3
with:
java-version: 19
distribution: 'temurin'
- name: Download final jar
uses: actions/download-artifact@v3
with:
name: fat-jar
path: ./input
- name: Download version
uses: actions/download-artifact@v3
with:
name: version
- name: Output version
id: output-version
run: |
version=$(tail version.txt)
echo "::set-output name=version::$version"
- name: Download JavaFX
run: |
curl -o jmods.zip https://download2.gluonhq.com/openjfx/19/openjfx-19_linux-x64_bin-jmods.zip
unzip jmods.zip
- name: Run JPackage deb
env:
RUN_NUMBER: ${{ github.run_number }}
VERSION: ${{ steps.output-version.outputs.version }}
run: jpackage --input ./input --name "FutureRestore GUI" --main-jar "FutureRestore GUI-1.0-all.jar" --main-class Main --type deb --icon ./.github/workflows/ubuntu/Icon-1024.png --copyright "© CoocooFroggy $(date +'%Y')" --verbose --name "FutureRestore GUI" --module-path ./javafx-jmods-19 --add-modules javafx.swing,java.logging,java.sql,java.base,jdk.crypto.ec,java.naming --app-version $VERSION 2>&1 | tee /tmp/jpackoutput.txt
- name: Grep DEB name
id: grep_deb_name
run: |
deb_name=$(grep -Po '(?<=Package \(.deb\) saved to: ).*(?=.)' /tmp/jpackoutput.txt)
echo "::set-output name=deb_filename::$deb_name"
- name: Run JPackage app-image
env:
RUN_NUMBER: ${{ github.run_number }}
VERSION: ${{ steps.output-version.outputs.version }}
run: jpackage --input ./input --name "FutureRestore GUI" --main-jar "FutureRestore GUI-1.0-all.jar" --main-class Main --type app-image --icon ./.github/workflows/ubuntu/Icon-1024.png --copyright "© CoocooFroggy $(date +'%Y')" --verbose --name "FutureRestore GUI" --module-path ./javafx-jmods-19 --add-modules javafx.swing,java.logging,java.sql,java.base,jdk.crypto.ec,java.naming --app-version $VERSION
- name: Zip app-image and script
run: |
cp ./.github/workflows/ubuntu/"run.sh" ./
zip -r FutureRestore-GUI-Linux-Universal.zip "FutureRestore GUI" "run.sh"
- name: Download URL to upload to
uses: actions/download-artifact@v3
with:
name: upload-url
# Make it usable in GitHub actions
- name: Set output for upload-url
id: set_upload_url
run: |
upload_url=$(tail upload-url.txt)
echo "::set-output name=upload-url::$upload_url"
- name: Upload DEB to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.set_upload_url.outputs.upload-url }}
asset_path: ${{ steps.grep_deb_name.outputs.deb_filename }}
asset_name: FutureRestore-GUI-Debian-${{ steps.output-version.outputs.version }}.deb
asset_content_type: application/octet-stream
- name: Upload app-image zip to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.set_upload_url.outputs.upload-url }}
asset_path: FutureRestore-GUI-Linux-Universal.zip
asset_name: FutureRestore-GUI-Linux-Universal-${{ steps.output-version.outputs.version }}.zip
asset_content_type: application/zip
macos-pack:
needs: [ build-and-create-draft ]
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 19
uses: actions/setup-java@v3
with:
java-version: 19
distribution: 'temurin'
- name: Install create-dmg
run: brew install create-dmg
- name: Download final jar
uses: actions/download-artifact@v3
with:
name: fat-jar
path: ./input
- name: Download version
uses: actions/download-artifact@v3
with:
name: version
- name: Output version
id: output-version
run: |
version=$(tail version.txt)
echo "::set-output name=version::$version"
- name: Download JavaFX
run: |
curl -o jmods.zip https://download2.gluonhq.com/openjfx/19/openjfx-19_osx-x64_bin-jmods.zip
unzip jmods.zip
- name: Run JPackage and remove signature
env:
RUN_NUMBER: ${{ github.run_number}}
VERSION: ${{ steps.output-version.outputs.version }}
run: |
jpackage --input ./input --main-jar "FutureRestore GUI-1.0-all.jar" --main-class Main --type app-image --icon ./.github/workflows/mac/FutureRestoreGUIIcons.icns --copyright "© CoocooFroggy $(date +'%Y')" --verbose --mac-package-identifier com.coocoofroggy.futurerestoregui --name "FutureRestore GUI" --module-path ./javafx-jmods-19 --add-modules javafx.swing,java.logging,java.sql,java.base,jdk.crypto.ec,java.naming --app-version $VERSION
codesign --remove-signature FutureRestore\ GUI.app
mkdir dmg-input
mv "FutureRestore GUI.app" dmg-input
- name: Create DMG from .app
run: |
create-dmg --hdiutil-quiet --volname "FutureRestore GUI Installer" --volicon ".github/workflows/mac/DMG Images/FRGUI-Drive-Icon.icns" --background ".github/workflows/mac/DMG Images/DMG-Background.png" --window-pos 200 120 --window-size 600 342 --icon-size 100 --icon "FutureRestore GUI.app" 80 200 --hide-extension "FutureRestore GUI.app" --app-drop-link 450 200 "FutureRestore GUI Installer.dmg" "dmg-input/"
# - name: Zip .app
# id: zip_app
# run: zip -r FutureRestore-GUI-Mac.zip "FutureRestore GUI.app"
- name: Download URL to upload to
uses: actions/download-artifact@v3
with:
name: upload-url
# Make it usable in GitHub actions
- name: Set output for upload-url
id: set_upload_url
run: |
upload_url=$(tail upload-url.txt)
echo "::set-output name=upload-url::$upload_url"
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.set_upload_url.outputs.upload-url }}
asset_path: FutureRestore GUI Installer.dmg
asset_name: FutureRestore-GUI-Mac-${{ steps.output-version.outputs.version }}.dmg
asset_content_type: application/octet-stream
windows-pack:
needs: [ build-and-create-draft ]
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 19
uses: actions/setup-java@v3
with:
java-version: 19
distribution: 'temurin'
- name: Download final jar
uses: actions/download-artifact@v3
with:
name: fat-jar
path: ./input
- name: Download version
uses: actions/download-artifact@v3
with:
name: version
- name: Output version
id: output-version
run: |
FOR /F "tokens=*" %%g IN ('tail version.txt') do (SET version=%%g)
echo ::set-output name=version::%version%
shell: cmd
- name: Download JavaFX
run: |
curl -o jmods.zip https://download2.gluonhq.com/openjfx/19/openjfx-19_windows-x64_bin-jmods.zip
unzip jmods.zip
- name: Run JPackage
env:
RUN_NUMBER: ${{ github.run_number }}
VERSION: ${{ steps.output-version.outputs.version }}
run: jpackage --input ./input --name "FutureRestore GUI" --main-jar "FutureRestore GUI-1.0-all.jar" --main-class Main --type msi --icon ./.github/workflows/windows/FRWindows.ico --copyright "© CoocooFroggy $(date +'%Y')" --vendor "CoocooFroggy" --verbose --name "FutureRestore GUI" --win-shortcut --win-menu --module-path ./javafx-jmods-19 --add-modules javafx.swing,java.logging,java.sql,java.base,jdk.crypto.ec,java.naming --app-version %VERSION%
shell: cmd
- name: Find MSI name
id: grep_msi_name
run: |
FOR /F "tokens=*" %%g IN ('ls *.msi') do (SET msi_name=%%g)
echo ::set-output name=msi_filename::%msi_name%
# Otherwise it tries powershell
shell: cmd
- name: Download URL to upload to
uses: actions/download-artifact@v3
with:
name: upload-url
# Make it usable in GitHub actions
- name: Set output for upload-url
id: set_upload_url
run: |
FOR /F "tokens=*" %%g IN ('tail upload-url.txt') do (SET upload_url=%%g)
echo ::set-output name=upload-url::%upload_url%
# Otherwise it tries powershell
shell: cmd
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.set_upload_url.outputs.upload-url }}
asset_path: ${{ steps.grep_msi_name.outputs.msi_filename }}
asset_name: FutureRestore-GUI-Windows-${{ steps.output-version.outputs.version }}.msi
asset_content_type: application/octet-stream
# publish-release:
# needs: [ ubuntu-pack, macos-pack, windows-pack ]
# runs-on: ubuntu-latest
# steps:
# - name: Download release ID
# uses: actions/download-artifact@v3
# with:
# name: release-id
# - name: Output release ID
# id: output-release-id
# run: |
# release_id=$(tail release-id.txt)
# echo "::set-output name=release-id::$release_id"
# # - name: Publish release from draft
# # uses: StuYarrow/publish-release@v1
# # env:
# # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# # with:
# # id: ${{ steps.output-release-id.outputs.release-id }}