starting new job...
→ running command: dir='/etc/byggsteg/job-clone//symbanta-dashboard/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 moved from fd325b6 to 51aabce
→ running command: cd /etc/byggsteg/job-clone/symbanta-dashboard/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/symbanta-dashboard/trunk && git log --name-status HEAD^..HEAD
commit 51aabce446dc4cb8338e8878b24e1a43ac06e233
Author: Josep Bigorra <jjbigorra@gmail.com>
Date: Wed Nov 4 23:10:14 2026 +0100
docs: Update visual identity
M README.org
A logo.svg
→ running command: cd /etc/byggsteg/job-clone/symbanta-dashboard/trunk && maak test
⚡ Node.js frontend environment loaded
Node version: v24.19.0
NPM version: 11.17.0
up to date, audited 344 packages in 1m
86 packages are looking for funding
run `npm fund` for details
6 moderate severity vulnerabilities
To address issues that do not require attention, run:
npm audit fix
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
npm warn allow-scripts 1 package has install scripts not yet covered by allowScripts:
npm warn allow-scripts esbuild@0.28.2 (postinstall: node install.js)
npm warn allow-scripts
npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts <pkg>` to allow.
> symbanta-dashboard@0.5.1 test
> vitest run
RUN v5.0.5 /etc/byggsteg/job-clone/symbanta-dashboard/trunk
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > exposes exactly one h1, one main landmark and labelled panels
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > provides a keyboard skip link that targets the main landmark
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > offers a screen-reader table alternative for the traffic chart
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > makes the scrollable tables reachable and named
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > announces refresh progress through a polite live region
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > passes the structural audit
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > passes axe-core WCAG 2.1 A/AA
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
✓ src/a11y/dashboard.a11y.test.tsx (7 tests) 6351ms
✓ dashboard accessibility (7)
✓ exposes exactly one h1, one main landmark and labelled panels 1582ms
✓ provides a keyboard skip link that targets the main landmark 789ms
✓ offers a screen-reader table alternative for the traffic chart 655ms
✓ makes the scrollable tables reachable and named 420ms
✓ announces refresh progress through a polite live region 401ms
✓ passes the structural audit 491ms
✓ passes axe-core WCAG 2.1 A/AA 2013ms
✓ src/i18n/catalog.test.ts (66 tests) 3368ms
✓ the gettext template (3)
✓ is in sync with the source code 906ms
✓ de.po (9)
✓ is in sync with the template 407ms
✓ es.po (9)
✓ is in sync with the template 393ms
✓ it.po (9)
✓ is in sync with the template 392ms
✓ ja.po (9)
✓ is in sync with the template 305ms
✓ src/ConsoleLogs.test.tsx (10 tests) 2113ms
✓ ConsoleLogs (10)
✓ shows a skeleton while loading 704ms
✓ src/StatsTables.test.tsx (15 tests) 1994ms
✓ Top routes panel (3)
✓ renders the breakdown rows 964ms
✓ src/ui.test.tsx (17 tests) 1974ms
✓ StatsTable (8)
✓ renders one row per entry with views, visitors and share 978ms
✓ PeriodSelect (2)
✓ reports the selected period 300ms
✓ src/StatsDashboard.test.tsx (8 tests) 1314ms
✓ StatsDashboard (8)
✓ shows a skeleton while the summary loads 731ms
✓ src/i18n/I18nContext.test.tsx (11 tests) 1566ms
✓ I18nProvider (11)
✓ offers every supported language in the switcher 727ms
✓ src/DomainSwitcher.test.tsx (7 tests) 1084ms
✓ DomainSwitcher (7)
✓ renders a select with every property once loaded 629ms
✓ src/ThemeContext.test.tsx (10 tests) 1266ms
✓ ThemeProvider (10)
✓ applies and persists an explicit theme 753ms
✓ src/a11y/ContrastContext.test.tsx (7 tests) 1368ms
✓ ContrastToggle (4)
✓ is a labelled toggle button with a stable accessible name 634ms
✓ src/PeriodContext.test.tsx (5 tests) 1280ms
✓ PeriodProvider (5)
✓ updates the period and remembers the choice 979ms
✓ mock-api/routes.test.ts (34 tests) 216ms
✓ src/Prelude.test.ts (21 tests) 164ms
✓ src/i18n/translate.test.ts (15 tests) 194ms
✓ src/i18n/locale.test.ts (16 tests) 188ms
✓ src/api/custom-fetch.test.ts (13 tests) 134ms
✓ src/a11y/contrast.test.ts (17 tests) 157ms
✓ src/a11y/tokens.test.ts (10 tests) 129ms
✓ src/i18n/plural.test.ts (11 tests) 119ms
✓ src/a11y/colorUsage.test.ts (3 tests) 78ms
Test Files 20 passed (20)
Tests 303 passed (303)
Start at 23:15:53
Duration 130.66s (environment 59%, tests 21%, setup 10%, import 6%, transform 4%)
Environment jsdom was created 20 times · 68.54s total, 59% of tracked time
create it once per worker with pool: 'vmThreads' (keeps per-file isolation) or isolate: false (shares it across files)
learn more: https://vitest.dev/guide/improving-performance#test-environments
--------------------------------------------------------------
Maak 0.14.0: the infinitely extensible command runner
Loading tasks from Maak file: /etc/byggsteg/job-clone/symbanta-dashboard/trunk/maak.scm
Executing Maak tasks: test
--------------------------------------------------------------
=> Running Maak task: test
Run the automated test suite.
Execute command:
nix develop . --command bash -c 'npm install && npm test'
Executing: nix develop . --command bash -c 'npm install && npm test'
→ running command: cd /etc/byggsteg/job-clone/symbanta-dashboard/trunk && sudo maak deploy
warning: Git tree '/etc/byggsteg/job-clone/symbanta-dashboard/trunk' is dirty
⚡ Node.js frontend environment loaded
Node version: v24.19.0
NPM version: 11.17.0
up to date, audited 344 packages in 1s
86 packages are looking for funding
run `npm fund` for details
6 moderate severity vulnerabilities
To address issues that do not require attention, run:
npm audit fix
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
npm warn allow-scripts 1 package has install scripts not yet covered by allowScripts:
npm warn allow-scripts esbuild@0.28.2 (postinstall: node install.js)
npm warn allow-scripts
npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts <pkg>` to allow.
> symbanta-dashboard@0.5.1 test
> vitest run
RUN v5.0.5 /etc/byggsteg/job-clone/symbanta-dashboard/trunk
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > exposes exactly one h1, one main landmark and labelled panels
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > provides a keyboard skip link that targets the main landmark
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > offers a screen-reader table alternative for the traffic chart
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > makes the scrollable tables reachable and named
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > announces refresh progress through a polite live region
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > passes the structural audit
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
stderr | src/a11y/dashboard.a11y.test.tsx > dashboard accessibility > passes axe-core WCAG 2.1 A/AA
The width(0) and height(0) of chart should be greater than 0,
please check the style of container, or the props width(100%) and height(100%),
or add a minWidth(0) or minHeight(undefined) or use aspect(undefined) to control the
height and width.
✓ src/a11y/dashboard.a11y.test.tsx (7 tests) 2053ms
✓ dashboard accessibility (7)
✓ exposes exactly one h1, one main landmark and labelled panels 485ms
✓ passes axe-core WCAG 2.1 A/AA 617ms
✓ src/i18n/catalog.test.ts (66 tests) 829ms
✓ src/ConsoleLogs.test.tsx (10 tests) 421ms
✓ src/StatsTables.test.tsx (15 tests) 416ms
✓ src/ui.test.tsx (17 tests) 499ms
✓ src/i18n/I18nContext.test.tsx (11 tests) 290ms
✓ src/a11y/ContrastContext.test.tsx (7 tests) 277ms
✓ src/StatsDashboard.test.tsx (8 tests) 294ms
✓ src/PeriodContext.test.tsx (5 tests) 256ms
✓ src/ThemeContext.test.tsx (10 tests) 319ms
✓ src/DomainSwitcher.test.tsx (7 tests) 269ms
✓ mock-api/routes.test.ts (34 tests) 39ms
✓ src/i18n/translate.test.ts (15 tests) 30ms
✓ src/i18n/locale.test.ts (16 tests) 25ms
✓ src/Prelude.test.ts (21 tests) 45ms
✓ src/a11y/contrast.test.ts (17 tests) 22ms
✓ src/api/custom-fetch.test.ts (13 tests) 21ms
✓ src/a11y/tokens.test.ts (10 tests) 20ms
✓ src/i18n/plural.test.ts (11 tests) 18ms
✓ src/a11y/colorUsage.test.ts (3 tests) 12ms
Test Files 20 passed (20)
Tests 303 passed (303)
Start at 23:18:08
Duration 26.49s (environment 53%, tests 26%, setup 9%, import 8%, transform 3%)
Environment jsdom was created 20 times · 12.46s total, 53% of tracked time
create it once per worker with pool: 'vmThreads' (keeps per-file isolation) or isolate: false (shares it across files)
learn more: https://vitest.dev/guide/improving-performance#test-environments
warning: Git tree '/etc/byggsteg/job-clone/symbanta-dashboard/trunk' is dirty
⚡ Node.js frontend environment loaded
Node version: v24.19.0
NPM version: 11.17.0
up to date, audited 344 packages in 1s
86 packages are looking for funding
run `npm fund` for details
6 moderate severity vulnerabilities
To address issues that do not require attention, run:
npm audit fix
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
npm warn allow-scripts 1 package has install scripts not yet covered by allowScripts:
npm warn allow-scripts esbuild@0.28.2 (postinstall: node install.js)
npm warn allow-scripts
npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts <pkg>` to allow.
> symbanta-dashboard@0.5.1 build
> tsc -b && vite build
vite v8.3.5 building client environment for production...
transforming...
✓ 722 modules transformed.
rendering chunks...
computing gzip size...
dist/index.html 0.80 kB │ gzip: 0.42 kB
dist/assets/index-BsN6-mDP.css 63.37 kB │ gzip: 11.74 kB
dist/assets/index-D_rjWkso.js 757.62 kB │ gzip: 220.92 kB
[plugin builtin:vite-reporter]
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
✓ built in 1.13s
removed '/srv/symbanta.jointhefreeworld.org/assets/index-D_rjWkso.js'
removed '/srv/symbanta.jointhefreeworld.org/assets/index-BsN6-mDP.css'
removed directory '/srv/symbanta.jointhefreeworld.org/assets'
removed '/srv/symbanta.jointhefreeworld.org/favicon.svg'
removed '/srv/symbanta.jointhefreeworld.org/fonts/juliamono-bold-latin.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/juliamono-normal-latin.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-italic-latin-ext.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-italic-latin.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-normal-latin-ext.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-normal-latin.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-italic-latin-ext.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-italic-latin.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-normal-latin-ext.woff2'
removed '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-normal-latin.woff2'
removed directory '/srv/symbanta.jointhefreeworld.org/fonts'
removed '/srv/symbanta.jointhefreeworld.org/icons.svg'
removed '/srv/symbanta.jointhefreeworld.org/index.html'
'dist/assets' -> '/srv/symbanta.jointhefreeworld.org/assets'
'dist/assets/index-D_rjWkso.js' -> '/srv/symbanta.jointhefreeworld.org/assets/index-D_rjWkso.js'
'dist/assets/index-BsN6-mDP.css' -> '/srv/symbanta.jointhefreeworld.org/assets/index-BsN6-mDP.css'
'dist/favicon.svg' -> '/srv/symbanta.jointhefreeworld.org/favicon.svg'
'dist/fonts' -> '/srv/symbanta.jointhefreeworld.org/fonts'
'dist/fonts/juliamono-bold-latin.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/juliamono-bold-latin.woff2'
'dist/fonts/juliamono-normal-latin.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/juliamono-normal-latin.woff2'
'dist/fonts/source-serif-4-italic-latin-ext.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-italic-latin-ext.woff2'
'dist/fonts/source-serif-4-italic-latin.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-italic-latin.woff2'
'dist/fonts/source-serif-4-normal-latin-ext.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-normal-latin-ext.woff2'
'dist/fonts/source-serif-4-normal-latin.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/source-serif-4-normal-latin.woff2'
'dist/fonts/work-sans-italic-latin-ext.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-italic-latin-ext.woff2'
'dist/fonts/work-sans-italic-latin.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-italic-latin.woff2'
'dist/fonts/work-sans-normal-latin-ext.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-normal-latin-ext.woff2'
'dist/fonts/work-sans-normal-latin.woff2' -> '/srv/symbanta.jointhefreeworld.org/fonts/work-sans-normal-latin.woff2'
'dist/icons.svg' -> '/srv/symbanta.jointhefreeworld.org/icons.svg'
'dist/index.html' -> '/srv/symbanta.jointhefreeworld.org/index.html'
--------------------------------------------------------------
Maak 0.14.0: the infinitely extensible command runner
Loading tasks from Maak file: /etc/byggsteg/job-clone/symbanta-dashboard/trunk/maak.scm
Executing Maak tasks: deploy
--------------------------------------------------------------
=> Running Maak task: deploy
Deploy the project, refusing to continue when the test suite fails.
Execute command:
nix develop . --command bash -c 'npm install && npm test'
Executing: nix develop . --command bash -c 'npm install && npm test'
Execute command:
nix develop . --command bash -c 'npm install && npm run build'
Executing: nix develop . --command bash -c 'npm install && npm run build'
Executing: rm -rfv /srv/symbanta.jointhefreeworld.org/*
Executing: cp -r -v dist/* /srv/symbanta.jointhefreeworld.org/