Skip to content

Commit 428a8c1

Browse files
attempt sign of all windows files
1 parent b1607cd commit 428a8c1

File tree

1 file changed

+48
-25
lines changed

1 file changed

+48
-25
lines changed

.github/workflows/build.yml

+48-25
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,12 @@ env:
7979
name: Windows_X86-64_interactive_installer_signed
8080
- path: '*Windows_64bit.msi'
8181
name: Windows_X86-64_MSI
82+
- path: '*Windows_64bit_signed.msi'
83+
name: Windows_X86-64_MSI_signed
8284
- path: '*Windows_64bit.zip'
8385
name: Windows_X86-64_zip
86+
- path: '*Windows_64bit_signed.zip'
87+
name: Windows_X86-64_zip_signed
8488
- config:
8589
name: Linux
8690
runs-on: ubuntu-latest
@@ -433,38 +437,57 @@ jobs:
433437
name: ${{ env.JOB_TRANSFER_ARTIFACT }}
434438
path: ${{ env.BUILD_ARTIFACTS_PATH }}
435439

436-
- name: Save artifact path to variable
440+
- name: Find and process artifacts
437441
shell: bash
438442
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
443472
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
446478

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
464487
uses: actions/upload-artifact@v3
465488
with:
466489
name: Windows_X86-64_interactive_installer_signed
467-
path: ${{ env.SIGNED_ARTIFACT_PATH }}
490+
path: ${{ env.BUILD_ARTIFACTS_PATH }}/*_signed.zip
468491

469492
# This step is needed because the self hosted runner does not delete files automatically
470493
- name: Clean up artifacts

0 commit comments

Comments
 (0)