#!/bin/sh set -eu TLD="$(cat aux/tld.txt)" . aux/lib.sh while getopts 'n:o:' flag; do case "$flag" in n) PROJECT="$OPTARG" ;; o) OUTDIR="$OPTARG" ;; *) exit 2 ;; esac done shift $((OPTIND - 1)) assert_arg() { if [ -z "$1" ]; then echo "Missing $2" >&2 exit 2 fi } assert_arg "${PROJECT:-}" '-n PROJECT' assert_arg "${OUTDIR:-}" '-o OUTDIR' PASS='✅' FAIL='❌' mkdir -p "$OUTDIR/ci-logs" "$OUTDIR/ci-data" OUT="$(mkstemp)" chmod 644 "$OUT" for c in $(git notes list | cut -d\ -f2); do DATA="$(git notes --ref=refs/notes/ci-data show "$c")" FILENAME="$(echo "$DATA" | cut -d\ -f2)" echo "$DATA" > "$OUTDIR/ci-data/$FILENAME" git notes --ref=refs/notes/ci-logs show "$c" \ > "$OUTDIR/ci-logs/$FILENAME" done { cat <<EOF <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="description" content="CI logs for $PROJECT" /> <link rel="icon" type="image/svg+xml" href="favicon.svg" /> <title>$PROJECT - CI logs</title> EOF cat aux/workflow/style.css cat <<EOF <style> pre { display: inline; } ol { list-style-type: disc; } </style> </head> <body> <main> <h1> CI logs for <a href="https://$TLD/$PROJECT/en/">$PROJECT</a> </h1> <ol> EOF } > "$OUT" for f in $(find "$OUTDIR/ci-data/" -type f | LANG=C.UTF-8 sort -r); do DATA="$(cat "$f")" STATUS="$(echo "$DATA" | cut -d\ -f1)" FILENAME="$(echo "$DATA" | cut -d\ -f2)" if [ "$STATUS" = 0 ]; then STATUS_MARKER="$PASS" else STATUS_MARKER="$FAIL" fi cat <<EOF >> "$OUT" <li> <a href="ci-logs/$FILENAME">$STATUS_MARKER <pre>$FILENAME</pre></a> </li> EOF done cat <<EOF >> "$OUT" </ol> </main> </body> </html> EOF mv "$OUT" "$OUTDIR/ci.html"