summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Levsen <holger@layer-acht.org>2015-02-23 17:23:22 +0100
committerHolger Levsen <holger@layer-acht.org>2015-02-23 17:24:58 +0100
commit5a5642e65f44d7f253674bfd03f576d53c8a27a7 (patch)
tree4befccb43c5ffb28469235a5d79f91047855fbc9
parent620c5383f4283b4804d2f609e91831eacf8177cd (diff)
downloadjenkins.debian.net-5a5642e65f44d7f253674bfd03f576d53c8a27a7.tar.xz
reproducible: new page 'repo_stats'
-rw-r--r--TODO1
-rwxr-xr-xbin/reproducible_common.py1
-rwxr-xr-xbin/reproducible_common.sh7
-rwxr-xr-xbin/reproducible_html_repo_stats.sh61
-rw-r--r--job-cfg/reproducible.yaml13
5 files changed, 78 insertions, 5 deletions
diff --git a/TODO b/TODO
index b1ad2102..695780de 100644
--- a/TODO
+++ b/TODO
@@ -115,7 +115,6 @@ properties:
=== reproducible
-* new job+page: "packages different from sid in our toolchain", not sure yet where to link that...
* run debbindiff against .changes files in current directory, instead of $LONGPATHES (due to #764459)
* reproducible: dont delete userContent/$pkg on build begin..
diff --git a/bin/reproducible_common.py b/bin/reproducible_common.py
index d7340fb2..1df694f0 100755
--- a/bin/reproducible_common.py
+++ b/bin/reproducible_common.py
@@ -155,6 +155,7 @@ html_head_page = Template((tab*2).join("""
<li><a href="/index_last_48h.html">packages tested in the last 48h</a></li>
<li><a href="/index_all_abc.html">all tested packages (sorted alphabetically)</a></li>
<li><a href="/index_dd-list.html">maintainers of unreproducible packages</a></li>
+ <li><a href="/index_repo_stats.html">apt repository stats</a></li>
<li><a href="/index_pkg_sets.html">package sets stats</a></li>
<li><a href="/index_stats.html">stats</a></li>
</ul>
diff --git a/bin/reproducible_common.sh b/bin/reproducible_common.sh
index 40e36a0c..173c863e 100755
--- a/bin/reproducible_common.sh
+++ b/bin/reproducible_common.sh
@@ -163,7 +163,7 @@ init_html() {
SUITE=sid
MAINVIEW="stats"
ALLSTATES="reproducible FTBR FTBFS 404 not_for_us blacklisted"
- ALLVIEWS="issues notes no_notes scheduled last_24h last_48h all_abc dd-list pkg_sets stats"
+ ALLVIEWS="issues notes no_notes scheduled last_24h last_48h all_abc dd-list repo_stats pkg_sets stats"
SPOKENTARGET["reproducible"]="packages which built reproducibly"
SPOKENTARGET["FTBR"]="packages which failed to build reproducibly"
SPOKENTARGET["FTBFS"]="packages which failed to build from source"
@@ -178,8 +178,9 @@ init_html() {
SPOKENTARGET["last_48h"]="packages tested in the last 48h"
SPOKENTARGET["all_abc"]="all tested packages (sorted alphabetically)"
SPOKENTARGET["dd-list"]="maintainers of unreproducible packages"
- SPOKENTARGET["stats"]="various statistics about reproducible builds"
+ SPOKENTARGET["repo_stats"]="statistics about the reproducible builds apt repository"
SPOKENTARGET["pkg_sets"]="statistics about reproducible builds of specific package sets"
+ SPOKENTARGET["stats"]="various statistics about reproducible builds"
# query some data we need everywhere
AMOUNT=$(sqlite3 -init $INIT $PACKAGES_DB "SELECT count(name) FROM sources")
COUNT_TOTAL=$(sqlite3 -init $INIT $PACKAGES_DB "SELECT COUNT(name) FROM source_packages")
@@ -248,6 +249,8 @@ write_page_header() {
SPOKEN_TARGET="currently scheduled"
elif [ "$TARGET" = "pkg_sets" ] ; then
SPOKEN_TARGET="package sets stats"
+ elif [ "$TARGET" = "repo_stats" ] ; then
+ SPOKEN_TARGET="apt repository stats"
else
SPOKEN_TARGET=${SPOKENTARGET[$TARGET]}
fi
diff --git a/bin/reproducible_html_repo_stats.sh b/bin/reproducible_html_repo_stats.sh
new file mode 100755
index 00000000..3506ad1f
--- /dev/null
+++ b/bin/reproducible_html_repo_stats.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+# Copyright 2015 Holger Levsen <holger@layer-acht.org>
+# released under the GPLv=2
+
+DEBUG=false
+. /srv/jenkins/bin/common-functions.sh
+common_init "$@"
+
+# common code defining db access
+. /srv/jenkins/bin/reproducible_common.sh
+
+set +x
+init_html
+
+VIEW=repo_stats
+PAGE=index_${VIEW}.html
+echo "$(date) - starting to write $PAGE page."
+write_page_header $VIEW "Overview of ${SPOKENTARGET[$VIEW]}"
+TMPFILE=$(mktemp)
+TMPSCRIPT=$(mktemp)
+echo "cat /var/lib/apt/lists/reproducible.alioth.debian.org_debian_._Packages" > $TMPSCRIPT
+sudo pbuilder --execute --basetgz /var/cache/pbuilder/base-reproducible.tgz $TMPSCRIPT > $TMPFILE
+grep -v ^I:\ $TMPFILE > $TMPSCRIPT
+mv $TMPSCRIPT $TMPFILE
+
+write_page "<p>The source packages are different from sid in our toolchain. They are available in an apt repository on alioth which is accessable with these sources.lists entries:"
+write_page "deb http://reproducible.alioth.debian.org/debian/ ./"
+write_page "deb-src http://reproducible.alioth.debian.org/debian/ ./"
+write_page "</pre></p>"
+write_page "<p><table><th>source package</th><th>version(s)</th>"
+SOURCES=$(grep-dctrl -n -s source -FArchitecture amd64 -o -FArchitecture all $TMPFILE | sort -u)
+for PKG in $SOURCES ; do
+ write_page "<tr>td>$PKG</td><td>"
+ VERSIONS=$(grep-dctrl -n -s version -S $PKG $TMPFILE|sort -u)
+ BET=""
+ for VERSION in ${VERSIONS} ; do
+ if [ "$BET" = "" ] ; then
+ BET=${VERSION}
+ continue
+ elif dpkg --compare-versions "$BET" lt "${VERSION}" ; then
+ BET=${VERSION}
+ fi
+ done
+ write_page "$BET<br>"
+ WARNED=false
+ for VERSION in ${VERSIONS} ; do
+ if [ "${VERSION}" != "$BET" ] ; then
+ write_page "${VERSION}<br>"
+ elif ! $WARNED ; then
+ echo "Warning: more than one version of $PKG available in our repo, please clean up."
+ WARNED=true
+ fi
+ done
+ write_page "</td></tr>"
+done
+write_page "</table></p>"
+rm $TMPFILE
+write_page_footer
+publish_page
+
diff --git a/job-cfg/reproducible.yaml b/job-cfg/reproducible.yaml
index 7e90bc4b..bfe1f7c7 100644
--- a/job-cfg/reproducible.yaml
+++ b/job-cfg/reproducible.yaml
@@ -154,8 +154,12 @@
- job-template:
defaults: reproducible
name: '{name}_html_all_packages'
--
- job-template:
+
+- job-template:
+ defaults: reproducible
+ name: '{name}_html_repo_stats'
+
+- job-template:
defaults: reproducible
name: '{name}_create_meta_pkg_sets'
@@ -231,6 +235,11 @@
my_timed: '12 12 30 12 *'
my_shell: '/srv/jenkins/bin/reproducible_html_all_packages.sh'
my_recipients: 'holger@layer-acht.org'
+ - '{name}_html_repo_stats':
+ my_description: 'Generate HTML results (repo_stats) for reproducible builds.'
+ my_timed: '0 1 * * *'
+ my_shell: '/srv/jenkins/bin/reproducible_html_repo_stats.sh'
+ my_recipients: 'holger@layer-acht.org'
- '{name}_json':
my_description: 'Generate https://reproducible.debian.net/userContent/reproducible.json for consumption by tracker.debian.org.'
my_timed: '1 * * * *'