diff options
Diffstat (limited to 'aux/workflow')
-rwxr-xr-x | aux/workflow/README.sh | 43 | ||||
-rwxr-xr-x | aux/workflow/TODOs.sh | 28 | ||||
-rwxr-xr-x | aux/workflow/assert-changelog.sh | 14 | ||||
-rwxr-xr-x | aux/workflow/assert-todos.sh | 57 | ||||
-rwxr-xr-x | aux/workflow/commonmark.sh | 17 | ||||
-rwxr-xr-x | aux/workflow/dist.sh | 28 | ||||
-rw-r--r-- | aux/workflow/preamble.md | 16 | ||||
-rw-r--r-- | aux/workflow/public.sh | 15 | ||||
-rwxr-xr-x | aux/workflow/sign-tarballs.sh | 17 | ||||
-rw-r--r-- | aux/workflow/style.css | 46 |
10 files changed, 281 insertions, 0 deletions
diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh new file mode 100755 index 0000000..e30344f --- /dev/null +++ b/aux/workflow/README.sh @@ -0,0 +1,43 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" +PROJECT="$2" +MAILING_LIST="$3" + +RELEASES_LIST="$(mktemp)" +for version in $(git tag | perl -e 'print reverse <>'); do + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" +done + +RELEASES="$(mktemp)" +if [ -s "$RELEASES_LIST" ]; then + printf '\n# Releases\n\n' >> "$RELEASES" + cat "$RELEASES_LIST" >> "$RELEASES" +fi + +LINKS="$(mktemp)" +cat <<EOF > "$LINKS" + +# Links + +- [home page](https://$PROJECT.euandreh.xyz) +- [source code](https://git.euandreh.xyz/$PROJECT/about/) +- [bug tracking](https://$PROJECT.euandreh.xyz/TODOs.html) +- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) +- [CI logs](https://$PROJECT.euandreh.xyz/ci.html) +- [CHANGELOG](https://$PROJECT.euandreh.xyz/CHANGELOG.html) +EOF + +cat "README.md" "$LINKS" "$RELEASES" | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - README" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + > public/index.html diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh new file mode 100755 index 0000000..00fef6f --- /dev/null +++ b/aux/workflow/TODOs.sh @@ -0,0 +1,28 @@ +#!/bin/sh +set -eu + +mkdir -p public + +export PROJECT_UC="$1" +export PROJECT="$2" +export MAILING_LIST="$3" + +TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## <a href="#\3"><span class="\1">\1<\/span> \2<\/a>\n<span class="header-anchor" id="\3">#\3<\/span>\n/' + +TAGS_REGEX='s/tag:([\w-]+)/<span class="tag">\1<\/span>/g' + +envsubst < aux/workflow/preamble.md | \ + printf '%s\n\n%s' \ + "$(cat -)" \ + "$(perl -pe "$TODOS_REGEX" TODOs.md | \ + perl -pe "$TAGS_REGEX")" | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - TODOs" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + -H aux/workflow/style.css \ + > public/TODOs.html diff --git a/aux/workflow/assert-changelog.sh b/aux/workflow/assert-changelog.sh new file mode 100755 index 0000000..d39f527 --- /dev/null +++ b/aux/workflow/assert-changelog.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -eu + +PROJECT="$1" + +for VVERSION in $(git tag); do + VERSION="${VVERSION#v}" + DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" + CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" + if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then + echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 + exit 1 + fi +done diff --git a/aux/workflow/assert-todos.sh b/aux/workflow/assert-todos.sh new file mode 100755 index 0000000..203d465 --- /dev/null +++ b/aux/workflow/assert-todos.sh @@ -0,0 +1,57 @@ +#!/bin/sh +set -eu + +if git grep FIXME | grep -v '^TODOs.md' | grep -v '^aux/workflow/assert-todos.sh' | grep -v '^aux/docbook-xsl/'; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.md." + exit 1 +fi + +awk -F'{#' ' +BEGIN { + exitstatus = 0 + h2flag = 0 + h2status = "" + prevline = "" + idx = 0 + delete ids[0] +} +h2flag == 1 { + split($0, l, " ") + timelinestatus = l[2] + if (h2status != timelinestatus) { + print "h2/timeline status mismatch for line " NR-1 + print prevline + print $0 + exitstatus = 1 + } + h2status = "" + h2flag = 0 +} + +/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ { + if (match($0, / \{#.*?\}$/) == 0) { + print "Missing ID for line " NR ":\n" $0 + exitstatus = 1 + } + id_with_prefix = substr($2, 0, length($2) - 1) + match(id_with_prefix, /^\w+-/) + id = substr(id_with_prefix, RLENGTH + 1) + if (id in arr) { + print "Duplicate ID: " id + exitstatus = 1 + } else { + arr[id] = 1 + } + + split($0, l, " ") + h2status = l[2] + h2flag = 1 + prevline = $0 +} + + +/^# Scratch$/ { + exit exitstatus +} +' TODOs.md diff --git a/aux/workflow/commonmark.sh b/aux/workflow/commonmark.sh new file mode 100755 index 0000000..e9609c2 --- /dev/null +++ b/aux/workflow/commonmark.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" +F="$2" + +pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - ${F%.*}" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + < "$F" > "public/${F%.*}.html" diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh new file mode 100755 index 0000000..0ae0ec4 --- /dev/null +++ b/aux/workflow/dist.sh @@ -0,0 +1,28 @@ +#!/bin/sh +set -eu + +DATE="$1" +VERSION="$2" +VVERSION="v$2" +PROJECT="$3" + +if git show "$VVERSION" 1>/dev/null 2>/dev/null; then + echo "Version '$VVERSION' already exists." >&2 + exit 1 +fi + +if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then + echo "Date '$DATE' is not up-to-date." >&2 + exit 1 +fi + +if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then + echo "Commit message isn't 'Release $VVERSION'." >&2 + exit 1 +fi + +sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" + +git tag "$VVERSION" + +sh aux/workflow/sign-tarballs.sh "$PROJECT" diff --git a/aux/workflow/preamble.md b/aux/workflow/preamble.md new file mode 100644 index 0000000..7413f58 --- /dev/null +++ b/aux/workflow/preamble.md @@ -0,0 +1,16 @@ +# About + +TODOs for $PROJECT_UC. + +See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/) and [CI logs](https://$PROJECT.euandreh.xyz/ci.html). + +Register a new one at +[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) +and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D). + +*Você também pode escrever em português*. + +*Vous pouvez aussi écrire en français*. + +*Vi povas ankaŭ skribi esperante*. + diff --git a/aux/workflow/public.sh b/aux/workflow/public.sh new file mode 100644 index 0000000..4c90225 --- /dev/null +++ b/aux/workflow/public.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -eu + +PROJECT_UC="$1" +PROJECT="$2" +MAILING_LIST="$3" + +sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" +sh aux/workflow/README.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" + +if [ -f CHANGELOG.md ]; then + sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md +fi + +sh aux/ci/report.sh "$PROJECT" diff --git a/aux/workflow/sign-tarballs.sh b/aux/workflow/sign-tarballs.sh new file mode 100755 index 0000000..b88ff33 --- /dev/null +++ b/aux/workflow/sign-tarballs.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +PROJECT="$1" + +SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)" +for tag in $(git tag); do + COMMIT="$(git rev-list -n1 "$tag")" + if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then + echo "Adding missing signature to $tag" >&2 + git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( + git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | + gpg --output - --armor --detach-sign | + git hash-object -w --stdin + )" "$tag" + fi +done diff --git a/aux/workflow/style.css b/aux/workflow/style.css new file mode 100644 index 0000000..d7935d0 --- /dev/null +++ b/aux/workflow/style.css @@ -0,0 +1,46 @@ +<style> + hr { + background-color: #ccc; + } + + div.header-anchor { + opacity: 0.5; + } + + span.tag { + font-family: monospace; + font-size: 70%; + background-color: lightgray; + padding: 3px; + border-radius: 5px; + } + + /* + Replicate colors from: + https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866 + */ + + .TODO { + color: brown; + } + + .DOING { + color: yellowgreen; + } + + .WAITING, .MEETING { + color: gray; + } + + .INACTIVE { + color: orange; + } + + .NEXT { + color: red; + } + + .CANCELLED, .DONE { + color: green; + } +</style> |