From 59f34fe49527fc697bd86145aa974076c83eb404 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 26 Jun 2021 21:48:18 -0300 Subject: aux/: Update, adapt Makefile accordingly --- aux/ci/ci-build.sh | 2 +- aux/ci/report.sh | 26 ++++++++++++-- aux/tests-lib.sh | 11 ++++++ aux/workflow/TODOs.sh | 40 +++++++++++++++++++--- aux/workflow/assert-changelog.sh | 32 +++++++++++++++--- aux/workflow/assert-manpages.sh | 25 ++++++++++---- aux/workflow/assert-readme.sh | 28 ++++++++++++--- aux/workflow/assert-spelling.sh | 73 ++++++++++++++++++++++++++++++++++++++++ aux/workflow/commonmark.sh | 60 +++++++++++++++++++++++++-------- aux/workflow/dist.sh | 51 +++++++++++++++++++++++----- aux/workflow/manpages.sh | 12 +++---- aux/workflow/public.sh | 48 +++++++++++++++++++++----- aux/workflow/sign-tarballs.sh | 22 +++++++++++- 13 files changed, 372 insertions(+), 58 deletions(-) mode change 100644 => 100755 aux/workflow/assert-spelling.sh (limited to 'aux') 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) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n
#\3<\/pre>\n/'
 TODOS_CLEANUP_REGEX1='s/(&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 <> "$EXPECTED"
diff --git a/aux/workflow/assert-spelling.sh b/aux/workflow/assert-spelling.sh
old mode 100644
new mode 100755
index e69de29..3781454
--- 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 <&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
-- 
cgit v1.2.3