|
36 | 36 | BUN_VERSION: 1.3.14 |
37 | 37 | NODE_VERSION: 22 |
38 | 38 | RELEASE_ROOT: dist/releases/${{ inputs.version }} |
| 39 | + TRUSTED_ROOT: dist/trusted/${{ inputs.version }} |
39 | 40 | PORTREEVE_HOMEPAGE_URL: ${{ github.server_url }}/${{ github.repository }} |
40 | 41 | PORTREEVE_RELEASE_BASE_URL: |
41 | 42 | ${{ github.server_url }}/${{ github.repository }}/releases/download |
@@ -186,7 +187,6 @@ jobs: |
186 | 187 | permissions: |
187 | 188 | contents: read |
188 | 189 | env: |
189 | | - TRUSTED_OUTPUT_ROOT: dist/trusted/${{ inputs.version }} |
190 | 190 | PORTREEVE_APPLE_SIGNING_IDENTITY: ${{ vars.PORTREEVE_APPLE_SIGNING_IDENTITY }} |
191 | 191 | PORTREEVE_APPLE_TEAM_ID: ${{ vars.PORTREEVE_APPLE_TEAM_ID }} |
192 | 192 | PORTREEVE_APPLE_NOTARY_KEY_ID: ${{ vars.PORTREEVE_APPLE_NOTARY_KEY_ID }} |
@@ -215,15 +215,94 @@ jobs: |
215 | 215 | run: >- |
216 | 216 | bun run release:produce-apple-trust -- --record |
217 | 217 | "$RELEASE_ROOT/release-record.json" --qualification |
218 | | - "$RELEASE_ROOT/evidence/trust-qualification.json" --output |
219 | | - "$TRUSTED_OUTPUT_ROOT" |
| 218 | + "$RELEASE_ROOT/evidence/trust-qualification.json" --output "$TRUSTED_ROOT" |
220 | 219 | - uses: actions/upload-artifact@v7 |
221 | 220 | with: |
222 | 221 | name: trusted-${{ inputs.version }} |
223 | | - path: ${{ env.TRUSTED_OUTPUT_ROOT }} |
| 222 | + path: ${{ env.TRUSTED_ROOT }} |
224 | 223 | if-no-files-found: error |
225 | 224 | retention-days: 7 |
226 | 225 |
|
| 226 | + trusted-native-evidence: |
| 227 | + needs: release-trust |
| 228 | + strategy: |
| 229 | + fail-fast: false |
| 230 | + matrix: |
| 231 | + include: |
| 232 | + - runner: macos-15 |
| 233 | + architecture: arm64 |
| 234 | + - runner: macos-15-intel |
| 235 | + architecture: x64 |
| 236 | + runs-on: ${{ matrix.runner }} |
| 237 | + name: Apple trust evidence (macos-${{ matrix.architecture }}) |
| 238 | + permissions: |
| 239 | + contents: read |
| 240 | + steps: |
| 241 | + - uses: actions/checkout@v7 |
| 242 | + - uses: actions/setup-node@v7 |
| 243 | + with: |
| 244 | + node-version: ${{ env.NODE_VERSION }} |
| 245 | + - uses: oven-sh/setup-bun@v2 |
| 246 | + with: |
| 247 | + bun-version: ${{ env.BUN_VERSION }} |
| 248 | + - run: bun ci |
| 249 | + - uses: actions/download-artifact@v8 |
| 250 | + with: |
| 251 | + name: trusted-${{ inputs.version }} |
| 252 | + path: ${{ env.TRUSTED_ROOT }} |
| 253 | + - name: Restore authoritative executable modes |
| 254 | + run: chmod 755 "$TRUSTED_ROOT"/artifacts/portreeve-v* |
| 255 | + - name: Verify exact Apple artifacts on their native architecture |
| 256 | + run: >- |
| 257 | + bun run release:apple-native-evidence -- --record |
| 258 | + "$TRUSTED_ROOT/release-record.json" --producer-evidence |
| 259 | + "$TRUSTED_ROOT/evidence/apple-trust-producer.json" |
| 260 | + - uses: actions/upload-artifact@v7 |
| 261 | + with: |
| 262 | + name: apple-native-${{ matrix.architecture }} |
| 263 | + path: |
| 264 | + ${{ env.TRUSTED_ROOT }}/evidence/apple-native-${{ matrix.architecture |
| 265 | + }}.json |
| 266 | + if-no-files-found: error |
| 267 | + retention-days: 7 |
| 268 | + |
| 269 | + finalize-trusted-distribution: |
| 270 | + needs: trusted-native-evidence |
| 271 | + runs-on: ubuntu-24.04 |
| 272 | + permissions: |
| 273 | + contents: read |
| 274 | + steps: |
| 275 | + - uses: actions/checkout@v7 |
| 276 | + - uses: actions/setup-node@v7 |
| 277 | + with: |
| 278 | + node-version: ${{ env.NODE_VERSION }} |
| 279 | + - uses: oven-sh/setup-bun@v2 |
| 280 | + with: |
| 281 | + bun-version: ${{ env.BUN_VERSION }} |
| 282 | + - run: bun ci |
| 283 | + - uses: actions/download-artifact@v8 |
| 284 | + with: |
| 285 | + name: trusted-${{ inputs.version }} |
| 286 | + path: ${{ env.TRUSTED_ROOT }} |
| 287 | + - uses: actions/download-artifact@v8 |
| 288 | + with: |
| 289 | + pattern: apple-native-* |
| 290 | + path: ${{ env.TRUSTED_ROOT }}/evidence |
| 291 | + merge-multiple: true |
| 292 | + - name: Seal exact distribution metadata and publication plan |
| 293 | + run: >- |
| 294 | + bun run release:finalize-desktop -- --record |
| 295 | + "$TRUSTED_ROOT/release-record.json" --producer-evidence |
| 296 | + "$TRUSTED_ROOT/evidence/apple-trust-producer.json" --apple-evidence |
| 297 | + "$TRUSTED_ROOT"/evidence/apple-native-*.json --current-update-manifest |
| 298 | + distribution/desktop-update.json |
| 299 | + - uses: actions/upload-artifact@v7 |
| 300 | + with: |
| 301 | + name: distribution-${{ inputs.version }} |
| 302 | + path: ${{ env.TRUSTED_ROOT }} |
| 303 | + if-no-files-found: error |
| 304 | + retention-days: 14 |
| 305 | + |
227 | 306 | desktop-evidence: |
228 | 307 | needs: aggregate-native-evidence |
229 | 308 | strategy: |
@@ -265,6 +344,7 @@ jobs: |
265 | 344 | retention-days: 7 |
266 | 345 |
|
267 | 346 | finalize-distribution: |
| 347 | + if: ${{ !inputs.trust }} |
268 | 348 | needs: desktop-evidence |
269 | 349 | runs-on: ubuntu-24.04 |
270 | 350 | steps: |
@@ -299,8 +379,8 @@ jobs: |
299 | 379 | retention-days: 14 |
300 | 380 |
|
301 | 381 | publish: |
302 | | - if: inputs.publish |
303 | | - needs: finalize-distribution |
| 382 | + if: ${{ always() && inputs.publish && !failure() && !cancelled() }} |
| 383 | + needs: [finalize-distribution, finalize-trusted-distribution] |
304 | 384 | runs-on: ubuntu-24.04 |
305 | 385 | environment: release-publication |
306 | 386 | permissions: |
|
0 commit comments