aboutsummaryrefslogtreecommitdiff
path: root/aux
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2021-01-27 15:55:27 -0300
committerEuAndreh <eu@euandre.org>2021-01-27 15:58:51 -0300
commit451eed829916627e9248f1003752b43617a20ff4 (patch)
tree1799faf7932caab2f2b6fb0bccebf06601715dda /aux
parentUpdate link to "remembering" (diff)
downloadeuandre.org-451eed829916627e9248f1003752b43617a20ff4.tar.gz
euandre.org-451eed829916627e9248f1003752b43617a20ff4.tar.xz
mv build-aux/ -> aux/ and scripts/
Diffstat (limited to 'aux')
-rwxr-xr-xaux/assert-shellcheck.sh6
-rwxr-xr-xaux/ci/ci-build.sh53
-rwxr-xr-xaux/ci/git-post-receive.sh14
-rwxr-xr-xaux/ci/git-pre-push.sh19
-rw-r--r--aux/guix/manifest.scm15
-rw-r--r--aux/guix/pinned-channels.scm11
-rwxr-xr-xaux/guix/with-container.sh4
-rwxr-xr-xaux/workflow/TODOs.sh23
-rwxr-xr-xaux/workflow/assert-todos.sh57
-rw-r--r--aux/workflow/preamble.md16
-rw-r--r--aux/workflow/style.css38
11 files changed, 256 insertions, 0 deletions
diff --git a/aux/assert-shellcheck.sh b/aux/assert-shellcheck.sh
new file mode 100755
index 0000000..334a875
--- /dev/null
+++ b/aux/assert-shellcheck.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -eux
+
+git ls-files -z | \
+ xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \
+ xargs shellcheck
diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh
new file mode 100755
index 0000000..c891d3b
--- /dev/null
+++ b/aux/ci/ci-build.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+set -eux
+
+PACKAGE="$1"
+LOGS_DIR="$2"
+read -r _ SHA _ # oldrev newrev refname
+FILENAME="$(date -Is)-$SHA.log"
+LOGFILE="$LOGS_DIR/$FILENAME"
+
+{
+ echo "Starting CI job at: $(date -Is)"
+
+ finish() {
+ STATUS="$?"
+ printf "\n\n>>> exit status was %s\n" "$STATUS"
+ echo "Finishing CI job at: $(date -Is)"
+ cd -
+ NOTE=$(cat <<EOF
+See CI logs with:
+ git notes --ref=refs/notes/ci-logs show $SHA
+ git notes --ref=refs/notes/ci-data show $SHA
+EOF
+ )
+ git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME"
+ git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE"
+ git notes append -m "$NOTE"
+ printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS"
+ }
+ trap finish EXIT
+
+ unset GIT_DIR
+ CLONE="$(mktemp -d)"
+ git clone . "$CLONE"
+ cd "$CLONE"
+ git config --global user.email git@euandre.org
+ git config --global user.name 'EuAndreh CI'
+
+ if [ -f aux/guix/with-container.sh ]; then
+ RUNNER='./aux/guix/with-container.sh'
+ else
+ RUNNER='sh -c'
+ fi
+
+ if [ -f ./bootstrap ]; then
+ COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public'
+ else
+ COMMAND='make clean check public'
+ fi
+
+ $RUNNER "$COMMAND"
+
+ rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete
+} | tee "$LOGFILE" 2>&1
diff --git a/aux/ci/git-post-receive.sh b/aux/ci/git-post-receive.sh
new file mode 100755
index 0000000..2f6e3c0
--- /dev/null
+++ b/aux/ci/git-post-receive.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+set -eu
+
+for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do
+ opt="$(eval "echo \$GIT_PUSH_OPTION_$n")"
+ if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then
+ printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt"
+ exit 0
+ fi
+done
+
+PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix
+LOGS_DIR="/data/ci/$PACKAGE/logs"
+"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR"
diff --git a/aux/ci/git-pre-push.sh b/aux/ci/git-pre-push.sh
new file mode 100755
index 0000000..30d2850
--- /dev/null
+++ b/aux/ci/git-pre-push.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -eux
+
+PACKAGE="$(basename "$PWD")"
+LOGS_DIR="/data/ci/$PACKAGE/logs"
+REMOTE_GIT_DIR="/data/git/$PACKAGE.git"
+
+DESCRIPTION="$(mktemp)"
+if [ -f description ]
+then
+ cp description "$DESCRIPTION"
+else
+ git config euandreh.description > "$DESCRIPTION"
+fi
+
+scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description"
+ssh git.euandreh.xyz mkdir -p "$LOGS_DIR"
+scp aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh"
+scp aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive"
diff --git a/aux/guix/manifest.scm b/aux/guix/manifest.scm
new file mode 100644
index 0000000..0c8a225
--- /dev/null
+++ b/aux/guix/manifest.scm
@@ -0,0 +1,15 @@
+(specifications->manifest
+ (map symbol->string
+ '(coreutils
+ findutils
+ diffutils
+ grep
+ sed
+ git
+ tar
+ gzip
+ gawk
+ make
+ perl
+ shellcheck
+ pandoc)))
diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm
new file mode 100644
index 0000000..67b5a51
--- /dev/null
+++ b/aux/guix/pinned-channels.scm
@@ -0,0 +1,11 @@
+(list
+ (channel
+ (name 'guix)
+ (url "https://git.savannah.gnu.org/git/guix.git")
+ (commit
+ "d265809b782293eb42dd663b4611ca19dd2bf1b3")
+ (introduction
+ (make-channel-introduction
+ "9edb3f66fd807b096b48283debdcddccfea34bad"
+ (openpgp-fingerprint
+ "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))
diff --git a/aux/guix/with-container.sh b/aux/guix/with-container.sh
new file mode 100755
index 0000000..db7b121
--- /dev/null
+++ b/aux/guix/with-container.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eux
+
+guix time-machine -C aux/guix/pinned-channels.scm -- environment --pure -C -m aux/guix/manifest.scm -- sh -c "$@"
diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh
new file mode 100755
index 0000000..ab45835
--- /dev/null
+++ b/aux/workflow/TODOs.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+set -eu
+
+mkdir -p public
+
+export PROJECT_UC="$1"
+export PROJECT="$2"
+export MAILING_LIST="$3"
+
+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/'
+
+envsubst < aux/workflow/preamble.md | \
+ printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \
+ pandoc --toc \
+ --highlight-style pygments \
+ --toc-depth=2 \
+ -s \
+ --metadata title="$PROJECT_UC - TODOs" \
+ --metadata lang=en \
+ -r markdown \
+ -w html \
+ -H aux/workflow/style.css \
+ > public/TODOs.html
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/preamble.md b/aux/workflow/preamble.md
new file mode 100644
index 0000000..c6ae56e
--- /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/).
+
+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/style.css b/aux/workflow/style.css
new file mode 100644
index 0000000..ac0144c
--- /dev/null
+++ b/aux/workflow/style.css
@@ -0,0 +1,38 @@
+<style>
+ hr {
+ background-color: #ccc;
+ }
+
+ span.header-anchor {
+ opacity: 0.5;
+ }
+
+ /*
+ 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>