Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Opus 4.8 7be10fbd9b docs(readme): drop support-section intro and thank-you lines
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 01:28:39 +02:00
kevinveenbirkenbach 8b58235cbd Merge branch 'main' into feature/swarm-nfs
# Conflicts:
#	.github/workflows/security-scorecard.yml
#	README.md
#	roles/web-app-gitlab/meta/services.yml
#	roles/web-app-semaphore/meta/services.yml
2026-07-09 01:15:24 +02:00
kevinveenbirkenbachandClaude Opus 4.8 22a391ac56 test(lint): require data-loss justification for nfs: false volumes
A node-local volume does not follow a swarm reschedule, so its data is lost on drain. Add a meta/volumes.yml lint that fails when a 'nfs: false' opt-out lacks both '# nocheck: nfs-false-data-loss' and a '# Reason:' arguing why that loss is acceptable. Justify the 10 existing entries (checkmk OMD site; gitlab repositories, logs, runtime state).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 01:03:05 +02:00
kevinveenbirkenbach 606008762b Merge pull request #398 from infinito-nexus/update/docker-image-versions-web-app-semaphore-20260708-aac36eb
update(images): update Docker image versions (web-app-semaphore)
2026-07-09 00:57:36 +02:00
kevinveenbirkenbach f6322a9688 Merge pull request #397 from infinito-nexus/update/docker-image-versions-web-app-joomla-20260708-3e98a30
update(images): update Docker image versions (web-app-joomla)
2026-07-09 00:57:09 +02:00
kevinveenbirkenbach 2228440862 Merge branch 'main' into feature/swarm-nfs
# Conflicts:
#	roles/web-app-gitlab/meta/services.yml
2026-07-09 00:15:16 +02:00
kevinveenbirkenbachandClaude Opus 4.8 af2ea998c2 docs(cheatsheet): extend the role-iteration prompt to compose AND swarm
The web-app role-iteration prompt only covered the compose loop; update it to iterate both deploy modes (compose then swarm) per the swarm and roundtrip loop docs, including the swarm-exec/shell/down/clean live-cluster steps and the compose-AND-swarm green gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 04539b0d8a ci(test-deploy-swarm): forward disable to the swarm matrix deploy
The swarm matrix deploy runs under `sudo -E env` with an explicit variable whitelist that dropped the disable var. Add it so `make swarm-zombie disable=...` reaches the provisioner (empty stays a no-op, so CI is unaffected).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 560c8af473 ci(test-environment): raise the dev-environment job timeout to 360m
The dev-environment routine reconciles every app's full dependency closure in both compose and swarm and needs ~290min, but the job timeout was 270, so all five distro jobs were cancelled ~4min into the last phase. Raise to 360 (GitHub's per-job maximum). Also drop three narration comments un-grandfathered by the change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 3a64faa6d2 fix(penpot): upload per-run-unique image bytes in the seaweedfs spec
Penpot is content-addressable and re-encodes uploads server-side, so the fixed fixture image (plus bytes appended after IEND, which the re-encode strips) deduped to a single object; on a second variant deploy the bucket already held it, so 'objects after > before' failed. Add a uniqueImagePng(seed) generator whose decoded pixels vary per run, so each upload produces a genuinely new bucket object.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 2944a7fc5d fix(espocrm): bake code node-local, share only mutable dirs over NFS
The stock image lays the app under /var/www/html from /usr/src at runtime, so the whole webroot landed on the shared NFS volume; on kernel-nfsd the www-data Apache workers on a non-populating swarm node get EPERM serving that root-owned code (403), and the stack never converges. Bake the code into the image at build time so /var/www/html is node-local on every replica, and share only data/, custom/ and client/custom over NFS. Move the boot-lock and ready-marker into the shared data/ so replicas still serialize the one-time install, keep the ready-marker check ahead of the lock (a serving replica must not re-enter the image entrypoint and rebuild the shared cache, which aborts 255), and chown the three shared dirs. Verified in compose (deploy + hard-restart + e2e); swarm eliminates cross-node code access by construction.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 430614763a fix(opentalk): create the object-store bucket before the Keycloak restart
03_keycloak_client.yml force-restarts opentalk_controller and blocks on swarm convergence, but it ran before the embedded object-store bucket was created. On a fresh deploy the missing 'opentalk' bucket crash-loops the controller (exit 255) so the update never converges. Move the bucket-provisioning block ahead of the Keycloak-client include.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 035c1efbf3 fix(snipe-it): strip trailing slash from APP_URL
url.base ends with '/', so Laravel builds redirects as APP_URL then 'setup'; the trailing slash yields the double-slash '//setup', which 404s and the readiness probe never converges. Strip it with regex_replace. Also tag the upstream Snipe-IT .env.example template with a comments-valid nocheck so its intentional section banners are not flagged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 d18badb930 fix(dashboard): widen healthcheck start_period for boot icon prefetch
port-ui prefetches every card icon over HTTPS at boot before it binds, so the 30s tcp-healthcheck default reaps it mid-prefetch on loaded swarm workers and the stack never converges. Set container_healthcheck_start_period to 10m (matching the heavier siblings).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 95a7a0fd65 fix(n8n): gate EXTERNAL_HOOK_FILES behind SSO
The no-auth variant does not stage the trusted-header hook file, but env.j2 emitted EXTERNAL_HOOK_FILES unconditionally, so n8n crash-looped on a missing /home/node/hooks.js ("Cannot find module"). Wrap it in the N8N_SSO_ENABLED block alongside the other SSO-only vars.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 0d1ba1777f fix(fider): allow OAuth callbacks to the internal Keycloak
Fider's SSRF guard (validate.WebhookURL) 500s the OAuth callback when the Keycloak host resolves to an internal/overlay IP, so login never completes. Set ALLOW_PRIVATE_NETWORK_TARGETS=true so it can reach the trusted internal Keycloak.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 485574bcae fix(checkmk): keep the OMD site store node-local (nfs:false)
The OMD site config store uses fcntl.flock, which returns EBADF over NFS, so in swarm the checkmk site never serves and oauth2-proxy 502s. Opt checkmk_data out of the swarm NFS rewrite so it stays node-local.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbachandClaude Opus 4.8 7e82e48098 fix(bigbluebutton): column-0 {% set service_name %} in compose override
The override renders with lstrip_blocks=False (only compose.yml.j2 gets lstrip via the stack_host_template plugin), so an indented set line left dangling whitespace under trim_blocks, collapsing each service key to the same indent as its body, which fails with 'services.image/volumes must be a mapping'. Move the set statements to column 0 so they render correctly under both lstrip settings.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:34 +02:00
kevinveenbirkenbach 7f458723eb Merge pull request #396 from infinito-nexus/update/docker-image-versions-web-app-semaphore-20260708-4201e83
update(images): update Docker image versions (web-app-semaphore)
2026-07-09 00:03:33 +02:00
kevinveenbirkenbachandClaude Opus 4.8 2c20e1598c fix(networks): move n8n + svc-runner off mailu's /24, gate overlaps
n8n (192.168.106.16/28) and svc-runner (192.168.106.0/28) sat inside mailu's 192.168.106.0/24, so co-deploying either with mailu aborted with "Pool overlaps with other one on this address space". Reassign both to free /24s (218, 219). The overlap test read meta/server.yml, which has no networks key, so it passed vacuously; point it at meta/networks.yml so it actually gates duplicate/overlapping subnets.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:33 +02:00
kevinveenbirkenbach 74ba609c2e Support us via Bitcoin 2026-07-09 00:03:33 +02:00
infinito-nexus-updater[bot] bc8a32751e update(images): update Docker image versions (web-app-semaphore) 2026-07-09 00:03:33 +02:00
kevinveenbirkenbachandClaude Opus 4.8 6f2e6711ff fix(swarm): create peer parent dir before distributing rendered template
The swarm render-distribution slurps a template rendered on the stack host and copies it to the peers, but the peer's parent directory only exists on the stack host, so the copy failed ("Destination directory does not exist") on wrk nodes. Add an idempotent peer-side dir-ensure, gated on swarm mode and non-stack-host, right before the copy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:33 +02:00
kevinveenbirkenbach d50b502e5f Merge pull request #394 from infinito-nexus/update/docker-image-versions-web-app-gitlab-20260708-01cb957
update(images): update Docker image versions (web-app-gitlab)
2026-07-09 00:03:33 +02:00
kevinveenbirkenbachandClaude Opus 4.8 af1f915e70 fix(networks): honor compose_mode_force in network lookups
compose_networks/container_networks read DEPLOYMENT_MODE directly, so a node-local compose-in-swarm role (compose_mode_force=compose, e.g. the matrix ansible flavor) rendered a swarm overlay a standalone compose container cannot attach to ("network matrix not found"). Honor compose_mode_force like the other mode-aware lookups.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 00:03:33 +02:00
kevinveenbirkenbach ac23545801 Merge pull request #395 from infinito-nexus/update/docker-image-versions-web-app-mattermost-20260708-3458aad
update(images): update Docker image versions (web-app-mattermost)
2026-07-09 00:03:33 +02:00
infinito-nexus-updater[bot] 1e3c805e3e update(images): update Docker image versions (web-app-gitlab) 2026-07-09 00:03:32 +02:00
kevinveenbirkenbach 126113c19a Merge pull request #302 from infinito-nexus/kevinveenbirkenbach-patch-1
Change Scorecard cron schedule to daily
2026-07-09 00:03:32 +02:00
infinito-nexus-updater[bot] 0df88f81eb update(images): update Docker image versions (web-app-mattermost) 2026-07-09 00:03:32 +02:00
kevinveenbirkenbach f63de11133 implemented scorecard 2026-07-09 00:03:32 +02:00
kevinveenbirkenbach 05bf8d4e5b Change Scorecard cron schedule to daily 2026-07-09 00:03:32 +02:00
infinito-nexus-updater[bot] fbb1172203 update(images): update Docker image versions (web-app-semaphore) 2026-07-08 22:01:32 +00:00
infinito-nexus-updater[bot] 8dac67da54 update(images): update Docker image versions (web-app-joomla) 2026-07-08 22:01:25 +00:00
kevinveenbirkenbach ef1d67c172 Merge pull request #396 from infinito-nexus/update/docker-image-versions-web-app-semaphore-20260708-4201e83
update(images): update Docker image versions (web-app-semaphore)
2026-07-08 23:51:34 +02:00
Alejandro Roman 85ed00c248 fix markdonw errro in merged README 2026-07-08 22:56:00 +02:00
Alejandro Roman 05295585a2 Merge remote-tracking branch 'upstream/main' into feature/role-stalwart-mail 2026-07-08 22:36:10 +02:00
Alejandro Roman ecd067fb7b fix issues with order 2026-07-08 22:03:14 +02:00
kevinveenbirkenbachandClaude Opus 4.8 84b22b37a8 fix(web-app-n8n): complete tor service onboarding + resolve subnet collision
n8n was merged (from main) serving a canonical domain without a tor service block, and its local subnet 192.168.106.16/28 collided with svc-net-tor. Declare the complete tor block (meta/services.yml with the playwright-service-flag nocheck, meta/variants.yml pinning services.tor.enabled true in variant 0 and false in the no-auth variant) and move svc-net-tor's nominal (host-networked) subnet to 192.168.106.32/28. Fixes the tor-contract, variant-coverage, bond-baseline, playwright-env and subnet-overlap/duplicate test failures.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 21:02:27 +02:00
kevinveenbirkenbachandClaude Opus 4.8 4c91df5de7 test(e2e): forbid raw page.goto, migrate all specs to Tor-resilient gotoOnion
New lint test_no_raw_goto.py forbids raw `page.goto(...)` in role playwright specs + persona flows (the gotoOnion wrapper in personas/utils is exempt) so navigation retries transient Tor-transport errors over onion. Migrates every raw call across ~75 roles (343 sites) to `gotoOnion(page, ...)` and teaches gotoOnion to detect relative onion URLs (`isOnionCanonical`). gotoOnion is a behaviour-identical drop-in on clearnet (single attempt, same return). Verified: no-raw-goto lint green, eslint 0 errors, make test green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 20:59:38 +02:00
kevinveenbirkenbachandClaude Opus 4.8 8b1110d571 style: apply autoformat reformatting (no functional change)
make autoformat normalised inline-comment spacing (`  #` -> ` #`) in role meta/services.yml + meta/variants.yml and re-wrapped a few Python files (ruff line-length). Pure formatting — verified via git diff -w (whitespace-only) and diff inspection (ruff line-wraps only, no logic change).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 20:50:59 +02:00
kevinveenbirkenbachandClaude Opus 4.8 bb8cf66622 fix(web-app-keycloak/sso-proxy): only require provider CA for https OIDC issuers
Over an onion-exclusive deployment the OIDC issuer is plaintext http (.onion has no TLS), so provider_ca_files pointed oauth2-proxy at a CA file that was never mounted into the sidecar — crashing it at startup (connection refused on the auth gate, no redirect to Keycloak). Gate provider_ca_files on an https issuer and mount the root CA into the sso-proxy container for the self-signed https case (the file was previously never mounted, a latent crash there too). Verified over onion: prometheus admin/biber/guest specs 5 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 18:20:30 +02:00
infinito-nexus-updater[bot] 469f427520 update(images): update Docker image versions (web-app-semaphore) 2026-07-08 16:14:11 +00:00
kevinveenbirkenbachandClaude Opus 4.8 55ba9c0ffa feat(sys-front-inj-all): rewrite injected CDN origin to onion at request time
New to_onion_url filter swaps a clearnet host suffix for the tor_node and forces http (no-op without tor_node or off-primary hosts). body_filter.lua uses it in onionize() so that .onion requests receive the onion CDN origin for injected head/body snippets (e.g. universal-logout.js), which the Tor browser cannot reach on clearnet. Covered by 7 unit tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 17:56:32 +02:00
kevinveenbirkenbachandClaude Opus 4.8 05c082fc14 test(e2e/personas): run biber/admin journeys over onion with adaptive timeouts
keycloak.js/logout.js wrap every wait in resolveTimeout so Tor's higher latency does not abort the OIDC adapter/logout waits. biber.js/admin.js drop the onion skip (personas now execute over onion instead of being skipped) and add a sharpen guard: a completed OIDC round-trip that still shows a Login control fails explicitly as a login failure, not a misleading 'no logout control'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 17:52:14 +02:00
kevinveenbirkenbach f6876ffa14 Support us via Bitcoin 2026-07-08 17:28:41 +02:00
kevinveenbirkenbach 8602138ff9 Merge pull request #394 from infinito-nexus/update/docker-image-versions-web-app-gitlab-20260708-01cb957
update(images): update Docker image versions (web-app-gitlab)
2026-07-08 15:14:51 +02:00
kevinveenbirkenbach e906ee7f0f Merge pull request #395 from infinito-nexus/update/docker-image-versions-web-app-mattermost-20260708-3458aad
update(images): update Docker image versions (web-app-mattermost)
2026-07-08 15:14:15 +02:00
infinito-nexus-updater[bot] 4d104cada0 update(images): update Docker image versions (web-app-mattermost) 2026-07-08 13:10:37 +00:00
infinito-nexus-updater[bot] b3c396447b update(images): update Docker image versions (web-app-gitlab) 2026-07-08 13:10:32 +00:00
kevinveenbirkenbach f6bcdc0a1d Merge pull request #302 from infinito-nexus/kevinveenbirkenbach-patch-1
Change Scorecard cron schedule to daily
2026-07-08 15:10:11 +02:00