starting new job...
→ running command: cd "/etc/byggsteg/job-clone//byggsteg/trunk" && git reset --hard && git pull
HEAD is now at 4f29ed6 feat: Improve CI/CD runner
From https://codeberg.org/jjba23/byggsteg
4f29ed6..573a9da trunk -> origin/trunk
Updating 4f29ed6..573a9da
Fast-forward
.woodpecker/byggsteg.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
→ running command: cd /etc/byggsteg/job-clone/byggsteg/trunk && uname -a
Linux wolk-jjba 7.1.5-gnu #1 SMP PREEMPT_DYNAMIC 1 x86_64 GNU/Linux
→ running command: cd /etc/byggsteg/job-clone/byggsteg/trunk && git log --name-status HEAD^..HEAD
commit 573a9dae69bc2daf1a63ef1fb6ea81afc7f7e3bb
Author: Josep Bigorra <jjbigorra@gmail.com>
Date: Wed Oct 14 14:17:26 2026 +0200
feat: Add test stage in CI/CD
M .woodpecker/byggsteg.yaml
→ running command: cd /etc/byggsteg/job-clone/byggsteg/trunk && maak test
scanning directories for unit tests...
scanning present working directory for unit tests...
shuffled the files with seed 156808346 (replay with VERITAS_SEED=156808346)
found unit tests: (log-streaming-spec.scm job-pipelines-spec.scm password-reset-spec.scm retention-spec.scm job-pipeline-spec.scm about-page-spec.scm password-strength-spec.scm deployment-identity-spec.scm user-bootstrap-spec.scm console-resources-spec.scm job-search-spec.scm error-pages-spec.scm form-width-spec.scm artifact-spec.scm retry-spec.scm heatmap-spec.scm terminal-glass-spec.scm)
running unit tests from file: log-streaming-spec.scm, entrypoint: spec
?? info - shuffled with seed 156808346 (replay with VERITAS_SEED=156808346)
+----------------------------------------------+
[? suite] job log streaming
[? test] output reaches the log a batch at a time, whole
[?? assert] the line that completes the batch is the one that writes
? got: ((calls-before-the-batch-completes 0) (text-held one
two
) (written-by-the-batch (one
two
three
)) (written-at-the-end (one
two
three
)) (calls-at-the-end 1))
[? test] a buffer writes only when it has something new to say
[?? assert] nothing gathered, and nothing gathered again, are not writes
? got: ((calls-of-an-empty-buffer 0) (first-flush (one
)) (calls-after-two-flushes 1))
[? test] a command is announced the way a finished log announces it
[?? assert] the banner names the command and starts its own line
? got: ((names-the-command #t) (starts-its-own-line #t))
[? test] a running job's log row is refreshed while it runs
[?? assert] two lines are held, and the batch that completes three is written
? got: ((before-the-batch ) (the-batch-is-in-the-row #t) (the-whole-log-is-in-the-row #t) (the-end-is-in-the-row #t))
[? test] one job's log is the log that is written
[?? assert] streaming into a job writes its log and no other
? got: ((the-job-log-is-written #t) (the-other-log-is-untouched ))
?? info - ran 1 tasks in: 0 seconds, 12061 microseconds
running unit tests from file: job-pipelines-spec.scm, entrypoint: spec
?? info - shuffled with seed 156808346 (replay with VERITAS_SEED=156808346)
+----------------------------------------------+
[? suite] job pipelines
[? test] the jobs a request asks for are read from its data
[?? assert] a list of jobs and a single job are read alike
? got: ((a-list-of-two 2) (a-list-of-one 1) (the-first-project-names-the-job byggsteg) (a-pipeline-of-unnamed-jobs pipeline) (a-pipeline-of-bare-commands trivial))
[? test] every job of a pipeline is run, in the order it is written
succeeded?: #t
[?? assert] both stages ran, the first before the second
? got: ((the-first-job-ran #t) (the-second-job-ran #t) (in-the-order-they-are-written #t) (outcome (1 0 0)))
[? test] a job that fails stops the pipeline
succeeded?: #f
[?? assert] the job after the failure did not run, and the pipeline failed
? got: ((the-later-job-ran #f) (outcome (0 0 1)))
[? test] a pipeline of one job is a job
succeeded?: #t
[?? assert] a single job's commands ran and its row says so
? got: ((the-job-ran #t) (outcome (1 0 0)))
[? test] a stage that names several bundles collects a tarball for each
succeeded?: #t
[?? assert] the bare path's tarball keeps the title, and each bundle its name
? got: ((how-many 3) (named-as-asked (spec-spec-collecting.tar.gz binaries-2.tar.gz docs-3.tar.gz)) (the-tarballs-are-there (#t #t #t)) (outcome (1 0 0)))
?? info - ran 1 tasks in: 0 seconds, 155146 microseconds;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling ./test/veritas/unit/log-streaming-spec.scm
;;; compiling ./lib/byggsteg/job/streaming.scm
;;; compiling ./lib/byggsteg/preferences.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/preferences.scm.go
;;; compiling ./lib/byggsteg/domain/log.scm
;;; compiling ./lib/byggsteg/domain/repo.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/repo.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/log.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/streaming.scm.go
;;; compiling ./lib/byggsteg/sqlite/log.scm
;;; compiling ./lib/byggsteg/sqlite/util.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/util.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/log.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/log-streaming-spec.scm.go
;;; compiling ./test/veritas/unit/job-pipelines-spec.scm
;;; compiling ./lib/byggsteg/job/pipeline.scm
;;; compiling ./lib/byggsteg/artifacts.scm
;;; compiling ./lib/byggsteg/upkeep.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/upkeep.scm.go
;;; compiling ./lib/byggsteg/domain/artifact.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/artifact.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/artifacts.scm.go
;;; compiling ./lib/byggsteg/job/steps.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/steps.scm.go
;;; compiling ./lib/byggsteg/domain/job.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/job.scm.go
;;; compiling ./lib/byggsteg/sqlite/job.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/job.scm.go
;;; compiling ./lib/byggsteg/sqlite/artifact.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/sqlite/artifact.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/pipeline.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/job-pipelines-spec.scm.go
;;; compiling ./test/veritas/unit/password-reset-spec.scm
;;; compiling ./lib/byggsteg/domain/password-reset.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/domain/password-reset.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/password-reset-spec.scm.go
;;; compiling ./test/veritas/unit/retention-spec.scm
;;; compiling ./lib/byggsteg/job/retention.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/retention.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/retention-spec.scm.go
;;; compiling ./test/veritas/unit/job-pipeline-spec.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/job-pipeline-spec.scm.go
;;; compiling ./test/veritas/unit/about-page-spec.scm
;;; compiling ./app/views/about.scm
;;; compiling ./lib/byggsteg/faces.scm
WARNING: (hygguile hygguile): imported module (hygguile components select) overrides core binding `select'
;;; compiled
running unit tests from file: password-reset-spec.scm, entrypoint: spec
?? info - shuffled with seed 156808346 (replay with VERITAS_SEED=156808346)
+----------------------------------------------+
[? suite] a password-reset link
[? test] a link is worth following for the week after it was made
[?? assert] yesterday is usable, the last instant of the week is usable, the instant after is not
? got: ((made-a-minute-ago #t) (made-yesterday #t) (made-inside-the-week #t) (made-exactly-a-week-ago #f) (made-a-week-and-a-day-ago #f))
[? test] a link this deployment cannot date is not followed
[?? assert] no row, no date and a date that is not a number all answer the same as an old link
? got: ((no-such-token #f) (a-row-without-a-date #f) (a-row-whose-date-is-not-an-instant #f))
?? info - ran 1 tasks in: 1 seconds, -984136 microseconds
running unit tests from file: retention-spec.scm, entrypoint: spec
?? info - shuffled with seed 156808346 (replay with VERITAS_SEED=156808346)
+----------------------------------------------+
[? suite] job retention
[? test] a run that has outlived the retention is removed whole
[?? assert] the tarball, its row, the log and the job all go, and the younger runs stay
? got: ((due-for-pruning (spec-old-run)) (pruned (spec-old-run)) (the-old-run-is-gone #f) (its-log-went-with-it #f) (its-tarball-row-went-with-it 0) (its-tarball-file-went-with-it #f) (the-run-from-yesterday-is-kept #t) (its-log-is-kept #t) (its-tarball-is-kept #t) (the-run-still-going-is-kept #t) (its-tarball-is-kept-too #t))
[? test] a pass removes no more than the batch it was given
[?? assert] the oldest goes first, the run behind it waits for the next pass
? got: ((due-asked-for-one (spec-oldest-run)) (due-asked-for-two (spec-oldest-run spec-older-run)) (a-pass-bounded-to-one (spec-oldest-run)) (the-run-behind-it-is-still-there #t) (and-the-next-pass-takes-it (spec-older-run)))
[? test] a retention of 0 days keeps every run
[?? assert] nothing is due, and a prune asked for anyway removes nothing
? got: ((nothing-is-due ()) (and-nothing-is-pruned 0))
?? info - ran 1 tasks in: 0 seconds, 1728 microseconds
running unit tests from file: job-pipeline-spec.scm, entrypoint: spec
?? info - shuffled with seed 156808346 (replay with VERITAS_SEED=156808346)
+----------------------------------------------+
[? suite] job pipeline
[? test] job data that is not a thunk is refused, not applied
[?? assert] job data that is not a procedure raises
? raised an error as expected
[?? assert] a refused job is left for the sweep to fail
? got: ()
[? test] the sweep fails what it cannot run, and runs a job with no log
could not run job spec-unparseable: read-error (#f "#<unknown port>:1:21: unexpected end of input while searching for: ~A" (#\)) #f)
could not run job spec-empty-job-data: misc-error (#f "byggsteg: job data did not evaluate to a procedure ~S" ("spec-empty-job-data") #f)
could not run job spec-queued-not-a-thunk: misc-error (#f "byggsteg: job data did not evaluate to a procedure ~S" ("spec-queued-not-a-thunk") #f)
succeeded?: #t
succeeded?: #t
[?? assert] every job ended as it should, and the logs are right
? got: ()
?? info - ran 1 tasks in: 3 seconds, 63017 microseconds
running unit tests from file: about-page-spec.scm, entrypoint: spec
?? info - shuffled with seed 156808346 (replay with VERITAS_SEED=156808346)
+----------------------------------------------+
[? suite] about page
[? test] the account is on the page, and it is this deployment's/root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/faces.scm.go
;;; compiling ./lib/byggsteg/html.scm
;;; compiling ./lib/byggsteg/permissions.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/permissions.scm.go
WARNING: (byggsteg html): `get-short-commit-sha' imported from both (hygguile hygguile) and (kracht prelude)
WARNING: (byggsteg html): imported module (hygguile hygguile) overrides core binding `select'
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/html.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/app/views/about.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/about-page-spec.scm.go
WARNING: (byggsteg html): `get-short-commit-sha' imported from both (hygguile hygguile) and (kracht prelude)
[?? assert] the story names the people, the framework and the three doors
? got: ()
[?? assert] and it holds nothing the page was never meant to say
? got: ()
[?? assert] the page opens under the console's own prompt
? got: $ byggsteg --origin
[? test] the page can be read on a phone
[?? assert] no panel of it forces a width wider than the screen
? got: ()
[?? assert] the panels are told they may shrink
? got: min-w-0
[? test] the page a crawler is handed says what it is
[?? assert] it declares itself a document of this deployment
? got: <!DOCTYPE html>
[?? assert] it is dressed in the same sheet as every other page
? got: /css/byggsteg.olive.min.css
[?? assert] its canonical address is the page's own
? got: /about
[?? assert] its title names the deployment and the page
? got: <title>byggsteg - about</title>
[? test] the page is built by the components rather than describing them
[?? assert] no component call was left un-made in the markup
? got: ()
[?? assert] every element of the page is an element a browser knows
? fail - error, expect: #t, got: (c c re iv c)
[?? assert] no element of the page is closed on itself
? got: ()
?? info - ran 1 tasks in: 0 seconds, 2944 microseconds
? error -
aborting due to error in test case...
Backtrace:
In ice-9/boot-9.scm:
1784:12 7 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In unknown file:
6 (apply-smob/0 #<thunk 7f2cd144b340>)
In ice-9/boot-9.scm:
733:2 5 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
619:8 4 (_ #(#(#<directory (guile-user) 7f2cd144ec80>)))
In ice-9/command-line.scm:
187:19 3 (_ #<input: custom-port 7f2cd14353f0>)
In unknown file:
2 (eval ((@ (maak main) main)) #<directory (guile-user) 7f2cd144ec80>)
In srfi/srfi-1.scm:
750:9 1 (for-each #<procedure 7f2cd0530198 at maak/maak.scm:87:12 (task)> (test))
In maak/dsl.scm:
89:12 0 ($ _ #:verbose? _ #:join _)
maak/dsl.scm:89:12: In procedure $:
Non-zero exit code when running!
Command: guix time-machine --channels=channels.scm -- shell -m manifest.scm -- guile -L ./lib -L . -L ./test -c '(begin (use-modules (veritas runner)) (run-tests))'
Exit code: 1
--------------------------------------------------------------
Maak: the infinitely extensible command runner
Loading tasks from Maak file: /etc/byggsteg/job-clone/byggsteg/trunk/maak.scm
Executing Maak tasks: test
--------------------------------------------------------------
=> Running Maak task: test
Run the project's test suite.
The specs live under test/veritas/unit. That is where the runner looks for
suites -- given the test root ./test, the module prefix `veritas' and the suite
name `unit' -- and it is also what their own `(veritas unit ...)' module names
resolve to on the load path below.