diff options
-rwxr-xr-x | bin/reproducible_common.sh | 199 | ||||
-rw-r--r-- | bin/templates/basic_page.mustache | 4 | ||||
-rw-r--r-- | bin/templates/main_navigation.mustache | 203 |
3 files changed, 183 insertions, 223 deletions
diff --git a/bin/reproducible_common.sh b/bin/reproducible_common.sh index 7f239608..52488936 100755 --- a/bin/reproducible_common.sh +++ b/bin/reproducible_common.sh @@ -106,6 +106,9 @@ done < $BIN_PATH/meta_pkgset.csv # mustache templates PAGE_FOOTER_TEMPLATE=$TEMPLATE_PATH/default_page_footer.mustache +PROJECT_LINKS_TEMPLATE=$TEMPLATE_PATH/project_links.mustache +MAIN_NAVIGATION_TEMPLATE=$TEMPLATE_PATH/main_navigation.mustache + # sleep 1-23 secs to randomize start times delay_start() { @@ -162,146 +165,92 @@ write_page_header() { # the solution is to write all html pages with python… rm -f $PAGE MAINVIEW="dashboard" - ALLSTATES="reproducible FTBR FTBFS depwait not_for_us 404 blacklisted" - ALLVIEWS="notes no_notes pkg_sets last_24h last_48h all_abc arch scheduled suite_stats dd-list dashboard issues repositories notify performance variations breakages" - GLOBALVIEWS="issues scheduled notify repositories dashboard performance variations breakages" - SUITEVIEWS="dd-list suite_stats" - SPOKENTARGET["issues"]="issues" - SPOKENTARGET["notes"]="packages with notes" - SPOKENTARGET["no_notes"]="packages without notes" - SPOKENTARGET["scheduled"]="currently scheduled" - SPOKENTARGET["last_24h"]="packages tested in the last 24h" - SPOKENTARGET["last_48h"]="packages tested in the last 48h" - SPOKENTARGET["all_abc"]="all tested packages (sorted alphabetically)" - SPOKENTARGET["notify"]="⚑ packages with enabled notifications" - SPOKENTARGET["dd-list"]="maintainers of unreproducible packages" - SPOKENTARGET["pkg_sets"]="package sets" - SPOKENTARGET["suite_stats"]="suite: $SUITE" - SPOKENTARGET["repositories"]="repositories overview" - SPOKENTARGET["dashboard"]="Debian dashboard" - SPOKENTARGET["performance"]="performance stats" - SPOKENTARGET["variations"]="variations tested" - SPOKENTARGET["breakages"]="broken pieces" write_page "<!DOCTYPE html><html><head>" write_page "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />" write_page "<meta name=\"viewport\" content=\"width=device-width\" />" write_page "<link href=\"/static/style.css\" type=\"text/css\" rel=\"stylesheet\" />" write_page "<title>$2</title></head>" if [ "$1" != "$MAINVIEW" ] ; then - write_page "<body class=\"wrapper\"><header class=\"head\"><h2>$2</h2>" + write_page "<body class=\"wrapper\">" + else + write_page "<body class=\"wrapper\" onload=\"selectSearch()\">" + fi + + # Build context for the main_navigation mustache template. + + # Do not show package set links for "experimental" pages + if [ "$SUITE" != "experimental" ] ; then + # no pkg_sets are tested in experimental + include_pkgset_link="\"include_pkgset_link\" : \"true\"" + else + include_pkgset_link='' + fi + + # Used to highlight the link for the current page + if [ "$1" = "dashboard" ] || [ "$1" = "performance" ] || [ "$1" = "repositories" ] || [ "$1" = "variations" ] ; then + displayed_page="\"$1\": \"true\"" else - write_page "<body class=\"wrapper\" onload=\"selectSearch()\"><header class=\"head\"><h2>$2</h2>" + displayed_page='' fi - write_page "<ul class=\"menu\">" - write_page "<li>$SUITE/$ARCH:<ul class=\"children\">" - local CLASS="" - for TARGET in $ALLVIEWS ; do - CLASS="" - if [ "$TARGET" = "pkg_sets" ] && [ "$SUITE" = "experimental" ] ; then - # no pkg_sets are tested in experimental - continue + + # Create json for suite links (a list of objects) + suite_links="\"suite_list\": [" + comma=0 + for i in $SUITES ; do + if [ "$1" = "suite_arch_stats" ] && [ "$i" = "$SUITE" ] ; then + class="class='active'" + else + class='' fi - SPOKEN_TARGET=${SPOKENTARGET[$TARGET]} - BASEURL="/debian/$SUITE/$ARCH" - local i - for i in $GLOBALVIEWS ; do - if [ "$TARGET" = "$i" ] ; then - BASEURL="/debian" - fi - done - for i in ${SUITEVIEWS} ; do - if [ "$TARGET" = "$i" ] ; then - BASEURL="/debian/$SUITE" - fi - done - # prepare unsorted lists - if [ "$TARGET" = "notes" ] ; then - write_page "<li>Notes<ul class=\"children\">" - elif [ "$TARGET" = "last_24h" ] ; then - write_page "<li>Recently tested:<ul class=\"children\">" + if [ $comma == 1 ] ; then + suite_links+=", {\"s\": \"$i\", \"class\": \"$class\"}" + else + suite_links+="{\"s\": \"$i\", \"class\": \"$class\"}" + comma=1 fi - # prepare links - if [ "$TARGET" = "scheduled" ] ; then - write_page "<li><a href=\"/debian/index_${ARCH}_scheduled.html\">${SPOKEN_TARGET}</a></li>" - elif [ "$TARGET" = "notify" ] ; then - write_page "<li><a href=\"$BASEURL/index_${TARGET}.html\" title=\"notify icon\">${SPOKEN_TARGET}</a></li>" - elif [ "$TARGET" = "arch" ] ; then - write_page "<li>Architectures:<ul class=\"children\"><li>" - for i in ${ARCHS} ; do - if [ "$1" = "suite_arch_stats" ] && [ "$i" = "$ARCH" ] ; then - CLASS=" class=\"active\"" - fi - write_page " <a href=\"/debian/$SUITE/index_suite_${i}_stats.html\"$CLASS>$i</a> " - CLASS="" - done - write_page "</li>" - elif [ "$TARGET" = "suite_stats" ] ; then - write_page "<li>Suites:<ul class=\"children\"><li>" - for i in $SUITES ; do - if [ "$1" = "suite_arch_stats" ] && [ "$i" = "$SUITE" ] ; then - CLASS=" class=\"active\"" - fi - write_page " <a href=\"/debian/$i/index_suite_${ARCH}_stats.html\"$CLASS>$i</a> " - CLASS="" - done - write_page "</li>" - elif [ "$TARGET" = "dashboard" ] ; then - if [ "$1" = "dashboard" ] ; then - CLASS=" class=\"active\"" - fi - write_page "<li><a href=\"$BASEURL/index_${TARGET}.html\"$CLASS>${SPOKEN_TARGET}</a><ul class=\"children\">" + done + suite_links+="]" + + # Create json for arch links (a list of objects) + arch_links="\"arch_list\": [" + comma=0 + for i in ${ARCHS} ; do + if [ "$1" = "suite_arch_stats" ] && [ "$i" = "$ARCH" ] ; then + class="class='active'" else - if [ "$1" = "$TARGET" ] ; then - CLASS=" class=\"active\"" - fi - write_page "<li><a href=\"$BASEURL/index_${TARGET}.html\"$CLASS>${SPOKEN_TARGET}</a></li>" + class='' fi - # close unsorted lists (and package states loop) - if [ "$TARGET" = "all_abc" ] ; then - write_page "</ul></li>" - elif [ "$TARGET" = "last_48h" ] ; then - write_page "</ul></li>" - elif [ "$TARGET" = "breakages" ] ; then - write_page "</ul></li>" - elif [ "$TARGET" = "scheduled" ] ; then - write_page "</ul></li>" - elif [ "$TARGET" = "dd-list" ] ; then - write_page "</ul></li>" - elif [ "$TARGET" = "no_notes" ] ; then - write_page "</ul></li>" - # after notes we have package states - write_page "<li>Package states:" - write_page "<ul class=\"children\"><li>" - for MY_STATE in $ALLSTATES ; do - set_icon $MY_STATE - write_icon - write_page " " - done - write_page "</li></ul></li>" + if [ $comma == 1 ] ; then + arch_links+=", {\"a\": \"$i\", \"class\": \"$class\"}" + else + arch_links+="{\"a\": \"$i\", \"class\": \"$class\"}" + comma=1 fi done - write_page "</ul>" - # project links - write_page " <ul class=\"reproducible-links\">" - write_page " <li>Reproducible Builds projects links" - write_page " <ul class=\"children\"><li>" - write_page " <a href=\"https://Reproducible-builds.org\">Reproducible-builds.org</a><br />" - write_page " Reproducible-builds.org - <a href=\"https://Reproducible-builds.org/docs/\">HowTo</a><br />" - write_page " Reproducible Debian - <a href=\"https://wiki.debian.org/ReproducibleBuilds\">Wiki</a><br />" - write_page " Reproducible builds <a href=\"https://reproducible.alioth.debian.org/blog/\">weekly news</a><br />" - write_page " <a href=\"https://reproducible-builds.org/specs/source-date-epoch/\">SOURCE_DATE_EPOCH specification</a><br />" - write_page " </li><li>" - write_page " Reproducible <a href=\"https://tests.reproducible-builds.org/archlinux/\">Arch Linux</a> /" - write_page " <a href=\"https://tests.reproducible-builds.org/coreboot/\">coreboot</a> /" - write_page " <a href=\"https://tests.reproducible-builds.org/fedora/\">Fedora</a> /" - write_page " <a href=\"https://tests.reproducible-builds.org/freebsd/\">FreeBSD</a> /" - write_page " <a href=\"https://tests.reproducible-builds.org/netbsd/\">NetBSD</a> /" - write_page " <a href=\"https://tests.reproducible-builds.org/openwrt/\">OpenWrt</a>" - write_page " <a href=\"https://tests.reproducible-builds.org/lede/\">LEDE</a>" - write_page " </li></ul></li>" - write_page " </ul>" - # end project links + arch_links+="]" + + # finally, the completely formed JSON context + context=$(printf '{ + "arch" : "%s", + "suite" : "%s", + "page_title" : "%s", + "debian_url" : "%s", + %s, + %s + ' "$ARCH" "$SUITE" "$2" "$DEBIAN_URL" "$arch_links" "$suite_links") + if [[ ! -z $displayed_page ]] ; then + context+=", $displayed_page" + fi + if [[ ! -z $include_pkgset_link ]] ; then + context+=", $include_pkgset_link" + fi + context+="}" + + write_page "<header class=\"head\">" + write_page "$(pystache3 $MAIN_NAVIGATION_TEMPLATE "$context")" + write_page "$(pystache3 $PROJECT_LINKS_TEMPLATE "{}")" write_page "</header>" + write_page "<div class=\"mainbody\">" if [ "$1" = "$MAINVIEW" ] ; then write_page "<ul>" diff --git a/bin/templates/basic_page.mustache b/bin/templates/basic_page.mustache index 1239a4a0..345d2da0 100644 --- a/bin/templates/basic_page.mustache +++ b/bin/templates/basic_page.mustache @@ -8,7 +8,9 @@ <title>{{page_title}}</title> </head> <body class="wrapper"> - {{{main_navigation_html}}} + <header class="head"> + {{{main_navigation_html}}} + </header> <div class="mainbody"> {{{main_html}}} </div> diff --git a/bin/templates/main_navigation.mustache b/bin/templates/main_navigation.mustache index 6dab1692..ab905fd2 100644 --- a/bin/templates/main_navigation.mustache +++ b/bin/templates/main_navigation.mustache @@ -1,109 +1,118 @@ -<header class="head"> - <h2>{{page_title}}</h2> - <ul class="menu"> - <li>{{suite}}/{{arch}}:<ul class="children"> - <li>Notes:<ul class="children"> - <li {{#notes}}class='active'{{/notes}}> - <a href="/debian/{{suite}}/{{arch}}/index_notes.html"> - packages with notes - </a> - </li> - <li {{#no_notes}}class='active'{{/no_notes}}> - <a href="/debian/{{suite}}/{{arch}}/index_no_notes.html"> - packages without notes - </a> - </li> - </ul></li> - <li>Package states:<ul class="children"> - <li> - <a href="/debian/{{suite}}/{{arch}}/index_reproducible.html" target="_parent"> - <img src="/static/weather-clear.png" alt="reproducible icon" /> - </a> - <a href="/debian/{{suite}}/{{arch}}/index_FTBR.html" target="_parent"> - <img src="/static/weather-showers-scattered.png" alt="FTBR icon" /> - </a> - <a href="/debian/{{suite}}/{{arch}}/index_FTBFS.html" target="_parent"> - <img src="/static/weather-storm.png" alt="FTBFS icon" /> - </a> - <a href="/debian/{{suite}}/{{arch}}/index_depwait.html" target="_parent"> - <img src="/static/weather-snow.png" alt="depwait icon" /> - </a> - <a href="/debian/{{suite}}/{{arch}}/index_not_for_us.html" target="_parent"> - <img src="/static/weather-few-clouds-night.png" alt="not_for_us icon" /> - </a> - <a href="/debian/{{suite}}/{{arch}}/index_404.html" target="_parent"> - <img src="/static/weather-severe-alert.png" alt="404 icon" /> - </a> - <a href="/debian/{{suite}}/{{arch}}/index_blacklisted.html" target="_parent"> - <img src="/static/error.png" alt="blacklisted icon" /> - </a> - </li> - </ul></li> - {{#include_pkgset_link}} - <li {{#pkg_set}}class='active'{{/pkg_set}}> - <a href="/debian/{{suite}}/{{arch}}/index_pkg_sets.html"> - package sets +<h2>{{page_title}}</h2> +<ul class="menu"> + <li>{{suite}}/{{arch}}:<ul class="children"> + <li>Notes:<ul class="children"> + <li {{#notes}}class='active'{{/notes}}> + <a href="/debian/{{suite}}/{{arch}}/index_notes.html"> + packages with notes </a> </li> - {{/include_pkgset_link}} - <li>Recently tested:<ul class="children"> - <li {{#last_24h}}class='active'{{/last_24h}}> - <a href="/debian/{{suite}}/{{arch}}/index_last_24h.html"> - packages tested in the last 24h - </a> - </li> - <li {{#last_48h}}class='active'{{/last_48h}}> - <a href="/debian/{{suite}}/{{arch}}/index_last_48h.html"> - packages tested in the last 48h - </a> - </li> - </ul></li> - <li {{#all_abc}}class='active'{{/all_abc}}> - <a href="/debian/{{suite}}/{{arch}}/index_all_abc.html"> - all tested packages (sorted alphabetically) + <li {{#no_notes}}class='active'{{/no_notes}}> + <a href="/debian/{{suite}}/{{arch}}/index_no_notes.html"> + packages without notes </a> </li> </ul></li> - <li>Architectures:<ul class="children"> + <li>Package states:<ul class="children"> <li> - {{#arch_list}} - <a href="/debian/{{suite}}/index_suite_{{a}}_stats.html">{{a}}</a> - {{/arch_list}} - </li> - <li {{#scheduled}}class='active'{{/scheduled}}> - <a href="/debian/index_{{arch}}_scheduled.html">currently scheduled</a> + <a href="/debian/{{suite}}/{{arch}}/index_reproducible.html" target="_parent"> + <img src="/static/weather-clear.png" alt="reproducible icon" /> + </a> + <a href="/debian/{{suite}}/{{arch}}/index_FTBR.html" target="_parent"> + <img src="/static/weather-showers-scattered.png" alt="FTBR icon" /> + </a> + <a href="/debian/{{suite}}/{{arch}}/index_FTBFS.html" target="_parent"> + <img src="/static/weather-storm.png" alt="FTBFS icon" /> + </a> + <a href="/debian/{{suite}}/{{arch}}/index_depwait.html" target="_parent"> + <img src="/static/weather-snow.png" alt="depwait icon" /> + </a> + <a href="/debian/{{suite}}/{{arch}}/index_not_for_us.html" target="_parent"> + <img src="/static/weather-few-clouds-night.png" alt="not_for_us icon" /> + </a> + <a href="/debian/{{suite}}/{{arch}}/index_404.html" target="_parent"> + <img src="/static/weather-severe-alert.png" alt="404 icon" /> + </a> + <a href="/debian/{{suite}}/{{arch}}/index_blacklisted.html" target="_parent"> + <img src="/static/error.png" alt="blacklisted icon" /> + </a> </li> </ul></li> - <li>Suites:<ul class="children"> - <li> - {{#suite_list}} - <a href="/debian/{{s}}/index_suite_{{arch}}_stats.html">{{s}}</a> - {{/suite_list}} + {{#include_pkgset_link}} + <li {{#pkg_set}}class='active'{{/pkg_set}}> + <a href="/debian/{{suite}}/{{arch}}/index_pkg_sets.html"> + package sets + </a> + </li> + {{/include_pkgset_link}} + <li>Recently tested:<ul class="children"> + <li {{#last_24h}}class='active'{{/last_24h}}> + <a href="/debian/{{suite}}/{{arch}}/index_last_24h.html"> + packages tested in the last 24h + </a> </li> - <li {{#dd_list}}class='active'{{/dd_list}}> - <a href="/debian/{{suite}}/index_dd-list.html"> - maintainers of unreproducible packages + <li {{#last_48h}}class='active'{{/last_48h}}> + <a href="/debian/{{suite}}/{{arch}}/index_last_48h.html"> + packages tested in the last 48h </a> </li> </ul></li> - <li><a href="{{debian_url}}">Debian dashboard</a> - <ul class="children"> - <li {{#issues}}class='active'{{/issues}}> - <a href="/debian/index_issues.html">issues</a> - </li> - <li><a href="/debian/index_repositories.html"> - repositories overview</a></li> - <li {{#notify}}class='active'{{/notify}}> - <a href="/debian/index_notify.html" title="notify icon"> - ⚑ packages with enabled notifications - </a> - </li> - <li><a href="/debian/index_performance.html">performance stats</a></li> - <li><a href="/debian/index_variations.html">variations tested</a></li> - <li {{#breakages}}class='active'{{/breakages}}> - <a href="/debian/index_breakages.html">broken pieces</a> - </li> - </ul></li> - </ul> - {{{project_links_html}}} -</header> + <li {{#all_abc}}class='active'{{/all_abc}}> + <a href="/debian/{{suite}}/{{arch}}/index_all_abc.html"> + all tested packages (sorted alphabetically) + </a> + </li> + </ul></li> + <li>Architectures:<ul class="children"> + <li> + {{#arch_list}} + <a {{{class}}} href="/debian/{{suite}}/index_suite_{{a}}_stats.html"> + {{a}} + </a> + {{/arch_list}} + </li> + <li {{#scheduled}}class='active'{{/scheduled}}> + <a href="/debian/index_{{arch}}_scheduled.html">currently scheduled</a> + </li> + </ul></li> + <li>Suites:<ul class="children"> + <li> + {{#suite_list}} + <a {{{class}}} href="/debian/{{s}}/index_suite_{{arch}}_stats.html"> + {{s}} + </a> + {{/suite_list}} + </li> + <li {{#dd_list}}class='active'{{/dd_list}}> + <a href="/debian/{{suite}}/index_dd-list.html"> + maintainers of unreproducible packages + </a> + </li> + </ul></li> + <li><a {{#dashboard}}class='active'{{/dashboard}} href="{{debian_url}}">Debian dashboard</a> + <ul class="children"> + <li {{#issues}}class='active'{{/issues}}> + <a href="/debian/index_issues.html">issues</a> + </li> + <li {{#repositories}}class='active'{{/repositories}}> + <a href="/debian/index_repositories.html"> + repositories overview + </a> + </li> + <li {{#notify}}class='active'{{/notify}}> + <a href="/debian/index_notify.html" title="notify icon"> + ⚑ packages with enabled notifications + </a> + </li> + <li {{#performance}}class='active'{{/performance}}> + <a href="/debian/index_performance.html">performance stats</a> + </li> + <li {{#variations}}class='active'{{/variations}}> + <a href="/debian/index_variations.html">variations tested</a> + </li> + <li {{#breakages}}class='active'{{/breakages}}> + <a href="/debian/index_breakages.html">broken pieces</a> + </li> + </ul></li> +</ul> +{{{project_links_html}}} |