[Qa-jenkins-scm] [jenkins.debian.net] 03/03: reproducible Arch Linux: refactoring, preparing for more

Holger Levsen holger at layer-acht.org
Mon Dec 11 01:35:45 UTC 2017


This is an automated email from the git hooks/post-receive script.

holger pushed a commit to branch master
in repository jenkins.debian.net.

commit 3eb473e767a33a8b1f8dd53a6ac62551f574990a
Author: Holger Levsen <holger at layer-acht.org>
Date:   Mon Dec 11 01:31:10 2017 +0000

    reproducible Arch Linux: refactoring, preparing for more
    
    Signed-off-by: Holger Levsen <holger at layer-acht.org>
---
 bin/reproducible_html_archlinux.sh | 405 ++++++++++++++++++-------------------
 1 file changed, 202 insertions(+), 203 deletions(-)

diff --git a/bin/reproducible_html_archlinux.sh b/bin/reproducible_html_archlinux.sh
index f0f2daf..c1d0b6a 100755
--- a/bin/reproducible_html_archlinux.sh
+++ b/bin/reproducible_html_archlinux.sh
@@ -11,6 +11,196 @@ common_init "$@"
 # common code
 . /srv/jenkins/bin/reproducible_common.sh
 
+create_pkg_state_and_html() {
+	local ARCHLINUX_PKG_PATH=$ARCHBASE/$REPOSITORY/$PKG
+	local REPO=$1
+	local PKG=$2
+	local blacklisted=false
+	local VERSION="undetermined"
+
+	if [ -z "$(cd $ARCHLINUX_PKG_PATH ; ls)" ] ; then
+		# directory exists but is empty: package is building…
+		echo "$(date -u )   - ignoring $PKG from '$REPOSITORY' which is building in $ARCHLINUX_PKG_PATH since $(LANG=C TZ=UTC ls --full-time -d $ARCHLINUX_PKG_PATH | cut -d ':' -f1-2 | cut -d " " -f6-) UTC"
+		return
+	fi
+
+	if [ -f $ARCHLINUX_PKG_PATH/pkg.version ] ; then
+		VERSION=$(cat $ARCHLINUX_PKG_PATH/pkg.version)
+	elif [ -f $ARCHLINUX_PKG_PATH/build1.version ] ; then
+		VERSION=$(cat $ARCHLINUX_PKG_PATH/build1.version)
+		if [ -f $ARCHLINUX_PKG_PATH/build2.log ] ; then
+			if [ ! -f $ARCHLINUX_PKG_PATH/build2.version ] ; then
+				echo "$(date -u )   - $ARCHLINUX_PKG_PATH/build2.version does not exist, so the 2nd build fails. This happens."
+			elif ! diff -q $ARCHLINUX_PKG_PATH/build1.version $ARCHLINUX_PKG_PATH/build2.version ; then
+				echo "$(date -u )   - $ARCHLINUX_PKG_PATH/build1.version and $ARCHLINUX_PKG_PATH/build2.version differ, this should not happen. Please tell h01ger."
+				VERSION="$VERSION or $(cat $ARCHLINUX_PKG_PATH/build2.version)"
+			fi
+		fi
+	elif [ $(ls $ARCHLINUX_PKG_PATH/*.pkg.tar.xz.html 2>/dev/null | wc -l) -eq 1 ] ; then
+	# only determine version if there is exactly one artifact...
+	# else it's too error prone and in future the version will
+	# be determined during build anyway...
+		ARTIFACT="$(ls $ARCHLINUX_PKG_PATH/*.pkg.tar.xz.html 2>/dev/null)"
+		VERSION=$( basename $ARTIFACT | sed -s "s#$PKG-##" | sed -E -s "s#-(x86_64|any).pkg.tar.xz.html##" )
+	else
+		for i in $ARCHLINUX_BLACKLISTED ; do
+			if [ "$PKG" = "$i" ] ; then
+				blacklisted=true
+			fi
+		done
+		if ! $blacklisted && [ -f $ARCHLINUX_PKG_PATH/pkg.needs_build ] ; then
+			echo "$(date -u )   - ok, $PKG from '$REPOSITORY' needs build, this should go away by itself."
+			continue
+		elif ! $blacklisted ; then
+			echo "$(date -u )   - cannot determine state of $PKG from '$REPOSITORY', please check $ARCHLINUX_PKG_PATH yourself."
+		fi
+	fi
+	if [ "$VERSION" != "undetermined" ] || $blacklisted ; then
+		echo $VERSION > $ARCHLINUX_PKG_PATH/pkg.version
+	fi
+	echo "     <tr>" >> $HTML_BUFFER
+	echo "      <td>$REPOSITORY</td>" >> $HTML_BUFFER
+	echo "      <td>$PKG</td>" >> $HTML_BUFFER
+	echo "      <td>$VERSION</td>" >> $HTML_BUFFER
+	echo "      <td>" >> $HTML_BUFFER
+	#
+	#
+	if [ -z "$(cd $ARCHLINUX_PKG_PATH/ ; ls *.pkg.tar.xz.html 2>/dev/null)" ] ; then
+		for i in $ARCHLINUX_BLACKLISTED ; do
+			if [ "$PKG" = "$i" ] ; then
+				blacklisted=true
+			fi
+		done
+		# this horrible if elif elif elif elif...  monster is needed because
+		# https://lists.archlinux.org/pipermail/pacman-dev/2017-September/022156.html
+	        # has not yet been merged yet...
+		if $blacklisted ; then
+				echo BLACKLISTED > $ARCHLINUX_PKG_PATH/pkg.state
+				echo "       <img src=\"/userContent/static/error.png\" alt=\"blacklisted icon\" /> blacklisted" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep '^error: failed to prepare transaction \(conflicting dependencies\)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+			echo DEPWAIT_= > $ARCHLINUX_PKG_PATH/pkg.state
+			echo "       <img src=\"/userContent/static/weather-snow.png\" alt=\"depwait icon\" /> could not resolve dependencies as there are conflicts" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep '==> ERROR: (Could not resolve all dependencies|.pacman. failed to install missing dependencies)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+			echo DEPWAIT_1 > $ARCHLINUX_PKG_PATH/pkg.state
+			echo "       <img src=\"/userContent/static/weather-snow.png\" alt=\"depwait icon\" /> could not resolve dependencies" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep '^error: unknown package: ' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+			echo 404_0 > $ARCHLINUX_PKG_PATH/pkg.state
+			echo "       <img src=\"/userContent/static/weather-severe-alert.png\" alt=\"404 icon\" /> unknown package" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep '==> ERROR: (Failure while downloading|One or more PGP signatures could not be verified|One or more files did not pass the validity check|Integrity checks \(.*\) differ in size from the source array|Failure while branching|Failure while creating working copy)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+			REASON="download failed"
+			EXTRA_REASON=""
+			echo 404_0 > $ARCHLINUX_PKG_PATH/pkg.state
+			if [ ! -z "$(grep 'FAILED (unknown public key' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_6 > $ARCHLINUX_PKG_PATH/pkg.state
+				EXTRA_REASON="to verify source with PGP due to unknown public key"
+			elif [ ! -z "$(grep 'The requested URL returned error: 403' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_2 > $ARCHLINUX_PKG_PATH/pkg.state
+				EXTRA_REASON="with 403 - forbidden"
+			elif [ ! -z "$(grep 'The requested URL returned error: 500' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_4 > $ARCHLINUX_PKG_PATH/pkg.state
+				EXTRA_REASON="with 500 - internal server error"
+			elif [ ! -z "$(grep 'The requested URL returned error: 503' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_5 > $ARCHLINUX_PKG_PATH/pkg.state
+				EXTRA_REASON="with 503 - service unavailable"
+			elif [ ! -z "$(egrep '==> ERROR: One or more PGP signatures could not be verified' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_7 > $ARCHLINUX_PKG_PATH/pkg.state
+				EXTRA_REASON="to verify source with PGP signatures"
+			elif [ ! -z "$(egrep '(SSL certificate problem: unable to get local issuer certificate|^bzr: ERROR: .SSL: CERTIFICATE_VERIFY_FAILED)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_1 > $ARCHLINUX_PKG_PATH/pkg.state
+				EXTRA_REASON="with SSL problem"
+			elif [ ! -z "$(egrep '==> ERROR: One or more files did not pass the validity check' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_8 > $ARCHLINUX_PKG_PATH/pkg.state
+				REASON="downloaded ok but failed to verify source"
+			elif [ ! -z "$(egrep '==> ERROR: Integrity checks \(.*\) differ in size from the source array' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_9 > $ARCHLINUX_PKG_PATH/pkg.state
+				REASON="Integrity checks differ in size from the source array"
+			elif [ ! -z "$(grep 'The requested URL returned error: 404' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+				echo 404_3 > $ARCHLINUX_PKG_PATH/pkg.state
+				EXTRA_REASON="with 404 - file not found"
+			fi
+			echo "       <img src=\"/userContent/static/weather-severe-alert.png\" alt=\"404 icon\" /> $REASON $EXTRA_REASON" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep '==> ERROR: (install file .* does not exist or is not a regular file|The download program wget is not installed)' $ARCHLINUX_PKG_PATH/build1.log 2>/dev/null)" ] ; then
+			echo FTBFS_0 > $ARCHLINUX_PKG_PATH/pkg.state
+			echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build, requirements not met" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep '==> ERROR: A failure occurred in check' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+			echo FTBFS_1 > $ARCHLINUX_PKG_PATH/pkg.state
+			echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build while running tests" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep '==> ERROR: A failure occurred in (build|package|prepare)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+			echo FTBFS_2 > $ARCHLINUX_PKG_PATH/pkg.state
+			echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build" >> $HTML_BUFFER
+		elif [ ! -z "$(egrep 'makepkg was killed by timeout after' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
+			echo FTBFS_3 > $ARCHLINUX_PKG_PATH/pkg.state
+			echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build, killed by timeout" >> $HTML_BUFFER
+		else
+			echo "       probably failed to build from source, please investigate" >> $HTML_BUFFER
+			echo UNKNOWN > $ARCHLINUX_PKG_PATH/pkg.state
+		fi
+	else
+		local STATE=GOOD
+		local SOME_GOOD=false
+		for ARTIFACT in $(cd $ARCHLINUX_PKG_PATH/ ; ls *.pkg.tar.xz.html) ; do
+			if [ ! -z "$(grep 'build reproducible in our test framework' $ARCHLINUX_PKG_PATH/$ARTIFACT)" ] ; then
+				SOME_GOOD=true
+				echo "       <img src=\"/userContent/static/weather-clear.png\" alt=\"reproducible icon\" /> <a href=\"/archlinux/$REPOSITORY/$PKG/$ARTIFACT\">${ARTIFACT:0:-5}</a> is reproducible in our current test framework<br />" >> $HTML_BUFFER
+			else
+				# change $STATE unless we have found .buildinfo differences already...
+				if [ "$STATE" != "FTBR_0" ] ; then
+					STATE=FTBR_1
+				fi
+				# this shouldnt happen, but (for now) it does, so lets mark them…
+				EXTRA_REASON=""
+				if [ ! -z "$(grep 'class="source">.BUILDINFO' $ARCHLINUX_PKG_PATH/$ARTIFACT)" ] ; then
+					STATE=FTBR_0
+					EXTRA_REASON=" with variations in .BUILDINFO"
+				fi
+				echo "       <img src=\"/userContent/static/weather-showers-scattered.png\" alt=\"unreproducible icon\" /> <a href=\"/archlinux/$REPOSITORY/$PKG/$ARTIFACT\">${ARTIFACT:0:-5}</a> is unreproducible$EXTRA_REASON<br />" >> $HTML_BUFFER
+			fi
+		done
+		# we only count source packages…
+		case $STATE in
+			GOOD)		echo GOOD > $ARCHLINUX_PKG_PATH/pkg.state	;;
+			FTBR_0)		echo FTBR_0 > $ARCHLINUX_PKG_PATH/pkg.state	;;
+			FTBR_1)		if $SOME_GOOD ; then
+						echo FTBR_1 > $ARCHLINUX_PKG_PATH/pkg.state
+					else
+						echo FTBR_2 > $ARCHLINUX_PKG_PATH/pkg.state
+					fi
+					;;
+			*)		;;
+		esac
+	fi
+	echo "      </td>" >> $HTML_BUFFER
+	local BUILD_DATE="$(LANG=C TZ=UTC ls --full-time $ARCHLINUX_PKG_PATH/build1.log | cut -d ':' -f1-2 | cut -d " " -f6- )"
+	if [ ! -z "$BUILD_DATE" ] ; then
+		BUILD_DATE="$BUILD_DATE UTC"
+	fi
+	echo "      <td>$BUILD_DATE" >> $HTML_BUFFER
+	local DURATION=$(cat $ARCHLINUX_PKG_PATH/pkg.build_duration 2>/dev/null || true)
+	if [ -n "$DURATION" ]; then
+		local HOUR=$(echo "$DURATION/3600"|bc)
+		local MIN=$(echo "($DURATION-$HOUR*3600)/60"|bc)
+		local SEC=$(echo "$DURATION-$HOUR*3600-$MIN*60"|bc)
+		BUILD_DURATION="<br />${HOUR}h:${MIN}m:${SEC}s"
+	else
+		BUILD_DURATION=" "
+	fi
+	echo "       $BUILD_DURATION</td>" >> $HTML_BUFFER
+
+	echo "      <td>" >> $HTML_BUFFER
+	for LOG in build1.log build2.log ; do
+		if [ -f $ARCHLINUX_PKG_PATH/$LOG ] ; then
+			if [ "$LOG" = "build2.log" ] ; then
+				echo "       <br />" >> $HTML_BUFFER
+			fi
+			get_filesize $ARCHLINUX_PKG_PATH/$LOG
+			echo "       <a href=\"/archlinux/$REPOSITORY/$PKG/$LOG\">$LOG</a> ($SIZE)" >> $HTML_BUFFER
+		fi
+	done
+	echo "      </td>" >> $HTML_BUFFER
+	echo "     </tr>" >> $HTML_BUFFER
+	mv $HTML_BUFFER $ARCHLINUX_PKG_PATH/pkg.html
+}
+
 #
 # analyse results to create the webpage
 #
@@ -37,214 +227,23 @@ WIDTH=1920
 HEIGHT=960
 for REPOSITORY in $ARCHLINUX_REPOS ; do
 	echo "$(date -u) - starting to analyse build results for '$REPOSITORY'."
-	TOTAL=$(cat ${ARCHLINUX_PKGS}_$REPOSITORY | wc -l)
-	TESTED=0
-	NR_FTBFS=0
-	NR_FTBR=0
-	NR_DEPWAIT=0
-	NR_404=0
-	NR_GOOD=0
-	NR_BLACKLISTED=0
-	NR_UNKNOWN=0
+	# create pkg.html for packages which need it
 	for PKG in $(find $ARCHBASE/$REPOSITORY/* -maxdepth 1 -type d -exec basename {} \;|sort -u -f) ; do
-		ARCHLINUX_PKG_PATH=$ARCHBASE/$REPOSITORY/$PKG
-		if [ -z "$(cd $ARCHLINUX_PKG_PATH ; ls)" ] ; then
-			# directory exists but is empty: package is building…
-			echo "$(date -u )   - ignoring $PKG from '$REPOSITORY' which is building in $ARCHLINUX_PKG_PATH since $(LANG=C TZ=UTC ls --full-time -d $ARCHLINUX_PKG_PATH | cut -d ':' -f1-2 | cut -d " " -f6-) UTC"
-			continue
-		fi
-		if [ ! -f $ARCHLINUX_PKG_PATH/pkg.state ] ; then
-			blacklisted=false
-			if [ -f $ARCHLINUX_PKG_PATH/pkg.version ] ; then
-				VERSION=$(cat $ARCHLINUX_PKG_PATH/pkg.version)
-			elif [ -f $ARCHLINUX_PKG_PATH/build1.version ] ; then
-				VERSION=$(cat $ARCHLINUX_PKG_PATH/build1.version)
-				if [ -f $ARCHLINUX_PKG_PATH/build2.log ] ; then
-					if [ ! -f $ARCHLINUX_PKG_PATH/build2.version ] ; then
-						echo "$(date -u )   - $ARCHLINUX_PKG_PATH/build2.version does not exist, so the 2nd build fails. This happens."
-					elif ! diff -q $ARCHLINUX_PKG_PATH/build1.version $ARCHLINUX_PKG_PATH/build2.version ; then
-						echo "$(date -u )   - $ARCHLINUX_PKG_PATH/build1.version and $ARCHLINUX_PKG_PATH/build2.version differ, this should not happen. Please tell h01ger."
-						VERSION="$VERSION or $(cat $ARCHLINUX_PKG_PATH/build2.version)"
-					fi
-				fi
-			elif [ $(ls $ARCHLINUX_PKG_PATH/*.pkg.tar.xz.html 2>/dev/null | wc -l) -eq 1 ] ; then
-			# only determine version if there is exactly one artifact...
-			# else it's too error prone and in future the version will
-			# be determined during build anyway...
-				ARTIFACT="$(ls $ARCHLINUX_PKG_PATH/*.pkg.tar.xz.html 2>/dev/null)"
-				VERSION=$( basename $ARTIFACT | sed -s "s#$PKG-##" | sed -E -s "s#-(x86_64|any).pkg.tar.xz.html##" )
-			else
-				for i in $ARCHLINUX_BLACKLISTED ; do
-					if [ "$PKG" = "$i" ] ; then
-						blacklisted=true
-						VERSION="undetermined"
-					fi
-				done
-				if ! $blacklisted && [ -f $ARCHLINUX_PKG_PATH/pkg.needs_build ] ; then
-					echo "$(date -u )   - ok, $PKG from '$REPOSITORY' needs build, this should go away by itself."
-					continue
-				elif ! $blacklisted ; then
-					echo "$(date -u )   - cannot determine state of $PKG from '$REPOSITORY', please check $ARCHLINUX_PKG_PATH yourself."
-				fi
-			fi
-			if [ "$VERSION" != "undetermined" ] || $blacklisted ; then
-				echo $VERSION > $ARCHLINUX_PKG_PATH/pkg.version
-			fi
-			echo "     <tr>" >> $HTML_BUFFER
-			echo "      <td>$REPOSITORY</td>" >> $HTML_BUFFER
-			echo "      <td>$PKG</td>" >> $HTML_BUFFER
-			echo "      <td>$VERSION</td>" >> $HTML_BUFFER
-			echo "      <td>" >> $HTML_BUFFER
-			#
-			#
-			if [ -z "$(cd $ARCHLINUX_PKG_PATH/ ; ls *.pkg.tar.xz.html 2>/dev/null)" ] ; then
-				for i in $ARCHLINUX_BLACKLISTED ; do
-					if [ "$PKG" = "$i" ] ; then
-						blacklisted=true
-					fi
-				done
-				# this horrible if elif elif elif elif...  monster is needed because
-				# https://lists.archlinux.org/pipermail/pacman-dev/2017-September/022156.html
-			        # has not yet been merged yet...
-				if $blacklisted ; then
-						echo BLACKLISTED > $ARCHLINUX_PKG_PATH/pkg.state
-						echo "       <img src=\"/userContent/static/error.png\" alt=\"blacklisted icon\" /> blacklisted" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep '^error: failed to prepare transaction \(conflicting dependencies\)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-					echo DEPWAIT_= > $ARCHLINUX_PKG_PATH/pkg.state
-					echo "       <img src=\"/userContent/static/weather-snow.png\" alt=\"depwait icon\" /> could not resolve dependencies as there are conflicts" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep '==> ERROR: (Could not resolve all dependencies|.pacman. failed to install missing dependencies)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-					echo DEPWAIT_1 > $ARCHLINUX_PKG_PATH/pkg.state
-					echo "       <img src=\"/userContent/static/weather-snow.png\" alt=\"depwait icon\" /> could not resolve dependencies" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep '^error: unknown package: ' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-					echo 404_0 > $ARCHLINUX_PKG_PATH/pkg.state
-					echo "       <img src=\"/userContent/static/weather-severe-alert.png\" alt=\"404 icon\" /> unknown package" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep '==> ERROR: (Failure while downloading|One or more PGP signatures could not be verified|One or more files did not pass the validity check|Integrity checks \(.*\) differ in size from the source array|Failure while branching|Failure while creating working copy)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-					REASON="download failed"
-					EXTRA_REASON=""
-					echo 404_0 > $ARCHLINUX_PKG_PATH/pkg.state
-					if [ ! -z "$(grep 'FAILED (unknown public key' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_6 > $ARCHLINUX_PKG_PATH/pkg.state
-						EXTRA_REASON="to verify source with PGP due to unknown public key"
-					elif [ ! -z "$(grep 'The requested URL returned error: 403' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_2 > $ARCHLINUX_PKG_PATH/pkg.state
-						EXTRA_REASON="with 403 - forbidden"
-					elif [ ! -z "$(grep 'The requested URL returned error: 500' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_4 > $ARCHLINUX_PKG_PATH/pkg.state
-						EXTRA_REASON="with 500 - internal server error"
-					elif [ ! -z "$(grep 'The requested URL returned error: 503' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_5 > $ARCHLINUX_PKG_PATH/pkg.state
-						EXTRA_REASON="with 503 - service unavailable"
-					elif [ ! -z "$(egrep '==> ERROR: One or more PGP signatures could not be verified' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_7 > $ARCHLINUX_PKG_PATH/pkg.state
-						EXTRA_REASON="to verify source with PGP signatures"
-					elif [ ! -z "$(egrep '(SSL certificate problem: unable to get local issuer certificate|^bzr: ERROR: .SSL: CERTIFICATE_VERIFY_FAILED)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_1 > $ARCHLINUX_PKG_PATH/pkg.state
-						EXTRA_REASON="with SSL problem"
-					elif [ ! -z "$(egrep '==> ERROR: One or more files did not pass the validity check' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_8 > $ARCHLINUX_PKG_PATH/pkg.state
-						REASON="downloaded ok but failed to verify source"
-					elif [ ! -z "$(egrep '==> ERROR: Integrity checks \(.*\) differ in size from the source array' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_9 > $ARCHLINUX_PKG_PATH/pkg.state
-						REASON="Integrity checks differ in size from the source array"
-					elif [ ! -z "$(grep 'The requested URL returned error: 404' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-						echo 404_3 > $ARCHLINUX_PKG_PATH/pkg.state
-						EXTRA_REASON="with 404 - file not found"
-					fi
-					echo "       <img src=\"/userContent/static/weather-severe-alert.png\" alt=\"404 icon\" /> $REASON $EXTRA_REASON" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep '==> ERROR: (install file .* does not exist or is not a regular file|The download program wget is not installed)' $ARCHLINUX_PKG_PATH/build1.log 2>/dev/null)" ] ; then
-					echo FTBFS_0 > $ARCHLINUX_PKG_PATH/pkg.state
-					echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build, requirements not met" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep '==> ERROR: A failure occurred in check' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-					echo FTBFS_1 > $ARCHLINUX_PKG_PATH/pkg.state
-					echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build while running tests" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep '==> ERROR: A failure occurred in (build|package|prepare)' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-					echo FTBFS_2 > $ARCHLINUX_PKG_PATH/pkg.state
-					echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build" >> $HTML_BUFFER
-				elif [ ! -z "$(egrep 'makepkg was killed by timeout after' $ARCHLINUX_PKG_PATH/build1.log $ARCHLINUX_PKG_PATH/build2.log 2>/dev/null)" ] ; then
-					echo FTBFS_3 > $ARCHLINUX_PKG_PATH/pkg.state
-					echo "       <img src=\"/userContent/static/weather-storm.png\" alt=\"ftbfs icon\" /> failed to build, killed by timeout" >> $HTML_BUFFER
-				else
-					echo "       probably failed to build from source, please investigate" >> $HTML_BUFFER
-					echo UNKNOWN > $ARCHLINUX_PKG_PATH/pkg.state
-				fi
-			else
-				STATE=GOOD
-				SOME_GOOD=false
-				for ARTIFACT in $(cd $ARCHLINUX_PKG_PATH/ ; ls *.pkg.tar.xz.html) ; do
-					if [ ! -z "$(grep 'build reproducible in our test framework' $ARCHLINUX_PKG_PATH/$ARTIFACT)" ] ; then
-						SOME_GOOD=true
-						echo "       <img src=\"/userContent/static/weather-clear.png\" alt=\"reproducible icon\" /> <a href=\"/archlinux/$REPOSITORY/$PKG/$ARTIFACT\">${ARTIFACT:0:-5}</a> is reproducible in our current test framework<br />" >> $HTML_BUFFER
-					else
-						# change $STATE unless we have found .buildinfo differences already...
-						if [ "$STATE" != "FTBR_0" ] ; then
-							STATE=FTBR_1
-						fi
-						# this shouldnt happen, but (for now) it does, so lets mark them…
-						EXTRA_REASON=""
-						if [ ! -z "$(grep 'class="source">.BUILDINFO' $ARCHLINUX_PKG_PATH/$ARTIFACT)" ] ; then
-							STATE=FTBR_0
-							EXTRA_REASON=" with variations in .BUILDINFO"
-						fi
-						echo "       <img src=\"/userContent/static/weather-showers-scattered.png\" alt=\"unreproducible icon\" /> <a href=\"/archlinux/$REPOSITORY/$PKG/$ARTIFACT\">${ARTIFACT:0:-5}</a> is unreproducible$EXTRA_REASON<br />" >> $HTML_BUFFER
-					fi
-				done
-				# we only count source packages…
-				case $STATE in
-					GOOD)		echo GOOD > $ARCHLINUX_PKG_PATH/pkg.state	;;
-					FTBR_0)		echo FTBR_0 > $ARCHLINUX_PKG_PATH/pkg.state	;;
-					FTBR_1)		if $SOME_GOOD ; then
-								echo FTBR_1 > $ARCHLINUX_PKG_PATH/pkg.state
-							else
-								echo FTBR_2 > $ARCHLINUX_PKG_PATH/pkg.state
-							fi
-							;;
-					*)		;;
-				esac
-			fi
-			echo "      </td>" >> $HTML_BUFFER
-			BUILD_DATE="$(LANG=C TZ=UTC ls --full-time $ARCHLINUX_PKG_PATH/build1.log | cut -d ':' -f1-2 | cut -d " " -f6- )"
-			if [ ! -z "$BUILD_DATE" ] ; then
-				BUILD_DATE="$BUILD_DATE UTC"
-			fi
-			echo "      <td>$BUILD_DATE" >> $HTML_BUFFER
-			DURATION=$(cat $ARCHLINUX_PKG_PATH/pkg.build_duration 2>/dev/null || true)
-			if [ -n "$DURATION" ]; then
-				HOUR=$(echo "$DURATION/3600"|bc)
-				MIN=$(echo "($DURATION-$HOUR*3600)/60"|bc)
-				SEC=$(echo "$DURATION-$HOUR*3600-$MIN*60"|bc)
-				BUILD_DURATION="<br />${HOUR}h:${MIN}m:${SEC}s"
-			else
-				BUILD_DURATION=" "
-			fi
-			echo "       $BUILD_DURATION</td>" >> $HTML_BUFFER
-
-			echo "      <td>" >> $HTML_BUFFER
-			for LOG in build1.log build2.log ; do
-				if [ -f $ARCHLINUX_PKG_PATH/$LOG ] ; then
-					if [ "$LOG" = "build2.log" ] ; then
-						echo "       <br />" >> $HTML_BUFFER
-					fi
-					get_filesize $ARCHLINUX_PKG_PATH/$LOG
-					echo "       <a href=\"/archlinux/$REPOSITORY/$PKG/$LOG\">$LOG</a> ($SIZE)" >> $HTML_BUFFER
-				fi
-			done
-			echo "      </td>" >> $HTML_BUFFER
-			echo "     </tr>" >> $HTML_BUFFER
-			mv $HTML_BUFFER $ARCHLINUX_PKG_PATH/pkg.html
+		if [ ! -f $ARCHBASE/$REPOSITORY/$PKG/pkg.state ] ; then
+			create_pkg_state_and_html $REPOSITORY $PKG
 		fi
 
 	done
 	# prepare stats per repository
-	set +e
-	TESTED=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c ^)
-	NR_GOOD=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c GOOD)
-	NR_FTBR=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c FTBR)
-	NR_FTBFS=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c FTBFS)
-	NR_DEPWAIT=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c DEPWAIT)
-	NR_404=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c 404)
-	NR_BLACKLISTED=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c BLACKLISTED)
-	NR_UNKNOWN=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c UNKNOWN)
-	set -e
+	TOTAL=$(cat ${ARCHLINUX_PKGS}_$REPOSITORY | wc -l)
+	TESTED=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c ^ || true )
+	NR_GOOD=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c GOOD || true )
+	NR_FTBR=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c FTBR || true )
+	NR_FTBFS=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c FTBFS || true )
+	NR_DEPWAIT=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c DEPWAIT || true )
+	NR_404=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c 404 || true )
+	NR_BLACKLISTED=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c BLACKLISTED || true )
+	NR_UNKNOWN=$(cat $ARCHBASE/$REPOSITORY/*/pkg.state | grep -c UNKNOWN || true )
 	PERCENT_TOTAL=$(echo "scale=1 ; ($TESTED*100/$TOTAL)" | bc)
 	if [ $(echo $PERCENT_TOTAL/1|bc) -lt 99 ] ; then
 		NR_TESTED="$TESTED <span style=\"font-size:0.8em;\">(tested $PERCENT_TOTAL% of $TOTAL)</span>"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/qa/jenkins.debian.net.git



More information about the Qa-jenkins-scm mailing list