Skip to content

Commit

Permalink
attempt sign of all windows files
Browse files Browse the repository at this point in the history
  • Loading branch information
davegarthsimpson committed Jun 29, 2024
1 parent b1607cd commit 428a8c1
Showing 1 changed file with 48 additions and 25 deletions.
73 changes: 48 additions & 25 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,12 @@ env:
name: Windows_X86-64_interactive_installer_signed
- path: '*Windows_64bit.msi'
name: Windows_X86-64_MSI
- path: '*Windows_64bit_signed.msi'
name: Windows_X86-64_MSI_signed
- path: '*Windows_64bit.zip'
name: Windows_X86-64_zip
- path: '*Windows_64bit_signed.zip'
name: Windows_X86-64_zip_signed
- config:
name: Linux
runs-on: ubuntu-latest
Expand Down Expand Up @@ -433,38 +437,57 @@ jobs:
name: ${{ env.JOB_TRANSFER_ARTIFACT }}
path: ${{ env.BUILD_ARTIFACTS_PATH }}

- name: Save artifact path to variable
- name: Find and process artifacts
shell: bash
run: |
ARTIFACT=$(find "${{ env.BUILD_ARTIFACTS_PATH }}" -name "*Windows_64bit.exe" | head -n 1)
# Convert to Windows-style path with forward slashes
FULL_PATH=$(cygpath -w $ARTIFACT | sed 's|\\|/|g')
echo "ARTIFACT_PATH=$FULL_PATH" >> $GITHUB_ENV
shopt -s nullglob
for ARTIFACT in "${{ env.BUILD_ARTIFACTS_PATH }}"/*.{exe,zip,msi}; do
echo "Processing $ARTIFACT"
FILENAME=$(basename "$ARTIFACT")
BASE_NAME="${FILENAME%.*}"
EXTENSION="${FILENAME##*.}"
# Sign and rename EXE and MSI files
if [[ "$EXTENSION" == "exe" || "$EXTENSION" == "msi" ]]; then
echo "Signing $ARTIFACT"
"${{ 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"
SIGNED_ARTIFACT_PATH="${{ env.BUILD_ARTIFACTS_PATH }}/${BASE_NAME}_signed.${EXTENSION}"
mv "$ARTIFACT" "$SIGNED_ARTIFACT_PATH"
echo "Renamed $ARTIFACT to $SIGNED_ARTIFACT_PATH"
fi
# Unzip, Sign, and Rezip ZIP file with new name
if [[ "$EXTENSION" == "zip" ]]; then
TEMP_DIR=$(mktemp -d)
unzip "$ARTIFACT" -d "$TEMP_DIR"
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 {} \;
SIGNED_ARTIFACT_PATH="${{ env.BUILD_ARTIFACTS_PATH }}/${BASE_NAME}_signed.zip"
pushd "$TEMP_DIR"
zip -r "$SIGNED_ARTIFACT_PATH" .
popd
rm -rf "$TEMP_DIR"
echo "Processed and re-zipped $ARTIFACT"
fi
done
- name: Save Win signing certificate to file
run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_CER }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_CER }}
- name: Upload signed EXE
uses: actions/upload-artifact@v3
with:
name: Windows_X86-64_interactive_installer_signed
path: ${{ env.BUILD_ARTIFACTS_PATH }}/*_signed.exe

- name: Sign EXE
env:
CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }}
CONTAINER_NAME: ${{ secrets.INSTALLER_CERT_WINDOWS_CONTAINER }}
# https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken
run: |
"${{ 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 }}
- name: Rename signed EXE
shell: bash
run: |
BASE_NAME=$(echo "${{ env.ARTIFACT_PATH }}" | sed 's/.exe$//')
SIGNED_EXE_PATH="${BASE_NAME}_signed.exe"
mv "${{ env.ARTIFACT_PATH }}" "$SIGNED_EXE_PATH"
echo "SIGNED_ARTIFACT_PATH=$SIGNED_EXE_PATH" >> $GITHUB_ENV
- name: Upload artifacts with signed EXE
- name: Upload signed MSI
uses: actions/upload-artifact@v3
with:
name: Windows_X86-64_MSI_signed
path: ${{ env.BUILD_ARTIFACTS_PATH }}/*_signed.msi


- name: Upload signed ZIP
uses: actions/upload-artifact@v3
with:
name: Windows_X86-64_interactive_installer_signed
path: ${{ env.SIGNED_ARTIFACT_PATH }}
path: ${{ env.BUILD_ARTIFACTS_PATH }}/*_signed.zip

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

0 comments on commit 428a8c1

Please sign in to comment.