Commit Graph
918 Commits
Author SHA1 Message Date
kevinveenbirkenbach 7104f4486c Added more meta information for infinito nexus deployer 2026-02-09 11:41:36 +01:00
kevinveenbirkenbach 4e5e8d2a7d Fix compose down behavior and harden templar rendering
- Restore full teardown semantics in Compose.down by delegating to down_stack
  (including volume removal and CI cleanup)
- Normalize templar render output to string to avoid None-related failures
- Clean up unused variable in templating fallback path
- Reorder test imports without changing behavior

https://chatgpt.com/share/69890935-4f1c-800f-8f2c-1b18a1df0ea5
2026-02-08 23:07:44 +01:00
kevinveenbirkenbach 24025bc37c Fix Ruff F821: make Compose a forward reference in deps.py
https://chatgpt.com/share/69890394-46c4-800f-abe0-b7046357872f
2026-02-08 22:43:39 +01:00
kevinveenbirkenbach 88429c716b Merge branch 'alert-autofix-182' 2026-02-08 22:15:56 +01:00
kevinveenbirkenbach 65d84292b3 Merge branch 'alert-autofix-192' 2026-02-08 20:36:51 +01:00
kevinveenbirkenbach 35ee61975d Merge branch 'alert-autofix-189' 2026-02-08 20:32:14 +01:00
kevinveenbirkenbach 55ce8c7684 Merge branch 'alert-autofix-183' 2026-02-08 20:25:31 +01:00
kevinveenbirkenbach 5c6e39bb57 Merge branch 'alert-autofix-181' 2026-02-08 20:22:04 +01:00
kevinveenbirkenbach 46b4314dd0 Merge branch 'alert-autofix-180' 2026-02-08 20:18:03 +01:00
kevinveenbirkenbach 630c4cc542 Merge branch 'alert-autofix-169' 2026-02-08 20:09:46 +01:00
kevinveenbirkenbach 25677be0c1 Fix flake8 F821 by importing Compose under TYPE_CHECKING
Add a TYPE_CHECKING-only import for Compose to satisfy static analysis
while avoiding runtime import cycles. Replace quoted annotations with
proper type references.

https://chatgpt.com/share/6988de6f-26f8-800f-8011-5d530a24d6f8
2026-02-08 20:05:14 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI ed62d87ea9 Potential fix for code scanning alert no. 169: Empty except
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:47:08 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI 3bea773037 Potential fix for code scanning alert no. 179: Cyclic import
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:46:58 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI d27ca68ebc Potential fix for code scanning alert no. 180: Cyclic import
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:46:33 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI 9cb617eae0 Potential fix for code scanning alert no. 181: Cyclic import
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:45:55 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI ac449e6944 Potential fix for code scanning alert no. 182: Cyclic import
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:45:45 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI bd4d4b7248 Potential fix for code scanning alert no. 183: Cyclic import
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:44:34 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI 4e0a955555 Potential fix for code scanning alert no. 189: Empty except
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:43:30 +01:00
kevinveenbirkenbachandCopilot Autofix powered by AI 8b793739f6 Potential fix for code scanning alert no. 192: Statement has no effect
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-08 18:42:32 +01:00
kevinveenbirkenbach 05f0072a96 fix(cli): make invokable command patchable and forward args unchanged
- Import get_invokable_paths and get_non_invokable_paths at module level
  so unittest.mock.patch can replace them
- Forward roles_file and suffix unchanged to preserve CLI boundary
- Remove implicit default resolution from CLI
- Keep error handling and output behavior unchanged

https://chatgpt.com/share/6987a639-0f8c-800f-9ee0-70cff683aa56
2026-02-07 21:52:29 +01:00
kevinveenbirkenbach 7e6caf7613 Solved wrong parent root bug 2026-02-07 19:53:12 +01:00
kevinveenbirkenbach b78ab29218 Renamed config entry from docker to compose
https://chatgpt.com/share/69870f54-d708-800f-9870-e9ae5a4bff44
2026-02-07 11:09:36 +01:00
kevinveenbirkenbach e1e1f3eb11 chore(vars): rename PATH_* to DIR_/BIN_/FILE_ conventions
https://chatgpt.com/share/6985cf49-3c74-800f-af97-f68b1969ab01
2026-02-06 12:23:46 +01:00
kevinveenbirkenbach 8a81630391 Added newline at file and POSIX compatible 2026-02-04 19:49:56 +01:00
kevinveenbirkenbach bc38347798 refactor(ci-deploy): split per-distro deploy, add two-pass async test and hard cleanup
- Replace legacy app.sh/distros.sh orchestration with explicit all_distros.sh + dedicated_distro.sh
- Deploy each app sequentially across distros against a fresh stack
- Run two deploy passes per distro:
  - Pass 1 with ASYNC_ENABLED=false
  - Pass 2 with ASYNC_ENABLED=true against the same stack
- Remove deprecated cli.deploy.development run orchestrator
- Extend init command with --vars to inject inventory overrides
- Enforce debug mode for CI deploys
- Add hard Docker cleanup after each distro (containers, networks, volumes, build cache; keep images)
- Emit disk and docker usage before and after deploy for observability

https://chatgpt.com/share/6981c7d4-642c-800f-8438-9e2349ac53fb
2026-02-03 11:02:51 +01:00
kevinveenbirkenbach c0cd4b8eda feat(ci,mirror): add branch-scoped mirror of missing images and gate deploys on it
- Introduce reusable workflow `mirror-images-missing.yml` to mirror only missing
  Docker Hub images to GHCR using `--only-missing`
- Scope mirror concurrency per branch using `github.ref_name`
- Rename full mirror workflow to `mirror-images-all.yml` for clarity
- Integrate missing-image mirror into CI orchestrator and gate server/universal
  deploys on successful mirror completion
- Add tag existence checks via `skopeo inspect` to avoid redundant uploads
- Keep mirror runs best-effort to avoid blocking CI on transient registry issues

https://chatgpt.com/share/698141e9-0844-800f-9c4f-fecd468ede73
2026-02-03 01:31:30 +01:00
kevinveenbirkenbach 9a84fafec5 feat(inventory): add mirror_policy to control mirror image overrides
- Default policy (if_missing): manual image/version win, mirror fills blanks only
- Add mirror_policy=force to always overwrite image/version
- Add mirror_policy=skip to ignore mirror completely
- Treat empty/whitespace values as missing
- Preserve non-image/version service keys
- Extend unit tests to cover all mirror policy scenarios

https://chatgpt.com/share/6981036a-7e40-800f-b43e-13c66cc55fac
2026-02-02 21:04:53 +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 7faf87cc68 fix(mirror): remove invalid skopeo flag and add recompress fallback for GHCR
- drop unsupported --dest-no-reuse-blobs flag
- add retry with forced recompression to avoid GHCR blob reuse errors
- print skopeo stdout/stderr on failure for easier debugging

https://chatgpt.com/share/6980f7ca-2aa0-800f-ae64-60081aa88f1c
2026-02-02 20:14:49 +01:00
kevinveenbirkenbach a70a033864 feat(inventory): add --mirror support to override docker images from mirrors file
- add --mirror flag to inventory creator
- resolve mirrors.yml automatically or via explicit path
- apply mirror overrides to applications.*.docker.services.* (image/version only)
- keep existing host_vars keys untouched
- add unit tests for mirror override behavior

https://chatgpt.com/share/6980cdb1-1e5c-800f-b25f-a1af757e4239
2026-02-02 17:15:30 +01:00
kevinveenbirkenbach 647e93ff18 mirror: disable blob reuse for skopeo copy to GHCR
https://chatgpt.com/share/6980c6ff-3a6c-800f-8c95-6acdbfebfbfd
2026-02-02 16:47:04 +01:00
kevinveenbirkenbach 4949b45f44 feat(mirror): add rate-limited image sync with concurrency protection
- add optional --images-per-hour throttle to mirror sync
- enforce safe default (50 images/hour) in CI
- prevent overlapping mirror runs via workflow concurrency
- make workflow robust for schedule, dispatch, and workflow_call
- fix GHCR namespace fallback to repository owner

https://chatgpt.com/share/6980be4f-d5d4-800f-a9ad-2aaba637897e
2026-02-02 16:09:57 +01:00
kevinveenbirkenbach e7fdaa1d10 fix(mirror): iterate all images and fail at end on mirror errors
- mirror sync now continues on individual skopeo failures
- collect and summarize failed images
- return non-zero exit code only after all images were processed
- make GitHub workflow respect mirror sync exit status

https://chatgpt.com/share/6980b558-5fdc-800f-911e-48bbc35a461f
2026-02-02 15:45:27 +01:00
kevinveenbirkenbach 5c499def02 Fixed collabora service for bbb
https://chatgpt.com/share/698062c6-0000-800f-928d-03fd39e7d38c
2026-02-02 09:38:33 +01:00
kevinveenbirkenbach 42e809ae4f feat(cli): add callorder analyzer for tasks/groups role execution
Introduce a CLI tool to inspect and analyze role call order per group file,
supporting marker-based splitting, role filtering, and effected-group views.

https://chatgpt.com/share/697f5565-2b44-800f-999c-dbb2fb8ec449
2026-02-01 14:29:44 +01:00
kevinveenbirkenbach 546bf78cd4 feat(services,tls): register simpleicons as shared service for auto resolution
- Add simpleicons → web-svc-simpleicons to service resolver
- Ensure simpleicons is transitively included via docker.services flags
- Fix missing TLS SAN generation for icons.infinito.example
- Clean up unused service resolution modules

https://chatgpt.com/share/697eaf81-5500-800f-aec9-8902601a0124
2026-02-01 02:42:14 +01:00
kevinveenbirkenbach 8bff1b984d refactor(jinja): add strict recursive renderer and use in tls/compose lookups
Introduce module_utils/jinja_strict.py to render nested Jinja-in-vars with hard-fail semantics. Refactor cert_plan, compose_f_args, and compose_ca_inject_cmd to use render_strict so no "{{ ... }}" leaks into generated paths/commands, and add unit tests.

https://chatgpt.com/share/697b8e1b-54fc-800f-b895-7161f00ebd51
2026-01-29 17:42:28 +01:00
kevinveenbirkenbach ddb210b294 feat(users): add firstname/lastname to generated users and LDAP entries
- Generate firstname and lastname fields in CLI user setup
- Add meaningful default description including primary domain
- Pass firstname/lastname explicitly to OpenLDAP givenName/sn
- Remove LDAP-side fallbacks to item.key to ensure consistent user data

https://chatgpt.com/share/6978d573-a8c4-800f-8670-c9344f594a3a
2026-01-27 16:10:26 +01:00
kevinveenbirkenbach cbd4a4dc93 Fixed path 2026-01-25 11:25:59 +01:00
kevinveenbirkenbach c86d9820f5 fix(dev-deploy): add missing when_down arg in restart
restart delegates to up.handler(), which expects args.when_down.
Add when_down=False to the restart -> up args shim to avoid AttributeError.

https://chatgpt.com/share/69752530-c570-800f-b82c-f4bc10231292
2026-01-24 21:01:45 +01:00
kevinveenbirkenbach fae7b82243 feat(security): introduce strong_password filter backed by ValueGenerator
- add strong_password Jinja2 filter as thin wrapper around ValueGenerator
- enforce password policy (upper, lower, digit, special, min length)
- replace insecure ascii-only password lookup with strong_password filter
- update CLI setup users and unit tests accordingly
- harden inventory sample password example

https://chatgpt.com/share/69722c7e-ebe0-800f-a9ab-a3e21b43269c
2026-01-22 14:56:05 +01:00
kevinveenbirkenbach b334a5c98d fix(cli): ensure project root on sys.path when running cli/__main__.py directly
- Prevent accidental import of installed "cli" package from site-packages
- Make `python3 cli/__main__.py ...` behave identical to `python -m cli ...`
- Add env.development to .dockerignore to match .gitignore

https://chatgpt.com/share/69720fd6-a1c8-800f-b1e2-6909aa63643a
2026-01-22 13:13:01 +01:00
kevinveenbirkenbach d2694566e5 feat(runtime): add development runtime marker and unified runtime detection
- introduce env.development marker for local dev runtime
- add cli.meta.runtime module with library API and CLI entrypoint
- detect runtime via ACT/GitHub/marker with explicit RUNTIME override
- use env.development as docker-compose env override
- pass RUNTIME=dev into development inventory generation
- add make setup-development helper

https://chatgpt.com/share/69720fd6-a1c8-800f-b1e2-6909aa63643a
2026-01-22 12:53:42 +01:00
kevinveenbirkenbach 4b712c22cb feat(compose): load optional env.local as override for env.ci
https://chatgpt.com/share/697200be-e96c-800f-a8d3-b89b75b6e37c
2026-01-22 11:49:31 +01:00
kevinveenbirkenbach 221c1c67aa feat(cli): add flexible docker image mirror resolver and sync system
Introduce a modular mirror subsystem with:
- canonical ImageRef model
- shared discovery & normalization logic for Docker Hub images
- pluggable registry providers (GHCR, Gitea-ready)
- inventory resolver for mirrored image paths
- skopeo-based mirror sync implementation

Design follows SRP/KISS principles and allows future registry backends.

https://chatgpt.com/share/6971e6cf-be18-800f-9419-589fd3e22c3d
2026-01-22 09:58:48 +01:00
kevinveenbirkenbach 4cabf905b4 Deleted deprecated classes 2026-01-22 09:38:11 +01:00
kevinveenbirkenbach 6af034a0a0 feat(dev-deploy): stream compose/ansible output with CI-aware TTY and tail buffers
https://chatgpt.com/share/69712357-7548-800f-9b51-7fd4c4207bef
2026-01-21 20:04:48 +01:00
kevinveenbirkenbach 5e097c02f1 fix(shellcheck): address lint findings across scripts
- openldap: use find instead of ls for module path detection
- docker-volumes health: robust whitelist parsing + quote vars
- btrfs health: quote path
- docker CLI installer: silence SC2031 false-positive for /etc/os-release vars
- test-dns: use loop counter
- chess: require APP_KEY_FILE env
- espocrm: log normalized seed flags to avoid unused vars
- shopware: disable SC2016 for php -r blocks (PHP vars in single quotes)
- fix script: add shebang + strict mode

https://chatgpt.com/share/69712026-7288-800f-b1d0-701e31754362
2026-01-21 19:51:12 +01:00
kevinveenbirkenbach bdd6587bcc fix(ci): show deploy stdout/stderr and pass inventory_dir in run orchestrator
- Capture and print deploy stdout/stderr on failure (development/deploy.py)
- Forward INVENTORY_DIR into init and deploy handlers (development/run.py)
- Add missing when_down flag for up handler
- Print full traceback on orchestrator failure for CI visibility

https://chatgpt.com/share/6970fcf5-5860-800f-89ae-0d601405489b
2026-01-21 17:21:02 +01:00
kevinveenbirkenbach 33ab4b61dc feat(dev-deploy): extract CoreDNS Corefile rendering into dedicated Python class
- Move Corefile rendering logic into CoreDNSCorefileRenderer
- Add atomic rendering via envsubst with validation and preview
- Enforce strict error handling for missing files, invalid paths and permissions
- Integrate renderer into development compose workflow
- Rename DNS make targets for consistency (dns-setup / dns-remove)
- Rename test-act target to test-act-all

https://chatgpt.com/share/6970e503-e818-800f-8724-d791a3abfb33
2026-01-21 15:38:54 +01:00