byggsteg-41b47bfe-04af

job failed

time taken
14 seconds
started at
Wed Oct 14 14:17:42 2026
updated at
Wed Oct 14 14:17:56 2026
log uuid
41b47bfe-04af-43d7-a2bc-d00582cf4018
inspect the job's lambda expression
(lambda()
  `((task . ("maak-test" "byggsteg-version" "maak-deploy"))
    (daemon-name . "byggsteg-daemon")
    (project . "byggsteg")
    (branch-name . "trunk")
    (clone-url . "https://codeberg.org/jjba23/byggsteg.git")))
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.