From 4ebc41835cbd4baf3969e272907f337e90f63f2a Mon Sep 17 00:00:00 2001 From: Victoria Dye Date: Fri, 16 Jul 2021 10:48:08 -0400 Subject: [PATCH] release: add signing step for .deb package - sign using Azure-stored certificates & client - sign on Windows agent via python script - job skipped if credentials for accessing certificate aren't present Co-authored-by: Lessley Dennington --- .github/workflows/build-git-installers.yml | 60 +++++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-git-installers.yml b/.github/workflows/build-git-installers.yml index 66a39aeb22e37d..79f6a0475afd66 100644 --- a/.github/workflows/build-git-installers.yml +++ b/.github/workflows/build-git-installers.yml @@ -5,6 +5,9 @@ on: tags: - 'v[0-9]*vfs*' # matches "vvfs" +permissions: + id-token: write # required for Azure login via OIDC + jobs: # Check prerequisites for the workflow prereqs: @@ -474,7 +477,7 @@ jobs: git/.github/macos-installer/*.pkg # End build and sign Mac OSX installers - # Build unsigned Ubuntu package + # Build and sign Debian package create-linux-unsigned-artifacts: runs-on: ubuntu-latest container: @@ -562,10 +565,63 @@ jobs: # Move Debian package for later artifact upload mv "$PKGNAME.deb" "$GITHUB_WORKSPACE" + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: linux-unsigned-artifacts + path: | + *.deb + + create-linux-artifacts: + runs-on: ubuntu-latest + needs: [prereqs, create-linux-unsigned-artifacts] + environment: release + steps: + - name: Log into Azure + uses: azure/login@v2 + with: + client-id: ${{ secrets.AZURE_CLIENT_ID }} + tenant-id: ${{ secrets.AZURE_TENANT_ID }} + subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: Prepare for GPG signing + env: + AZURE_VAULT: ${{ secrets.AZURE_VAULT }} + GPG_KEY_SECRET_NAME: ${{ secrets.GPG_KEY_SECRET_NAME }} + GPG_PASSPHRASE_SECRET_NAME: ${{ secrets.GPG_PASSPHRASE_SECRET_NAME }} + GPG_KEYGRIP_SECRET_NAME: ${{ secrets.GPG_KEYGRIP_SECRET_NAME }} + run: | + # Install debsigs + sudo apt-get install -y debsigs + + # Download GPG key, passphrase, and keygrip from Azure Key Vault + key="$(az keyvault secret show --name "$GPG_KEY_SECRET_NAME" --vault-name "$AZURE_VAULT" --query "value" --output tsv)" + passphrase="$(az keyvault secret show --name "$GPG_PASSPHRASE_SECRET_NAME" --vault-name "$AZURE_VAULT" --query "value" --output tsv)" + keygrip="$(az keyvault secret show --name "$GPG_KEYGRIP_SECRET_NAME" --vault-name "$AZURE_VAULT" --query "value" --output tsv)" + + # Import GPG key + echo "$key" | base64 -d | gpg --import --no-tty --batch --yes + + # Configure GPG + echo "allow-preset-passphrase" > ~/.gnupg/gpg-agent.conf + gpg-connect-agent RELOADAGENT /bye + /usr/lib/gnupg2/gpg-preset-passphrase --preset "$keygrip" <<<"$passphrase" + + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: linux-unsigned-artifacts + + - name: Sign Debian package + run: | + # Sign Debian package + version="${{ needs.prereqs.outputs.tag_version }}" + debsigs --sign=origin --verify --check microsoft-git_"$version".deb + - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: linux-artifacts path: | *.deb - # End build unsigned Debian package + # End build and sign Debian package