Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbach 548f98ab0a Optimized description 2026-01-17 13:07:55 +01:00
kevinveenbirkenbach 074fe773a4 Merge branch 'feature/features-refactoring' of github.com:kevinveenbirkenbach/infinito-nexus into feature/features-refactoring 2026-01-17 12:27:57 +01:00
kevinveenbirkenbach 743716ffe6 fix(ldap,rbac,keycloak): ensure empty groupOfNames roles via placeholder member and DN-based mapping
- Add LDAP.RBAC.EMPTY_MEMBER_DN placeholder for empty role groups (schema-compliant groupOfNames)
- Ensure RBAC role entries always contain at least one member
- Align users OU attribute with DN (ou=users)
- Switch Keycloak LDAP group/role mappers to DN-based membership
- Fix missing newline in Keycloak schema file

https://chatgpt.com/share/696b7226-7c18-800f-a0b0-59068bb69d9f
2026-01-17 12:27:22 +01:00
kevinveenbirkenbach 97869523cb ruff 2026-01-17 02:56:22 +01:00
kevinveenbirkenbach b978679531 Deactivated tests which aren't required for the MVP 2026-01-17 00:33:26 +01:00
kevinveenbirkenbach d6335f6d22 mailu: unify hostname handling and switch to canonical SYSTEM_EMAIL_HOST
- Use SYSTEM_EMAIL_HOST as single canonical Mailu hostname
- Remove MAILU_HOSTNAMES list handling and related assertion
- Simplify Mailu env HOSTNAMES to single hostname
- Align Mailu server domain config with primary mail domain
- Ensure consistent hostname resolution across email + web services

https://chatgpt.com/share/696ac991-db50-800f-9d3c-ca41bdb7058a
2026-01-17 00:28:14 +01:00
kevinveenbirkenbach c4bffe1ea1 test(lookup): add deterministic Jinja templating for docker_cards unit tests
- Render WEB_PROTOCOL and domain_url via templar in docker_cards lookup
- Add DummyTemplar with Ansible-like bool filter for stable unit testing
- Refactor tests to use templar injection via _run_lookup helper
- Add coverage for Jinja-based WEB_PROTOCOL and domain rendering

This ensures lookup behavior matches real Ansible runtime while keeping unit tests deterministic.

https://chatgpt.com/share/696ac8bf-8c0c-800f-a3e7-db4bfb2a8f3f
2026-01-17 00:24:41 +01:00
kevinveenbirkenbach 68157002a2 ci(dns): add AAAA sanity check to prevent CoreDNS SERVFAIL regressions
- Add host-level AAAA DNS sanity test against CoreDNS
- Fail hard on SERVFAIL (breaks Node/getaddrinfo with EAI_AGAIN)
- Allow empty AAAA responses (IPv4-only setup is valid)
- Keep A-record validation unchanged

This prevents silent IPv6 resolver regressions that break CSP checks.

https://chatgpt.com/share/696abc27-19dc-800f-9ead-6598c2f3c302
2026-01-16 23:30:33 +01:00
kevinveenbirkenbach 28ddbaa270 ci(dns): fix AAAA handling in CoreDNS and add robust DinD DNS health check
- Replace NXDOMAIN for AAAA with fallthrough to avoid SERVFAIL and Node EAI_AGAIN
- Add robust Docker-in-Docker DNS health check (A + no SERVFAIL)
- Add Node/getaddrinfo DNS validation (matches CSP checker behavior)
- Add make target to stop CI compose stack without removing volumes

This prevents DNS resolver failures inside DinD and makes CSP health checks reliable.

https://chatgpt.com/share/696aba87-e5d4-800f-871c-aac049201fb7
2026-01-16 23:24:03 +01:00
kevinveenbirkenbach 14c968578d fix(matomo): retry site verification until DNS and API are ready
Add retry logic with 30 attempts and 2s delay to Matomo site check to
handle transient DNS and startup timing issues in Docker-in-Docker and CI
environments.

This prevents false negatives caused by temporary name resolution failures
while CoreDNS and the Matomo service are still initializing.

https://chatgpt.com/share/696aab20-6e28-800f-a860-4a6a1fcd7446
2026-01-16 22:18:17 +01:00
kevinveenbirkenbach b058377e33 test(dns): make dns test script POSIX-sh compatible for Debian/Ubuntu
- Replace bash-specific [[ ... ]] with POSIX [ ... ] tests
- Use '=' instead of '==' for portable string comparisons
- Fix /bin/sh compatibility (dash) inside docker exec on Debian/Ubuntu
- Prevent DNS test failures caused by non-bash shells

https://chatgpt.com/share/696a9cb2-58e8-800f-8a88-5973d0e1bc40
2026-01-16 21:16:43 +01:00
kevinveenbirkenbach 61575cc267 Added todos 2026-01-16 21:09:57 +01:00
kevinveenbirkenbach 361b1e0b46 Added default values for easier testing 2026-01-16 21:09:23 +01:00
kevinveenbirkenbach 65ed2c8e4a Build images already early so that all workflow runners are utilized 2026-01-16 21:06:17 +01:00
kevinveenbirkenbach 96ef8e014c feat(email): add environment-aware SMTP routing for Docker-in-Docker
- Introduce SYSTEM_EMAIL_ENVIRONMENT abstraction (external/localhost + container)
- Route SMTP via localhost in Docker-in-Docker environments
- Prevent invalid FQDN mail host usage inside DiD
- Disable SMTP auth for localhost-based delivery
- Improve reliability of health checks in containerized setups

This avoids broken mail delivery paths like Docker -> DiD -> DiD and
ensures predictable behavior in CI and nested container environments.
2026-01-16 20:47:48 +01:00
kevinveenbirkenbach ae7a1e258c feat(web-app-desktop): require WEB_PROTOCOL for docker_cards lookup URLs
- Enforce explicit WEB_PROTOCOL variable for URL generation
- Fail fast with AnsibleError when WEB_PROTOCOL is missing
- Add unit tests for http/https protocol handling
- Refactor test fixtures using shared base variables

This makes URL generation deterministic and proxy-agnostic and avoids
implicit defaults in desktop card rendering.

https://chatgpt.com/share/696a958b-eeec-800f-867b-842e0621b4bb
2026-01-16 20:46:15 +01:00
kevinveenbirkenbach 259514b033 sys-hostname: install hostname command cross-distro
- Replace Arch-only inetutils installation with distro-agnostic package mapping
- Use inetutils on Arch and hostname package on all other distros
- Ensure hostname command is available consistently across environments

https://chatgpt.com/share/696a5b7d-6854-800f-b890-3fd72f37d547
2026-01-16 16:38:29 +01:00
kevinveenbirkenbach 4f196fca71 Activated the testing for all distros, they are anyhow in the same runner 2026-01-16 15:56:16 +01:00
kevinveenbirkenbach 011613c3ec ci(orchestrator): introduce quality gates and staged deploy pipeline
- Rename code-analyses workflow to ci-orchestrator
- Add lint, test and install collector gates
- Enforce code-quality-gate before building CI images
- Stage deploy pipeline via DNS → server → universal → workstation
- Gate installation tests behind quality checks
- Simplify final done collector to depend on deploy + install gates

This establishes a strict CI flow: quality → build → dns → deploy → install.

https://chatgpt.com/share/696a4c71-191c-800f-a601-aab6ff1762df
2026-01-16 15:34:14 +01:00
kevinveenbirkenbach 0ff511293e Add a dedicated Docker-in-Docker DNS self-test and integrate it into the
sys-svc-docker role as a post-restart validation handler.

This change moves the inner-container DNS validation out of the CI test
suite and into the Docker service lifecycle itself, ensuring that DNS is
verified exactly where it matters: inside the Docker-in-Docker daemon.

Key changes:
- Add roles/sys-svc-docker/files/test-dns.sh:
  - Runs inside the DinD container
  - Waits for dockerd readiness
  - Executes a BusyBox test container with explicit --dns
  - Verifies DOMAIN and subdomain resolve to the expected IP
  - Fails hard if DNS is broken

- Register DNS self-test as a docker restart handler:
  - Runs once per deployment
  - Only executed when DOCKER_IN_CONTAINER and MODE_DEBUG are enabled
  - Uses ansible.builtin.script with role_path for correct resolution

- Remove inner Docker DNS test from scripts/tests/dns.sh:
  - CI test suite now only validates host → CoreDNS → outer container chain
  - DinD DNS validation is now part of the Docker service health lifecycle

This ensures that:
- DNS is validated after every Docker restart
- DinD networking failures are detected immediately
- CI and production share the same DNS validation logic
- Docker-in-Docker DNS becomes a first-class health invariant

https://chatgpt.com/share/696a3dda-5c6c-800f-8a16-47c0c604e1e3
2026-01-16 15:07:17 +01:00
kevinveenbirkenbach 35bfbf7d9c fix(dns-tests): make dns.sh shellcheck-clean and harden env validation
- Quote dig server argument to avoid word splitting (SC2086)
- Replace &&/|| pseudo-if with proper if/else blocks (SC2015)
- Validate INFINITO_CONTAINER early via required env guard
- Keep DNS test logic unchanged, only harden correctness and linting

This makes scripts/tests/dns.sh fully shellcheck -x compliant and more robust.

https://chatgpt.com/share/696a4053-93f8-800f-959b-f99e2d7d12e2
2026-01-16 14:42:34 +01:00
kevinveenbirkenbach 26cde20899 Test DNS for all distros 2026-01-16 14:38:22 +01:00
kevinveenbirkenbach c7de80fa70 Removed double domain 2026-01-16 14:33:21 +01:00
kevinveenbirkenbach fd983bc69c refactor(ci,network): make DNS, IP and domain configuration fully env-driven
- Introduce env.ci as single source of truth for CI networking
- Make docker-compose, CoreDNS and Docker daemon fully env-driven
- Render CoreDNS Corefile from template via envsubst
- Replace hardcoded IPs/domains with environment variables
- Integrate env-based networking into Ansible defaults
- Remove static Corefile and daemon.json

This makes DNS and networking deterministic and reproducible across
host, CoreDNS, infinito runner and Docker-in-Docker.

https://chatgpt.com/share/696a3dda-5c6c-800f-8a16-47c0c604e1e3
2026-01-16 14:30:14 +01:00
kevinveenbirkenbach 3a496bcfff Optimized deploy parameters 2026-01-16 01:27:09 +01:00
kevinveenbirkenbach d3752e1629 fix(docker,dns): prefer docker service names over infinito search domain
Set ndots:0 in Docker daemon DNS options so single-label service names
(e.g. "matomo", "mariadb") are resolved via Docker embedded DNS first
before applying the infinito.example search domain.

This prevents collisions between internal compose service discovery and
the infinito ingress DNS zone.

https://chatgpt.com/share/69698561-9a8c-800f-8bdf-0b8814e6cc9e
2026-01-16 01:24:59 +01:00
kevinveenbirkenbach a06f395640 Replaced -i with --id 2026-01-16 00:47:34 +01:00
kevinveenbirkenbach ea2fc396f5 ci(dns): add CoreDNS zone for infinito.example and propagate DNS into docker-in-docker
- Map infinito.example and *.infinito.example to infinito runner (172.30.0.10) via CoreDNS
- Assign static IP to infinito container in CI compose network
- Add dns_search infinito.example to CI defaults
- Configure inner Docker daemon to use CoreDNS (172.30.0.53) with search domain
- Replace fuse-overlayfs-only setup with full docker-in-docker daemon configuration

This ensures all inner containers can resolve infinito.example consistently in CI.

https://chatgpt.com/share/69696e22-ca7c-800f-bee1-e454f22cb1e5
2026-01-15 23:45:28 +01:00
kevinveenbirkenbach ea0ad4a6f7 fix(release): resolve ShellCheck SC2259 by piping JSON into python -c
Replace here-doc Python invocation with python -c so stdin from gh api is preserved and ShellCheck no longer reports SC2259.

https://chatgpt.com/share/696968ff-5704-800f-b222-2aff06da09ed
2026-01-15 23:23:53 +01:00
kevinveenbirkenbach 505af3e2ad cli: make --log require explicit directory and create parents automatically
- Change --log flag to require explicit log directory (--log <LOG_DIR>)
- Automatically create log directory with parents=True
- Harden permissions best-effort (0700)
- Update CLI help text accordingly
- Adjust Makefile test targets to pass explicit log directory
- Ignore logs/ via .gitignore and .dockerignore
- Refactor flag parsing to correctly detect deploy with --log
- Add dedicated logging unit tests
- Update existing tests for new log semantics
- Remove deprecated -i alias for --id in deploy command

https://chatgpt.com/share/6969680a-dbf8-800f-aafb-3d32d6212ba0
2026-01-15 23:19:31 +01:00
kevinveenbirkenbach 12c72d4fc3 web-app-keycloak: disable strict hostname and https checks in non-TLS environments
https://chatgpt.com/share/696955f3-31c4-800f-ae52-dc86524d1759
2026-01-15 22:02:06 +01:00
kevinveenbirkenbach 2951f2f599 Set orange as default color for dev environments 2026-01-15 21:50:19 +01:00
kevinveenbirkenbach b557b9626c web-svc-simpleicons: make root redirect conditional on web-app-sphinx and remove dummy env template
- Redirect / to Sphinx docs only if web-app-sphinx is present in group_names
- Otherwise return 200 with simpleicons.org attribution
- Remove unused env.j2 placeholder template

https://chatgpt.com/share/69694fb7-9018-800f-ba5c-0b849af4f3c8
2026-01-15 21:36:01 +01:00
kevinveenbirkenbach e782f41d8e cli(deploy): extend --help with ansible-playbook help and passthrough usage
Add a combined help output that includes:
- Wrapper CLI help
- Full `ansible-playbook --help`
- Explanation and examples for native Ansible flag passthrough

This makes it clear how to use --tags, --check, -e, --forks, and other
ansible-playbook options directly via the infinito deploy wrapper.

https://chatgpt.com/share/69694e02-de58-800f-a9ea-2fb788ff5077
2026-01-15 21:28:40 +01:00
kevinveenbirkenbach ea63818216 refactor(cli): simplify dedicated deploy wrapper and add ansible passthrough support
- Remove unused cli_root and logs handling from dedicated deploy wrapper
- Add parse_known_args() to forward native ansible-playbook flags
- Append passthrough args at the end for proper override behavior
- Clean up MODE_LOGS usage
- Update runner signature and cleanup phase logic
- Adapt unit tests to new wrapper contract
- Add unit test for ansible flag passthrough in command.main()

https://chatgpt.com/share/69694ad5-453c-800f-8047-cf210f60460f
2026-01-15 21:15:06 +01:00
kevinveenbirkenbach bcc638fe0a dev(local): add full local deploy helper and rename act/rapid targets
- Rename act-based targets for clarity:
  - test-deploy -> test-act
  - test-deploy-app -> test-act-app
- Rename rapid local deploy target:
  - test-deploy-rapid -> test-local-rapid
- Add test-local-full target to run a full local deploy against a generated
  inventory containing all apps of the selected TEST_DEPLOY_TYPE
- Add scripts/tests/deploy-local-full.sh:
  - Discover apps on host via make ci-deploy-discover
  - Bootstrap container via scripts/docker/entry.sh
  - Generate dedicated inventory with --include list
  - Deploy against that inventory

https://chatgpt.com/share/69692ef1-095c-800f-83cb-924fadfaa554
2026-01-15 20:05:08 +01:00
kevinveenbirkenbach 865068ef43 dev(local): add rapid deploy target with entry.sh bootstrap
- Add test-deploy-rapid Makefile target for fast local single-app deploys
- Execute scripts/docker/entry.sh before running infinito deploy
- Run deploy inside existing infinito container (no rebuild, no update)
- Skip update and backup for faster inner-loop testing

https://chatgpt.com/share/69692ef1-095c-800f-83cb-924fadfaa554
2026-01-15 19:44:05 +01:00
kevinveenbirkenbach 54d8997a1b ci(local): add serial test-deploy-local workflow and wire Makefile targets
- Add new test-deploy-local.yml workflow for local act runs
  - Uses env-based configuration (TEST_DEPLOY_TYPE, DISTROS, ONLY_APP)
  - Enforces serial execution via strategy.max-parallel: 1
  - Supports optional workflow_dispatch inputs for GitHub UI

- Refactor Makefile deploy targets
  - Move distro variables to top-level section
  - Add local act-based deploy flow using test-deploy-local.yml
  - Keep CI deploy flow via workflow_dispatch event payload
  - Remove deprecated rapid deploy path

This enables reliable, non-parallel local deploy testing with act
while keeping CI deploy workflows unchanged.

https://chatgpt.com/share/69692ef1-095c-800f-83cb-924fadfaa554
2026-01-15 19:16:05 +01:00
kevinveenbirkenbach bab0bceb1d feat(local-dns): add dnsmasq-based infinito.example wildcard + set CI primary domain
https://chatgpt.com/share/6969261a-8d34-800f-9a61-725e90544dea
2026-01-15 18:38:15 +01:00
kevinveenbirkenbach 22bd1e37f9 ci: add per-ref concurrency to CI workflows and simplify push trigger
Configure build-ci-images and code-analyses to use per-ref concurrency groups
to avoid global serialization while still preventing duplicate runs per ref.

Also remove redundant tag ignore rules from the push workflow.

https://chatgpt.com/share/69691ebf-a380-800f-80fc-bd44d59e90dd
2026-01-15 18:17:42 +01:00
kevinveenbirkenbach c5437b21e3 ci(release): use code-analyses workflow as stable promotion gate
Promote-stable now validates version tags against the real quality gate
(code-analyses.yml) instead of the nightly scheduler wrapper.

This ensures the stable tag only points to versions that passed the full
CI matrix (lint, security, build, deploy, install, tests).

https://chatgpt.com/share/69691ebf-a380-800f-80fc-bd44d59e90dd
2026-01-15 18:07:08 +01:00
kevinveenbirkenbach 97cfdf3f9f ci(release): introduce daily stable promotion and unify release concurrency
- Add daily stable promotion workflow with CI-gated highest-version selection
- Ensure GHCR images exist before moving stable tag
- Retag version images to :stable without rebuild
- Unify release workflows under infinito-release concurrency group
- Remove legacy highest-version/stable-move scripts and inline logic

https://chatgpt.com/share/696909c1-781c-800f-b52d-d9f967e9698c
2026-01-15 18:03:01 +01:00
kevinveenbirkenbach 40f039551f ci: default distro matrix in code-analyses and keep push fast on arch
- Set default distros for workflow_call in code-analyses
- Remove redundant distro overrides from PR and nightly entries
- Require distros input in build-ci-images and rely on orchestrator default

https://chatgpt.com/share/696909c1-781c-800f-b52d-d9f967e9698c
2026-01-15 16:45:54 +01:00
kevinveenbirkenbach 28ec5d30a1 ci: split release workflows into dedicated concurrency groups
- Move nightly release trigger into its own concurrency group
- Serialize release-version workflow via dedicated infinito-release group
- Decouple release maintenance from main CI pipeline

https://chatgpt.com/share/696909c1-781c-800f-b52d-d9f967e9698c
2026-01-15 16:37:32 +01:00
kevinveenbirkenbach 42a7f529d1 ci: make distros configurable per entry workflow and enforce via workflow_call
- Add `distros` input to code-analyses orchestrator and forward it to build and deploy workflows
- Enforce distros via required workflow_call inputs in test-deploy-* workflows
- Restrict push and pull-request entries to arch only
- Run nightly workflows on full distro matrix
- Align nightly release cron to 00:00 UTC
2026-01-15 16:33:46 +01:00
kevinveenbirkenbach 4a85ddef82 refactor(xwiki): condense superadmin auth debug into single task
Reduce superadmin authentication debug section to a single condensed shell task
while keeping full diagnostics (HTTP status, headers, content preview and
password hash comparison). This simplifies the task flow and keeps CI logs
compact and readable.

https://chatgpt.com/share/696901b7-de98-800f-8039-b1a986db6195
2026-01-15 16:03:16 +01:00
kevinveenbirkenbach e9f332f510 fix(load_app): prevent self-include by loading target role instead of caller
https://chatgpt.com/share/6968f421-e260-800f-9227-01ca2d5a88ac
2026-01-15 15:05:15 +01:00
kevinveenbirkenbach a9857a62f8 web-app-xwiki: add deep debug for superadmin auth failure in extensions phase
- allow non-200 status codes for superadmin REST check (401/403/5xx)
- capture response body and headers for forensic debugging
- add password hash comparison (container vs ansible) to detect drift
- improve failure message with detailed diagnostics

https://chatgpt.com/share/6968eec3-b1ec-800f-b3c1-2bac3081e89e
2026-01-15 14:42:22 +01:00
kevinveenbirkenbach f4a02ed39e chore(docker-compose): limit compose parallelism in DiD to reduce flakiness
Set COMPOSE_PARALLEL_LIMIT=4 when running Docker-in-Docker to reduce race
conditions during volume initialization while keeping CI performance high.

https://chatgpt.com/share/6968e9b8-7b8c-800f-b002-9a48a94f05ce
2026-01-15 14:28:57 +01:00
kevinveenbirkenbach ffc4243fa7 fix(web-app-taiga): correct path_join for taiga-local.py volume mount
Ensure docker-compose template uses proper path_join for taiga-local.py
to avoid malformed mount paths when docker_compose.directories.config
does not end with a trailing slash.

https://chatgpt.com/share/6968e9b8-7b8c-800f-b002-9a48a94f05ce
2026-01-15 14:20:52 +01:00