summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/reproducible_build.sh128
1 files changed, 66 insertions, 62 deletions
diff --git a/bin/reproducible_build.sh b/bin/reproducible_build.sh
index 075641d5..03f6b5bb 100755
--- a/bin/reproducible_build.sh
+++ b/bin/reproducible_build.sh
@@ -35,6 +35,71 @@ unschedule_from_db() {
echo
}
+call_debbindiff() {
+ LOGFILE=$(ls ${SRCPACKAGE}_${EVERSION}.dsc)
+ LOGFILE=$(echo ${LOGFILE%.dsc}.debbindiff.html)
+ BUILDINFO=${SRCPACKAGE}_${EVERSION}_amd64.buildinfo
+ # the schroot for debbindiff gets updated once a day. wait patiently if that's the case
+ if [ -f $DBDCHROOT_WRITELOCK ] || [ -f $DBDCHROOT_READLOCK ] ; then
+ for i in $(seq 0 100) ; do
+ sleep 15
+ echo "sleeping 15s, debbindiff schroot is locked."
+ if [ ! -f $DBDCHROOT_WRITELOCK ] && [ ! -f $DBDCHROOT_READLOCK ] ; then
+ break
+ fi
+ done
+ if [ -f $DBDCHROOT_WRITELOCK ] || [ -f $DBDCHROOT_READLOCK ] ; then
+ echo "Warning: lock $DBDCHROOT_WRITELOCK or [ -f $DBDCHROOT_READLOCK ] still exists, exiting."
+ exit 1
+ fi
+ else
+ # we create (more) read-lock(s) but stop on write locks...
+ # write locks are only done by the schroot setup job
+ touch $DBDCHROOT_READLOCK
+ fi
+ echo "$(date) - $(schroot --directory /tmp -c source:jenkins-reproducible-sid debbindiff -- --version) will be used to compare the two builds now." | tee -a ${RBUILDLOG}
+ ( timeout 15m schroot --directory /tmp -c source:jenkins-reproducible-sid debbindiff -- --html $TMPDIR/${LOGFILE} $TMPDIR/b1/${SRCPACKAGE}_${EVERSION}_amd64.changes $TMPDIR/b2/${SRCPACKAGE}_${EVERSION}_amd64.changes ) 2>&1 >> ${RBUILDLOG}
+ RESULT=$?
+ set +x
+ set -e
+ rm -f $DBDCHROOT_READLOCK
+ echo | tee -a ${RBUILDLOG}
+ if [ $RESULT -eq 124 ] ; then
+ echo "$(date) - debbindiff was killed after running into timeout... maybe there is still $REPRODUCIBLE_URL/dbd/${LOGFILE}" | tee -a ${RBUILDLOG}
+ if [ ! -s ./${LOGFILE} ] ; then
+ echo "$(date) - debbindiff produced no output and was killed after running into timeout..." >> ${LOGFILE}
+ fi
+ elif [ $RESULT -eq 1 ] ; then
+ DEBBINDIFFOUT="debbindiff found issues, please investigate $REPRODUCIBLE_URL/dbd/${LOGFILE}"
+ fi
+ if [ $RESULT -eq 0 ] && [ ! -f ./${LOGFILE} ] && [ -f b1/${BUILDINFO} ] ; then
+ cp b1/${BUILDINFO} /var/lib/jenkins/userContent/buildinfo/ > /dev/null 2>&1
+ figlet ${SRCPACKAGE}
+ echo
+ echo "debbindiff found no differences in the changes files, and a .buildinfo file also exist." | tee -a ${RBUILDLOG}
+ echo "${SRCPACKAGE} built successfully and reproducibly." | tee -a ${RBUILDLOG}
+ sqlite3 -init $INIT ${PACKAGES_DB} "REPLACE INTO source_packages VALUES (\"${SRCPACKAGE}\", \"${VERSION}\", \"reproducible\", \"$DATE\")"
+ unschedule_from_db
+ else
+ echo | tee -a ${RBUILDLOG}
+ echo -n "$(date) - ${SRCPACKAGE} failed to build reproducibly " | tee -a ${RBUILDLOG}
+ cp b1/${BUILDINFO} /var/lib/jenkins/userContent/buildinfo/ > /dev/null 2>&1 || true
+ if [ -f ./${LOGFILE} ] ; then
+ echo -n "$DEBBINDIFFOUT" | tee -a ${RBUILDLOG}
+ mv ./${LOGFILE} /var/lib/jenkins/userContent/dbd/
+ else
+ echo -n ", debbindiff produced no output (which is strange)"
+ fi
+ if [ ! -f b1/${BUILDINFO} ] ; then
+ echo " and a .buildinfo file is missing." | tee -a ${RBUILDLOG}
+ else
+ echo "." | tee -a ${RBUILDLOG}
+ fi
+ sqlite3 -init $INIT ${PACKAGES_DB} "REPLACE INTO source_packages VALUES (\"${SRCPACKAGE}\", \"${VERSION}\", \"unreproducible\", \"$DATE\")"
+ unschedule_from_db
+ fi
+}
+
TMPDIR=$(mktemp --tmpdir=/srv/reproducible-results -d)
TMPCFG=$(mktemp -t pbuilderrc_XXXX)
trap cleanup_all INT TERM EXIT
@@ -137,68 +202,7 @@ else
sudo dcmd rm /var/cache/pbuilder/result/${SRCPACKAGE}_${EVERSION}.dsc
sudo dcmd rm /var/cache/pbuilder/result/${SRCPACKAGE}_${EVERSION}_amd64.changes
cat b1/${SRCPACKAGE}_${EVERSION}_amd64.changes | tee -a ${RBUILDLOG}
- LOGFILE=$(ls ${SRCPACKAGE}_${EVERSION}.dsc)
- LOGFILE=$(echo ${LOGFILE%.dsc}.debbindiff.html)
- BUILDINFO=${SRCPACKAGE}_${EVERSION}_amd64.buildinfo
- # the schroot for debbindiff gets updated once a day. wait patiently if that's the case
- if [ -f $DBDCHROOT_WRITELOCK ] || [ -f $DBDCHROOT_READLOCK ] ; then
- for i in $(seq 0 100) ; do
- sleep 15
- echo "sleeping 15s, debbindiff schroot is locked."
- if [ ! -f $DBDCHROOT_WRITELOCK ] && [ ! -f $DBDCHROOT_READLOCK ] ; then
- break
- fi
- done
- if [ -f $DBDCHROOT_WRITELOCK ] || [ -f $DBDCHROOT_READLOCK ] ; then
- echo "Warning: lock $DBDCHROOT_WRITELOCK or [ -f $DBDCHROOT_READLOCK ] still exists, exiting."
- exit 1
- fi
- else
- # we create (more) read-lock(s) but stop on write locks...
- # write locks are only done by the schroot setup job
- touch $DBDCHROOT_READLOCK
- fi
- echo "$(date) - $(schroot --directory /tmp -c source:jenkins-reproducible-sid debbindiff -- --version) will be used to compare the two builds now." | tee -a ${RBUILDLOG}
- ( timeout 15m schroot --directory /tmp -c source:jenkins-reproducible-sid debbindiff -- --html $TMPDIR/${LOGFILE} $TMPDIR/b1/${SRCPACKAGE}_${EVERSION}_amd64.changes $TMPDIR/b2/${SRCPACKAGE}_${EVERSION}_amd64.changes ) 2>&1 >> ${RBUILDLOG}
- RESULT=$?
- set +x
- set -e
- rm -f $DBDCHROOT_READLOCK
- echo | tee -a ${RBUILDLOG}
- if [ $RESULT -eq 124 ] ; then
- echo "$(date) - debbindiff was killed after running into timeout... maybe there is still $REPRODUCIBLE_URL/dbd/${LOGFILE}" | tee -a ${RBUILDLOG}
- if [ ! -s ./${LOGFILE} ] ; then
- echo "$(date) - debbindiff produced no output and was killed after running into timeout..." >> ${LOGFILE}
- fi
- elif [ $RESULT -eq 1 ] ; then
- DEBBINDIFFOUT="debbindiff found issues, please investigate $REPRODUCIBLE_URL/dbd/${LOGFILE}"
- fi
- if [ $RESULT -eq 0 ] && [ ! -f ./${LOGFILE} ] && [ -f b1/${BUILDINFO} ] ; then
- cp b1/${BUILDINFO} /var/lib/jenkins/userContent/buildinfo/ > /dev/null 2>&1
- figlet ${SRCPACKAGE}
- echo
- echo "debbindiff found no differences in the changes files, and a .buildinfo file also exist." | tee -a ${RBUILDLOG}
- echo "${SRCPACKAGE} built successfully and reproducibly." | tee -a ${RBUILDLOG}
- sqlite3 -init $INIT ${PACKAGES_DB} "REPLACE INTO source_packages VALUES (\"${SRCPACKAGE}\", \"${VERSION}\", \"reproducible\", \"$DATE\")"
- unschedule_from_db
- else
- echo | tee -a ${RBUILDLOG}
- echo -n "$(date) - ${SRCPACKAGE} failed to build reproducibly " | tee -a ${RBUILDLOG}
- cp b1/${BUILDINFO} /var/lib/jenkins/userContent/buildinfo/ > /dev/null 2>&1 || true
- if [ -f ./${LOGFILE} ] ; then
- echo -n "$DEBBINDIFFOUT" | tee -a ${RBUILDLOG}
- mv ./${LOGFILE} /var/lib/jenkins/userContent/dbd/
- else
- echo -n ", debbindiff produced no output (which is strange)"
- fi
- if [ ! -f b1/${BUILDINFO} ] ; then
- echo " and a .buildinfo file is missing." | tee -a ${RBUILDLOG}
- else
- echo "." | tee -a ${RBUILDLOG}
- fi
- sqlite3 -init $INIT ${PACKAGES_DB} "REPLACE INTO source_packages VALUES (\"${SRCPACKAGE}\", \"${VERSION}\", \"unreproducible\", \"$DATE\")"
- unschedule_from_db
- fi
+ call_debbindiff
else
set +x
echo "${SRCPACKAGE} failed to build from source."