Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbach 03a156511f Merge pull request #1219 from infinito-nexus/update/docker-image-versions-web-app-nextcloud-20261026-fb462f4
update(images): update Docker image versions (web-app-nextcloud)
2026-10-26 21:58:13 +01:00
kevinveenbirkenbach 5d9ade3ec5 Merge pull request #1218 from infinito-nexus/update/docker-image-versions-sys-ctl-hlth-csp-20261026-1f5ef37
update(images): update Docker image versions (sys-ctl-hlth-csp)
2026-10-26 21:57:33 +01:00
kevinveenbirkenbach 3ab48687e6 Merge pull request #1217 from infinito-nexus/update/docker-image-versions-svc-db-redis-20261026-38fec0e
update(images): update Docker image versions (svc-db-redis)
2026-10-26 21:56:58 +01:00
dependabot[bot] 89da938eab build(deps-dev): Bump fast-uri
Bumps the npm_and_yarn group with 1 update in the / directory: [fast-uri](https://github.com/fastify/fast-uri).


Updates `fast-uri` from 3.1.8 to 3.1.9
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.9
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-26 20:55:39 +00:00
infinito-nexus-updater[bot] b4a8abc6e9 update(images): update Docker image versions (web-app-stalwart) 2026-10-26 20:54:36 +00:00
infinito-nexus-updater[bot] a07c5b42b9 update(images): update Docker image versions (web-app-seaweedfs) 2026-10-26 20:54:31 +00:00
infinito-nexus-updater[bot] 8795db1c01 update(images): update Docker image versions (web-app-penpot) 2026-10-26 20:54:27 +00:00
infinito-nexus-updater[bot] 037afd3cef update(images): update Docker image versions (web-app-peertube) 2026-10-26 20:54:20 +00:00
infinito-nexus-updater[bot] 9a74fb14ce update(versions): update pins with a declared source (web-app-n8n) 2026-10-26 20:54:16 +00:00
infinito-nexus-updater[bot] 4abc70f518 update(images): update Docker image versions (web-app-opentalk) 2026-10-26 20:54:16 +00:00
infinito-nexus-updater[bot] 3808a2b7a8 update(images): update Docker image versions (web-app-openbao) 2026-10-26 20:54:11 +00:00
infinito-nexus-updater[bot] bb3c59869a update(images): update Docker image versions (web-app-nextcloud) 2026-10-26 20:54:07 +00:00
infinito-nexus-updater[bot] b184fceda2 update(images): update Docker image versions (sys-ctl-hlth-csp) 2026-10-26 20:54:02 +00:00
infinito-nexus-updater[bot] 054d99ac2f update(images): update Docker image versions (svc-db-redis) 2026-10-26 20:53:55 +00:00
kevinveenbirkenbach fd5de101a2 Merge pull request #1216 from infinito-nexus/dependabot/pip/ruff-0.17.2
build(deps-dev): Bump ruff from 0.17.1 to 0.17.2
2026-10-26 21:53:24 +01:00
dependabot[bot] 1fcefb71c0 build(deps-dev): Bump ruff from 0.17.1 to 0.17.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.17.1 to 0.17.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.17.1...0.17.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.17.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-26 00:26:11 +00:00
kevinveenbirkenbach 245b7f46a2 Merge pull request #1211 from infinito-nexus/update/docker-image-versions-svc-ai-ollama-20261024-ec47d5e
update(images): update Docker image versions (svc-ai-ollama)
2026-10-24 22:12:30 +02:00
infinito-nexus-updater[bot] 899c55c2de update(images): update Docker image versions (svc-ai-ollama) 2026-10-24 20:11:34 +00:00
kevinveenbirkenbach 57ffd74560 Merge pull request #1209 from infinito-nexus/fix/tls-selfsigned/cn-length
fix(tls-selfsigned): cap the leaf certificate CN at 64 characters
2026-10-24 21:05:17 +02:00
kevinveenbirkenbachandClaude Opus 5.5 e80eec2acb fix(tls-selfsigned): cap the leaf certificate CN at 64 characters
X.509 limits commonName to 64 characters, and openssl refuses a longer
one while generating the CSR:

  ASN1_mbstring_ncopy:string too long:../crypto/asn1/a_mbstr.c:106:maxsize=64

The global leaf builds its CN as `<DOMAIN_PRIMARY upper> Global TLS`, so
any primary domain longer than 53 characters fails the deploy in
sys-front-tls-selfsigned. Worktree stacks hit it first: their domain is
derived from the branch name (`fix-security-exec-argv-secrets-store-1153
.infinito.test` gives a 66 character CN).

The CN is now truncated to 64 characters in all three branches (global,
explicit subject CN, per-app primary domain). Clients verify the SAN
list, not the CN, so a truncated CN changes nothing for them, and an
existing certificate is only regenerated on SAN drift, as before.
sys-ca-selfsigned already caps the root CA's CN.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 21:04:10 +02:00
kevinveenbirkenbach 6997dd3dbb Merge pull request #1208 from infinito-nexus/update/docker-image-versions-web-app-socialhome-20261024-2923b1c
update(images): update Docker image versions (web-app-socialhome)
2026-10-24 13:05:10 +02:00
kevinveenbirkenbach 62164178a2 Merge pull request #1204 from infinito-nexus/fix/web-app-matrix/probe-and-federation-delegation
fix(web-app-matrix): probe only served domains and serve the federation delegation
2026-10-24 13:04:32 +02:00
infinito-nexus-updater[bot] bed4581faa update(images): update Docker image versions (web-app-socialhome) 2026-10-24 11:02:40 +00:00
kevinveenbirkenbach bc520e11af Merge pull request #1205 from infinito-nexus/fix/lint/mermaid-chrome-crash/1154
fix(install-lint): give chrome-headless-shell a font on dnf, yum and pacman
2026-10-24 13:02:04 +02:00
kevinveenbirkenbachandClaude Opus 5.5 bfd6f7c9b8 fix(install-lint): give chrome-headless-shell a font on dnf, yum and pacman
On a fresh Fedora dev container lint-mermaid failed most files with
ConnectionClosedError: the browser aborted with
`FATAL:third_party/skia/src/ports/SkFontMgr_FontConfigInterface.cpp:163]
Not implemented.` in its font fallback, because the host had no font at
all. install-lint provisions the browser's libraries by soname on dnf,
yum and pacman, and a font is not a soname; apt-get gets fonts through
puppeteer's --install-deps.

It looked load-dependent because lint-packages installs rpmlint in the
same parallel phase, which pulls fontconfig and Noto Sans: renders
crashed until that transaction landed, and every later run was green.
With every font removed, lint-mermaid alone fails 274 of 289 files the
same way.

ensure() now installs the distribution's font provide when
/usr/share/fonts holds no file (`font(:lang=en)` on dnf and yum,
`ttf-font` on pacman), and browser_installed() counts the font, so the
install-lint stamp is not fresh on a font-less host.

Closes #1154

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 12:59:42 +02:00
kevinveenbirkenbachandClaude Opus 5.5 ce9490d317 refactor(web-opt-rdr-domains): serve a per-domain well-known directory, not a Matrix path
045ef095f2 taught the generic redirect vhost a Matrix location and let
web-app-matrix include web-opt-rdr-domains for its server name on its
own. The first put one app's contract into a shared role and made every
redirect source (www, aliases, asset, css) advertise the Matrix
delegation; the second bypassed current_play_redirect_domains and could
overwrite a vhost the server name already had, such as the Synapse one.

Every redirect vhost now serves `/.well-known/` from `<well-known>/<domain>/`
and hands a missing file or the bare directory to `location /` via
`error_page 403 404 = /`, so it still answers 301 with the original
request URI. web-app-matrix only writes its delegation file into the
directory of its server name.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 12:59:22 +02:00
kevinveenbirkenbachandClaude Opus 5.5 7e241c6557 fix(web-app-seaweedfs): point the homepage at seaweedfs.com
https://seaweedfs.org/ answers 404, which fails test-external
(tests/external/repository/test_urls_reachable.py) on README.md:167.
The upstream repository declares https://seaweedfs.com as its homepage.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 11:44:15 +02:00
kevinveenbirkenbachandClaude Opus 5.5 045ef095f2 fix(web-app-matrix): serve the federation delegation on the server name
The LiveKit JWT service checks each OpenID token over federation
against the user's homeserver. Server discovery found no delegation:
https://<server_name>/.well-known/matrix/server hit the redirect vhost
of web-opt-rdr-domains, which answered 301 to the dashboard and then
404, so the lookup fell back to <server_name>:8448. In compose OpenResty
runs in the host network and answers there; in swarm it publishes 80
and 443 only, the dial was refused and Element Call's token exchange
returned 401 M_UNAUTHORIZED (main run 40017166046, Nextcloud#12).

The role also wrote the delegation to `<well-known>/matrixserver`,
because the file path joined the directory and `server` without a
separator.

The file now lands at `<well-known>/matrix/server`, and the redirect
vhost serves `/.well-known/matrix/` from the shared well-known
directory, so discovery delegates to the Synapse domain on 443 in both
modes. Both flavors share tasks/utils/well_known.yml, which also
includes web-opt-rdr-domains for the server name when no play-wide
redirect claims it, so the delegation has a vhost there too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 11:44:14 +02:00
kevinveenbirkenbachandClaude Opus 5.5 7a82a92e84 fix(web-app-prometheus): probe only the domains an app serves itself
#1180 gave web-app-matrix a canonical `jitsi` domain for its own Jitsi
and listed it under `services.jitsi.domains`. When Jitsi is shared or
disabled nothing serves that domain, and the blackbox healthz job of
web-app-prometheus probed every canonical domain, so the probe of
https://jitsi.matrix.<domain>/healthz/ready failed with "tls:
unrecognized name" and `prometheus scrape: every consumer role reports
up=1 and passes its probe` went red (main run 40017166046: Matrix#2,
Nextcloud#12).

web_health_expectations already skipped such keys. The rule now lives
in utils/domains/unserved.py: a key claimed by a service entity that is
disabled, or enabled but shared, is not served by that app. The health
filter uses it unchanged, and prometheus.yml.j2 filters its targets
through the new `served_domains` filter, which also drops the
`<key>_onion` mirror of a skipped key.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 11:44:14 +02:00
kevinveenbirkenbach 1110d4f36c Merge pull request #1201 from infinito-nexus/update/docker-image-versions-web-app-matrix-20261023-1d9a5a7
update(images): update Docker image versions (web-app-matrix)
2026-10-23 22:10:29 +02:00
infinito-nexus-updater[bot] 76d9d56f3e update(images): update Docker image versions (web-app-matrix) 2026-10-23 19:58:23 +00:00
kevinveenbirkenbach 87fe1b6ceb Merge pull request #1200 from infinito-nexus/fix/conferencing/domain-namespaces
fix(conferencing): give Matrix, Jitsi and BigBlueButton distinct domains
2026-10-23 21:57:14 +02:00
kevinveenbirkenbachandClaude Opus 5.5 2b04853701 fix(conferencing): give Matrix, Jitsi and BigBlueButton distinct domains
Since #1180, web-app-matrix declares a canonical `jitsi` domain for its
internal Jitsi, also when it uses the shared web-app-jitsi (only the web
health check skips it then). canonical_domains_map checks every
canonical domain for uniqueness, so a host that serves web-app-jitsi on
jitsi.<domain> fails the constructor with
"Domain 'jitsi.infinito.nexus' is already configured for 'web-app-jitsi'
and 'web-app-matrix'" (echoserver, 2026-10-23).

The defaults now use one namespace per owner:
- web-app-matrix internal Jitsi: jitsi.matrix.<domain> (was jitsi.<domain>)
- web-app-jitsi: jitsi.call.<domain> (was meet.<domain>)
- web-app-bigbluebutton: bbb.call.<domain> (was bbb.talk.<domain>)

This changes the public URL of BigBlueButton and of the shared Jitsi on
every host that relies on the defaults.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 21:56:35 +02:00
kevinveenbirkenbach d080fc1181 Merge pull request #1199 from infinito-nexus/update/docker-image-versions-web-svc-collabora-20261023-9366652
update(images): update Docker image versions (web-svc-collabora)
2026-10-23 21:43:39 +02:00
kevinveenbirkenbach 11fa486111 Merge pull request #1198 from infinito-nexus/update/docker-image-versions-web-app-penpot-20261023-ba1189a
update(images): update Docker image versions (web-app-penpot)
2026-10-23 21:42:28 +02:00
kevinveenbirkenbach cae067f593 Merge pull request #1197 from infinito-nexus/update/docker-image-versions-web-app-joomla-20261023-19b89b2
update(images): update Docker image versions (web-app-joomla)
2026-10-23 21:38:19 +02:00
kevinveenbirkenbach bb9046aaba Merge pull request #1196 from infinito-nexus/update/docker-image-versions-web-app-espocrm-20261023-e44aa95
update(images): update Docker image versions (web-app-espocrm)
2026-10-23 21:37:38 +02:00
kevinveenbirkenbach 03a805c332 Merge pull request #1195 from infinito-nexus/update/docker-image-versions-svc-ai-ollama-20261023-49062a1
update(images): update Docker image versions (svc-ai-ollama)
2026-10-23 21:36:51 +02:00
kevinveenbirkenbach b98a6d1fbe Merge pull request #1194 from infinito-nexus/update/repository-refs-web-app-discourse-20261023-7405b62
update(repos): bump git refs to latest semver tags (web-app-discourse)
2026-10-23 21:36:24 +02:00
infinito-nexus-updater[bot] 78387f86ea update(images): update Docker image versions (web-svc-collabora) 2026-10-23 19:06:47 +00:00
infinito-nexus-updater[bot] 6431226c09 update(images): update Docker image versions (web-app-penpot) 2026-10-23 19:06:41 +00:00
infinito-nexus-updater[bot] c3b80b2441 update(images): update Docker image versions (web-app-joomla) 2026-10-23 19:06:36 +00:00
infinito-nexus-updater[bot] d630232f67 update(images): update Docker image versions (web-app-espocrm) 2026-10-23 19:06:30 +00:00
infinito-nexus-updater[bot] c2acf5c343 update(images): update Docker image versions (svc-ai-ollama) 2026-10-23 19:06:25 +00:00
infinito-nexus-updater[bot] 5e5a2bf85e update(repos): bump git refs to latest semver tags (web-app-discourse) 2026-10-23 18:35:25 +00:00
kevinveenbirkenbach ae767265d9 Merge pull request #1180 from infinito-nexus/fix/web-app-matrix/ansible-flavor-unwired-services/1165
fix(web-app-matrix): wire Jitsi, Element Call and Heisenbridge in the ansible flavor
2026-10-23 20:24:28 +02:00
kevinveenbirkenbach 7eb9676455 Merge pull request #1193 from infinito-nexus/fix/web-app-moodle/oidc-auth-list
fix(web-app-moodle): enable auth_oidc in Moodle's core auth list
2026-10-23 20:22:58 +02:00
kevinveenbirkenbachandClaude Opus 5.5 250b89ba4c fix(web-app-moodle): enable auth_oidc in Moodle's core auth list
Core `auth`, the list of enabled auth plugins, was written only by
05_ldap_sync.yml. Variant 1 of meta/variants.yml is SSO without LDAP and
skips that file, while 04_oidc.yml sets every mdl_user row to
auth='oidc'. Those users point at a plugin the site never enabled.

Moodle 5.3 rejects such a user in validate_auth_not_disabled(), so after
the second deploy of variant 1 the MCP service account, now auth='oidc',
gets "wsaccessusernologin" and "List the MCP tools with the minted
bearer" fails all 30 attempts (main run 39841510219, job 120466819062).
Before 5.3 only a literal 'nologin' was refused, which hid the gap. Users
of variant 1 could not log in at all for the same reason.

04_oidc.yml now enables oidc itself; 05_ldap_sync.yml runs after it and
widens the list to oidc,ldap where both are on. alternateloginurl moves
out of the loop that passes --component=auth_oidc, because core reads it
from mdl_config, not from the plugin's config.

Cherry-picked from dcb8f6866b on feature/store-i18n, with main's
MOODLE_OIDC_PLUGIN_URL_PATH kept for the login URL (Moodle 5.3 serves
the plugin under auth/oidc).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 20:20:13 +02:00
kevinveenbirkenbach 0bca4bcd7f Merge remote-tracking branch 'origin/main' into fix/web-app-matrix/ansible-flavor-unwired-services/1165 2026-10-23 18:18:31 +02:00
kevinveenbirkenbachandClaude Opus 5.5 9b88fccfc6 fix(web-app-matrix): wire Jitsi, Element Call and Heisenbridge in the ansible flavor
An earlier commit on this branch turned the three off because the ansible flavor ran
them without a published port, proxy entry, domain or certificate. They
now stay on and are wired end to end.

Element Call: MDAD's LiveKit server and JWT service get their own
entities in meta/services.yml with resource limits, local ports and a
public media port (TCP and UDP). The runner container publishes them
through container_ports, and the Synapse vhost proxies /livekit-server/
(websocket) and /livekit-jwt-service/ to them. The JWT service checks
each OpenID token against the user's homeserver over federation, and
federation was not reachable in this flavor: Synapse served it only on
a plain-HTTP listener that the runner published directly on 8448.
Synapse now serves the client and federation resources on one listener,
OpenResty serves the Synapse vhost on 443 and as default_server on the
federation port, the direct 8448 publish is gone, and the role writes
/.well-known/matrix/server as the compose flavor does. With a
self-signed CA the JWT container mounts the CA bundle as Synapse does.

Jitsi: a new services.jitsi entity follows the shared-service contract.
It is enabled in the ansible flavor off tor nodes. When web-app-jitsi is
in the inventory, Element points at that shared Jitsi and MDAD's own
Jitsi stays off. Otherwise MDAD runs its own Jitsi on jitsi.<domain>
with a front-proxy vhost, its web port published to the runner and its
videobridge on a public UDP port. The entity lists the jitsi domain, so
the web health probe skips it whenever Matrix does not serve it. The
jitsi_*_container_network overrides were dropped: MDAD reads none of
them, Jitsi always ran on its own network. Variant 0 covers the shared
case, variant 1 the internal one. On an onion-primary deploy both call
stacks stay off, so Element never advertises a clearnet call surface.
MDAD's Prosody keeps an account's first password, so after a credential
rotation jicofo failed SASL with the new one. The role now derives the
jicofo and videobridge passwords from the macaroon secret and recreates
both accounts on every deploy.

Heisenbridge stays on by default. It runs in the nested host network,
where MDAD's container-name URLs do not resolve, so its homeserver URL
and the appservice URL in its registration point at 127.0.0.1.

A bootstrap that a previous deploy left failed (for example after a
Docker Hub rate limit) is now reset and restarted, so a mode=update
deploy converges instead of failing on the stale unit state.

Playwright proves each path: the RTC spec fetches a LiveKit token from
the JWT service and opens the SFU signalling websocket, the Jitsi spec
checks Element's preferred domain and joins a conference (signing in
through Keycloak first when the shared Jitsi sits behind SSO), and the
Heisenbridge spec opens a DM with the bot and waits for its answer to
"help".

Closes #1165

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 17:16:20 +02:00