#!/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 for '$RELEASE' ($ARCH)." HTML_FTBFS=$(mktemp -t rhtml-rpms-XXXXXXXX) HTML_FTBR=$(mktemp -t rhtml-rpms-XXXXXXXX) HTML_DEPWAIT=$(mktemp -t rhtml-rpms-XXXXXXXX) HTML_404=$(mktemp -t rhtml-rpms-XXXXXXXX) HTML_GOOD=$(mktemp -t rhtml-rpms-XXXXXXXX) HTML_UNKNOWN=$(mktemp -t rhtml-rpms-XXXXXXXX) HTML_BUFFER=$(mktemp -t rhtml-rpms-XXXXXXXX) HTML_TARGET="" HTML_RPM_STATS=$(mktemp -t rhtml-rpms-XXXXXXXX) SIZE="" TESTED=0 NR_FTBFS=0 NR_FTBR=0 NR_DEPWAIT=0 NR_404=0 NR_GOOD=0 NR_UNKNOWN=0 TOTAL=$(cat ${RPM_PKGS}_$RELEASE | sed -s "s# #\n#g" | wc -l) for PKG in $(find $RPMBASE/$RELEASE/$ARCH/* -maxdepth 1 -type d -exec basename {} \;|sort -u -f) ; do RPM_PKG_PATH=$RPMBASE/$RELEASE/$ARCH/$PKG if [ -z "$(cd $RPM_PKG_PATH/ ; 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 " $PKG" >> $HTML_BUFFER echo " " >> $HTML_BUFFER if [ -z "$(cd $RPM_PKG_PATH/ ; ls *.rpm.html 2>/dev/null)" ] ; then if [ ! -z "$(egrep '^DEBUG: Error: No Package found for' $RPM_PKG_PATH/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' $RPM_PKG_PATH/build1.log)" ] ; then HTML_TARGET=$HTML_404 let NR_404+=1 echo " \"404 failed to download source" >> $HTML_BUFFER elif [ ! -z "$(egrep '^ERROR: Command failed. See logs for output.' $RPM_PKG_PATH/build1.log)" ] ; then HTML_TARGET=$HTML_FTBFS let NR_FTBFS+=1 echo " \"ftbfs failed to build" >> $HTML_BUFFER elif [ ! -z "$(egrep 'mock was killed by timeout after' $RPM_PKG_PATH/build1.log)" ] ; then HTML_TARGET=$HTML_FTBFS let NR_FTBFS+=1 echo " \"ftbfs killed by timeout" >> $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 $RPM_PKG_PATH/ ; 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 $RPM_PKG_PATH/build1.log | cut -d ' ' -f6 )" >> $HTML_BUFFER for LOG in build1.log build2.log ; do if [ -f $RPM_PKG_PATH/$LOG ] ; then get_filesize $RPM_PKG_PATH/$LOG echo " $LOG ($SIZE)" >> $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 99 ] ; 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/$TESTED)" | 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=$RELEASE.html echo "$(date -u) - starting to build $PAGE" cat > $PAGE <<- EOF Reproducible $RELEASE ($ARCH) ?!

Reproducible $RELEASE ($ARCH) ?!

EOF write_page_intro "$RELEASE" write_variation_table "$RELEASE" write_page " " cat $HTML_RPM_STATS >> $PAGE rm $HTML_RPM_STATS > /dev/null write_page "
release (architecture)all source packagesreproducible packagesunreproducible packagespackages failing to buildpackages in depwait statepackages download failuresunknown state
" write_page " " for i in $HTML_UNKNOWN $HTML_404 $HTML_DEPWAIT $HTML_FTBFS $HTML_FTBR $HTML_GOOD ; do cat $i >> $PAGE rm $i > /dev/null done write_page "
source packagetest resulttest date1st build log2nd build log
" write_page "
" write_page_footer "$RELEASE" echo "$(date -u) - enjoy $REPRODUCIBLE_URL/rpms/$PAGE"