Commit Graph
14682 Commits
Author SHA1 Message Date
Alejandro Roman f60dc5260c feat(prometheus-comm): fix external CI 2026-04-23 00:31:23 +04:00
Alejandro Roman 9a37c3f8bc feat(prometheus-comm): fix lint 2026-04-23 00:31:23 +04:00
Alejandro Roman 0c02f19f87 feat(prometheus-comm): fix matrix issue + find mattemost doesnt support metrics for free plan, deffered to a mattemrost future task 2026-04-23 00:31:23 +04:00
Alejandro Roman 5ada2e930c feat(prometheus-comm): Gitea fixed and avoid deffered 2026-04-23 00:31:22 +04:00
Alejandro Roman faf02d26a4 feat(prometheus-comm): fix gitea issues to have prometheus 2026-04-23 00:31:22 +04:00
Alejandro Roman e3a1797ba9 feat(prometheus-comm): fix previous issues + add comms correctly and avoid deffered logic for this PR - WIP - some tests still fails 2026-04-23 00:31:21 +04:00
Alejandro Roman 15505b2547 feat(prometheus-comm): following best practices 2026-04-23 00:31:21 +04:00
Alejandro Roman 682eedb58f feat(prometheus-comm): fix lats issues + additionals I found 2026-04-23 00:31:20 +04:00
Alejandro Roman acc407a9b0 feat(prometheus-comm): add filters for comms apps taht are not enabled yet + fix tests issues 2026-04-23 00:31:20 +04:00
Alejandro Roman 9cd39f0c39 feat(prometheus-comm): fix external tests for matrix HTTP 541 issue 2026-04-23 00:31:20 +04:00
Alejandro Roman eacd2b9696 feat(prometheus-comm): fix latest comments 2026-04-23 00:31:19 +04:00
Alejandro Roman e5b26818d2 feat(prometheus-comm): fix tests issues 2026-04-23 00:31:19 +04:00
Alejandro Roman 5670f76a87 feat(prometheus-comm): remove hardcoded names and move ides 2026-04-23 00:31:18 +04:00
Alejandro Roman 6bc5512806 feat(prometheus-comm): fix CI fails tests 2026-04-23 00:31:18 +04:00
Alejandro Roman 48a99a2bb9 feat(prometheus-comm): move logic to each role and remove old files 2026-04-23 00:31:17 +04:00
Alejandro Roman 8a9e26a5bc feat(prometheus-comm): enabled fix external CI issue for depracted URL 2026-04-23 00:31:17 +04:00
Alejandro Roman baaac1cbf8 feat(prometheus-comm): enabled tru for matriz/mattermost 2026-04-23 00:31:17 +04:00
Alejandro Roman 8210cbcee5 feat(prometheus-comm): fix CI yourls issues 2026-04-23 00:31:16 +04:00
Alejandro Roman 8efcf0f17d feat(prometheus-comm): fix tyourls CI issues 2026-04-23 00:31:16 +04:00
Alejandro Roman 452a2bea90 feat(prometheus-comm): fix external CI issues 2026-04-23 00:31:15 +04:00
Alejandro Roman e73dc1412b feat(prometheus-comm): fix Python lint issues 2026-04-23 00:31:15 +04:00
Alejandro Roman e303d2c346 feat(prometheus-comm): use fork repo to avoid risk 2026-04-23 00:31:15 +04:00
Alejandro Roman 6388984dbe feat(prometheus-comm): remove defaults and refactor code 2026-04-23 00:31:14 +04:00
Alejandro Roman 3f82fb1ac8 feat(prometheus-comm): make sure to move logic into separate temapltes and fix issues in code 2026-04-23 00:31:14 +04:00
Alejandro Roman 14e5d4d985 feat(prometheus-comm): fix playwright yourls tests issues 2026-04-23 00:31:13 +04:00
Alejandro Roman a4c46aed65 feat(prometheus-comm): fix issues, make test working and ensure communication works correctly as expected 2026-04-23 00:31:13 +04:00
Alejandro Roman 82c40e6415 feat(prometheus-comm): Add all the logic to handle metrics and health int oall apps 2026-04-23 00:31:12 +04:00
Alejandro Roman b117c9ed3c fix(prometheus-intergration): add missing test 2026-04-23 00:31:12 +04:00
Alejandro Roman 6daa486e72 fix(prometheus-intergration): solve make test issues 2026-04-23 00:31:12 +04:00
Alejandro Roman 46560a575a feat(prometheus-intergration): fix gitea issue and add playwright tests 2026-04-23 00:31:11 +04:00
Alejandro Roman b61359c85c feat(prometheus-intergration): Add all the logic need it for all apps with prometheus, missin playwright still 2026-04-23 00:31:11 +04:00
kevinveenbirkenbach cbfc197a19 Merge pull request #189 from AlejandroRomanIbanez/fix/mattermost-login
fix(mattermost): inject SSO button via JS for v11 Team Edition
2026-04-22 22:28:51 +02:00
Alejandro Roman 8831d32c35 fix(mattermost): Fixing the SSO button for new version, now is back again 2026-04-23 00:23:24 +04:00
kevinveenbirkenbach 591983af7d fix(email-lookup): render Jinja in computed defaults
email._compute('domain') returned variables['DOMAIN_PRIMARY'] verbatim. When
DOMAIN_PRIMARY held an unrendered template (e.g. the group_vars default
"{{ lookup('env','DOMAIN') | default('infinito.localhost', true) }}"), the raw
expression leaked into rendered templates. In discourse's containers/discourse.yml
the literal "{{ ..." opened a YAML flow mapping and made Ruby Psych fail with
"did not find expected ',' or '}' while parsing a flow mapping", aborting
`./launcher rebuild discourse` in CI.

Route every _compute() result through the same _render() helper that already
covered SYSTEM_EMAIL_* overrides, and add a regression test that exercises a
templated DOMAIN_PRIMARY default.
2026-04-22 22:22:57 +02:00
kevinveenbirkenbach 490e2cd541 test(web-app-bigbluebutton): add universal /logout + logged-out assertion
Rewrites both admin and biber OIDC scenarios to end in a clearly logged-out
state: bbbLogout hits the universal /logout endpoint (intercepted by the
app's nginx vhost and proxied to web-svc-logout to terminate Greenlight and
Keycloak in one hop), then assertLoggedOut polls /rooms for the
unauthenticated sign-in affordance. Scenarios renamed from "...lands on
greenlight" to "...OIDC login and logout" to reflect the final-state
coverage required by the role-spec MUSTs.
2026-04-22 22:06:19 +02:00
kevinveenbirkenbach e82b37715c test(web-app-dashboard): skip shared-CSS asset test when css service disabled
Expose compose.services.css.enabled as CSS_ENABLED in the dashboard
playwright env and have the "dashboard loads core css, javascript,
simpleicons, and logo assets" test call `test.skip(\!cssEnabled, …)`
when the shared CSS service is disabled for the deployment (e.g.
FULL_CYCLE runs with SERVICES_DISABLED="css …"), so the scenario no
longer flags a failure on an intentionally absent asset pipeline.
2026-04-22 18:07:46 +02:00
kevinveenbirkenbach caa5b40847 test(web-app-nextcloud): drive standalone login from OIDC/LDAP condition vars
Expose compose.services.{oidc,ldap}.enabled as NEXTCLOUD_OIDC_ENABLED and
NEXTCLOUD_LDAP_ENABLED in the Playwright env, and derive a single
`nextcloudLoginFlavor` in the spec:

  - OIDC + LDAP -> "oidc_login"  (pulsejet/nextcloud-oidc-login,
                                   auto_redirect hands straight to Keycloak)
  - OIDC only   -> "sociallogin" (nextcloud/sociallogin shows a
                                   "Log in with Keycloak" entry first)
  - no OIDC     -> "native"      (no Keycloak handoff; NC credential form
                                   filled with the direct admin password)

loginToStandaloneNextcloud now builds its initial-state candidate list
per flavor instead of accepting every possible login UI shape, and the
native flavor uses NEXTCLOUD_DIRECT_LOGIN_PASSWORD rather than the
Keycloak user password.

Verified via reuse-kept redeploy (make deploy-reuse-kept-apps
APPS=web-app-nextcloud SERVICES_DISABLED="css matomo email"): both
Playwright scenarios pass (2 passed, 26.3s).
2026-04-22 16:43:11 +02:00
kevinveenbirkenbachandClaude Opus 4.7 247d8ccdeb fix(lookup:oidc_flavor): resolve via merged applications, not raw overrides
lookup('oidc_flavor') was reading applications[APP].compose.services
straight off variables["applications"], which in Ansible is the
pre-merge override slice — role defaults from config/main.yml (like
compose.services.ldap.enabled: true) are not yet visible there. As a
result ldap.enabled resolved to the lookup's default False on every
invocation and the Nextcloud flavor silently fell through to
"sociallogin" even when LDAP was enabled.

Switch the lookup to get_merged_applications(), matching the path
lookup('config') already uses, so role-level defaults and inventory
overrides are both visible. Tests now patch that merge function rather
than inject raw variables.

Verified live against the reuse-kept stack: lookup('oidc_flavor')
resolves to 'oidc_login', plugins.oidc_login.enabled=True and
plugins.sociallogin.enabled=False.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 15:35:58 +02:00
kevinveenbirkenbachandClaude Opus 4.7 447de6e5a6 fix(web-app-odoo): Odoo 19 OAuth auto-provisioning via sudo().create()
Fixes first-login flow for OIDC-provisioned users in Odoo 19. Upstream
auth_oauth._auth_oauth_signin delegates auto-provisioning through
auth_signup.signup() -> _create_user_from_template() which calls
template_user.copy() inside a savepoint. When that savepoint flushes,
ir_attachment._check_contents() walks env.user._get_group_ids(), and on
the unauthenticated OAuth callback env.user is an empty recordset, so
ensure_one() raises and the controller surfaces AccessDenied with no
traceback.

Overrides _auth_oauth_signin to bypass the template-copy path entirely
and create the user directly via sudo().create() with base.group_user,
then flushes pending recomputes under the sudo env before the
controller's cr.commit() runs.

Also makes the OIDC UID claim configurable via ODOO_OIDC_UID_FIELD
(default: preferred_username) so Odoo aligns with Mastodon, Pixelfed,
EspoCRM, and Taiga in the infinito.nexus stack instead of keying on
Keycloak's opaque sub UUID.

Playwright spec updated to tolerate Odoo 19's new .o_login_auth
container for the SSO provider list (older .o_auth_oauth_providers
selector still accepted).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 15:15:21 +02:00
kevinveenbirkenbachandClaude Opus 4.7 7f9f34aea0 chore(claude-settings): sort allow list, normalize trailing-arg spacing
Reorder `Bash(docker exec *)` into ASCII position and add a single space
before trailing `*` on `sudo`/`docker run`/`docker * run` entries so the
pattern matches invocations with explicit args (bare-verb calls remain
covered via other allow entries).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 02:12:58 +02:00
kevinveenbirkenbachandClaude Opus 4.7 1e085de616 test(lint): drop git subprocess from test-location check
Replace `git ls-files` with an inline `.gitignore` parser + `rglob` walk so
the lint runs inside the `make exec` container where `.git/` isn't mounted.
The matcher covers the pattern shapes used in this repo's `.gitignore`
(bare basenames, `prefix/*`, `*.ext`, path-qualified exact matches).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 02:12:02 +02:00
kevinveenbirkenbachandClaude Opus 4.7 4867ffe66c feat(web-app-decidim): OIDC registration via Playwright TOS form, extracted Ruby
Playwright drives Decidim's first-time OIDC registration (TOS + newsletter
modal) so the biber user is created on first login and reused idempotently
on subsequent runs. Ruby snippets previously inlined in tasks/01_setup.yml
and patch.py are now separate .rb files under files/ruby/, copied into the
image alongside patch.py. patch.py now also fixes Decidim 0.31.3's broken
omniauth_registrations_path view helper (both new.html.erb and
new_tos_fields.html.erb).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 02:10:04 +02:00
kevinveenbirkenbachandClaude Opus 4.7 d7a1683d1f test(decidim): move patch_decidim tests into tests/unit/roles
Relocates the role-local test file under `tests/unit/roles/web-app-decidim/`
so the new `test_*.py`-location lint has no offenders. Required for the
pairing commit b67b39221; got unstaged by pre-commit hook churn the
first time around.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 00:55:31 +02:00
kevinveenbirkenbachandClaude Opus 4.7 b67b392210 test(lint): enforce test_*.py files live under tests/
Adds a repository lint that walks `git ls-files -co --exclude-standard`
and fails if any `test_*.py` lives outside the top-level `tests/` dir,
so .gitignored artefacts stay excluded. Moves the existing decidim role
test into `tests/unit/roles/web-app-decidim/` and rewrites it as
`unittest.TestCase` so `unittest discover` actually executes it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 00:54:36 +02:00
kevinveenbirkenbachandClaude Opus 4.7 9124b9b6dd refactor(utils): rename runtime_lookup_data to runtime_data
Shorten the module name now that it backs more than just lookup plugins
(validator CLI, tests, dashboard role). Updates all 26 import sites and
adds a unit test covering the pure helpers.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 00:46:35 +02:00
kevinveenbirkenbachandClaude Opus 4.7 925dc830a1 chore(claude-settings): collapse Bash allow list to Bash(*) wildcard
Replaces 15 per-shape Bash entries that existed as sandbox auto-allow
workarounds with a single Bash(*) wildcard. Gating responsibility moves
entirely to ask (mutating gh/docker/git verbs) and deny (structurally
destructive shapes). Documentation updated across settings.md,
security.md, and sandbox.md to reflect the new model; em-dash clause
separators removed throughout per documentation.md style rules.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 00:30:35 +02:00
kevinveenbirkenbachandClaude Opus 4.7 1014bc51d3 test(email): lint warning for web-apps without email integration
Add tests/lint/ansible/roles/test_web_app_email_integration.py which:

- Emits a GHA warning annotation (via utils.annotations.message) for
  each web-app-* role that does not call lookup('email', application_id)
  and does not carry an explicit opt-out block.
- Hard-fails when a role DOES call the email lookup but its
  compose.services.email is missing enabled: true or shared: true.
- Silencer format: `# noqa: email` on the line directly above an
  `email:` block under compose.services with enabled: false + shared: false.

Opt out 13 roles that have no user-facing mail surface:
bridgy-fed, chess, dashboard, littlejs, mig, mini-qr, navigator,
oauth2-proxy, phpldapadmin, phpmyadmin, roulette-wheel, sphinx, yourls.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 00:10:21 +02:00
kevinveenbirkenbachandClaude Opus 4.7 958e77ca4b feat(email): wire SMTP env-var integration into openwebui, flowise, pretix, gitlab
Apps with native SMTP env-var support now consume `lookup('email', application_id)`
behind `email.enabled` guards:

- web-app-openwebui: SMTP_HOST/PORT/USERNAME/PASSWORD/FROM_ADDRESS
- web-app-flowise:   SMTP_HOST/PORT/USER/PASSWORD, SENDER_EMAIL
- web-app-pretix:    PRETIX_MAIL_FROM/HOST/PORT/USER/PASSWORD/TLS/SSL
- web-app-gitlab:    new GITLAB_OMNIBUS_SMTP list appended to GITLAB_OMNIBUS_ALL

openwebui and flowise also declare `compose.services.email` (gitlab and pretix
already did). gitlab and pretix map start_tls/tls from the lookup onto their
respective vendor TLS/SSL switches.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 23:12:28 +02:00
kevinveenbirkenbachandClaude Opus 4.7 2dbb2aaa1a feat(email): introduce lookup('email') plugin, migrate all consumers
Moves the SYSTEM_EMAIL_* resolution logic out of group_vars/all/03_email.yml
into a dedicated Ansible lookup plugin, so every role template reads outgoing
mail settings via lookup('email') (global) or lookup('email', application_id)
(per-app). Per-app compose.services.email is merged on top of the resolved
defaults; SYSTEM_EMAIL_* variables remain usable as an inventory escape hatch.

Also splits the email docs: administrator-facing configuration stays under
docs/administration/configuration/, plugin contract and extension rules move
to docs/contributing/design/services/email.md. services.md is relocated to
services/base.md so the services/ subtree can host per-service design pages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 22:47:40 +02:00
kevinveenbirkenbach c7c7c022a8 chore(claude-settings): allow WebFetch for docs.decidim.org 2026-04-21 21:06:46 +02:00