summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerie R Young <spectranaut@riseup.net>2016-07-16 10:17:26 -0400
committerHolger Levsen <holger@layer-acht.org>2016-07-24 11:46:03 -0400
commita93cd8dbb2de5474ec20b728f09395575d81cac2 (patch)
tree408cb00a5cbc5ff4414e9ece4f8141a4b0fd3d35
parentf4ea95be872e2aebcf5ac6b46b5d504d35c078be (diff)
downloadjenkins.debian.net-a93cd8dbb2de5474ec20b728f09395575d81cac2.tar.xz
reproducible debian: add cross arch/suite navigation for many pages
From the left navigation "suite/arch" section, you can now navigation between suite and architecture specific results for the following pages: packages sets, packages with notes, packages without notes, packages tested in 24/48hs, all packages state pages and all packages page. Signed-off-by: Holger Levsen <holger@layer-acht.org>
-rwxr-xr-xbin/reproducible_common.py40
-rwxr-xr-xbin/reproducible_common.sh18
-rwxr-xr-xbin/reproducible_html_indexes.py7
-rwxr-xr-xbin/reproducible_html_pkg_sets.py11
-rw-r--r--bin/templates/main_navigation.mustache13
5 files changed, 69 insertions, 20 deletions
diff --git a/bin/reproducible_common.py b/bin/reproducible_common.py
index de60cbd3..e9d93566 100755
--- a/bin/reproducible_common.py
+++ b/bin/reproducible_common.py
@@ -55,6 +55,7 @@ REPRODUCIBLE_JSON = BASE + '/reproducible.json'
REPRODUCIBLE_TRACKER_JSON = BASE + '/reproducible-tracker.json'
REPRODUCIBLE_DB = '/var/lib/jenkins/reproducible.db'
+DEBIAN_URI = '/debian'
DBD_URI = '/debian/dbd'
DBDTXT_URI = '/debian/dbdtxt'
LOGS_URI = '/debian/logs'
@@ -256,20 +257,41 @@ def convert_into_hms_string(duration):
return duration
-# See bash equivelent: reproducible_common.sh's "write_page_header()"
-def create_main_navigation(page_title, suite, arch, displayed_page=None):
+def gen_suite_arch_nav_context(suite, arch, suite_arch_nav_template=None,
+ ignore_experimental=False):
+ # if a template is not passed in to navigate between suite and archs
+ # for the current page, we use the suite/arch summary view
+ if not suite_arch_nav_template:
+ suite_arch_nav_template = '/debian/{{suite}}/index_suite_{{arch}}_stats.html'
suite_list = []
for s in SUITES:
+ include_suite = True
+ if s == 'experimental' and ignore_experimental:
+ include_suite = False
suite_list.append({
's': s,
- 'class': 'current' if s == suite else ''
+ 'class': 'current' if s == suite else '',
+ 'uri': renderer.render(suite_arch_nav_template,
+ {'suite': s, 'arch': arch})
+ if include_suite else '',
})
arch_list = []
for a in ARCHS:
arch_list.append({
'a': a,
- 'class': 'current' if a == arch else ''
+ 'class': 'current' if a == arch else '',
+ 'uri': renderer.render(suite_arch_nav_template,
+ {'suite': suite, 'arch': a}),
})
+ return (suite_list, arch_list)
+
+
+# See bash equivelent: reproducible_common.sh's "write_page_header()"
+def create_main_navigation(page_title, suite, arch, displayed_page=None,
+ suite_arch_nav_template=None,
+ ignore_experimental=False):
+ suite_list, arch_list = gen_suite_arch_nav_context(suite, arch,
+ suite_arch_nav_template, ignore_experimental)
context = {
'page_title': page_title,
'suite': suite,
@@ -278,12 +300,13 @@ def create_main_navigation(page_title, suite, arch, displayed_page=None):
'suite_list': suite_list,
'arch_list': arch_list,
'debian_uri': DEBIAN_DASHBOARD_URI,
+ 'cross_suite_arch_nav': True if suite_arch_nav_template else False,
}
if suite != 'experimental':
# there are not package sets in experimental
context['include_pkgset_link'] = True
- # this argument controls which of the main page navigation items will be
- # highlighted.
+ # the "display_page" argument controls which of the main page navigation
+ # items will be highlighted.
if displayed_page:
context[displayed_page] = True
return renderer.render(main_navigation_template, context)
@@ -291,7 +314,8 @@ def create_main_navigation(page_title, suite, arch, displayed_page=None):
def write_html_page(title, body, destfile, suite=defaultsuite, arch=defaultarch,
noheader=False, style_note=False, noendpage=False,
- packages=False, refresh_every=None, displayed_page=None):
+ packages=False, refresh_every=None, displayed_page=None,
+ suite_arch_nav_template=None, ignore_experimental=False):
meta_refresh = '<meta http-equiv="refresh" content="%d">' % \
refresh_every if refresh_every is not None else ''
context = {
@@ -304,6 +328,8 @@ def write_html_page(title, body, destfile, suite=defaultsuite, arch=defaultarch,
suite=suite,
arch=arch,
displayed_page=displayed_page,
+ suite_arch_nav_template=suite_arch_nav_template,
+ ignore_experimental=ignore_experimental,
)
main_html = body
if style_note:
diff --git a/bin/reproducible_common.sh b/bin/reproducible_common.sh
index ac5116ba..293aff74 100755
--- a/bin/reproducible_common.sh
+++ b/bin/reproducible_common.sh
@@ -197,16 +197,17 @@ write_page_header() {
# Create json for suite links (a list of objects)
suite_links="\"suite_list\": ["
comma=0
- for i in $SUITES ; do
- if [ "$i" = "$SUITE" ] ; then
+ for s in $SUITES ; do
+ if [ "$s" = "$SUITE" ] ; then
class="current"
else
class=''
fi
+ uri="/debian/${s}/index_suite_${ARCH}_stats.html"
if [ $comma == 1 ] ; then
- suite_links+=", {\"s\": \"$i\", \"class\": \"$class\"}"
+ suite_links+=", {\"s\": \"${s}\", \"class\": \"$class\", \"uri\": \"$uri\"}"
else
- suite_links+="{\"s\": \"$i\", \"class\": \"$class\"}"
+ suite_links+="{\"s\": \"${s}\", \"class\": \"$class\", \"uri\": \"$uri\"}"
comma=1
fi
done
@@ -215,16 +216,17 @@ write_page_header() {
# Create json for arch links (a list of objects)
arch_links="\"arch_list\": ["
comma=0
- for i in ${ARCHS} ; do
- if [ "$i" = "$ARCH" ] ; then
+ for a in ${ARCHS} ; do
+ if [ "$a" = "$ARCH" ] ; then
class="current"
else
class=''
fi
+ uri="/debian/$SUITE/index_suite_${a}_stats.html"
if [ $comma == 1 ] ; then
- arch_links+=", {\"a\": \"$i\", \"class\": \"$class\"}"
+ arch_links+=", {\"a\": \"${a}\", \"class\": \"$class\", \"uri\": \"$uri\"}"
else
- arch_links+="{\"a\": \"$i\", \"class\": \"$class\"}"
+ arch_links+="{\"a\": \"${a}\", \"class\": \"$class\", \"uri\": \"$uri\"}"
comma=1
fi
done
diff --git a/bin/reproducible_html_indexes.py b/bin/reproducible_html_indexes.py
index 46a0b23f..a46f62a6 100755
--- a/bin/reproducible_html_indexes.py
+++ b/bin/reproducible_html_indexes.py
@@ -44,6 +44,7 @@ Reference doc for the folowing lists:
- force the suite/arch to the defaults
+ notes: if true the query also takes the value "status"
+
Technically speaking, a page can be empty (we all love nonsense) but every
section must have at least a `query` defining what to file in.
"""
@@ -521,6 +522,7 @@ def build_page(page, suite=None, arch=None):
html1, footnote1 = build_page_section(page, section, suite, arch)
html += html1
footnote = True if footnote1 else footnote
+ suite_arch_nav_template = None
if gpage:
destfile = DEBIAN_BASE + '/index_' + page + '.html'
desturl = DEBIAN_URL + '/index_' + page + '.html'
@@ -529,8 +531,11 @@ def build_page(page, suite=None, arch=None):
destfile = DEBIAN_BASE + '/' + suite + '/' + arch + '/index_' + page + '.html'
desturl = DEBIAN_URL + '/' + suite + '/' + arch + '/index_' + \
page + '.html'
+ suite_arch_nav_template = DEBIAN_URI + '/{{suite}}/{{arch}}/index_' + \
+ page + '.html'
write_html_page(title=title, body=html, destfile=destfile, suite=suite,
- arch=arch, style_note=True, displayed_page=page)
+ arch=arch, style_note=True, displayed_page=page,
+ suite_arch_nav_template=suite_arch_nav_template)
log.info('"' + title + '" now available at ' + desturl)
diff --git a/bin/reproducible_html_pkg_sets.py b/bin/reproducible_html_pkg_sets.py
index f5dc9fab..7a81ac6c 100755
--- a/bin/reproducible_html_pkg_sets.py
+++ b/bin/reproducible_html_pkg_sets.py
@@ -141,10 +141,14 @@ def create_index_page(suite, arch):
body = create_pkgset_navigation(suite, arch)
destfile = os.path.join(DEBIAN_BASE, suite, arch,
"index_pkg_sets.html")
+ suite_arch_nav_template = DEBIAN_URI + \
+ '/{{suite}}/{{arch}}/index_pkg_sets.html'
log.info("Creating pkgset index page for %s/%s.",
suite, arch)
write_html_page(title=title, body=body, destfile=destfile, suite=suite,
- arch=arch, displayed_page='pkg_set')
+ arch=arch, displayed_page='pkg_set',
+ suite_arch_nav_template=suite_arch_nav_template,
+ ignore_experimental=True)
def gen_other_arch_context(archs, suite, pkgset_name):
@@ -237,10 +241,13 @@ def create_pkgset_page_and_graphs(suite, arch, stats, pkgset_name):
(pkgset_name, suite, arch)
page = "pkg_set_" + pkgset_name + ".html"
destfile = os.path.join(DEBIAN_BASE, suite, arch, page)
+ suite_arch_nav_template = DEBIAN_URI + '/{{suite}}/{{arch}}/' + page
log.info("Creating meta pkgset page for %s in %s/%s.",
pkgset_name, suite, arch)
write_html_page(title=title, body=html_body, destfile=destfile, suite=suite,
- arch=arch, displayed_page='pkg_set')
+ arch=arch, displayed_page='pkg_set',
+ suite_arch_nav_template=suite_arch_nav_template,
+ ignore_experimental=True)
def create_pkgset_graph(png_file, suite, arch, pkgset_name):
diff --git a/bin/templates/main_navigation.mustache b/bin/templates/main_navigation.mustache
index 1846a2e7..8b9de722 100644
--- a/bin/templates/main_navigation.mustache
+++ b/bin/templates/main_navigation.mustache
@@ -1,15 +1,22 @@
<a href="{{debian_uri}}"><h2>Debian Dashboard</h2></a>
<ul class="menu">
+ {{^cross_suite_arch_nav}}
<h4>Suite/Architecture Overviews</h4>
+ {{/cross_suite_arch_nav}}
+ {{#cross_suite_arch_nav}}
+ <h4>Change Suite/Architecture</h4>
+ {{/cross_suite_arch_nav}}
<li>
Tested architectures:
<ul class="children">
<li>
{{#arch_list}}
+ {{#uri}}
<a class='{{class}}'
- href="/debian/{{suite}}/index_suite_{{a}}_stats.html">
+ href="{{uri}}">
{{a}}
</a>
+ {{/uri}}
{{/arch_list}}
</li>
</ul>
@@ -18,10 +25,12 @@
<ul class="children">
<li>
{{#suite_list}}
+ {{#uri}}
<a class='{{class}}'
- href="/debian/{{s}}/index_suite_{{arch}}_stats.html">
+ href="{{uri}}">
{{s}}
</a>
+ {{/uri}}
{{/suite_list}}
</li>
</ul>