source: josm/trunk/.github/workflows/ant.yml

Last change on this file was 19030, checked in by taylor.smock, 2 weeks ago

Fix #21533, see #23600: Native Apple Silicon Support

When building on macOS, the macos-jpackage.sh script now takes two arguments:

  1. The JOSM revision
  2. An additional JDK to build against (this should be of a different architecture)

If an additional JDK is specified, it is assumed that it is a different
architecture, and the two built apps are combined using lipo for a universal binary.

ant.yml does have some changes to make it easier to debug packaging issues in
PRs; the PR does still need to upload the specific package and add its branch to
the triggers.

File size: 11.6 KB
Line 
1name: Java CI Build
2env:
3 JAVAFX_VERSION: '17.0.7'
4on:
5 push:
6 branches: [master]
7
8defaults:
9 run:
10 shell: bash
11
12jobs:
13
14 createrelease:
15 name: Create Release
16 runs-on: ubuntu-latest
17 env:
18 LANG: en_US.UTF-8
19 outputs:
20 upload_url: ${{ steps.create_release.outputs.upload_url }}
21 josm_revision: ${{ steps.create_revision.outputs.josm_revision }}
22 josm_prerelease: ${{ steps.create_revision.outputs.josm_prerelease }}
23 josm_release_tag: ${{ steps.create_revision.outputs.josm_release_tag }}
24 steps:
25 - name: Checkout
26 uses: actions/checkout@v4
27 with:
28 fetch-depth: 256
29
30 - name: Set revision env variable
31 id: create_revision
32 # grab josm revision from last git-svn-id
33 run: |
34 josm_revision="$(git log -1 --grep 'git-svn-id: https://josm.openstreetmap.de/svn/trunk@' --pretty=format:%B | tail -1 | sed -n 's%git-svn-id: https://josm.openstreetmap.de/svn/trunk@\([0-9]*\) [-0-9a-f]*%\1%p')"
35 if [[ "$josm_revision" == "$(curl --silent https://josm.openstreetmap.de/tested)" ]]; then
36 echo "josm_prerelease=false" >> $GITHUB_ENV
37 echo "josm_prerelease=false" >> $GITHUB_OUTPUT
38 josm_release_tag=$josm_revision-tested
39 else
40 echo "josm_prerelease=true" >> $GITHUB_ENV
41 echo "josm_prerelease=true" >> $GITHUB_OUTPUT
42 josm_release_tag=$josm_revision
43 fi
44 echo "josm_revision=$josm_revision" >> $GITHUB_ENV
45 echo "josm_revision=$josm_revision" >> $GITHUB_OUTPUT
46 echo "josm_release_tag=$josm_release_tag" >> $GITHUB_ENV
47 echo "josm_release_tag=$josm_release_tag" >> $GITHUB_OUTPUT
48
49 - name: Create release
50 id: create_release
51 uses: actions/create-release@v1
52 env:
53 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
54 with:
55 tag_name: ${{ env.josm_release_tag }}
56 release_name: JOSM release ${{ env.josm_release_tag }}
57 body: |
58 JOSM release ${{ env.josm_release_tag }}
59 draft: false
60 prerelease: ${{ env.josm_prerelease }}
61 if: github.ref == 'refs/heads/master'
62
63 build:
64 needs: createrelease
65 runs-on: ${{ matrix.os }}
66 env:
67 LANG: en_US.UTF-8
68 strategy:
69 fail-fast: false
70 matrix:
71 # test against latest update of each major Java version, as well as specific updates of LTS versions:
72 java: [8, 11, 17, 21, 22]
73 os: [ubuntu-latest, macos-14, windows-latest]
74 name: Java ${{ matrix.java }} on ${{ matrix.os }}
75 steps:
76 - name: Checkout
77 uses: actions/checkout@v4
78 with:
79 fetch-depth: 256
80
81 - name: Cache
82 uses: actions/cache@v4
83 with:
84 path: |
85 ~/.ivy2/cache/
86 ~/work/josm/josm/tools/
87 key: ${{ runner.os }}-ivy2-${{ hashFiles('build.xml', 'ivy.xml', 'tools/ivy.xml') }}
88
89 - name: Setup Java ${{ matrix.java }}
90 uses: actions/setup-java@v4
91 with:
92 distribution: 'zulu'
93 java-version: ${{ matrix.java }}
94
95 - name: Setup x64 Java (Mac) ${{ matrix.java }}
96 if: ${{ runner.os == 'macos' && runner.arch == 'ARM64' && always() }}
97 uses: actions/setup-java@v4
98 with:
99 distribution: 'zulu'
100 java-version: ${{ matrix.java }}
101 architecture: x64
102
103 - name: Install Ant
104 uses: JOSM/JOSMPluginAction/actions/setup-ant@v2
105
106 - name: Optimise images
107 if: ${{ runner.os == 'macos' && always() }}
108 run: |
109 brew install --cask imageoptim
110 defaults write net.pornel.ImageOptim SvgoEnabled 1
111 defaults write net.pornel.ImageOptim PngCrush2Enabled 1
112 defaults write net.pornel.ImageOptim PngOutEnabled 1
113 /Applications/ImageOptim.app/Contents/MacOS/ImageOptim resources/images
114
115 - name: Build with Ant
116 env:
117 SIGN_ALIAS: ${{ secrets.SIGN_ALIAS }}
118 SIGN_CERT: ${{ secrets.SIGN_CERT }}
119 SIGN_KEYPASS: ${{ secrets.SIGN_KEYPASS }}
120 SIGN_STOREPASS: ${{ secrets.SIGN_STOREPASS }}
121 SIGN_TSA: ${{ secrets.SIGN_TSA }}
122 # Calls ant with -Dreleasebuild=true if we're a 'tested' build
123 run: |
124 if [ ! -z "${SIGN_CERT}" ]; then
125 export SIGN_KEYSTORE=certificate.p12
126 echo "$SIGN_CERT" | base64 --decode > $SIGN_KEYSTORE
127 fi
128 if [ "${{ needs.createrelease.outputs.josm_prerelease }}" == "true" ]; then
129 ANT="ant"
130 else
131 ANT="ant -Dreleasebuild=true"
132 fi
133 $ANT dist
134 if [ ! -z "${SIGN_KEYSTORE}" ]; then rm $SIGN_KEYSTORE; fi
135
136 - name: Upload jar
137 if: ${{ always() && needs.createrelease.outputs.upload_url }}
138 env:
139 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
140 uses: actions/upload-release-asset@v1
141 with:
142 upload_url: ${{ needs.createrelease.outputs.upload_url }} # This pulls from the CREATE RELEASE job above, referencing its ID to get its outputs object, which include a `upload_url`.
143 asset_path: dist/josm-custom.jar
144 asset_name: JOSM-${{ runner.os}}-java${{ matrix.java }}-${{ needs.createrelease.outputs.josm_revision }}.jar
145 asset_content_type: application/java-archive
146
147 - name: Build and package for macOS
148 if: ${{ runner.os == 'macos' && matrix.java != '8' && matrix.java != '11' && always() }}
149 env:
150 CERT_MACOS_P12: ${{ secrets.CERT_MACOS_P12 }}
151 CERT_MACOS_PW: ${{ secrets.CERT_MACOS_PW }}
152 APPLE_ID: ${{ secrets.APPLE_ID }}
153 APPLE_ID_PW: ${{ secrets.APPLE_ID_PW }}
154 APPLE_ID_TEAM: ${{ secrets.APPLE_ID_TEAM }}
155 run: |
156 function setup_openjfx() {
157 if [ ! -f tools/openjfx-${JAVAFX_VERSION}_${{ runner.os }}_${2}-jmods.zip ]; then
158 curl -o tools/openjfx-${JAVAFX_VERSION}_${{ runner.os }}_${2}-jmods.zip https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${1}_bin-jmods.zip
159 fi
160 unzip tools/openjfx-${JAVAFX_VERSION}_${{ runner.os }}_${2}-jmods.zip
161 mv javafx-jmods-${JAVAFX_VERSION}/*.jmod $JAVA_HOME/jmods/
162 }
163
164 if [ ${{ runner.arch }} == "ARM64" ]; then
165 JAVA_HOME="${JAVA_HOME_${{ matrix.java }}_ARM64}" PATH="${JAVA_HOME_${{ matrix.java }}_ARM64}/bin:${PATH}" setup_openjfx aarch64 ARM64
166 JAVA_HOME="${JAVA_HOME_${{ matrix.java }}_X64}" PATH="${JAVA_HOME_${{ matrix.java }}_X64}/bin:${PATH}" setup_openjfx x64 X64
167 JAVA_HOME="${JAVA_HOME_${{ matrix.java }}_ARM64}" ./native/macosx/macos-jpackage.sh ${{ needs.createrelease.outputs.josm_revision }} "${JAVA_HOME_${{ matrix.java }}_X64}"
168 else
169 setup_openjfx x64 X64
170 ./native/macosx/macos-jpackage.sh ${{ needs.createrelease.outputs.josm_revision }}
171 fi
172
173 - name: Setup Windows PATH
174 if: ${{ runner.os == 'windows' && matrix.java != '8' && matrix.java != '11' && always() }}
175 run: |
176 echo "C:\Program Files (x86)\WiX Toolset v3.11\bin" >> $GITHUB_PATH
177 echo "C:\Program Files (x86)\Windows Kits\10\bin\x64" >> $GITHUB_PATH
178 echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH
179
180 - name: Build and package for Windows
181 if: ${{ runner.os == 'windows' && matrix.java != '8' && matrix.java != '11' && always() }}
182 env:
183 SIGN_CERT: ${{ secrets.SIGN_CERT }}
184 SIGN_STOREPASS: ${{ secrets.SIGN_STOREPASS }}
185 SIGN_TSA: ${{ secrets.SIGN_TSA }}
186 run: |
187 if [ ! -f tools/openjfx-${JAVAFX_VERSION}_${{ runner.os }}-jmods.zip ]; then
188 curl -o tools/openjfx-${JAVAFX_VERSION}_${{ runner.os }}-jmods.zip https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_windows-x64_bin-jmods.zip
189 fi
190 unzip tools/openjfx-${JAVAFX_VERSION}_${{ runner.os }}-jmods.zip
191 mv javafx-jmods-${JAVAFX_VERSION}/*.jmod $JAVA_HOME/jmods/
192 ./native/windows/win-jpackage.sh ${{ needs.createrelease.outputs.josm_revision }}
193
194 - name: Upload macOS app
195 if: ${{ runner.os == 'macos' && matrix.java != '8' && matrix.java != '11' && always() && needs.createrelease.outputs.upload_url }}
196 uses: actions/upload-release-asset@v1
197 env:
198 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
199 with:
200 upload_url: ${{ needs.createrelease.outputs.upload_url }} # This pulls from the CREATE RELEASE job above, referencing its ID to get its outputs object, which include a `upload_url`.
201 asset_path: app/JOSM.zip
202 asset_name: JOSM-${{ runner.os}}-java${{ matrix.java }}-${{ needs.createrelease.outputs.josm_revision }}.zip
203 asset_content_type: application/zip
204
205 - name: Upload macOS app (x64)
206 if: ${{ runner.os == 'macos' && matrix.java != '8' && matrix.java != '11' && always() && runner.arch == 'ARM64' && needs.createrelease.outputs.upload_url }}
207 uses: actions/upload-release-asset@v1
208 env:
209 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
210 with:
211 upload_url: ${{ needs.createrelease.outputs.upload_url }} # This pulls from the CREATE RELEASE job above, referencing its ID to get its outputs object, which include a `upload_url`.
212 asset_path: app/JOSM_${{ matrix.java }}_x86_64.zip
213 asset_name: JOSM-${{ runner.os}}-java${{ matrix.java }}-${{ needs.createrelease.outputs.josm_revision }}-x64.zip
214 asset_content_type: application/zip
215
216 - name: Upload macOS app (aarch64)
217 if: ${{ runner.os == 'macos' && matrix.java != '8' && matrix.java != '11' && always() && runner.arch == 'ARM64' && needs.createrelease.outputs.upload_url }}
218 uses: actions/upload-release-asset@v1
219 env:
220 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
221 with:
222 upload_url: ${{ needs.createrelease.outputs.upload_url }} # This pulls from the CREATE RELEASE job above, referencing its ID to get its outputs object, which include a `upload_url`.
223 asset_path: app/JOSM_${{ matrix.java }}_arm64.zip
224 asset_name: JOSM-${{ runner.os}}-java${{ matrix.java }}-${{ needs.createrelease.outputs.josm_revision }}-aarch64.zip
225 asset_content_type: application/zip
226
227 - name: Upload Windows Installer executable
228 if: ${{ runner.os == 'windows' && matrix.java != '8' && matrix.java != '11' && always() && needs.createrelease.outputs.upload_url }}
229 uses: actions/upload-release-asset@v1
230 env:
231 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
232 with:
233 upload_url: ${{ needs.createrelease.outputs.upload_url }} # This pulls from the CREATE RELEASE job above, referencing its ID to get its outputs object, which include a `upload_url`.
234 asset_path: app/JOSM.exe
235 asset_name: JOSM-${{ runner.os}}-java${{ matrix.java }}-${{ needs.createrelease.outputs.josm_revision }}.exe
236 asset_content_type: application/vnd.microsoft.portable-executable
237
238 - name: Upload Windows Installer package
239 if: ${{ runner.os == 'windows' && matrix.java != '8' && matrix.java != '11' && always() && needs.createrelease.outputs.upload_url }}
240 uses: actions/upload-release-asset@v1
241 env:
242 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
243 with:
244 upload_url: ${{ needs.createrelease.outputs.upload_url }} # This pulls from the CREATE RELEASE job above, referencing its ID to get its outputs object, which include a `upload_url`.
245 asset_path: app/JOSM.msi
246 asset_name: JOSM-${{ runner.os}}-java${{ matrix.java }}-${{ needs.createrelease.outputs.josm_revision }}.msi
247 asset_content_type: application/x-ole-storage
Note: See TracBrowser for help on using the repository browser.