starting new job...
→ running command: dir='/etc/byggsteg/job-clone//wikimusic/trunk'
branch='trunk'
if ! command -v git >/dev/null 2>&1; then
echo 'byggsteg: git is not on this deployment PATH, so the clone cannot be updated' >&2
exit 1
fi
if ! cd "$dir"; then
echo "byggsteg: cannot enter the clone $dir" >&2
exit 1
fi
root=$(git rev-parse --show-toplevel 2>/dev/null)
if [ "$root" != "$(pwd -P)" ]; then
echo "byggsteg: $dir is not a git checkout; remove it and the next run clones it again" >&2
exit 1
fi
if ! origin=$(git remote get-url origin 2>/dev/null); then
echo "byggsteg: $dir has no origin remote to fetch $branch from" >&2
exit 1
fi
before=$(git rev-parse --short HEAD 2>/dev/null) || before=none
attempt=1
while :; do
if GIT_TERMINAL_PROMPT=0 git fetch --quiet origin "+refs/heads/$branch:refs/remotes/origin/$branch"; then
break
fi
if [ "$attempt" -ge 3 ]; then
echo "byggsteg: could not fetch $branch from $origin after 3 attempts; is the branch still there, and is the remote reachable?" >&2
exit 1
fi
echo "byggsteg: fetching $branch from $origin failed; retrying in $((attempt * 2))s" >&2
sleep $((attempt * 2))
attempt=$((attempt + 1))
done
if ! git checkout --quiet --force -B "$branch" FETCH_HEAD; then
echo "byggsteg: fetched $branch from $origin but could not check it out" >&2
exit 1
fi
after=$(git rev-parse --short HEAD)
if [ "$before" = "$after" ]; then
echo "byggsteg: $branch was already at $after"
else
echo "byggsteg: $branch moved from $before to $after"
fi
byggsteg: trunk was already at d27fc68
→ running command: cd /etc/byggsteg/job-clone/wikimusic/trunk && uname -a
Linux wolk-jjba 7.2.11-gnu #1 SMP PREEMPT_DYNAMIC 1 x86_64 GNU/Linux
→ running command: cd /etc/byggsteg/job-clone/wikimusic/trunk && git log --name-status HEAD^..HEAD
commit d27fc689c96c5c3dd7f6f29d76937a1287f28775
Author: Josep Bigorra <jjbigorra@gmail.com>
Date: Wed Nov 4 23:22:51 2026 +0100
feat: Put the project logo in the navigation bar
M lib/wikimusic/config.scm
M lib/wikimusic/html.scm
M pub/favicon.ico
A pub/img/wikimusic-logo.png
A pub/img/wikimusic-logo.svg
D pub/img/wikimusic.jpg
M resources/assets/fetch.scm
→ running command: cd /etc/byggsteg/job-clone/wikimusic/trunk && maak test
scanning directories for unit tests...
scanning present working directory for unit tests...
shuffled the files with seed 143480906 (replay with VERITAS_SEED=143480906)
found unit tests: (assets-spec.scm guitarpro-view-spec.scm about-spec.scm controller-spec.scm sql-spec.scm config-spec.scm domain-spec.scm views-spec.scm error-pages-spec.scm auth-spec.scm guitarpro-spec.scm)
running unit tests from file: assets-spec.scm, entrypoint: spec
ℹ️ info - shuffled with seed 143480906 (replay with VERITAS_SEED=143480906)
+----------------------------------------------+
[📑 suite] A face is named after what it carries
[🧪 test] the family, the subset and the slope are all in the name
[⚙️ assert] a straight face names no slope✅ got: worksans-latin.woff2
[⚙️ assert] a sloped one says so✅ got: sourceserif4-latin-italic.woff2
[⚙️ assert] and a subset that is not latin is kept apart✅ got: worksans-latin-ext-italic.woff2
+----------------------------------------------+
[📑 suite] A fetched stylesheet names the files beside it
[🧪 test] each face is named for the block it stands in
[⚙️ assert] the addresses and the names line up✅ got: ((https://fonts.gstatic.com/s/worksans/v25/aaa111.woff2 . worksans-latin-ext-italic.woff2) (https://fonts.gstatic.com/s/worksans/v25/bbb222.woff2 . worksans-latin.woff2) (https://fonts.gstatic.com/s/sourceserif4/v9/ccc333.woff2 . sourceserif4-latin-italic.woff2))
[🧪 test] the address of the host it came from is gone
[⚙️ assert] no gstatic face is asked for✅ got: #t
[⚙️ assert] nor any other absolute address✅ got: #t
[⚙️ assert] the file beside it is named instead✅ got: #t
[🧪 test] every face the answer named is a face to fetch
[⚙️ assert] three faces, three files✅ got: ((https://fonts.gstatic.com/s/worksans/v25/aaa111.woff2 . worksans-latin-ext-italic.woff2) (https://fonts.gstatic.com/s/worksans/v25/bbb222.woff2 . worksans-latin.woff2) (https://fonts.gstatic.com/s/sourceserif4/v9/ccc333.woff2 . sourceserif4-latin-italic.woff2))
[🧪 test] what the face says about itself is kept
[⚙️ assert] the format stays on the line✅ got: #t
[⚙️ assert] so does what the face asks of the reader✅ got: #t
[⚙️ assert] and the range it carries✅ got: #t
[⚙️ assert] the line saying which subset follows✅ got: #t
[⚙️ assert] and the stylesheet is as long as it was✅ got: 27
+----------------------------------------------+
[📑 suite] An icon set is copied with what is served of it
[🧪 test] the face names the file that is beside it, and only it
[⚙️ assert] the woff2 clause ends the list✅ got: #t
[⚙️ assert] the older woff is not named✅ got: #t
[⚙️ assert] nor the ttf✅ got: #t
[⚙️ assert] nor the svg✅ got: #t
[🧪 test] a stylesheet with nothing to prune is left alone
[⚙️ assert] the text comes back as it went in✅ got: @font-face { font-family: "Phosphor"; src: url("./Phosphor.woff2") format("woff2"); font-weight: normal; font-style: normal; font-display: block;}.ph { font-family: "Phosphor" !important; line-height: 1;}
[🧪 test] what is left is still a stylesheet
[⚙️ assert] the braces still balance✅ got: 2
[⚙️ assert] and they close as often✅ got: 2
[⚙️ assert] the face keeps its family✅ got: #t
[⚙️ assert] and the class the glyphs are worn with✅ got: #t
[⚙️ assert] no clause is left dangling✅ got: #tℹ️ info - ran 3 tasks in: 0 seconds, 144050 microseconds
running unit tests from file: guitarpro-view-spec.scm, entrypoint: spec
ℹ️ info - shuffled with seed 143480906 (replay with VERITAS_SEED=143480906)
+----------------------------------------------+
[📑 suite] What a tab's own header is shown as
[🧪 test] a key is listed by the name of the key and not the count
[⚙️ assert] two flats is B flat✅ got: Bb
[🧪 test] every field a tab's author filled in is listed
[⚙️ assert] the title✅ got: a title
[⚙️ assert] the artist✅ got: an artist
[⚙️ assert] the album✅ got: an album
[⚙️ assert] who tabbed it✅ got: a tabber
[🧪 test] a tempo is written as a reader reads it
[⚙️ assert] a tempo in beats per minute✅ got: 132 bpm
[🧪 test] a field its author left empty is not listed at all
[⚙️ assert] an empty artist✅ got: #f
[⚙️ assert] an album that was never read✅ got: #f
[⚙️ assert] a key with no name✅ got: #f
[🧪 test] the numbers a header always carries are always listed
[⚙️ assert] the measures✅ got: 42
[⚙️ assert] the tracks✅ got: 3
+----------------------------------------------+
[📑 suite] The name a tab is saved under
[🧪 test] a name is still made of nothing
[⚙️ assert] a version with no name of its own✅ got: wikimusic-tab.gp5
[⚙️ assert] and a song the page has not read yet✅ got: wikimusic-tab.gp5
[🧪 test] the name says which song and which version it is
[⚙️ assert] the two together✅ got: A Song - v1.gp5
[🧪 test] the characters a file name cannot hold are replaced
[⚙️ assert] a song whose name holds a slash and a colon✅ got: A-B- C-D-.gp5
+----------------------------------------------+
[📑 suite] The section a version's tab is offered in
[🧪 test] a tab whose header cannot be read says so and is still a download
[⚙️ assert] the sentence✅ got: #t
[🧪 test] playing and stopping are offered once there is something to play
[⚙️ assert] playing✅ got: #t
[⚙️ assert] and stopping✅ got: #t
[🧪 test] each version's section is named after the version it is
[⚙️ assert] the score of the second version✅ got: #t
[⚙️ assert] and not the first version's✅ got: #t
[🧪 test] the controls and the score are on the page before they are used
[⚙️ assert] the controls start hidden✅ got: #t
[⚙️ assert] the place a score is drawn in✅ got: #t
[🧪 test] a version carrying no tab is offered none
[⚙️ assert] a field a reader never touched✅ got: ()
[⚙️ assert] and a version whose tab is not a tab at all✅ got: ()
[🧪 test] a version carrying a tab offers it for download
[⚙️ assert] the link to the file✅ got: #t
[⚙️ assert] and the name it is saved under✅ got: #t
[🧪 test] the words the player shows are the page's own
[⚙️ assert] while it loads✅ got: #t
[⚙️ assert] once it is drawn✅ got: #t
[⚙️ assert] and when it cannot be drawn✅ got: #t
[⚙️ assert] the state while loading is a place the script reaches✅ got: #t
[⚙️ assert] and the state once drawn✅ got: #t
[⚙️ assert] and the state that failed✅ got: #t
[🧪 test] and the offer to draw it here, which is a button and not a script
[⚙️ assert] the button✅ got: #tℹ️ info - ran 3 tasks in: 1 seconds, -812342 microseconds
running unit tests from file: about-spec.scm, entrypoint: spec
ℹ️ info - shuffled with seed 143480906 (replay with VERITAS_SEED=143480906)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)
+----------------------------------------------+
[📑 suite] What the page says the project is❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)
+----------------------------------------------+
[📑 suite] The pages of an instance that asks for nothing❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (search-box) #f)
+----------------------------------------------+
[📑 suite] The word the link is offered in
[🧪 test] es_ES has a word for it
[⚙️ assert] the label is translated✅ got: #t
[🧪 test] nl_NL has a word for it
[⚙️ assert] the label is translated✅ got: #t
[🧪 test] ja_JP has a word for it
[⚙️ assert] the label is translated✅ got: #t
[🧪 test] en_US has a word for it
[⚙️ assert] the label is translated✅ got: #t
+----------------------------------------------+
[📑 suite] The front page as a way in❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (search-box) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (search-box) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (search-box) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (search-box) #f)
+----------------------------------------------+
[📑 suite] The order the page says things in❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)
+----------------------------------------------+
[📑 suite] What the page tells a crawler❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)
+----------------------------------------------+
[📑 suite] The words the two pages share❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (search-box) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)❌ error - task raised an error: unbound-variable: (#f Unbound variable: ~S (html-template) #f)
+----------------------------------------------+
[📑 suite] The link to the page
[🧪 test] every page offers it
[⚙️ assert] the footer links to it✅ got: #t
[⚙️ assert] and says where it leads✅ got: #tℹ️ info - ran 9 tasks in: 1 seconds, -576416 microseconds❌ error - aborting due to error in test case...
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /etc/byggsteg/job-clone/wikimusic/trunk/env.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/env.scm.go
;;; compiling ./test/veritas/unit/assets-spec.scm
;;; compiling ./resources/assets/fetch.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/resources/assets/fetch.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/test/veritas/unit/assets-spec.scm.go
;;; compiling ./test/veritas/unit/guitarpro-view-spec.scm
;;; compiling ./app/views/song-content-view.scm
;;; compiling ./lib/wikimusic/html.scm
WARNING: (hygguile hygguile): imported module (hygguile components select) overrides core binding `select'
;;; compiling ./lib/wikimusic/config.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/lib/wikimusic/config.scm.go
;;; compiling ./lib/wikimusic/seo.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/lib/wikimusic/seo.scm.go
WARNING: (wikimusic html): imported module (hygguile hygguile) overrides core binding `select'
WARNING: (wikimusic html): `get-short-commit-sha' imported from both (kracht prelude) and (hygguile hygguile)
;;; WARNING: compilation of ./lib/wikimusic/html.scm failed:
;;; Syntax error:
;;; unknown location: source expression failed to match any pattern in form (@ (src (unquote (asset-address "/img/wikimusic-logo.svg"))) (alt "") (loading lazy) (class (unquote (mk-class (quote (shrink-0 h-8 w-auto sm:h-9))))))
WARNING: (wikimusic html): imported module (hygguile hygguile) overrides core binding `select'
WARNING: (wikimusic html): `get-short-commit-sha' imported from both (kracht prelude) and (hygguile hygguile)
;;; WARNING: compilation of ./app/views/song-content-view.scm failed:
;;; Syntax error:
;;; unknown location: source expression failed to match any pattern in form (@ (src (unquote (asset-address "/img/wikimusic-logo.svg"))) (alt "") (loading lazy) (class (unquote (mk-class (quote (shrink-0 h-8 w-auto sm:h-9))))))
;;; compiling ./lib/wikimusic/domain.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/lib/wikimusic/domain.scm.go
;;; compiling ./lib/wikimusic/guitarpro.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/lib/wikimusic/guitarpro.scm.go
;;; compiling ./lib/wikimusic/domain/guitar-chord-guide.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/lib/wikimusic/domain/guitar-chord-guide.scm.go
WARNING: (app views song-content-view): imported module (hygguile hygguile) overrides core binding `select'
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/test/veritas/unit/guitarpro-view-spec.scm.go
;;; compiling ./test/veritas/unit/about-spec.scm
;;; compiling ./test/support/deployment.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/test/support/deployment.scm.go
;;; compiling ./app/views/about.scm
;;; compiling ./lib/wikimusic/prose.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/lib/wikimusic/prose.scm.go
;;; compiling ./app/views/index.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/app/views/index.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/app/views/about.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/wikimusic/trunk/test/veritas/unit/about-spec.scm.go
--------------------------------------------------------------
Maak 0.14.0: the infinitely extensible command runner
Loading tasks from Maak file: /etc/byggsteg/job-clone/wikimusic/trunk/maak.scm
Executing Maak tasks: test
--------------------------------------------------------------
=> Running Maak task: test
Run the project's test suite, one spec at a time, from test/veritas.
Executing: guix time-machine --channels=channels.scm -- shell -m manifest.scm -- guile --fresh-auto-compile -L ./lib -L ./test -L . -c '(load "env.scm")(begin (setlocale LC_ALL "C.UTF-8") (use-modules (veritas runner)) (run-tests))'
maak: error: command failed (exit code 1): guix time-machine --channels=channels.scm -- shell -m manifest.scm -- guile --fresh-auto-compile -L ./lib -L ./test -L . -c '(load "env.scm")(begin (setlocale LC_ALL "C.UTF-8") (use-modules (veritas runner)) (run-tests))'
hint: Fix the command above, or run `maak --dry-run' to inspect it first.