From 479994716818ed357ae1a5788aa2a2b6b712052f Mon Sep 17 00:00:00 2001 From: Holger Levsen Date: Sat, 12 Dec 2015 15:14:41 +0100 Subject: reproducible fedora rpms: add job to build overview webpage for Fedora 23 --- bin/reproducible_html_rpms.sh | 146 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100755 bin/reproducible_html_rpms.sh (limited to 'bin/reproducible_html_rpms.sh') diff --git a/bin/reproducible_html_rpms.sh b/bin/reproducible_html_rpms.sh new file mode 100755 index 00000000..3d9d7706 --- /dev/null +++ b/bin/reproducible_html_rpms.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +# Copyright 2014-2015 Holger Levsen +# released under the GPLv=2 + +DEBUG=false +. /srv/jenkins/bin/common-functions.sh +common_init "$@" + +# common code +. /srv/jenkins/bin/reproducible_common.sh + +RPMBASE=$BASE/rpms +RELEASE="$1" +ARCH="$2" +# +# analyse results to create the webpage +# +echo "$(date -u) - starting to analyse build results." +HTML_FTBFS=$(mktemp) +HTML_FTBR=$(mktemp) +HTML_DEPWAIT=$(mktemp) +HTML_404=$(mktemp) +HTML_GOOD=$(mktemp) +HTML_UNKNOWN=$(mktemp) +HTML_BUFFER=$(mktemp) +HTML_TARGET="" +HTML_RPM_STATS=$(mktemp) + +echo "$(date -u) - starting to analyse build results for '$RELEASE' ($ARCH)." +TOTAL=187 # FIXME: calculate this like $(cat ${ARCHLINUX_PKGS}_$RELEASE | sed -s "s# #\n#g" | wc -l) +TESTED=0 +NR_FTBFS=0 +NR_FTBR=0 +NR_DEPWAIT=0 +NR_404=0 +NR_GOOD=0 +NR_UNKNOWN=0 +for PKG in $(find $RPMBASE/$RELEASE/$ARCH/* -maxdepth 1 -type d -exec basename {} \;) ; do + if [ -z "$(cd $RPMBASE/$RELEASE/$ARCH/$PKG/ ; ls)" ] ; then + # directory exists but is empty: package is building… + echo "$(date -u ) - ignoring $PKG from '$RELEASE' ($ARCH) which is building right now…" + continue + fi + let TESTED+=1 + echo " " >> $HTML_BUFFER + echo " $RELEASE ($ARCH)" >> $HTML_BUFFER + echo " $PKG" >> $HTML_BUFFER + echo " " >> $HTML_BUFFER + if [ -z "$(cd $RPMBASE/$RELEASE/$ARCH/$PKG/ ; ls *.rpm.html 2>/dev/null)" ] ; then + if [ ! -z "$(grep '==> ERROR: Could not resolve all dependencies' $RPMBASE/$RELEASE/$ARCH/$PKG/build1.log)" ] ; then + HTML_TARGET=$HTML_DEPWAIT + let NR_DEPWAIT+=1 + echo " \"depwait could not resolve dependencies" >> $HTML_BUFFER + elif [ ! -z "$(egrep '==> ERROR: Failure while downloading' $RPMBASE/$RELEASE/$ARCH/$PKG/build1.log)" ] ; then + HTML_TARGET=$HTML_404 + let NR_404+=1 + echo " \"404 failed to download source" >> $HTML_BUFFER + elif [ ! -z "$(egrep '==> ERROR: One or more files did not pass the validity check' $RPMBASE/$RELEASE/$ARCH/$PKG/build1.log)" ] ; then + HTML_TARGET=$HTML_FTBFS + let NR_FTBFS+=1 + echo " \"ftbfs failed to verify source" >> $HTML_BUFFER + else + echo " probably failed to build from source, please investigate" >> $HTML_BUFFER + HTML_TARGET=$HTML_UNKNOWN + let NR_UNKNOWN+=1 + # or is it reproducible??? + fi + else + HTML_TARGET=$HTML_FTBR + let NR_FTBR+=1 + for ARTIFACT in $(cd $RPMBASE/$RELEASE/$ARCH/$PKG/ ; ls *.rpm.html) ; do + echo " \"unreproducible ${ARTIFACT:0:-5} is unreproducible
" >> $HTML_BUFFER + done + fi + echo " " >> $HTML_BUFFER + echo " $(LANG=C TZ=UTC ls --full-time $RPMBASE/$RELEASE/$ARCH/$PKG/build1.log | cut -d ' ' -f6 )" >> $HTML_BUFFER + for LOG in build1.log build2.log ; do + if [ -f $RPMBASE/$RELEASE/$ARCH/$PKG/$LOG ] ; then + echo " $LOG" >> $HTML_BUFFER + else + echo "  " >> $HTML_BUFFER + fi + done + echo " " >> $HTML_BUFFER + cat $HTML_BUFFER >> $HTML_TARGET + rm $HTML_BUFFER > /dev/null +done +# prepare stats per repository +PERCENT_TOTAL=$(echo "scale=1 ; ($TESTED*100/$TOTAL)" | bc) +if [ $(echo $PERCENT_TOTAL/1|bc) -lt 98 ] ; then + NR_TESTED="$TESTED ($PERCENT_TOTAL% of $TOTAL tested)" +else + NR_TESTED=$TESTED +fi +echo " " >> $HTML_RPM_STATS +echo " $RELEASE ($ARCH)$NR_TESTED" >> $HTML_RPM_STATS +for i in $NR_GOOD $NR_FTBR $NR_FTBFS $NR_DEPWAIT $NR_404 $NR_UNKNOWN ; do + PERCENT_i=$(echo "scale=1 ; ($i*100/$TOTAL)" | bc) + if [ "$PERCENT_i" != "0" ] ; then + echo " $i ($PERCENT_i%)" >> $HTML_RPM_STATS + else + echo " $i" >> $HTML_RPM_STATS + fi +done +echo " " >> $HTML_RPM_STATS + +# +# write out the actual webpage +# +DATE=$(date -u +'%Y-%m-%d') +cd $RPMBASE +PAGE=rpms/$RELEASE.html +echo "$(date -u) - starting to build $PAGE" +cat > $PAGE <<- EOF + + + + + Repoducible $RELEASE ($ARCH) ?! + + + +
+ +
+
+

Reproducible $RELEASE ($ARCH) ?!

+
+ +EOF +write_page_intro '$RELEASE' +write_explaination_table '$RELEASE' +write_page " " +cat $HTML_RPM_STATS >> $PAGE +rm $HTML_RPM_STATS > /dev/null +write_page "
release (architecture)all sources packagesreproducible packagesunreproducible packagespackages failing to buildpackages in depwait statepackages 404unknown state
" +write_page " " +for i in $HTML_UNKNOWN $HTML_FTBFS $HTML_DEPWAIT $HTML_404 $HTML_FTBR $HTML_GOOD ; do + cat $i >> $PAGE + rm $i > /dev/null +done +write_page "
release (architecture)source packagetest resulttest date1st build log2nd build log
" +write_page "
" +write_page_footer '$RELEASE' +echo "$(date -u) - enjoy $REPRODUCIBLE_URL/rpms/$PAGE" -- cgit v1.2.3-54-g00ecf