aboutsummaryrefslogtreecommitdiff
path: root/aux
diff options
context:
space:
mode:
Diffstat (limited to 'aux')
-rwxr-xr-xaux/ci/ci-build.sh2
-rwxr-xr-xaux/ci/report.sh26
-rwxr-xr-xaux/tests-lib.sh11
-rwxr-xr-xaux/workflow/TODOs.sh40
-rwxr-xr-xaux/workflow/assert-changelog.sh32
-rwxr-xr-xaux/workflow/assert-manpages.sh25
-rwxr-xr-xaux/workflow/assert-readme.sh28
-rwxr-xr-x[-rw-r--r--]aux/workflow/assert-spelling.sh73
-rwxr-xr-xaux/workflow/commonmark.sh60
-rwxr-xr-xaux/workflow/dist.sh51
-rwxr-xr-xaux/workflow/manpages.sh12
-rwxr-xr-xaux/workflow/public.sh48
-rwxr-xr-xaux/workflow/sign-tarballs.sh22
13 files changed, 372 insertions, 58 deletions
diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh
index 7fa3382..be97866 100755
--- a/aux/ci/ci-build.sh
+++ b/aux/ci/ci-build.sh
@@ -26,7 +26,7 @@ EOF
git notes append -m "$NOTE"
cd -
- sh aux/ci/report.sh "$PROJECT" public
+ sh aux/ci/report.sh -n "$PROJECT" -o public
rsync -av public/ "/srv/http/$PROJECT/" --delete
printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS"
diff --git a/aux/ci/report.sh b/aux/ci/report.sh
index c873f54..69dbea3 100755
--- a/aux/ci/report.sh
+++ b/aux/ci/report.sh
@@ -1,9 +1,31 @@
#!/bin/sh
set -eu
-PROJECT="$1"
-OUTDIR="$2"
TLD="$(cat aux/tld.txt)"
+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='❌'
diff --git a/aux/tests-lib.sh b/aux/tests-lib.sh
index 007282a..a3ce7dc 100755
--- a/aux/tests-lib.sh
+++ b/aux/tests-lib.sh
@@ -5,6 +5,7 @@ red="\033[0;31m"
green="\033[0;32m"
yellow="\033[0;33m"
+N=
OUT=
ERR=
STATUS=
@@ -14,10 +15,15 @@ ERROR() {
printf "${red}ERROR${end}"
}
+print_debug_info() {
+ printf 'LINENO: %s\nOUT: %s\nERR: %s\n' "$N" "$OUT" "$ERR" >&2
+}
+
assert_status() {
if [ "$STATUS" != "$1" ]; then
printf '\n%s: Bad status.\n\nexpected: %s\ngot: %s\n' \
"$(ERROR)" "$1" "$STATUS" >&2
+ print_debug_info
exit 1
fi
}
@@ -26,6 +32,7 @@ assert_usage() {
if ! grep -Fq 'Usage' "$1"; then
echo 'Expected to find "Usage" text, it was missing:' >&2
cat "$1" >&2
+ print_debug_info
exit 1
fi
}
@@ -34,6 +41,7 @@ assert_empty_stream() {
if [ -s "$2" ]; then
printf '\n%s: Expected %s (%s) to be empty, but has content:\n%s\n' \
"$(ERROR)" "$1" "$2" "$(cat "$2")" >&2
+ print_debug_info
exit 1
fi
}
@@ -50,6 +58,7 @@ assert_stream() {
if [ "$(cat "$2")" != "$3" ]; then
printf '\nERR: Bad %s (%s)\n\nexpected: %s\ngot: %s\n' \
"$1" "$2" "$3" "$(cat "$2")" >&2
+ print_debug_info
exit 1
fi
}
@@ -66,6 +75,7 @@ assert_grep_stream() {
if ! grep -qE "$3" "$2"; then
printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \
"$1" "$2" "$3" "$(cat "$2")" >&2
+ print_debug_info
exit 1
fi
}
@@ -82,6 +92,7 @@ assert_fgrep_stream() {
if ! grep -Fq -- "$3" "$2"; then
printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \
"$1" "$2" "$3" "$(cat "$2")" >&2
+ print_debug_info
exit 1
fi
}
diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh
index f93ece8..6c24c3e 100755
--- a/aux/workflow/TODOs.sh
+++ b/aux/workflow/TODOs.sh
@@ -1,11 +1,43 @@
#!/bin/sh
set -eu
-PROJECT_UC="$1"
-PROJECT="$2"
-MAILING_LIST="$3"
-OUTDIR="$4"
TLD="$(cat aux/tld.txt)"
+PROJECT_UC=
+while getopts 'n:N:m:o:' flag; do
+ case "$flag" in
+ n)
+ PROJECT="$OPTARG"
+ ;;
+ N)
+ PROJECT_UC="$OPTARG"
+ ;;
+ m)
+ MAILING_LIST="$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 "${MAILING_LIST:-}" '-m MAILING_LIST'
+assert_arg "${OUTDIR:-}" '-o OUTDIR'
+
+if [ -z "${PROJECT_UC:-}" ]; then
+ PROJECT_UC="$PROJECT"
+fi
TODOS_ADD_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## <a href="#\3"><span class="\1">\1<\/span> \2<\/a>\n<pre class="header-anchor" id="\3">#\3<\/pre>\n/'
TODOS_CLEANUP_REGEX1='s/(<a><a)/<a/'
diff --git a/aux/workflow/assert-changelog.sh b/aux/workflow/assert-changelog.sh
index e2cd926..11088a8 100755
--- a/aux/workflow/assert-changelog.sh
+++ b/aux/workflow/assert-changelog.sh
@@ -2,10 +2,34 @@
set -eu
TLD="$(cat aux/tld.txt)"
-PROJECT_UC="$1"
-PROJECT="$2"
-shift
-shift
+PROJECT_UC=
+while getopts 'n:N:' flag; do
+ case "$flag" in
+ n)
+ PROJECT="$OPTARG"
+ ;;
+ N)
+ PROJECT_UC="$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'
+
+if [ -z "${PROJECT_UC:-}" ]; then
+ PROJECT_UC="$PROJECT"
+fi
HOMEPAGE_LINK="Changelog for [$PROJECT_UC](https://$TLD/$PROJECT/)."
diff --git a/aux/workflow/assert-manpages.sh b/aux/workflow/assert-manpages.sh
index a2bd3f9..d609685 100755
--- a/aux/workflow/assert-manpages.sh
+++ b/aux/workflow/assert-manpages.sh
@@ -1,22 +1,35 @@
#!/bin/sh
set -eu
-PROJECT="$1"
-MAILING_LIST="$2"
-shift
-shift
TLD="$(cat aux/tld.txt)"
-
IN_PLACE=false
-while getopts 'i' flag; do
+while getopts 'n:m:i' flag; do
case "$flag" in
+ n)
+ PROJECT="$OPTARG"
+ ;;
+ m)
+ MAILING_LIST="$OPTARG"
+ ;;
i)
IN_PLACE=true
;;
*)
+ 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 "${MAILING_LIST:-}" '-m MAILING_LIST'
EXPECTED_EN="$(mktemp)"
diff --git a/aux/workflow/assert-readme.sh b/aux/workflow/assert-readme.sh
index 2a6c3fd..f8a05a4 100755
--- a/aux/workflow/assert-readme.sh
+++ b/aux/workflow/assert-readme.sh
@@ -1,11 +1,31 @@
#!/bin/sh
set -eu
-PROJECT="$1"
-MAILING_LIST="$2"
-shift
-shift
TLD="$(cat aux/tld.txt)"
+while getopts 'n:m:' flag; do
+ case "$flag" in
+ n)
+ PROJECT="$OPTARG"
+ ;;
+ m)
+ MAILING_LIST="$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 "${MAILING_LIST:-}" '-m MAILING_LIST'
EXPECTED="$(mktemp)"
cat <<EOF >> "$EXPECTED"
diff --git a/aux/workflow/assert-spelling.sh b/aux/workflow/assert-spelling.sh
index e69de29..3781454 100644..100755
--- a/aux/workflow/assert-spelling.sh
+++ b/aux/workflow/assert-spelling.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+set -eu
+
+sort_dicts() {
+ for f in doc/spelling/*.txt; do
+ if ! LANG=POSIX sort "$f" | diff - "$f"; then
+ if [ "$IN_PLACE" = true ]; then
+ OUT="$(mktemp)"
+ LANG=POSIX sort "$f" | uniq > "$OUT"
+ mv "$OUT" "$f"
+ else
+ echo "The $f dictionary is unsorted. To fix it, run:" >&2
+ echo " sh aux/workflow/assert-spelling.sh -i" >&2
+ exit 1
+ fi
+ fi
+ done
+}
+
+IN_PLACE=false
+while getopts 'l:i' flag; do
+ case "$flag" in
+ l)
+ LANGS="$OPTARG"
+ ;;
+ i)
+ IN_PLACE=true
+ sort_dicts
+ exit
+ ;;
+ *)
+ exit 2
+ ;;
+ esac
+done
+shift $((OPTIND -1))
+
+assert_arg() {
+ if [ -z "$1" ]; then
+ echo "Missing $2" >&2
+ exit 2
+ fi
+}
+
+assert_arg "${LANGS:-}" '-l LANGS'
+
+mkdir -p doc/spelling
+eval "touch doc/spelling/{international,$(echo "$LANGS" | tr ' ' ,)}.txt"
+
+get_lang() {
+ grep lang=.. "$1" | \
+ head -n1 | \
+ awk '
+ match($0, /lang="(..)"/) {
+ print substr($0, RSTART+length("lang=\""), 2)
+ }
+ '
+}
+
+ACC="$(mktemp)"
+for f in "$@"; do
+ l="$(get_lang "$f")"
+ CURR_DICT="$(mktemp)"
+ cat doc/spelling/international.txt "doc/spelling/$l.txt" | sort | uniq > "$CURR_DICT"
+ hunspell -u3 -H -d "$l" -p "$CURR_DICT" "$f" | tee -a "$ACC" >&2
+done
+
+if [ -s "$ACC" ]; then
+ printf '\n\tMispelled words detected by hunspell above.\n\n' >&2
+ exit 1
+fi
+
+sort_dicts
diff --git a/aux/workflow/commonmark.sh b/aux/workflow/commonmark.sh
index 7267145..2333f5d 100755
--- a/aux/workflow/commonmark.sh
+++ b/aux/workflow/commonmark.sh
@@ -1,19 +1,51 @@
#!/bin/sh
set -eu
-PROJECT_UC="$1"
-F="$2"
-OUTDIR="$3"
-OUT="${4:-${F%.*}.html}"
+while getopts 'N:o:r:w:' flag; do
+ case "$flag" in
+ N)
+ PROJECT_UC="$OPTARG"
+ ;;
+ o)
+ OUTDIR="$OPTARG"
+ ;;
+ r)
+ IN_FILE="$OPTARG"
+ ;;
+ w)
+ OUT_FILE="$OPTARG"
+ ;;
+ *)
+ exit 2
+ ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+assert_arg() {
+ if [ -z "$1" ]; then
+ echo "Missing $2" >&2
+ exit 2
+ fi
+}
+
+assert_arg "${PROJECT_UC:-}" '-N PROJECT_UC'
+assert_arg "${OUTDIR:-}" '-o OUTDIR'
+assert_arg "${IN_FILE:-}" '-i IN_FILE'
+
+if [ -z "${OUT_FILE:-}" ]; then
+ OUT_FILE="${IN_FILE%.md}.html"
+fi
+
pandoc \
- --toc \
- --highlight-style pygments \
- --toc-depth=2 \
- -s \
- --metadata title="$PROJECT_UC - ${F%.*}" \
- --metadata lang=en \
- -r commonmark \
- -w html \
- -H aux/workflow/favicon.html \
- < "$F" > "$OUTDIR/$OUT"
+ --toc \
+ --highlight-style pygments \
+ --toc-depth=2 \
+ -s \
+ --metadata title="$PROJECT_UC - ${IN_FILE%.md}" \
+ --metadata lang=en \
+ -r commonmark \
+ -w html \
+ -H aux/workflow/favicon.html \
+ < "$IN_FILE" > "$OUTDIR/$OUT_FILE"
diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh
index ed61ee5..69c0173 100755
--- a/aux/workflow/dist.sh
+++ b/aux/workflow/dist.sh
@@ -1,19 +1,54 @@
#!/bin/sh
set -eu
-DATE="$1"
-VVERSION="v$2"
-PROJECT_UC="$3"
-PROJECT="$4"
-MAILING_LIST="$5"
+PROJECT_UC=
+while getopts 'd:V:n:N:m:' flag; do
+ case "$flag" in
+ d)
+ DATE="$OPTARG"
+ ;;
+ V)
+ VVERSION="v$OPTARG"
+ ;;
+ n)
+ PROJECT="$OPTARG"
+ ;;
+ N)
+ PROJECT_UC="$OPTARG"
+ ;;
+ m)
+ MAILING_LIST="$OPTARG"
+ ;;
+ *)
+ exit 2
+ ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+assert_arg() {
+ if [ -z "$1" ]; then
+ echo "Missing $2" >&2
+ exit 2
+ fi
+}
+
+assert_arg "${DATE:-}" '-d DATE'
+assert_arg "${VVERSION:-}" '-V VERSION'
+assert_arg "${PROJECT:-}" '-n PROJECT'
+assert_arg "${MAILING_LIST:-}" '-m MAILING_LIST'
+
+if [ -z "${PROJECT_UC:-}" ]; then
+ PROJECT_UC="$PROJECT"
+fi
if git show "$VVERSION" 1>/dev/null 2>/dev/null; then
echo "Version '$VVERSION' already exists." >&2
exit 1
fi
-sh aux/workflow/assert-changelog.sh "$PROJECT_UC" "$PROJECT" "$VVERSION"
-sh aux/workflow/assert-readme.sh "$PROJECT" "$MAILING_LIST" "$VVERSION"
+sh aux/workflow/assert-changelog.sh -N "$PROJECT_UC" -n "$PROJECT" "$VVERSION"
+sh aux/workflow/assert-readme.sh -n "$PROJECT" -m "$MAILING_LIST" "$VVERSION"
if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then
echo "Date '$DATE' is not up-to-date." >&2
@@ -32,7 +67,7 @@ fi
git tag "$VVERSION"
-sh aux/workflow/sign-tarballs.sh "$PROJECT"
+sh aux/workflow/sign-tarballs.sh -n "$PROJECT"
cat <<EOF >&2
diff --git a/aux/workflow/manpages.sh b/aux/workflow/manpages.sh
index fe215f7..d0d19ae 100755
--- a/aux/workflow/manpages.sh
+++ b/aux/workflow/manpages.sh
@@ -25,34 +25,34 @@ while getopts 'iuHo:p:' flag; do
done
shift $((OPTIND - 1))
-assert() {
+assert_arg() {
if [ -z "$1" ]; then
- echo "Missing $2 argument" >&2
+ echo "Missing $2" >&2
exit 2
fi
}
-assert "${ACTION:-}" ACTION
+assert_arg "${ACTION:-}" '-[iuH] for choosing action'
for f in "$@"; do
l="$(echo "$f" | awk -F. '{print $(NF-1)}')"
n="$(echo "$f" | awk -F. '{print $NF}')"
case "$ACTION" in
html)
- assert "${OUTDIR:-}" OUTDIR
+ assert_arg "${OUTDIR:-}" '-o OUTDIR'
to_name="$(basename "${f%.$l.$n}.$n.html")"
mkdir -p "$OUTDIR/$l"
pandoc -s -r man -w html --metadata "lang=$l" < "$f" > "$OUTDIR/$l/$to_name"
;;
install)
- assert "${MANPREFIX:-}" MANPREFIX
+ assert_arg "${MANPREFIX:-}" '-p MANPREFIX'
to_name="$(basename "${f%.$l.$n}.$n")"
mkdir -p "$MANPREFIX/$l/man$n" "$MANPREFIX/man$n"
cp "$f" "$MANPREFIX/$l/man$n/$to_name"
ln -fs "../en/man$n/$to_name" "$MANPREFIX/man$n/$to_name"
;;
uninstall)
- assert "${MANPREFIX:-}" MANPREFIX
+ assert_arg "${MANPREFIX:-}" '-p MANPREFIX'
to_name="$(basename "${f%.$l.$n}.$n")"
rm -f \
"$MANPREFIX/$l/man$n/$to_name" \
diff --git a/aux/workflow/public.sh b/aux/workflow/public.sh
index 7433595..ef89d07 100755
--- a/aux/workflow/public.sh
+++ b/aux/workflow/public.sh
@@ -1,20 +1,52 @@
#!/bin/sh
set -eu
-PROJECT_UC="$1"
-PROJECT="$2"
-MAILING_LIST="$3"
-OUTDIR="$4"
+PROJECT_UC=
+while getopts 'n:N:m:o:' flag; do
+ case "$flag" in
+ n)
+ PROJECT="$OPTARG"
+ ;;
+ N)
+ PROJECT_UC="$OPTARG"
+ ;;
+ m)
+ MAILING_LIST="$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 "${MAILING_LIST:-}" '-m MAILING_LIST'
+assert_arg "${OUTDIR:-}" '-o OUTDIR'
+
+if [ -z "${PROJECT_UC:-}" ]; then
+ PROJECT_UC="$PROJECT"
+fi
mkdir -p "$OUTDIR"
-sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" "$OUTDIR"
-sh aux/workflow/commonmark.sh "$PROJECT" README.md "$OUTDIR" index.html ||:
+sh aux/workflow/TODOs.sh -N "$PROJECT_UC" -n "$PROJECT" -m "$MAILING_LIST" -o "$OUTDIR"
+sh aux/workflow/commonmark.sh -N "$PROJECT" -o "$OUTDIR" -r README.md -w index.html
if [ -f CHANGELOG.md ]; then
- sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md "$OUTDIR"
+ sh aux/workflow/commonmark.sh -N "$PROJECT" -o "$OUTDIR" -r CHANGELOG.md
fi
-sh aux/ci/report.sh "$PROJECT" "$OUTDIR"
+sh aux/ci/report.sh -n "$PROJECT" -o "$OUTDIR"
cp aux/workflow/favicon.svg aux/workflow/favicon.png "$OUTDIR"
diff --git a/aux/workflow/sign-tarballs.sh b/aux/workflow/sign-tarballs.sh
index 8de6ac4..168d38d 100755
--- a/aux/workflow/sign-tarballs.sh
+++ b/aux/workflow/sign-tarballs.sh
@@ -1,7 +1,27 @@
#!/bin/sh
set -eu
-PROJECT="$1"
+while getopts 'n:' flag; do
+ case "$flag" in
+ n)
+ PROJECT="$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'
+
SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)"
for tag in $(git tag); do