starting new job...
→ running command: cd "/etc/byggsteg/job-clone//byggsteg/trunk" && git reset --hard && git pull
HEAD is now at 573a9da feat: Add test stage in CI/CD
From https://codeberg.org/jjba23/byggsteg
573a9da..2bda17e trunk -> origin/trunk
Updating 573a9da..2bda17e
Fast-forward
app/controllers/logs.scm | 38 +
app/views/logs.scm | 122 +++-
app/views/search.scm | 13 +-
lib/byggsteg/ansi.scm | 851 ++++++++++++++++++++++
lib/byggsteg/faces.scm | 19 +-
lib/byggsteg/html.scm | 2 +-
lib/byggsteg/job/pipeline.scm | 30 +-
lib/byggsteg/preferences.scm | 46 +-
pub/js/byggsteg-log.js | 188 +++++
sys/i18n/locale/en_US/LC_MESSAGES/translate.mo | Bin 389 -> 357 bytes
sys/i18n/locale/en_US/LC_MESSAGES/translate.po | 845 +++++++++++++++++++---
sys/i18n/locale/es_ES/LC_MESSAGES/translate.mo | Bin 3889 -> 2487 bytes
sys/i18n/locale/es_ES/LC_MESSAGES/translate.po | 958 ++++++++++++++++++++----
sys/i18n/locale/ja_JP/LC_MESSAGES/translate.mo | Bin 4283 -> 2633 bytes
sys/i18n/locale/ja_JP/LC_MESSAGES/translate.po | 965 +++++++++++++++++++++----
sys/i18n/locale/nl_NL/LC_MESSAGES/translate.mo | Bin 3658 -> 2308 bytes
sys/i18n/locale/nl_NL/LC_MESSAGES/translate.po | 961 ++++++++++++++++++++----
sys/i18n/locale/translate.pot | 851 +++++++++++++++++++---
test/veritas/support/deployment.scm | 81 +++
test/veritas/unit/about-page-spec.scm | 13 +-
test/veritas/unit/ansi-spec.scm | 238 ++++++
test/veritas/unit/console-resources-spec.scm | 13 +-
test/veritas/unit/deployment-identity-spec.scm | 14 +-
test/veritas/unit/error-pages-spec.scm | 19 +-
test/veritas/unit/job-pipelines-spec.scm | 109 +++
25 files changed, 5733 insertions(+), 643 deletions(-)
create mode 100644 lib/byggsteg/ansi.scm
create mode 100644 pub/js/byggsteg-log.js
create mode 100644 test/veritas/support/deployment.scm
create mode 100644 test/veritas/unit/ansi-spec.scm
→ 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 2bda17e7535c3ea7f890f24f9f3f25b16b391108
Author: Josep Bigorra <jjbigorra@gmail.com>
Date: Wed Oct 14 16:06:45 2026 +0200
feat: ANSI support
M app/controllers/logs.scm
M app/views/logs.scm
M app/views/search.scm
A lib/byggsteg/ansi.scm
M lib/byggsteg/faces.scm
M lib/byggsteg/html.scm
M lib/byggsteg/job/pipeline.scm
M lib/byggsteg/preferences.scm
A pub/js/byggsteg-log.js
M sys/i18n/locale/en_US/LC_MESSAGES/translate.mo
M sys/i18n/locale/en_US/LC_MESSAGES/translate.po
M sys/i18n/locale/es_ES/LC_MESSAGES/translate.mo
M sys/i18n/locale/es_ES/LC_MESSAGES/translate.po
M sys/i18n/locale/ja_JP/LC_MESSAGES/translate.mo
M sys/i18n/locale/ja_JP/LC_MESSAGES/translate.po
M sys/i18n/locale/nl_NL/LC_MESSAGES/translate.mo
M sys/i18n/locale/nl_NL/LC_MESSAGES/translate.po
M sys/i18n/locale/translate.pot
A test/veritas/support/deployment.scm
M test/veritas/unit/about-page-spec.scm
A test/veritas/unit/ansi-spec.scm
M test/veritas/unit/console-resources-spec.scm
M test/veritas/unit/deployment-identity-spec.scm
M test/veritas/unit/error-pages-spec.scm
M test/veritas/unit/job-pipelines-spec.scm
→ 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 53304928 (replay with VERITAS_SEED=53304928)
found unit tests: (ansi-spec.scm log-streaming-spec.scm heatmap-spec.scm about-page-spec.scm deployment-identity-spec.scm password-strength-spec.scm error-pages-spec.scm retention-spec.scm password-reset-spec.scm artifact-spec.scm job-pipelines-spec.scm form-width-spec.scm job-pipeline-spec.scm job-search-spec.scm retry-spec.scm terminal-glass-spec.scm console-resources-spec.scm user-bootstrap-spec.scm)
running unit tests from file: ansi-spec.scm, entrypoint: spec
?? info - shuffled with seed 53304928 (replay with VERITAS_SEED=53304928)
+----------------------------------------------+
[? suite] ANSI console output
[? test] the escapes a terminal would act on are read, and text is not
[?? assert] plain text and its newlines are left whole
? got: (hello
world)
[?? assert] an output that ends on a newline ends on that newline
? got: (a
)
[?? assert] the text of a run is escaped for the serializer
? got: (a <b> & c)
[?? assert] no escape byte survives into the markup
? got: [0m
[?? assert] a title wrapped in an OSC is dropped, its text kept
? got: (abc)
[? test] a line is drawn where the cursor is, not appended to
[?? assert] a carriage return overwrites the line it is on
? got: (cd)
[?? assert] a second frame shorter than the first leaves its tail
? got: (xycdef)
[?? assert] a backspace steps the cursor back over what it wrote
? got: (bacspace)
[?? assert] a tab advances to the next stop, eight columns on
? got: (tab end)
[? test] what a progress line erases, it erases
[?? assert] erase-in-line clears from the cursor to the end
? got: (done)
[?? assert] clear-line clears the whole line
? got: (def)
[?? assert] a line drawn again is the frame left on the screen
? got: (substitute: looking for substitutes... 100.0%)
[? test] colour is asked for, changed and put back
[?? assert] a weight is a class and a colour is this console's own
? got: ((span (@ (class font-bold)) bold) and (span (@ (class dark:text-asparagus-300 text-asparagus-700)) green))
[?? assert] a reset puts the weight and the colour back
? got: ((span (@ (class font-bold)) loud) quiet)
[?? assert] a bright colour takes the bright half of the palette
? got: ((span (@ (class dark:text-redwood-100 text-redwood-500)) red))
[?? assert] the decorations a class can carry are carried for both themes
? got: ((span (@ (class italic line-through underline)) deco))
[? test] a colour a class cannot name is written where it is exact
[?? assert] a 256-colour value is the cube's own red
? got: ((span (@ (style color:#ff0000)) red))
[?? assert] a grey of the ramp is the grey it names
? got: ((span (@ (style background-color:#303030)) grey))
[?? assert] true colour is the colour it says, to the byte
? got: ((span (@ (style color:#123456)) true))
[?? assert] a colour and a ground are both written
? got: ((span (@ (style color:#5fd7ff;background-color:#303030)) both))
[? test] a line of output read as prose carries no escape and no earlier frame
[?? assert] the escapes are dropped and what they coloured is kept
? got: red
[?? assert] a line painted again comes back as the reading it ended in
? got: second
[?? assert] and text an escape does not touch is left as it stands
? got: hello
world
[? test] the bytes a command sent are the reading that spells them out
[?? assert] an escape is spelled the way a terminal would print it
? got: ^[[31mred^[[0m
[?? assert] a carriage return is shown rather than obeyed
? got: first^Msecond
[?? assert] and the line break is still the line break
? got: a
b
[? test] a pane reads its output the way the page is answered
[?? assert] the pane draws a coloured run as a span
? got: #t
[?? assert] the pane carries no escape into the markup
? got: [0m
[?? assert] the pane redraws a progress line rather than keeping both
? got: #t
[?? assert] and what the reader is shown is the reading it ended in
? got: >second<span class="ml-2
[?? assert] while the reading it was painted over is folded out of sight
? got: >first<
[?? assert] and the pane's own control is what unfolds it
? got: data-frames-toggle
?? info - ran 1 tasks in: 0 seconds, 15056 microseconds
running unit tests from file: log-streaming-spec.scm, entrypoint: spec
?? info - shuffled with seed 53304928 (replay with VERITAS_SEED=53304928)
+----------------------------------------------+
[? 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, 29433 microseconds
running unit tests from file: heatmap-spec.scm, entrypoint: spec
?? info - shuffled with seed 53304928 (replay with VERITAS_SEED=53304928)
+----------------------------------------------+
[? suite] activity heatmap
[? test] the calendar between a day number and a date is the reader's own
[?? assert] every date is read back as the day number it is known by
? got: ()
[?? assert] the epoch is day zero, and the day before it is minus one
? got: (0 -1)
[?? assert] a leap day is a day of its own
? got: 11016
[?? assert] the week starts on Sunday, and the epoch was a Thursday
? got: (4 2 3)
[? test] jobs are counted by the day they were queued on;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling ./test/veritas/unit/ansi-spec.scm
;;; compiling ./lib/byggsteg/ansi.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/ansi.scm.go
;;; note: source file ./lib/byggsteg/faces.scm
;;; newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/faces.scm.go
;;; compiling ./lib/byggsteg/faces.scm
WARNING: (hygguile hygguile): imported module (hygguile components select) overrides core binding `select'
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/faces.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/ansi-spec.scm.go
;;; note: source file ./lib/byggsteg/preferences.scm
;;; newer than 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/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 ./test/veritas/unit/heatmap-spec.scm
;;; compiling ./lib/byggsteg/heatmap.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/heatmap.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/unit/heatmap-spec.scm.go
;;; note: source file ./test/veritas/unit/about-page-spec.scm
;;; newer than 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
;;; compiling ./test/veritas/unit/about-page-spec.scm
;;; compiling ./test/veritas/support/deployment.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/test/veritas/support/deployment.scm.go
;;; note: source file ./lib/byggsteg/html.scm
;;; newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/html.scm.go
;;; compiling ./lib/byggsteg/html.scm
;;; note: source file ./lib/byggsteg/job/pipeline.scm
;;; newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/pipeline.scm.go
;;; compiling ./lib/byggsteg/job/pipeline.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.7/etc/byggsteg/job-clone/byggsteg/trunk/lib/byggsteg/job/pipeline.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/test/veritas/unit/about-page-spec.scm.go
WARNING: (byggsteg html): `get-short-commit-sha' imported from both (hygguile hygguile) and (kracht prelude)
[?? assert] a day is counted once per job, and what is not a date is left out
? got: ((20739 . 3) (20730 . 2) (20737 . 1))
[? test] the grid ends with the week today is in
[?? assert] two columns of seven days, from the Sunday before to today
? got: ((columns 2) (cells-per-column 7) (first-day 20730) (last-day 20743) (today-is-in-the-last-column 3) (a-day-not-happened-yet #f))
[? test] a square is as dark as its day is busy
[?? assert] the busiest day is darkest, and a day with no jobs is not drawn dark
? got: ((20739 . 4) (20730 . 3) (20737 . 2) (20738 . 0))
[?? assert] the four steps between are read off the busiest day
? got: ((against-a-busiest-day-of-ten (0 . 0) (2 . 1) (3 . 2) (5 . 2) (6 . 3) (9 . 3) (10 . 4)) (no-busiest-day 1) (a-day-that-has-not-happened #f))
[? test] the months are named along the top of the grid
[?? assert] a year of weeks is labelled, from its first column on
? got: ((labels 13) (first-label-name Oct) (first-label-column 0) (two-days-of-one-month-are-named-alike #t) (two-months-are-named-differently #t))
[? test] a deployment with no jobs draws a grid rather than nothing
[?? assert] an empty heatmap has a total, a busiest day and a full year of squares
? got: ((total 0) (max 0) (columns 53) (cells 371))
?? info - ran 1 tasks in: 0 seconds, 1502 microseconds
running unit tests from file: about-page-spec.scm, entrypoint: spec
?? info - shuffled with seed 53304928 (replay with VERITAS_SEED=53304928)
+----------------------------------------------+
[? suite] about page
[? test] the account is on the page, and it is this deployment's
[?? 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 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 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 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, 3072 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 7fae965f0340>)
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) 7fae965f3c80>)))
In ice-9/command-line.scm:
187:19 3 (_ #<input: custom-port 7fae965da3f0>)
In unknown file:
2 (eval ((@ (maak main) main)) #<directory (guile-user) 7fae965f3c80>)
In srfi/srfi-1.scm:
750:9 1 (for-each #<procedure 7fae956d5198 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.