Skip to content

Commit ece5db7

Browse files
authored
Merge pull request #156 from freedomofpress/ci-reproducibility-check
ci: check that deb build process is reproducible after wheels and tarball are generated
2 parents 351c5f6 + 1cf40c1 commit ece5db7

1 file changed

Lines changed: 65 additions & 0 deletions

File tree

.circleci/config.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,29 @@ common-steps:
140140
make $PKG_NAME
141141
ls ~/debbuild/packaging/*.deb
142142
143+
- &builddebianpackagefromexistingtarball
144+
run:
145+
name: Build debian package from committed tarball
146+
command: |
147+
export PKG_PATH=~/project/tarballs/$PKG_NAME-$PKG_VERSION.tar.gz
148+
149+
# Every tarball should be signed
150+
gpg --import ~/project/pubkeys/release_key.pub
151+
gpg --verify $PKG_PATH.asc
152+
153+
# Build debian package
154+
make $PKG_NAME
155+
export PKG_HASH_1=$(shasum -a 256 ~/debbuild/packaging/$PKG_NAME*.deb | awk '{print $1}')
156+
echo $PKG_HASH_1
157+
158+
# Build debian package again
159+
make $PKG_NAME
160+
export PKG_HASH_2=$(shasum -a 256 ~/debbuild/packaging/$PKG_NAME*.deb | awk '{print $1}')
161+
echo $PKG_HASH_2
162+
163+
# Fail build if hashes aren’t equal
164+
python -c "import os, sys; sys.exit(os.environ['PKG_HASH_1'] != os.environ['PKG_HASH_2'])"
165+
143166
- &addsshkeys
144167
add_ssh_keys:
145168
fingerprints:
@@ -457,6 +480,47 @@ jobs:
457480
- *setmetapackageversion
458481
- *builddebianpackage
459482

483+
reproducibility-checks:
484+
docker:
485+
- image: circleci/python:3.7-buster
486+
steps:
487+
- checkout
488+
- *removevirtualenv
489+
- *installdeps
490+
- run: git lfs pull
491+
- run:
492+
name: Test build process reproducibility on latest securedrop-client tarball
493+
command: |
494+
export TARBALL=$(ls ~/project/tarballs/securedrop-client-*.tar.gz)
495+
echo ${TARBALL%.tar.gz} | awk -F "-" '{ print $3 }' > ~/sd_version
496+
echo 'export PKG_NAME=securedrop-client' >> $BASH_ENV
497+
echo 'export PKG_VERSION=$(cat ~/sd_version)' >> $BASH_ENV
498+
- *builddebianpackagefromexistingtarball
499+
- run:
500+
name: Test build process reproducibility on latest securedrop-proxy tarball
501+
command: |
502+
export TARBALL=$(ls ~/project/tarballs/securedrop-proxy-*.tar.gz)
503+
echo ${TARBALL%.tar.gz} | awk -F "-" '{ print $3 }' > ~/sd_version
504+
echo 'export PKG_NAME=securedrop-proxy' >> $BASH_ENV
505+
echo 'export PKG_VERSION=$(cat ~/sd_version)' >> $BASH_ENV
506+
- *builddebianpackagefromexistingtarball
507+
- run:
508+
name: Test build process reproducibility on latest securedrop-log tarball
509+
command: |
510+
export TARBALL=$(ls ~/project/tarballs/securedrop-log-*.tar.gz)
511+
echo ${TARBALL%.tar.gz} | awk -F "-" '{ print $3 }' > ~/sd_version
512+
echo 'export PKG_NAME=securedrop-log' >> $BASH_ENV
513+
echo 'export PKG_VERSION=$(cat ~/sd_version)' >> $BASH_ENV
514+
- *builddebianpackagefromexistingtarball
515+
- run:
516+
name: Test build process reproducibility on latest securedrop-export tarball
517+
command: |
518+
export TARBALL=$(ls ~/project/tarballs/securedrop-export-*.tar.gz)
519+
echo ${TARBALL%.tar.gz} | awk -F "-" '{ print $3 }' > ~/sd_version
520+
echo 'export PKG_NAME=securedrop-export' >> $BASH_ENV
521+
echo 'export PKG_VERSION=$(cat ~/sd_version)' >> $BASH_ENV
522+
- *builddebianpackagefromexistingtarball
523+
460524
workflows:
461525
build-packages:
462526
jobs:
@@ -470,6 +534,7 @@ workflows:
470534
- build-buster-securedrop-workstation-config
471535
- build-buster-securedrop-keyring
472536
- make-dom0-rpm
537+
- reproducibility-checks
473538

474539
# Nightly jobs for each package are run in series to ensure there are no
475540
# conflicts or race conditions when committing deb packages to git-lfs.

0 commit comments

Comments
 (0)