|
79 | 79 | name: Windows_X86-64_interactive_installer_signed
|
80 | 80 | - path: '*Windows_64bit.msi'
|
81 | 81 | name: Windows_X86-64_MSI
|
| 82 | + - path: '*Windows_64bit_signed.msi' |
| 83 | + name: Windows_X86-64_MSI_signed |
82 | 84 | - path: '*Windows_64bit.zip'
|
83 | 85 | name: Windows_X86-64_zip
|
| 86 | + - path: '*Windows_64bit_signed.zip' |
| 87 | + name: Windows_X86-64_zip_signed |
84 | 88 | - config:
|
85 | 89 | name: Linux
|
86 | 90 | runs-on: ubuntu-latest
|
@@ -433,38 +437,57 @@ jobs:
|
433 | 437 | name: ${{ env.JOB_TRANSFER_ARTIFACT }}
|
434 | 438 | path: ${{ env.BUILD_ARTIFACTS_PATH }}
|
435 | 439 |
|
436 |
| - - name: Save artifact path to variable |
| 440 | + - name: Find and process artifacts |
437 | 441 | shell: bash
|
438 | 442 | run: |
|
439 |
| - ARTIFACT=$(find "${{ env.BUILD_ARTIFACTS_PATH }}" -name "*Windows_64bit.exe" | head -n 1) |
440 |
| - # Convert to Windows-style path with forward slashes |
441 |
| - FULL_PATH=$(cygpath -w $ARTIFACT | sed 's|\\|/|g') |
442 |
| - echo "ARTIFACT_PATH=$FULL_PATH" >> $GITHUB_ENV |
| 443 | + shopt -s nullglob |
| 444 | + for ARTIFACT in "${{ env.BUILD_ARTIFACTS_PATH }}"/*.{exe,zip,msi}; do |
| 445 | + echo "Processing $ARTIFACT" |
| 446 | + FILENAME=$(basename "$ARTIFACT") |
| 447 | + BASE_NAME="${FILENAME%.*}" |
| 448 | + EXTENSION="${FILENAME##*.}" |
| 449 | + |
| 450 | + # Sign and rename EXE and MSI files |
| 451 | + if [[ "$EXTENSION" == "exe" || "$EXTENSION" == "msi" ]]; then |
| 452 | + echo "Signing $ARTIFACT" |
| 453 | + "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino IDE" -f ${{ env.INSTALLER_CERT_WINDOWS_CER }} -csp "eToken Base Cryptographic Provider" -k "[{{${{ env.CERT_PASSWORD }}}}]=${{ env.CONTAINER_NAME }}" -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "$ARTIFACT" |
| 454 | + SIGNED_ARTIFACT_PATH="${{ env.BUILD_ARTIFACTS_PATH }}/${BASE_NAME}_signed.${EXTENSION}" |
| 455 | + mv "$ARTIFACT" "$SIGNED_ARTIFACT_PATH" |
| 456 | + echo "Renamed $ARTIFACT to $SIGNED_ARTIFACT_PATH" |
| 457 | + fi |
| 458 | + |
| 459 | + # Unzip, Sign, and Rezip ZIP file with new name |
| 460 | + if [[ "$EXTENSION" == "zip" ]]; then |
| 461 | + TEMP_DIR=$(mktemp -d) |
| 462 | + unzip "$ARTIFACT" -d "$TEMP_DIR" |
| 463 | + find "$TEMP_DIR" -type f -name '*.exe' -exec "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino IDE" -f ${{ env.INSTALLER_CERT_WINDOWS_CER }} -csp "eToken Base Cryptographic Provider" -k "[{{${{ env.CERT_PASSWORD }}}}]=${{ env.CONTAINER_NAME }}" -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v {} \; |
| 464 | + SIGNED_ARTIFACT_PATH="${{ env.BUILD_ARTIFACTS_PATH }}/${BASE_NAME}_signed.zip" |
| 465 | + pushd "$TEMP_DIR" |
| 466 | + zip -r "$SIGNED_ARTIFACT_PATH" . |
| 467 | + popd |
| 468 | + rm -rf "$TEMP_DIR" |
| 469 | + echo "Processed and re-zipped $ARTIFACT" |
| 470 | + fi |
| 471 | + done |
443 | 472 |
|
444 |
| - - name: Save Win signing certificate to file |
445 |
| - run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_CER }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_CER }} |
| 473 | + - name: Upload signed EXE |
| 474 | + uses: actions/upload-artifact@v3 |
| 475 | + with: |
| 476 | + name: Windows_X86-64_interactive_installer_signed |
| 477 | + path: ${{ env.BUILD_ARTIFACTS_PATH }}/*_signed.exe |
446 | 478 |
|
447 |
| - - name: Sign EXE |
448 |
| - env: |
449 |
| - CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }} |
450 |
| - CONTAINER_NAME: ${{ secrets.INSTALLER_CERT_WINDOWS_CONTAINER }} |
451 |
| - # https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken |
452 |
| - run: | |
453 |
| - "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino IDE" -f ${{ env.INSTALLER_CERT_WINDOWS_CER }} -csp "eToken Base Cryptographic Provider" -k "[{{${{ env.CERT_PASSWORD }}}}]=${{ env.CONTAINER_NAME }}" -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v ${{ env.ARTIFACT_PATH }} |
454 |
| - |
455 |
| - - name: Rename signed EXE |
456 |
| - shell: bash |
457 |
| - run: | |
458 |
| - BASE_NAME=$(echo "${{ env.ARTIFACT_PATH }}" | sed 's/.exe$//') |
459 |
| - SIGNED_EXE_PATH="${BASE_NAME}_signed.exe" |
460 |
| - mv "${{ env.ARTIFACT_PATH }}" "$SIGNED_EXE_PATH" |
461 |
| - echo "SIGNED_ARTIFACT_PATH=$SIGNED_EXE_PATH" >> $GITHUB_ENV |
462 |
| - |
463 |
| - - name: Upload artifacts with signed EXE |
| 479 | + - name: Upload signed MSI |
| 480 | + uses: actions/upload-artifact@v3 |
| 481 | + with: |
| 482 | + name: Windows_X86-64_MSI_signed |
| 483 | + path: ${{ env.BUILD_ARTIFACTS_PATH }}/*_signed.msi |
| 484 | + |
| 485 | + |
| 486 | + - name: Upload signed ZIP |
464 | 487 | uses: actions/upload-artifact@v3
|
465 | 488 | with:
|
466 | 489 | name: Windows_X86-64_interactive_installer_signed
|
467 |
| - path: ${{ env.SIGNED_ARTIFACT_PATH }} |
| 490 | + path: ${{ env.BUILD_ARTIFACTS_PATH }}/*_signed.zip |
468 | 491 |
|
469 | 492 | # This step is needed because the self hosted runner does not delete files automatically
|
470 | 493 | - name: Clean up artifacts
|
|
0 commit comments