Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Sonnet 4.6 8a6c7cf016 fix(cdn): restore public CDN role include to expose cdn_paths_all
load_app.yml uses public: false, so cdn_paths_all was undefined after
removing the explicit sys-svc-cdn task. Restore include_role with
public: true solely for var exposure; deployment stays in 01_services.yml.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 11:49:36 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 9eab315577 fix(matomo): disable inj_enabled.matomo when token unavailable, remove redundant CDN task
Sets inj_enabled.matomo=false when the Matomo token is empty so the NGINX
template skips body/head snippets and avoids 'matomo_site_id is undefined'.
Removes the explicit CDN load task — CDN is now covered by the generic
frontend service loader in 01_services.yml (loaded only when needed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 11:33:57 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 5cc4ce336d chore(dashboard): bump port-ui to 1.1.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 11:04:56 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 02a53627f3 fix(matomo): guard head_sub.j2 against undefined tracking code
Use default('') so the template renders safely when
matomo_tracking_code_one_liner is not set (e.g. token not yet available).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 11:03:09 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 2457d0e13c docs(playwright): add recording section and remove duplicated requirements
- Add Recording Tests section: Playwright codegen (built-in) and
  playwright-recorder (Docker/X11-based) with usage examples
- Replace duplicated spec/env requirement blocks with links to their
  SPOT pages in docs/agents/files/role/
- Extend Development Procedure to include optional recording step

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:55:19 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 33eebcae7c fix(matomo): skip injection gracefully when token is not yet available
Splits injection logic into inject.yml and guards execution via main.yml
when the Matomo API token is empty (e.g. first deployment or bootstrap not
yet run). Documents the exception and its retry behaviour in
docs/contributing/code/exceptions.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:00:40 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 05583ad307 fix(services): replace selectattr dotted-path with when condition for frontend filter
selectattr('value.type', '==', 'frontend') fails in Python 3.13 / current Jinja2
because dict.type is not a Python attribute and the fallback to dict['type'] does
not trigger. Move the frontend type check into a when condition using .get('type')
and guard role access with 'is defined'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 08:44:10 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 c533d9a6fb docs(architecture): add hyperlinks, RFC 2119 keywords, and services.md reference
Convert backtick path references to clickable hyperlinks, apply MUST/SHOULD
language where appropriate, and link to services.md and workflow.md as SPOTs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 08:39:12 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 96649d8c9b refactor(services): centralize frontend service loading with generic lookup plugin
Introduces a SPOT for all frontend service loading in sys-front-inj-all/tasks/01_services.yml,
driven by a new generic `service` lookup plugin that resolves services by key or role name
and returns {id, role, enabled, shared, needed}. Needed = enabled AND shared (direct or
transitive). The canonical key→role mapping moves to group_vars/all/20_services.yml
(previously scattered hardcoded rules). Removes per-role service loads from bigbluebutton,
nextcloud, and dashboard. Renames 01_dependencies.yml→01_services.yml and
08_services.yml→08_daemons.yml. Adds flush_handlers after each service load.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 08:27:21 +02:00
kevinveenbirkenbach 18c0eeb679 Moved build block 2026-03-30 05:34:48 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 357943f056 feat(environment): add inspect function and HOST_VARS_FILE SPOT
Extract inventory/host_vars printing into an inspect() function called
after each deploy. Define HOST_VARS_FILE as a SPOT in inventory.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 05:26:20 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 0475e76db5 refactor(environment): replace assert comments with echo statements
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 05:21:37 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 0a1dcc179c refactor(environment): replace make comments with echo statements
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 05:18:26 +02:00
kevinveenbirkenbach e142b42a3a fix(ci): install missing ruamel.yaml dependency in deploy pipeline 2026-03-30 04:27:31 +02:00
kevinveenbirkenbach 40375decb8 fix(env): force local runtime context by unsetting CI markers
Unset GITHUB_ACTIONS and ACT in environment.sh to prevent runtime.sh
from detecting a CI environment (GitHub Actions or act).

This ensures deterministic local execution even when the script is
run inside CI-like shells or inherited environments.
2026-03-30 03:24:35 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 1b690bcaab fix(environment): source env after install to prevent stale PYTHON cache
Move `source all.sh` to after `make install` so that INFINITO_ENV_PYTHON_LOADED
is not pre-exported into make's environment. This ensures each recipe subshell
re-evaluates PYTHON and picks up the venv interpreter once the venv exists.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 03:15:53 +02:00
kevinveenbirkenbach ea4c2d06c2 Removed uneccessary test 2026-03-30 03:01:56 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 0d206ae3c8 refactor(inventory): introduce INVENTORY_FILE as SPOT for devices.yml path
Define INVENTORY_FILE="${INVENTORY_DIR}/devices.yml" once in
scripts/meta/env/inventory.sh and export it. Remove all local
inv_file definitions; assert INVENTORY_FILE as required in each
consumer script. Rename CMD variable in container.sh from INSPECT_CMD.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 02:18:29 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 18779de223 feat(services-disabler): set enabled/shared false for all roles defining service
Scans roles_dir to find every role whose config/main.yml defines the
disabled service, then creates or updates the compose.services entry in
host_vars for each matching role — including roles not yet present in
applications. roles_dir is now a required parameter (no Optional fallback).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 02:02:36 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 a50c90c733 fix(deploy): resolve SERVICES_DISABLED service names to app IDs and verify inventory
- deploy.py: use find_provider_roles() to map service names (e.g. 'matomo')
  to provider app IDs (e.g. 'web-app-matomo') before filtering deploy_ids;
  forward SERVICES_DISABLED into the container via extra_env
- container.sh: rename INSPECT_CMD to CMD for consistency; fix indentation
- Makefile: expose CMD variable on exec target for non-interactive use
- environment.sh: source scripts/meta/env/all.sh for INVENTORY_DIR; add
  inventory verification after SERVICES_DISABLED deploy using make exec
- variables.md: document CMD variable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 01:26:44 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 135ceefa98 fix(build): add SPOT for local image name and fix missing REPO_PREFIX
Add scripts/meta/resolve/image/local.sh as SPOT for the local Docker
image tag (<repo-basename>/<distro>). Wire it into Makefile build
targets (IMAGE_TAG), compose.py (_base_env sets INFINITO_IMAGE), and
compose.yml (no default fallback). Fix build.sh to accept a pre-set
IMAGE_TAG without requiring REPO_PREFIX. Add make build + build-no-cache
to environment.sh test flow with correct section ordering.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 00:16:27 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 3b5bfc071b refactor(ci): rename workflow files to consistent naming scheme
- build-ci-images.yml        → images-build-ci.yml
- cancel-pull-request-runs.yml → entry-pull-request-cancel.yml
- entry-pull-request.yml     → entry-pull-request-change.yml

Update all references in ci-orchestrator.yml and release-version.yml.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 21:38:26 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 1d34ff585a fix(deploy): forward SERVICES_DISABLED into container during inventory init
compose.exec runs inside the container, so host env vars are not
inherited. Pass SERVICES_DISABLED via -e so services_disabler.py
can suppress the correct entries when creating the inventory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 21:31:52 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 dca1eb69c7 docs: remove README.md files under docs/ and add lint check
Replace per-directory README.md index files with automatic glob toctree
in root index.rst (docs/**). Add lint test that fails if any README.md
appears under docs/. Document the no-README rule in documentation.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 21:16:15 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 846e975876 docs(flow): restructure branch.md headings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:51:15 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 ffa8e44920 docs(flow): add cross-links to branch, PR, testing and review docs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:41:08 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 9b5d5eb821 docs(flow): restructure pull-request.md sections and headings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:38:25 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 274db55ac5 docs(flow): add branch naming conventions, update PR and workflow docs
- Add branch.md as SPOT for branch naming patterns and CI scope table
- Update pull-request.md: link to branch.md, add fork CI decision matrix,
  draft PR rules including convert-back-to-draft requirement
- Update workflow.md: replace inline branch prefix table with link to
  branch.md, replace forum link with hub discussion reference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:35:11 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 e22bdc117f ci(pr): skip CI for draft PRs, cancel runs on draft conversion
- Add ready_for_review trigger so CI starts when a draft PR is marked ready
- Guard detect-pr-scope with draft == false to skip all jobs for draft PRs
- Add converted_to_draft to cancel-pull-request-runs.yml to cancel active
  runs when a PR is converted back to draft

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:41:08 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 2fa58ecd7f fix(ci): set actions: write in all entry and orchestrator workflows
Required so cancel-on-failure jobs in reusable workflows can call
the GitHub API to cancel the run. Permissions propagate down the
workflow_call chain and must be write at every level.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 18:07:14 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 f3e4080188 fix(purge): remove GHCR cleanup, fix git clean, drop docker context prune
- Remove purge_images: GHCR cleanup is not a local system operation
- Remove sudo from git clean to avoid dubious ownership error in CI
- Remove docker context prune which fails with rc=125 in CI environments
- Update usage string to reflect removed GHCR step
- Add cancel-on-failure via API to test-environment, test-install-make,
  test-install-pkgmgr workflows; revert fail-fast to false so all matrix
  jobs complete before cancelling the run

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 18:03:46 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 92f6898068 ci: cancel run via API when matrix workflows fail
Add cancel-on-failure job to test-environment, test-install-make, and
test-install-pkgmgr. After all matrix jobs complete, the job cancels
the entire orchestrator run via the GitHub API if any matrix job failed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 17:49:18 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 24e9427abe ci: set fail-fast: true on matrix workflows to fail the run early
Enables fast failure on test-environment, test-install-make, and
test-install-pkgmgr matrix strategies so the overall CI run fails
immediately when a job fails rather than waiting for all jobs to
complete. Trade-off: no cross-distro comparison on failure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 17:14:36 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 6a5d65afc0 docs(development): add supported systems page
Document required OS targets for deployed roles and local setup scripts,
including Red Hat SLA/security rationale, WSL2 and Homebrew requirements,
and RFC 2119 rules for cross-distro script behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 17:02:12 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 e372349d10 refactor: rename deploy-*-app to deploy-*-apps for multi-app support
Update all Make targets, comments, docs, and scripts to use the plural
form, reflecting that APPS can specify more than one application.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 16:47:16 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 1982795e16 docs(hardware): apply RFC 2119 keywords, restructure cleanup section, add Playwright hint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 16:29:20 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 5357052dd5 feat(system): add system-disk-usage, rename purge-system to system-purge, remove purge-all
- Add scripts/system/meta/disk-usage.sh with best-effort coverage of
  Docker, Buildx, journald, pip, npm, yarn, Go, and distro package caches
- Add make system-disk-usage target
- Rename make purge-system -> system-purge for consistent naming
- Remove make purge-all (was a redundant alias)
- Remove scripts/system/purge/all.sh (logic consolidated into system-purge)
- Integrate scripts/image/cleanup.sh as best-effort step in system-purge
- Update environment.sh: run system-disk-usage before system-purge
- Update docs: hardware.md, makefile.md (add apparmor-teardown/restore entries)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 16:11:57 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 4002e83092 fix(purge): remove container-purge-system from purge-all
container-purge-system requires APPS to be set and is app-specific.
It does not belong in the system-wide purge-all flow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:45:51 +02:00
kevinveenbirkenbach 53b839a124 Optimized file format 2026-03-29 15:39:51 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 a132800a42 refactor(environment): restructure sections and add redeploy steps
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:32:20 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 8247c595b0 chore(settings): move git commit to ask permissions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:24:19 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 5701c963c7 docs(environment): shorten purge-all comment to minimal-hardware rationale only
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:22:29 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 3cc1a5a137 refactor(environment): move package install into system section, update heading
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:21:38 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 00e74e8c73 docs(environment): split bootstrap into system and bootstrap section headers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:20:45 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 19beaa9cfd docs(environment): add testing and deploy section headers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:19:36 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 373c9a8f18 refactor(environment): move app selection rationale to configuration section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:18:04 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 cb90ac782b refactor(environment): move app/URL variables into configuration section at top
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:16:28 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 92123a7f3c docs(environment): add bootstrap section header
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:15:38 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 b8c0cfe5a0 docs(environment): add teardown section header
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:14:50 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 9788cce248 docs(environment): clarify purge-all is primarily for minimal-hardware environments
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:14:03 +02:00