Commit Graph
73 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Opus 4.7 181c46d742 feat(ci): render Playwright JUnit reports as workflow step summary
- New `utils/github/playwright_summary.py` parses every
  `playwright-junit.xml` under a given artefact directory and prints a
  markdown table to stdout with one row per test case: App, Test,
  Status (🟢 passed / 🔴 failed / 🔵 skipped), Duration (sub-second
  precision), Message. Sub-second formatting keeps useful per-test
  signal that integer rounding would erase. Edge cases (missing dir,
  no junit files, all-unparseable) emit a friendly placeholder note
  instead of crashing. Covered by 26 unit tests in
  `tests/unit/utils/github/test_playwright_summary.py`.
- `test-deploy-server.yml` runs the script with `if: always()` after
  the deploy step and pipes its output into `$GITHUB_STEP_SUMMARY`, so
  every matrix job's run page surfaces a per-app test table without
  needing to download artefacts.
- Playwright config adds the `github` reporter so failing tests also
  emit inline `::error file=...,line=...::`-annotations directly on the
  workflow run page and in PR diffs.
- New lint `tests/lint/filesystem/test_plugin_paths_files.py` enforces
  that files under the Ansible plugin source directories declared in
  `ansible.cfg` (`action_plugins`, `filter_plugins`, `lookup_plugins`,
  `library`, `module_utils`) are Python source files (README.md
  exempt). Paths are read live from `ansible.cfg` so a future config
  edit automatically extends the lint's coverage. Counterpart to the
  existing `test_scripts_folder_files.py` lint that enforces
  `scripts/` contains only `.sh`.

Known limitation (pre-existing pipeline behaviour, not introduced by
this change): when a role runs through multiple matrix variants, the
container path `/var/lib/infinito/logs/test-e2e-playwright/<app_id>/`
has no variant component, so each variant overwrites the previous
variant's reports. The summary therefore reflects only the LAST
variant per role. A future change to namespace the reports per
variant (or copy them after each variant pass) will make the table
cover every variant without touching the script or workflow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 15:30:05 +02:00
kevinveenbirkenbachandClaude Opus 4.7 14700e0658 feat(test-e2e-playwright): add PLAYWRIGHT_KEEP_ALL artefact-retention toggle
Forwards `PLAYWRIGHT_KEEP_ALL` from host env / GitHub Actions repo var
through `TEST_E2E_PLAYWRIGHT_KEEP_ALL` (inventory-overridable) into the
container and flips trace / screenshot / video to `on` for every test
when truthy.

SPOT for the propagation chain lives in
`docs/contributing/actions/testing/playwright.md#artefact-retention-`;
CI Configuration and the agent iteration loops link to it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:06:31 +02:00
kevinveenbirkenbachandClaude Opus 4.7 9524c50928 feat(ci): diff-driven app whitelist for deploy tests
Narrow the test-deploy-{server,universal,workstation} matrix to roles
actually impacted by the branch's diff against origin/main, expanded
transitively over run_after + dependencies + shared services.

Why: full-matrix deploy CI on every PR is wasteful; explicit per-PR
whitelisting is error-prone. The resolver derives the affected set
automatically while remaining fail-safe.

Behaviour (in resolve_effective_whitelist.sh precedence order):
- whitelist input "__ALL__"  -> empty whitelist (force full deploy)
- whitelist input non-empty  -> verbatim
- whitelist input empty      -> diff vs origin/main
  - empty diff or any path outside roles/<role>/   -> __ALL__
  - all paths under roles/<role>/                  -> reverse closure

Fail-safe: any seed that is not modellable in CombinedResolver
(no application_id and not referenced by any role's run_after) and
any resolver runtime error MUST trigger a fall-back to __ALL__.
The closure never silently shrinks the deploy matrix.

test-deploy-local.yml is intentionally exempt (local/manual dispatch
keeps explicit whitelist semantics).

Documented in pipeline.md and workflows.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-05 22:49:41 +02:00
kevinveenbirkenbachandClaude Opus 4.7 6fac8996ff Add runner-state diagnostic helper for CI deploy debugging
Extracts disk/memory/docker/swap dump into a reusable helper,
calls it pre/post swap resize, and runs it on deploy failure
across all four deploy workflows. Also adds SKIP_SWAP=1
short-circuit for A/B probing swap-related regressions.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 12:37:54 +02:00
kevinveenbirkenbachandClaude Opus 4.7 8cdfcad9ef Enlarge CI runner swap dynamically across deploy workflows
Introduce scripts/github/enlarge_swap.sh that consumes all remaining
space on / minus a 25 GB buffer (Docker layers, checkout, runtime
state), falling back to /mnt when / is too small. Replaces the
default ~4 GB runner swap so transient memory spikes (e.g. peertube
plugin install, issue #162) don't trip the host OOM-killer on the
16 GB GitHub-hosted runner.

Wire the script into all four deploy test workflows (local, universal,
server, workstation) and flip free-disk-space to the aggressive config
(tool-cache, large-packages, docker-images, swap-storage all true):
the deploy actually runs inside the infinito container, so host-side
toolchains, language runtimes, and the default Docker layer cache are
dead weight. Update the workflow SPOT doc accordingly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 03:18:45 +02:00
Environment Test da155e48e8 refactor(ci): extract app-discovery output logic into script
Inline shell duplicated across four deploy workflows. Single
source now in scripts/github/output_apps.sh.
2026-04-13 13:22:20 +02:00
Environment Test 835b150d2d ci(deploy): restrict free-disk-space to safe options only
large-packages, docker-images and swap-storage can remove build
deps, cached layers and swap needed by memory-intensive services
(e.g. Keycloak 503 under memory pressure). Only android/dotnet/
haskell are guaranteed unused on deploy runners.

Rationale linked from each step comment and documented in
docs/contributing/artefact/files/github/workflow.md.
2026-04-13 13:13:16 +02:00
Environment Test 6a4039c2c0 fix(ci): free disk space before deploy jobs 2026-04-11 14:10:28 +02:00
Environment TestandClaude Sonnet 4.6 7fa2a7593b chore(workflows): use 📦 emoji for Test: Deploy workflows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:18:04 +02:00
Environment TestandClaude Sonnet 4.6 0a147718a4 fix(workflows): quote workflow names to fix YAML syntax error
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:12:12 +02:00
Environment TestandClaude Sonnet 4.6 9fd133368d chore(workflows): rename all GitHub Actions workflows with emoji schema
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:10:21 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 06a688c59a refactor(deploy): rename APP to APPS throughout the project
Makes clear that multiple space- or comma-separated app ids are
supported. Renames the env var, CLI flag (--app → --apps), and all
references in scripts, workflows, and documentation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 11:41:31 +02:00
kevinveenbirkenbach e0f9ef1dd4 refactor: rename deploy ci and act scripts 2026-03-28 06:27:48 +01:00
kevinveenbirkenbach f20c1cdbc6 Refactor CI deploy script entrypoint 2026-03-27 21:51:13 +01:00
dependabot[bot] bc58b27eaa build(deps): bump actions/upload-artifact from 4 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 01:44:23 +00:00
kevinveenbirkenbach cc910167e9 Guard empty deploy matrices and ignore JSON docker scan 2026-03-25 15:44:56 +01:00
kevinveenbirkenbachandClaude Sonnet 4.6 b50d84b5b3 feat: upload Playwright screenshots as GitHub Actions artifacts
- Add upload-artifact step to test-deploy-server.yml
- Copy reports from infinito container to runner in dedicated_distro.sh cleanup before volume prune

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 22:32:25 +01:00
kevinveenbirkenbach dcfd7016ae refactor workflow apt installs into script 2026-03-21 02:22:38 +01:00
kevinveenbirkenbach 292feaa5da Add highest missing release workflow 2026-03-18 18:01:49 +01:00
kevinveenbirkenbach 656fced43c fix(ci): resolve docker apt key conflict and enforce per-distro stack 2026-02-20 19:12:52 +01:00
kevinveenbirkenbach 68e299b80a Replaced arch by debian 2026-02-20 10:00:32 +01:00
kevinveenbirkenbach 1bb67164e0 ci: add whitelist filtering for deploy test matrix
* Replace ONLY_APP with space-separated WHITELIST across CI and local/act deploy tests
* Rename build-test-matrix.sh to scripts/meta/resolve/apps.sh and apply optional whitelist filter
* Add manual CI entry workflow to run orchestrator with distros/whitelist inputs

https://chatgpt.com/share/698c406c-0968-800f-ae84-1bcca023363c
2026-02-11 09:40:00 +01:00
kevinveenbirkenbach 8810f39b8c Renamed docker commands 2026-02-10 20:30:54 +01:00
kevinveenbirkenbach 98837bac67 ci: extend deploy job timeout to 6h
Increase timeout-minutes from 240 to 360 for server, universal, workstation,
and local deploy workflows to match the GitHub-hosted runner job limit.

https://chatgpt.com/share/6989d36d-267c-800f-ad42-7bcb786f1727
2026-02-09 13:30:30 +01:00
kevinveenbirkenbach 0e44685137 Optimizes naming 2026-02-08 12:00:07 +01:00
kevinveenbirkenbach 9cce47d1ca Normalize GitHub Actions job names
- Add explicit job names where missing
- Standardize all job titles to Emoji + imperative + object format
- Improve CI readability and consistency across workflows
- No functional changes to job logic or execution order

https://chatgpt.com/share/6988695a-be4c-800f-85ba-5e67e5fef3e0
2026-02-08 11:45:42 +01:00
kevinveenbirkenbach 9555d65858 Removed log logic from ci 2026-02-03 12:28:45 +01:00
kevinveenbirkenbach 734f013179 ci: wire GHCR mirror envs into deploy workflows and inventory init
- Add required GHCR mirror environment variables to CI workflows
- Generate mirrors.yml during development inventory init on CI
- Introduce mirrors helper module with strict env validation
- Minor formatting cleanup in mirror providers
`

https://chatgpt.com/share/6980ff2e-8f18-800f-85e1-79d56a2027f5
2026-02-02 20:46:41 +01:00
kevinveenbirkenbach 5f36451327 Merge pull request #51 from kevinveenbirkenbach/dependabot/github_actions/actions/upload-artifact-6
chore(deps): bump actions/upload-artifact from 4 to 6
2026-01-25 11:16:52 +01:00
kevinveenbirkenbach bbea43f669 refactor(ci,tests): migrate discovery and local deploy to development compose stack
- Replace legacy ci scripts with meta build-test-matrix and resolve-invokable-roles
- Switch log tailing to scripts/meta/log-tail.sh
- Rename local DNS helpers to scripts/dns/*
- Run ci-deploy-discover via development docker-up
- Replace deploy-local-full with development compose orchestrator
- Ensure INFINITO_DISTRO is passed explicitly for local full deploy

https://chatgpt.com/share/696f9ccd-e4d8-800f-9c67-9c071188ecd0
https://chatgpt.com/share/696facf5-b2fc-800f-8a33-3352dd193c54
2026-01-20 17:27:09 +01:00
kevinveenbirkenbach 5e9a225881 Debugging github workflow pipeline 2026-01-19 18:38:34 +01:00
kevinveenbirkenbach f6005c9daa ci: wrap app discovery into Make target and run inside infinito container
Move the full app discovery step into a dedicated Make target (ci-discover-output)
and execute discover.sh inside the infinito CI container to ensure a consistent
runtime environment.

This removes inline discovery logic from GitHub Actions workflows and prevents
host-side dependency issues (e.g. missing Python modules or jq mismatches).

- Add ci-discover-output Make target
- Run scripts/ci/discover.sh inside infinito container
- Simplify all test-deploy workflows to use the new wrapper
- Keep ONLY_APP override and GITHUB_OUTPUT handling intact

https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 15:17:38 +01:00
kevinveenbirkenbach 3a7508fbf1 ci: rename make up/down targets to docker-up/docker-down in workflows and Makefile
Replaced all usages of `make up` with `make docker-up` in GitHub Actions workflows.
Renamed Makefile targets:
- up      -> docker-up
- down    -> docker-down
- stop    -> docker-stop
- added docker-restart

This makes the Docker-specific intent explicit and avoids ambiguity with other potential `up` targets.

https://chatgpt.com/share/696bb966-ee90-800f-a5d2-e419cc423cc4
2026-01-17 17:31:25 +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
dependabot[bot] a3105afbf0 chore(deps): bump actions/upload-artifact from 4 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-15 01:49:25 +00:00
kevinveenbirkenbach 97642e949c ci(release): switch to immutable ci-<sha> image tags and retag on release
- Build CI images with immutable ci-<sha> tags instead of latest
- Pass CI image tag into deploy workflows via INFINITO_IMAGE_TAG
- Derive CI_TAG from checked-out release tag commit
- Retag CI images to <version> and latest on release (no rebuild)
- Make release scripts independent from GITHUB_SHA coupling
- Improve robustness and reproducibility of release pipeline

https://chatgpt.com/share/696832f6-35e4-800f-a574-178013d4426e
2026-01-15 01:20:39 +01:00
kevinveenbirkenbach 64f7a7d54d ci: serialize PR/push/scheduled/release runs via concurrency groups
Add top-level concurrency blocks to CI entry workflows (PR, push, schedule,
version) to avoid overlapping runs and reduce resource contention on runners.

Also refactor code-analyses workflow dependencies so deploy:workstation waits
for deploy:server to complete (prioritize server debugging), and do minor
whitespace/newline cleanups in web-opt-rdr-domains role files.

https://chatgpt.com/share/6967cff2-1584-800f-a2d3-1ef7a824f62f
2026-01-14 18:18:31 +01:00
kevinveenbirkenbach 0cad360d29 ci: refactor deploy workflows and make CI build behaviour explicit
- Replace legacy MODE env with TEST_DEPLOY_TYPE across workflows and scripts
- Route CI deploy and discovery through Makefile targets
- Rename deploy-one-app.sh to deploy-app.sh and update all call sites
- Fix Makefile recursion and ensure scripts are executed directly
- Ensure JSON discovery output is clean via silent make target
- Make MISSING_ONLY default true via Makefile
- Respect INFINITO_NO_BUILD in compose up to avoid implicit rebuilds in CI
- Keep explicit build step before compose up for deterministic CI runs
- Improve deploy logging (test_deploy_type instead of mode)

Result:
- Deterministic CI behaviour
- No accidental docker compose rebuilds on up
- Single source of truth for deploy orchestration
- Cleaner env contract between workflows, make, bash and python

https://chatgpt.com/share/69678024-fe38-800f-b877-add46aa55190
2026-01-14 12:37:41 +01:00
kevinveenbirkenbach e63f18a403 ci(deploy): keep stack only when running under act
- Default KEEP_STACK to true only for act runs
- Disable KEEP_STACK in GitHub Actions to prevent runner disk exhaustion
- Remove explicit KEEP_STACK overrides from deploy workflows

https://chatgpt.com/share/696752fb-befc-800f-9cf1-57093178297a
2026-01-14 09:35:01 +01:00
kevinveenbirkenbach 673dab59d2 ci(deploy): prevent docker compose builds in GitHub Actions
Switch CI detection to GITHUB_ACTIONS and disable compose builds via
INFINITO_NO_BUILD=1. The deploy workflows now rely on pulling the prebuilt
CI image instead of triggering local Docker builds.

- Remove legacy UP_BUILD handling
- Enable --no-build in compose when running in real CI
- Keep local/act builds working as before

https://chatgpt.com/share/69666e0b-f08c-800f-93fd-611eced4b100
2026-01-13 17:08:34 +01:00
kevinveenbirkenbach 045aae8914 ci(make,deploy): centralize CI image/pull config and remove workflow duplication
- Move INFINITO_IMAGE and INFINITO_PULL_POLICY handling into Makefile
- Auto-configure CI vs act via IS_ACT switch
- Remove duplicated env exports from test-deploy workflows
- Ensure compose uses pulled CI images in GitHub Actions
- Keep local act builds using locally built images

This makes CI behavior deterministic while keeping local test runs fast and simple.

https://chatgpt.com/share/69665ae7-37f4-800f-b287-e095714e80a4
2026-01-13 16:10:14 +01:00
kevinveenbirkenbach c4f47a3017 ci(make): derive INFINITO_PULL_POLICY automatically and drop workflow duplication
Let the Makefile auto-detect act vs GitHub Actions and set INFINITO_PULL_POLICY
accordingly (never for act, always for CI).

This removes redundant INFINITO_PULL_POLICY exports from test-deploy workflows
and centralizes the logic in the Makefile.

Result:
- GitHub Actions always pulls CI images
- act/local runs use locally built images
- no workflow duplication

https://chatgpt.com/share/69665ae7-37f4-800f-b287-e095714e80a4
2026-01-13 15:46:52 +01:00
kevinveenbirkenbach 392d15107b ci(release): build CI images, retag on release, gate stable on tests
- Add reusable build-ci-images workflow to build and push ci-<sha> images for all distros
- Make all deploy test workflows use prebuilt CI images (no local rebuilds)
- Replace ci-version workflow with release workflow
- Retag ci images to <version> and latest on tag push (no rebuild)
- Move stable git tag only if all analyses/tests succeed and version is highest
- Make compose image/pull policy configurable via env

https://chatgpt.com/share/69662869-ee1c-800f-9e6c-bbbf47284fad
2026-01-13 12:11:33 +01:00
kevinveenbirkenbach 56d211e60d ci(logs): centralize failure log tailing into reusable script
Replace inline tail logic in deploy workflows with a shared
scripts/ci/log-tail.sh helper that prints the last N lines of all
log files on failure.

This improves debuggability, avoids code duplication, and ensures
consistent log output across server, universal and workstation
pipelines.

https://chatgpt.com/share/69661d0e-81a8-800f-8b98-6c964672d027
2026-01-13 11:23:02 +01:00
kevinveenbirkenbach 9206b7c9d4 Set fail-fast to false 2026-01-13 06:12:54 +01:00
kevinveenbirkenbach 1e4fb08d87 ci(deploy): run one GitHub runner per app via matrix jobs
Refactor server, universal-rest, and workstation deploy workflows to:
- add a dedicated discover job that outputs the app list
- run one matrix job per app (one runner per app)
- remove bash loop over apps
- upload logs per app artifact

This enables parallel per-app deployments and clearer failure isolation.

https://chatgpt.com/share/6965ccdc-ed44-800f-b1e8-f0071db6dd07
2026-01-13 05:40:52 +01:00
kevinveenbirkenbach bdaac5cc90 ci(deploy): split per-app deploy into server/workstation/rest workflows (env-only defaults)
- Remove _deploy-per-app.yml (inputs-based indirection)
- Add dedicated workflows:
  - test-deploy-server.yml
  - test-deploy-workstation.yml
  - test-deploy-universal.yml (rest)
- Configure via env defaults only (KISS / SRP / SPOT)
- Update Makefile to target the new workflows and pass overrides via env
- Ensure deploy-one-app.sh is executable
- Keep failure debug (last 200 chars) and upload logs only outside act
2026-01-13 05:23:47 +01:00
kevinveenbirkenbach dac111ccb7 ci(deploy): simplify per-app deploy workflow and Makefile act targets
- Rename _deploy-matrix.yml -> _deploy-per-app.yml and drop unused inputs
  (tested_lifecycles, only_distro, final_exclude_re).
- Keep one runner per app (matrix.app) and run all distros inside that job.
- Makefile: run deploy tests through act workflow_dispatch (no serial script).
- Add scripts/ci/discover.sh and scripts/ci/deploy-one-app.sh as small SRP helpers.
- Update reusable workflow callers to use the renamed file.

https://chatgpt.com/share/69659ff3-1414-800f-8652-5298fcf55398
2026-01-13 03:41:25 +01:00
kevinveenbirkenbach 3329fbdfd5 ci(act): unify deploy matrix + force serial execution with max-parallel
- Add reusable _deploy-matrix workflow with discovery + per-app deploy across distros
- Enforce serial execution via strategy.max-parallel=1 and act --concurrent-jobs 1
- Support filters: mode (server|workstation|rest), only_app, only_distro, include/exclude regex
- Refactor test runner: remove discovery, require --app, deploy single app with deps only
- Generalize discover script to discover-apps.sh with INCLUDE_RE/EXCLUDE_RE + lifecycle gating
- Update Makefile targets to drive workflow_dispatch inputs for local act runs

https://chatgpt.com/share/69659ff3-1414-800f-8652-5298fcf55398
2026-01-13 03:06:56 +01:00
kevinveenbirkenbach f686af4d3f ci(deploy-test): free docker disk space between distro runs
Add disk usage diagnostics and aggressive Docker cleanup between
sequential distro deploy runs to prevent runner disk exhaustion.

- Log disk and Docker usage before and after each deploy
- Preserve stack on failure for debugging
- Prune images, volumes and build cache only on success

https://chatgpt.com/share/69637278-7aa0-800f-a492-7be95f5e8605
2026-01-11 10:50:36 +01:00