Skip to content

Commit ad62563

Browse files
committed
Create verification script and github action
Create a script which verifies that a set of "locked down" files are not changed in commits that have not been signed. Create a github workflow that runs the script in the CI. The script accepts --whitelist <commit> and --import-gpg-keys arguments. The default settings are supposed to work on the build server without importing the gpg keys from the trusted_keys.pub file and running with a hardcoded whitelist commit. Make the CI workflow use these arguments as it is supposed to in .github. The public keys that can be imported are specified as files in the ci/keys/ directory. The files that are locked down are specified in the .github workflow as a single source of truth. This requires some complicated parsing in the verification script as well as a dependency from the verification script to the workflow YAML. These are not ideal design choices however the alternative is to not have a single source of truth for the locked down files as the github workflow can not depend on an external file. The mullvad signing key is named to be first in the list in order to be imported first. The whitelisted commit is the latest master before this commit
1 parent 6181305 commit ad62563

10 files changed

+753
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Verify lockfile signatures
2+
on:
3+
pull_request:
4+
paths:
5+
- .github/workflows/verify-locked-down-signatures.yml
6+
- Cargo.lock
7+
- gui/package-lock.json
8+
- ci/keys/
9+
- ci/verify-locked-down-signatures.sh
10+
workflow_dispatch:
11+
jobs:
12+
verify-signatures:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v3
16+
with:
17+
ref: ${{ github.event.pull_request.head.sha }}
18+
- name: Verify signatures
19+
run: |
20+
commits=${{ github.event.pull_request.commits }}
21+
if [[ -n "$commits" ]]; then
22+
# Prepare enough depth for diffs with master, currently hard-coded but should probably be
23+
# whatever branch is merged into
24+
git fetch --depth="$(( commits + 1 ))" origin ${{ github.head_ref }} master
25+
fi
26+
ci/verify-locked-down-signatures.sh --import-gpg-keys --whitelist origin/master

ci/keys/1.mullvad_signing.pub

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
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
83+
=kwTD
84+
-----END PGP PUBLIC KEY BLOCK-----

ci/keys/albin.pub

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
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
119+
=rA/d
120+
-----END PGP PUBLIC KEY BLOCK-----

0 commit comments

Comments
 (0)