4747 - name : Create Release
4848 uses : ncipollo/release-action@v1
4949 with :
50- draft : false
50+ draft : true
5151 name : Desktop ${{ steps.get_version.outputs.version }}
5252 tag : ${{ steps.get_version.outputs.tag_name }}
5353 body : " ${{ steps.tag.outputs.message }}"
@@ -181,6 +181,44 @@ jobs:
181181 rm -rf jre11
182182 jlink --module-path "$JAVA_HOME/jmods" --add-modules java.compiler,java.sql,java.naming,java.management,java.instrument,java.rmi,java.desktop,jdk.internal.vm.compiler.management,java.xml.crypto,java.scripting,java.security.jgss,jdk.httpserver,java.net.http,jdk.naming.dns,jdk.crypto.cryptoki,jdk.unsupported --strip-debug --compress 2 --no-header-files --no-man-pages --output jre11
183183
184+ - name : Prepare macOS signing credentials
185+ if : matrix.platform == 'macos-14'
186+ run : |
187+ for name in APPLE_CERTIFICATE APPLE_CERTIFICATE_PASSWORD APPLE_SIGNING_IDENTITY APPLE_API_ISSUER APPLE_API_KEY APPLE_API_PRIVATE_KEY; do
188+ if [ -z "${!name}" ]; then
189+ echo "$name secret is required for macOS desktop releases"
190+ exit 1
191+ fi
192+ done
193+ key_path="$RUNNER_TEMP/AuthKey_${APPLE_API_KEY}.p8"
194+ printf '%s' "$APPLE_API_PRIVATE_KEY" > "$key_path"
195+ echo "APPLE_API_KEY_PATH=$key_path" >> "$GITHUB_ENV"
196+ env :
197+ APPLE_CERTIFICATE : ${{ secrets.APPLE_CERTIFICATE }}
198+ APPLE_CERTIFICATE_PASSWORD : ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
199+ APPLE_SIGNING_IDENTITY : ${{ secrets.APPLE_SIGNING_IDENTITY }}
200+ APPLE_API_ISSUER : ${{ secrets.APPLE_API_ISSUER }}
201+ APPLE_API_KEY : ${{ secrets.APPLE_API_KEY }}
202+ APPLE_API_PRIVATE_KEY : ${{ secrets.APPLE_API_PRIVATE_KEY }}
203+
204+ - name : Import Windows signing certificate
205+ if : matrix.platform == 'windows-2022'
206+ shell : pwsh
207+ run : |
208+ if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CERTIFICATE)) { throw "WINDOWS_CERTIFICATE secret is required for Windows desktop releases" }
209+ if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CERTIFICATE_PASSWORD)) { throw "WINDOWS_CERTIFICATE_PASSWORD secret is required for Windows desktop releases" }
210+ if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CERTIFICATE_THUMBPRINT)) { throw "WINDOWS_CERTIFICATE_THUMBPRINT secret is required for Windows desktop releases" }
211+ New-Item -ItemType Directory -Force -Path certificate | Out-Null
212+ Set-Content -Path certificate/tempCert.txt -Value $env:WINDOWS_CERTIFICATE
213+ certutil -decode certificate/tempCert.txt certificate/certificate.pfx
214+ Remove-Item certificate/tempCert.txt
215+ $securePassword = ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText
216+ Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password $securePassword | Out-Null
217+ env :
218+ WINDOWS_CERTIFICATE : ${{ secrets.WINDOWS_CERTIFICATE }}
219+ WINDOWS_CERTIFICATE_PASSWORD : ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
220+ WINDOWS_CERTIFICATE_THUMBPRINT : ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }}
221+
184222 - name : Prepare Tauri release config
185223 run : |
186224 python3 - <<'PY' >> "$GITHUB_ENV"
@@ -195,19 +233,45 @@ jobs:
195233 "version": os.environ["TAURI_VERSION"],
196234 "plugins": {
197235 "updater": {
236+ "active": True,
237+ "dialog": False,
198238 "pubkey": pubkey,
199239 "endpoints": [os.environ["TAURI_UPDATER_ENDPOINT"]],
200240 }
201241 },
202242 }
203243
244+ bundle = {}
245+ platform = os.environ["TAURI_BUILD_PLATFORM"]
246+ if platform == "macos-14":
247+ signing_identity = os.environ.get("APPLE_SIGNING_IDENTITY", "")
248+ if not signing_identity:
249+ raise SystemExit("APPLE_SIGNING_IDENTITY secret is required for macOS desktop releases")
250+ bundle["macOS"] = {"signingIdentity": signing_identity}
251+ elif platform == "windows-2022":
252+ certificate_thumbprint = os.environ.get("WINDOWS_CERTIFICATE_THUMBPRINT", "")
253+ if not certificate_thumbprint:
254+ raise SystemExit("WINDOWS_CERTIFICATE_THUMBPRINT secret is required for Windows desktop releases")
255+ bundle["windows"] = {
256+ "certificateThumbprint": certificate_thumbprint,
257+ "digestAlgorithm": "sha256",
258+ "timestampUrl": os.environ.get("WINDOWS_TIMESTAMP_URL") or "http://timestamp.digicert.com",
259+ }
260+
261+ if bundle:
262+ config["bundle"] = bundle
263+
204264 print("TAURI_CONFIG<<EOF")
205265 print(json.dumps(config))
206266 print("EOF")
207267 PY
208268 env :
209269 TAURI_VERSION : ${{ needs.create-release.outputs.version }}
270+ TAURI_BUILD_PLATFORM : ${{ matrix.platform }}
210271 TAURI_UPDATER_PUBKEY : ${{ secrets[format('TAURI_{0}', 'UPDATER_PUBKEY')] }}
272+ APPLE_SIGNING_IDENTITY : ${{ secrets.APPLE_SIGNING_IDENTITY }}
273+ WINDOWS_CERTIFICATE_THUMBPRINT : ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }}
274+ WINDOWS_TIMESTAMP_URL : ${{ secrets.WINDOWS_TIMESTAMP_URL }}
211275
212276 - name : Build the app
213277 run : |
@@ -216,6 +280,11 @@ jobs:
216280 env :
217281 TAURI_SIGNING_PRIVATE_KEY : ${{ secrets[format('TAURI_{0}', 'SIGNING_PRIVATE_KEY')] }}
218282 TAURI_SIGNING_PRIVATE_KEY_PASSWORD : ${{ secrets[format('TAURI_{0}', 'SIGNING_PRIVATE_KEY_PASSWORD')] }}
283+ APPLE_CERTIFICATE : ${{ secrets.APPLE_CERTIFICATE }}
284+ APPLE_CERTIFICATE_PASSWORD : ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
285+ APPLE_SIGNING_IDENTITY : ${{ secrets.APPLE_SIGNING_IDENTITY }}
286+ APPLE_API_ISSUER : ${{ secrets.APPLE_API_ISSUER }}
287+ APPLE_API_KEY : ${{ secrets.APPLE_API_KEY }}
219288
220289 - name : Collect release artifacts
221290 run : |
@@ -315,4 +384,11 @@ jobs:
315384 fi
316385 env :
317386 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
318- GH_REPO : ${{ github.repository }}
387+ GH_REPO : ${{ github.repository }}
388+
389+ - name : Publish desktop release
390+ run : gh release edit "$TAG_NAME" --draft=false
391+ env :
392+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
393+ GH_REPO : ${{ github.repository }}
394+ TAG_NAME : ${{ needs.create-release.outputs.tag_name }}
0 commit comments