@@ -19,13 +19,28 @@ jobs:
19
19
create-release-artifacts :
20
20
runs-on : ubuntu-latest
21
21
22
+ strategy :
23
+ matrix :
24
+ os :
25
+ - Windows_32bit
26
+ - Windows_64bit
27
+ - Linux_32bit
28
+ - Linux_64bit
29
+ - Linux_ARMv6
30
+ - Linux_ARMv7
31
+ - Linux_ARM64
32
+ - macOS_64bit
33
+ - macOS_ARM64
34
+
22
35
steps :
23
36
- name : Checkout repository
24
37
uses : actions/checkout@v3
25
38
with :
26
39
fetch-depth : 0
27
40
28
41
- name : Create changelog
42
+ # Avoid creating the same changelog for each os
43
+ if : matrix.os == 'Windows_32bit'
29
44
uses : arduino/create-changelog@v1
30
45
with :
31
46
tag-regex : ' ^v[0-9]+\.[0-9]+\.[0-9]+.*$'
@@ -40,16 +55,153 @@ jobs:
40
55
version : 3.x
41
56
42
57
- name : Build
43
- run : task dist:all
58
+ run : task dist:${{ matrix.os }}
59
+
60
+ - name : Upload artifacts
61
+ uses : actions/upload-artifact@v3
62
+ with :
63
+ if-no-files-found : error
64
+ name : ${{ env.ARTIFACT_NAME }}
65
+ path : ${{ env.DIST_DIR }}
66
+
67
+ notarize-macos :
68
+ name : Notarize ${{ matrix.artifact.name }}
69
+ runs-on : macos-latest
70
+ needs : create-release-artifacts
71
+ outputs :
72
+ checksum-darwin_amd64 : ${{ steps.re-package.outputs.checksum-darwin_amd64 }}
73
+ checksum-darwin_arm64 : ${{ steps.re-package.outputs.checksum-darwin_arm64 }}
74
+
75
+ env :
76
+ GON_CONFIG_PATH : gon.config.hcl
77
+
78
+ strategy :
79
+ matrix :
80
+ artifact :
81
+ - name : darwin_amd64
82
+ path : " macOS_64bit.tar.gz"
83
+ - name : darwin_arm64
84
+ path : " macOS_ARM64.tar.gz"
85
+
86
+ steps :
87
+ - name : Checkout repository
88
+ uses : actions/checkout@v3
89
+
90
+ - name : Download artifacts
91
+ uses : actions/download-artifact@v3
92
+ with :
93
+ name : ${{ env.ARTIFACT_NAME }}
94
+ path : ${{ env.DIST_DIR }}
95
+
96
+ - name : Import Code-Signing Certificates
97
+ env :
98
+ KEYCHAIN : " sign.keychain"
99
+ INSTALLER_CERT_MAC_PATH : " /tmp/ArduinoCerts2020.p12"
100
+ # Arbitrary password for a keychain that exists only for the duration of the job, so not secret
101
+ KEYCHAIN_PASSWORD : keychainpassword
102
+ run : |
103
+ echo "${{ secrets.INSTALLER_CERT_MAC_P12 }}" | base64 --decode > "${{ env.INSTALLER_CERT_MAC_PATH }}"
104
+ security create-keychain -p "${{ env.KEYCHAIN_PASSWORD }}" "${{ env.KEYCHAIN }}"
105
+ security default-keychain -s "${{ env.KEYCHAIN }}"
106
+ security unlock-keychain -p "${{ env.KEYCHAIN_PASSWORD }}" "${{ env.KEYCHAIN }}"
107
+ security import \
108
+ "${{ env.INSTALLER_CERT_MAC_PATH }}" \
109
+ -k "${{ env.KEYCHAIN }}" \
110
+ -f pkcs12 \
111
+ -A \
112
+ -T "/usr/bin/codesign" \
113
+ -P "${{ secrets.INSTALLER_CERT_MAC_PASSWORD }}"
114
+ security set-key-partition-list \
115
+ -S apple-tool:,apple: \
116
+ -s \
117
+ -k "${{ env.KEYCHAIN_PASSWORD }}" \
118
+ "${{ env.KEYCHAIN }}"
119
+
120
+ - name : Install gon for code signing and app notarization
121
+ run : |
122
+ wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip
123
+ unzip gon_macos.zip -d /usr/local/bin
124
+
125
+ - name : Write gon config to file
126
+ # gon does not allow env variables in config file (https://github.com/mitchellh/gon/issues/20)
127
+ run : |
128
+ cat > "${{ env.GON_CONFIG_PATH }}" <<EOF
129
+ # See: https://github.com/mitchellh/gon#configuration-file
130
+ source = ["${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}"]
131
+ bundle_id = "cc.arduino.${{ env.PROJECT_NAME }}"
132
+
133
+ sign {
134
+ application_identity = "Developer ID Application: ARDUINO SA (7KT7ZWMCJT)"
135
+ }
136
+
137
+ # Ask Gon for zip output to force notarization process to take place.
138
+ # The CI will ignore the zip output, using the signed binary only.
139
+ zip {
140
+ output_path = "unused.zip"
141
+ }
142
+ EOF
143
+
144
+ - name : Sign and notarize binary
145
+ env :
146
+ AC_USERNAME : ${{ secrets.AC_USERNAME }}
147
+ AC_PASSWORD : ${{ secrets.AC_PASSWORD }}
148
+ run : |
149
+ gon "${{ env.GON_CONFIG_PATH }}"
150
+
151
+ - name : Re-package binary
152
+ id : re-package
153
+ working-directory : ${{ env.DIST_DIR }}
154
+ # Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
155
+ run : |
156
+ # GitHub's upload/download-artifact actions don't preserve file permissions,
157
+ # so we need to add execution permission back until the action is made to do this.
158
+ chmod +x "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}"
159
+ TAG="${GITHUB_REF/refs\/tags\//}"
160
+ PACKAGE_FILENAME="${{ env.PROJECT_NAME }}_${TAG}_${{ matrix.artifact.path }}"
161
+ tar -czvf "$PACKAGE_FILENAME" \
162
+ -C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \
163
+ -C ../../ LICENSE.txt
164
+ echo "PACKAGE_FILENAME=$PACKAGE_FILENAME" >> $GITHUB_ENV
165
+
166
+ - name : Upload artifact
167
+ uses : actions/upload-artifact@v3
168
+ with :
169
+ if-no-files-found : error
170
+ name : ${{ env.ARTIFACT_NAME }}
171
+ path : ${{ env.DIST_DIR }}/${{ env.PACKAGE_FILENAME }}
172
+
173
+ create-release :
174
+ runs-on : ubuntu-latest
175
+ needs : notarize-macos
176
+
177
+ steps :
178
+ - name : Download artifact
179
+ uses : actions/download-artifact@v3
180
+ with :
181
+ name : ${{ env.ARTIFACT_NAME }}
182
+ path : ${{ env.DIST_DIR }}
183
+
184
+ - name : Create checksum file
185
+ working-directory : ${{ env.DIST_DIR}}
186
+ run : |
187
+ TAG="${GITHUB_REF/refs\/tags\//}"
188
+ sha256sum ${{ env.PROJECT_NAME }}_${TAG}* > ${TAG}-checksums.txt
44
189
45
190
- name : Identify Prerelease
46
191
# This is a workaround while waiting for create-release action
47
192
# to implement auto pre-release based on tag
48
193
id : prerelease
49
194
run : |
50
- wget -q -P /tmp https://github.com/fsaintjacques/semver-tool/archive/3.0.0.zip
51
- unzip -p /tmp/3.0.0.zip semver-tool-3.0.0/src/semver >/tmp/semver && chmod +x /tmp/semver
52
- if [[ "$(/tmp/semver get prerel "${GITHUB_REF/refs\/tags\//}")" ]]; then echo "::set-output name=IS_PRE::true"; fi
195
+ wget -q -P /tmp https://github.com/fsaintjacques/semver-tool/archive/3.2.0.zip
196
+ unzip -p /tmp/3.2.0.zip semver-tool-3.2.0/src/semver >/tmp/semver && chmod +x /tmp/semver
197
+ if [[
198
+ "$(
199
+ /tmp/semver get prerel \
200
+ "${GITHUB_REF/refs\/tags\//}"
201
+ )"
202
+ ]]; then
203
+ echo "IS_PRE=true" >> $GITHUB_OUTPUT
204
+ fi
53
205
54
206
- name : Create Github Release and upload artifacts
55
207
uses : ncipollo/release-action@v1
0 commit comments