[Qa-jenkins-scm] [Git][qa/jenkins.debian.net][master] 2 commits: reproducible Debian: stop hardcoding Debian suites in _html_dashboard.sh, use...

Holger Levsen (@holger) gitlab at salsa.debian.org
Wed Jun 14 00:23:24 BST 2023



Holger Levsen pushed to branch master at Debian QA / jenkins.debian.net


Commits:
c9b4b359 by Holger Levsen at 2023-06-13T23:48:28+02:00
reproducible Debian: stop hardcoding Debian suites in _html_dashboard.sh, use data from _common.sh instead

Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
d4b9f4ea by Holger Levsen at 2023-06-14T01:22:59+02:00
reproducible Debian: refactor make_graph.py and related code. add colors for bookworm and trixie

Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -


4 changed files:

- TODO
- bin/make_graph.py
- bin/reproducible_common.sh
- bin/reproducible_html_dashboard.sh


Changes:

=====================================
TODO
=====================================
@@ -35,8 +35,7 @@ See link:https://jenkins.debian.net/userContent/about.html["about jenkins.debian
 ** run the maintenance jobs (to create the chdist)
 ** once the above jobs are successful, restarts the builders
 ** adopt whatever suite specific hacks _create_meta_pkg_sets.sh has
-** tweak reproducible_common.sh to start collect statistics on the daily builds for trixie too (and make_graph.py too)
-** tweak reproducible_html_dashboard.sh as needed (search for old-stable and old-testing..)
+** tweak reproducible_common.sh in three locations to start collect statistics on the daily builds for trixie too (and make_graph.py too: (in lines 40 and 54++)
 ** adjust chroot_installation- jobs
 ** tweak jenkins-shell-monitor.sh as needed
 ** adjust multiarch jobs in job-cfg/udd.yaml
@@ -48,6 +47,7 @@ See link:https://jenkins.debian.net/userContent/about.html["about jenkins.debian
 === 2023 things
 
 * things still to be done after the bookworm release and as trixie is open for development
+** update reproducible_common.sh with regards to the usrmerge variation in certain suites
 ** update find_obsolete_transitional_packages.sh
 ** maybe wait til 12.1 (= ~1 month) until we upgrade jenkins to bookworm, let's see
 *** upgrade to postgresql-15:


=====================================
bin/make_graph.py
=====================================
@@ -34,12 +34,31 @@ def main():
         r('palette(c("#73d216", "#f57900", "#cc0000", "#2e3436", "#888a85"))')
     elif int(colors) == 6:
         r('palette(c("#73d216", "#f57900", "#cc0000", "#2e3436", "#ffdd00", "#aaaaaa"))')
-    elif int(colors) == 20:
-        r('palette(c("#4e9a06", "#57a231", "#73d216", "#8ae234", "#9af244", \
-                     "#ce5c00", "#d56900", "#f57900", "#fcaf3e", "#fcea27", \
-                     "#930000", "#a40000", "#cc0000", "#e21111", "#fc2a1a", \
-                     "#2e3436", "#555753", "#888a85", "#b8bbb4", "#dddddd" ))')
-    elif int(colors) < 39:
+    elif int(colors) == 99:
+        # each row represents one state: reproducible, FTBR, FTBFS, other
+        # each column represents one suite:
+        #             stretch    buster     bullseye   bookworm   trixie     unstable   experimental
+        colors='28'   # ADJUST THIS NUMBER TOO: 28 = 8 releases * 4 states
+        r('palette(c("#4e9a06", "#57a231", "#73d216", "#8ae234", "#9af244", "#acff65", "#afff85", \
+                     "#ce5c00", "#d56900", "#f57900", "#fcaf3e", "#fc9a27", "#fdba37", "#facea2", \
+                     "#930000", "#a40000", "#cc0000", "#e21100", "#fc2a00", "#fd1a1a", "#ff0a2a", \
+                     "#222222", "#333333", "#444444", "#555555", "#666666", "#777777", "#888888" ))')
+    elif int(colors) == 101:
+        r('palette(c("#4e9a06", "#000000"))')   # stretch
+    elif int(colors) == 102:
+        r('palette(c("#57a231", "#000000"))')   # buster
+    elif int(colors) == 103:
+        r('palette(c("#73d216", "#000000"))')   # bullseye
+    elif int(colors) == 104:
+        r('palette(c("#8ae234", "#000000"))')   # bookworm
+    elif int(colors) == 105:
+        r('palette(c("#9af244", "#000000"))')   # trixie
+    elif int(colors) == 200:
+        r('palette(c("#acff65", "#000000"))')   # unstable
+    elif int(colors) == 300:
+        r('palette(c("#afff95", "#000000"))')   # experimental
+    else:
+	# used for the user-tagged bugs graphs
         r('palette(c("#fce94f", "#c4a000", "#eeeeec", "#babdb6", \
                      "#fcaf3e", "#ce5c00", "#ad7fa8", "#5c3566", \
                      "#e9b96e", "#8f5902", "#8ae234", "#4e9a06", \
@@ -48,22 +67,8 @@ def main():
                      "#ce5c00", "#73d216", "#edd400", "#f57900", \
                      "#c17d11", "#3465a4", "#666666", "#aaaaaa", \
                      "#aa00aa", "#ff55ff", "#123456", "#7890ab" ))')
-    elif int(colors) == 40:
-        r('palette(c("#4e9a06", "#000000"))')
-    elif int(colors) == 41:
-        r('palette(c("#57a231", "#000000"))')
-    elif int(colors) == 42:
-        r('palette(c("#73d216", "#000000"))')
-    elif int(colors) == 43:
-        r('palette(c("#8ae234", "#000000"))')
-    elif int(colors) == 44:
-        r('palette(c("#9cf345", "#000000"))')
-    elif int(colors) == 45:
-        r('palette(c("#acff85", "#000000"))')
-    elif int(colors) == 46:
-        r('palette(c("#cfff95", "#000000"))')
-    # "revert the hack" (it's still a hack :)
-    if int(colors) >= 40:
+    # "revert the hack" - it's still a hack though
+    if int(colors) >= 100:
         colors='1'
     r('v <- t[0:nrow(t),0:'+colors+']')
     # make graph since day 1


=====================================
bin/reproducible_common.sh
=====================================
@@ -34,7 +34,11 @@ CHPATH=/srv/reproducible-results/chdist
 mkdir -p "$CHPATH"
 
 # Debian suites being tested
-SUITES="unstable trixie bookworm bullseye buster experimental"
+SUITES="buster bullseye bookworm trixie unstable experimental"
+TESTING_SUITE="trixie"
+# released Debian suites (some still tested, some not)
+RELEASED_SUITES="bookworm bullseye buster stretch"
+# Debian suites not being tested anymore:
 ARCHIVED_SUITES="stretch"
 # Debian architectures being tested
 ARCHS="amd64 arm64 armhf i386"
@@ -959,13 +963,13 @@ create_debian_png_from_table() {
 	COLORS=${COLOR[$1]}
 	if [ $1 -eq 2 ] ; then
 		case "$SUITE" in
-			stretch)	COLORS=40 ;;
-			buster)		COLORS=41 ;;
-			bullseye)	COLORS=42 ;;
-			bookworm)	COLORS=43 ;;
-			trixie)		COLORS=44 ;;
-			unstable)	COLORS=45 ;;
-			experimental)	COLORS=46 ;; # increasing this also needs changes in make_graph.py around line 64
+			stretch)	COLORS=101 ;;
+			buster)		COLORS=102 ;;
+			bullseye)	COLORS=103 ;;
+			bookworm)	COLORS=104 ;;
+			trixie)		COLORS=105 ;; # adding another suite after this one also needs changes in make_graph.py around line 64
+			unstable)	COLORS=200 ;;
+			experimental)	COLORS=300 ;;
 		esac
 	fi
 	local WIDTH=1920


=====================================
bin/reproducible_html_dashboard.sh
=====================================
@@ -28,7 +28,7 @@ FIELDS[0]="datum, reproducible, FTBR, FTBFS, other, untested"
 FIELDS[1]="datum"
 for i in reproducible FTBR FTBFS other ; do
 	# $ARCHIVED_SUITES are needed as we still collect stats in create_debian_png_from_table() as part of wider stats
-	for j in $SUITES $ARCHIVED_SUITES ; do
+	for j in $ARCHIVED_SUITES $SUITES ; do
 		FIELDS[1]="${FIELDS[1]}, ${i}_${j}"
 	done
 done
@@ -80,7 +80,7 @@ REPRODUCIBLE_DONE="$REPRODUCIBLE_DONE)"
 REPRODUCIBLE_OPEN="$REPRODUCIBLE_OPEN)"
 FIELDS[10]="datum, with_buildinfo, without_buildinfo"
 COLOR[0]=5
-COLOR[1]=20
+COLOR[1]=99
 COLOR[2]=1
 COLOR[3]=32
 COLOR[4]=1
@@ -367,12 +367,12 @@ write_build_performance_stats() {
 	for ARCH in ${ARCHS} ; do
 		write_page " <th>$ARCH</th>"
 	done
-	write_page "</tr><tr><td class=\"left\">oldest build result in bookworm / unstable / experimental</td>"
+	write_page "</tr><tr><td class=\"left\">oldest build result in ${TESTING_SUITE} / unstable / experimental</td>"
 	for ARCH in ${ARCHS} ; do
-		AGE_BOOKWORM=$(query_db "SELECT CAST(greatest(max(oldest_reproducible), max(oldest_FTBR), max(oldest_FTBFS)) AS INTEGER) FROM ${TABLE[2]} WHERE suite='bookworm' AND architecture='$ARCH' AND datum='$DATE'")
+		AGE_TESTING=$(query_db "SELECT CAST(greatest(max(oldest_reproducible), max(oldest_FTBR), max(oldest_FTBFS)) AS INTEGER) FROM ${TABLE[2]} WHERE suite='${TESTING_SUITE}' AND architecture='$ARCH' AND datum='$DATE'")
 		AGE_UNSTABLE=$(query_db "SELECT CAST(greatest(max(oldest_reproducible), max(oldest_FTBR), max(oldest_FTBFS)) AS INTEGER) FROM ${TABLE[2]} WHERE suite='unstable' AND architecture='$ARCH' AND datum='$DATE'")
 		AGE_EXPERIMENTAL=$(query_db "SELECT CAST(greatest(max(oldest_reproducible), max(oldest_FTBR), max(oldest_FTBFS)) AS INTEGER) FROM ${TABLE[2]} WHERE suite='experimental' AND architecture='$ARCH' AND datum='$DATE'")
-		write_page "<td>$AGE_BOOKWORM / $AGE_UNSTABLE / $AGE_EXPERIMENTAL days</td>"
+		write_page "<td>$AGE_TESTING / $AGE_UNSTABLE / $AGE_EXPERIMENTAL days</td>"
 	done
 	write_page "</tr><tr><td class=\"left\">Build jobs configured</td>"
 	for ARCH in ${ARCHS} ; do
@@ -569,13 +569,24 @@ create_dashboard_page() {
 	ARCH="amd64"
 	echo "$(date -u) - starting to write $PAGE page."
 	write_page_header $VIEW "Overview of various statistics about reproducible builds"
-	write_suite_arch_table trixie unstable experimental
+	declare -a DEVELOPMENT_SUITES
+	for SUITE in $SUITES ; do
+		for s in ${RELEASED_SUITES} ; do
+			if [ "$SUITE" = "$s" ] ; then
+				continue 2
+			fi
+		done
+		DEVELOPMENT_SUITES=("${DEVELOPMENT_SUITES[@]}" "$SUITE")
+	done
+	write_suite_arch_table ${DEVELOPMENT_SUITES[@]}
 	# write suite graphs
 	for ARCH in ${ARCHS} ; do
 		for SUITE in $SUITES ; do
-			if [ "$SUITE" != "trixie" ] && [ "$SUITE" != "unstable" ] && [ "$SUITE" != "experimental" ]  ; then
-				continue
-			fi
+			for s in ${RELEASED_SUITES} ; do
+				if [ "$SUITE" = "$s" ] ; then
+					continue 2
+				fi
+			done
 			write_page " <a href=\"/debian/$SUITE/$ARCH\"><img src=\"/debian/$SUITE/$ARCH/${TABLE[0]}.png\" class=\"tripleview\" alt=\"$SUITE/$ARCH stats\"></a>"
 		done
 		SUITE="unstable"
@@ -601,10 +612,10 @@ create_dashboard_page() {
 	local TD_PKG_SID_FTBR="<tr><td class=\"left\">  - unreproducible ones</a></td><td></td>"
 	local TD_PKG_SID_FTBFS="<tr><td class=\"left\">  - failing to build</a></td><td></td>"
 	local TD_PKG_SID_ISSUES="<tr><td class=\"left\">packages in unstable which need to be fixed</td><td></td>"
-	local TD_PKG_TESTING_NOISSUES="<tr><td class=\"left\">packages in bookworm with issues but without identified ones</td><td></td>"
+	local TD_PKG_TESTING_NOISSUES="<tr><td class=\"left\">packages in ${TESTING_SUITE} with issues but without identified ones</td><td></td>"
 	local TD_PKG_TESTING_FTBR="<tr><td class=\"left\">  - unreproducible ones</a></td><td></td>"
 	local TD_PKG_TESTING_FTBFS="<tr><td class=\"left\">  - failing to build</a></td><td></td>"
-	local TD_PKG_TESTING_ISSUES="<tr><td class=\"left\">packages in bookworm which need to be fixed</td><td></td>"
+	local TD_PKG_TESTING_ISSUES="<tr><td class=\"left\">packages in ${TESTING_SUITE} which need to be fixed</td><td></td>"
 	for ARCH in ${ARCHS} ; do
 		SUITE="unstable"
 		gather_suite_arch_stats
@@ -616,8 +627,7 @@ create_dashboard_page() {
 		TD_PKG_SID_FTBR="$TD_PKG_SID_FTBR<td>$RESULT / $(bc_round "($RESULT*100/$COUNT_TOTAL)")%</td>"
 		RESULT=$(query_db "SELECT COUNT(*) FROM (SELECT s.id FROM sources AS s JOIN results AS r ON r.package_id=s.id WHERE r.status='FTBFS' AND s.id NOT IN (SELECT package_id FROM notes) AND s.suite='$SUITE' AND s.architecture='$ARCH') tmp")
 		TD_PKG_SID_FTBFS="$TD_PKG_SID_FTBFS<td>$RESULT / $(bc_round "($RESULT*100/$COUNT_TOTAL)")%</td>"
-		# define next stable release here:
-		SUITE="bookworm"
+		SUITE="${TESTING_SUITE}"
 		gather_suite_arch_stats
 		TD_PKG_TESTING_ISSUES="$TD_PKG_TESTING_ISSUES<td>$(echo $COUNT_BAD + $COUNT_UGLY |bc) / $(echo $PERCENT_BAD + $PERCENT_UGLY|bc)%</td>"
 		RESULT=$(query_db "SELECT COUNT(*) FROM (SELECT s.id FROM sources AS s JOIN results AS r ON r.package_id=s.id WHERE r.status IN ('FTBR', 'FTBFS', 'blacklisted') AND s.id NOT IN (SELECT package_id FROM notes) AND s.suite='$SUITE' AND s.architecture='$ARCH') tmp")
@@ -661,7 +671,7 @@ create_dashboard_page() {
 		write_global_graph
 	done
 	write_page "</p><p style=\"clear:both;\">"
-	write_page "<a href=\"index_performance.html\">Build network performance stats</a> and an <a href=\"index_oldsuites.html\">overview about the old suites 'bookworm', 'bullseye', 'buster' and 'stretch'</a> are also available."
+	write_page "<a href=\"index_performance.html\">Build network performance stats</a> and an <a href=\"index_oldsuites.html\">overview about older suites</a> are also available."
 	write_page "</p>"
 	# the end
 	write_page_footer
@@ -678,7 +688,7 @@ create_oldsuites_page() {
 	ARCH="amd64"
 	echo "$(date -u) - starting to write $PAGE page."
 	write_page_header $VIEW "Overview of old suites"
-	for SUITE in bookworm bullseye buster stretch ; do
+	for SUITE in ${RELEASED_SUITES} ; do
 		write_suite_arch_table $SUITE
 		for ARCH in ${ARCHS} ; do
 			write_page " <a href=\"/debian/$SUITE/$ARCH\"><img src=\"/debian/$SUITE/$ARCH/${TABLE[0]}.png\" class=\"overview\" alt=\"$SUITE/$ARCH stats\"></a>"
@@ -770,15 +780,17 @@ create_performance_page() {
 	write_page "</p><p style=\"clear:both;\">"
 	for ARCH in ${ARCHS} ; do
 		for SUITE in $SUITES ; do
-			if [ $SUITE != "trixie" ] && [ $SUITE != "unstable" ] && [ "$SUITE" != "experimental" ] ; then
-				continue
-			fi
+			for s in ${RELEASED_SUITES} ; do
+				if [ "$SUITE" = "$s" ] ; then
+					continue 2
+				fi
+			done
 			write_page " <a href=\"/debian/$SUITE/$ARCH/${TABLE[2]}.png\"><img src=\"/debian/$SUITE/$ARCH/${TABLE[2]}.png\" class=\"tripleview\" alt=\"age of oldest reproducible build result in $SUITE/$ARCH\"></a>"
 		done
 		write_page "</p><p style=\"clear:both;\">"
 	done
 	# the end
-	write_page "<a href=\"index_oldsuites.html\">Build network performance stats for the old suites</a> are available as part of the old suites overview.<br />"
+	write_page "Build network performance stats for the old suites are available as <a href=\"index_oldsuites.html\">part of the old suites overview.</a><br />"
 	write_page "Daily <a href=\"https://jenkins.debian.net/view/reproducible/job/reproducible_html_nodes_info/lastBuild/console\">individual build node performance stats</a> are available as well as oldest results for "
 	for ARCH in ${ARCHS} ; do
 		comma_comma_and ${ARCH}
@@ -819,9 +831,11 @@ for ARCH in ${ARCHS} ; do
 		update_buildinfo_stats
 		gather_suite_arch_stats
 		# old suites are only updated every 12h
-		if ( [ "$SUITE" != "trixie" ] && [ "$SUITE" != "unstable" ] && [ "$SUITE" != "experimental" ] ) && [[ $(($(date +%k) % 12)) -ne 0 ]]; then
-				continue
-		fi
+		for s in ${RELEASED_SUITES} ; do
+			if [ "$SUITE" = "$s" ] && [[ $(($(date +%k) % 12)) -ne 0 ]]; then
+				continue 2
+			fi
+		done
 		create_suite_arch_stats_page
 	done
 done



View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/compare/e950015c42b7694415740ec51c376585cbecc5db...d4b9f4eaa7c5150c9239333a8433fb29e29b4e65

-- 
View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/compare/e950015c42b7694415740ec51c376585cbecc5db...d4b9f4eaa7c5150c9239333a8433fb29e29b4e65
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/qa-jenkins-scm/attachments/20230613/79ea7bae/attachment-0001.htm>


More information about the Qa-jenkins-scm mailing list