|
12 | 12 |
|
13 | 13 | permissions: |
14 | 14 | contents: write # Required for electron-builder to upload release assets |
| 15 | + id-token: write # Required for GCP workload identity authentication (Windows code signing) |
15 | 16 |
|
16 | 17 | env: |
17 | 18 | RELEASE_TAG: ${{ inputs.tag || github.event.release.tag_name || github.ref_name }} |
@@ -168,7 +169,50 @@ jobs: |
168 | 169 | - name: Build application |
169 | 170 | run: bun run build |
170 | 171 |
|
| 172 | + # Setup Java for jsign (EV code signing with GCP KMS) |
| 173 | + - name: Setup Java |
| 174 | + uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 |
| 175 | + with: |
| 176 | + distribution: "zulu" |
| 177 | + java-version: "11.0" |
| 178 | + |
| 179 | + - name: Authenticate to Google Cloud |
| 180 | + id: gcloud_auth |
| 181 | + if: ${{ vars.GCP_WORKLOAD_ID_PROVIDER != '' }} |
| 182 | + uses: google-github-actions/auth@71f986410dfbc7added4569d411d040a91dc6935 # v2.1.8 |
| 183 | + with: |
| 184 | + workload_identity_provider: ${{ vars.GCP_WORKLOAD_ID_PROVIDER }} |
| 185 | + service_account: ${{ vars.GCP_SERVICE_ACCOUNT }} |
| 186 | + token_format: "access_token" |
| 187 | + |
| 188 | + - name: Setup code signing |
| 189 | + shell: pwsh |
| 190 | + run: | |
| 191 | + if (-not $env:EV_SIGNING_CERT) { |
| 192 | + Write-Host "⚠️ No Windows code signing certificate provided - building unsigned" |
| 193 | + exit 0 |
| 194 | + } |
| 195 | +
|
| 196 | + # Save EV certificate to temp file |
| 197 | + $certPath = Join-Path $env:TEMP "ev_cert.pem" |
| 198 | + Set-Content -Path $certPath -Value $env:EV_SIGNING_CERT |
| 199 | + Add-Content -Path $env:GITHUB_ENV -Value "EV_CERTIFICATE_PATH=$certPath" |
| 200 | +
|
| 201 | + # Download jsign |
| 202 | + $jsignPath = Join-Path $env:TEMP "jsign-6.0.jar" |
| 203 | + Invoke-WebRequest -Uri "https://github.com/ebourg/jsign/releases/download/6.0/jsign-6.0.jar" -OutFile $jsignPath |
| 204 | + Add-Content -Path $env:GITHUB_ENV -Value "JSIGN_PATH=$jsignPath" |
| 205 | +
|
| 206 | + Write-Host "✅ Windows EV code signing configured" |
| 207 | + env: |
| 208 | + EV_SIGNING_CERT: ${{ secrets.EV_SIGNING_CERT }} |
| 209 | + |
171 | 210 | - name: Package and publish for Windows (.exe) |
172 | 211 | run: bun x electron-builder --win --publish always |
173 | 212 | env: |
174 | 213 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 214 | + # EV signing environment variables (used by custom sign script if configured) |
| 215 | + EV_KEYSTORE: ${{ vars.EV_KEYSTORE }} |
| 216 | + EV_KEY: ${{ vars.EV_KEY }} |
| 217 | + EV_TSA_URL: ${{ vars.EV_TSA_URL }} |
| 218 | + GCLOUD_ACCESS_TOKEN: ${{ steps.gcloud_auth.outputs.access_token }} |
0 commit comments