Introduce retry logic with exponential backoff for git operations to reduce flaky
CI/Docker failures (e.g., "Connection reset by peer"). Replace run(check=True)
with run_checked() and add transient error detection. Update unit tests to match
new execution and error-handling behavior.
https://chatgpt.com/share/6960d28d-3e2c-800f-943b-a80630a6a395
- Add custom Ansible module file_has_content to validate databases.csv on target host
- Fail hard if databases.csv is missing or not a regular file
- Compute backup force-flush flag based on MODE_BACKUP and actual file content
- Prevent instant backup flush when no database secrets are present
- Add full unittest coverage for file_has_content module
- Make sys-service flush behavior data-driven and deterministic
https://chatgpt.com/share/6960cdb6-dd28-800f-8427-2e375de4e61b
Add a systemd readiness gate to the CI compose wrapper to avoid a race
where systemctl is called before DBus/systemd is fully ready.
This prevents sporadic failures like:
"System has not been booted with systemd as init system (PID 1)".
No Dockerfile or Ansible role changes required.
https://chatgpt.com/share/696045b5-bd08-800f-acd9-e3a4e2e23e52
Resolve run_after dependencies via Compose.exec inside the infinito
CI container instead of invoking the resolver on the host.
This ensures:
- consistent runtime environment (PYTHONPATH, installed code)
- correct resolution when local and container sources differ
- alignment with other compose-based CI execution paths
https://chatgpt.com/share/69603903-d158-800f-815d-c506e3a3a44a
Avoid returning from finally in the test runner, which previously
overrode non-zero exit codes when --keep-stack-on-failure was set.
The compose stack is now conditionally kept without affecting the
actual test result.
https://chatgpt.com/share/696032fd-57d8-800f-bcc8-a0edf7b829a4
- continue testing all distros and fail at end if any deploy fails
- prevent make down from aborting the test loop
- move tail-on-failure logic to a dedicated workflow step
- improve local debugging with act and skip artifact upload there
https://chatgpt.com/share/69601617-9808-800f-a7cd-f5e65e40c04e
- Default applications to an empty mapping to avoid undefined access
- Add explicit parentheses to ensure correct Jinja filter and ternary evaluation
- Stabilize Nextcloud OIDC flavor resolution when inventory provides no applications
https://chatgpt.com/share/695fff6e-8d20-800f-be9a-d0ad30ee198e
- Prevent 'applications is undefined' by defaulting to an empty mapping
- Fix operator precedence when negating OIDC feature for 2FA plugins
- Make Nextcloud feature toggles robust when inventory provides no applications
https://chatgpt.com/share/695fff6e-8d20-800f-be9a-d0ad30ee198e
Ensure OpenResty can start even when no configuration is present yet by
providing a minimal, valid nginx.conf bootstrap.
This decouples container startup from configuration deployment and prevents
handler execution from failing when Docker/OpenResty is initialized before
NGINX config templates are rendered.
https://chatgpt.com/share/695ff412-4324-800f-a76d-27ff2bf2dff7
Move lifecycle filtering into discover-server-apps.sh so only
lifecycle-eligible web-app-* and web-svc-* roles are discovered.
This prevents invalid per-app deploy tests where applications are
excluded later during inventory generation, causing "not present in
inventory" errors.
- Filter invokable roles by server prefixes
- Apply lifecycle_filter blacklist using TESTED_LIFECYCLES
- Always emit valid JSON for CI matrix generation
https://chatgpt.com/share/695fd936-0ee4-800f-a57f-2d7995e15ba0
- Restore lifecycle-based role exclusion via cli.meta.roles.lifecycle_filter
- Make tested lifecycles configurable through TESTED_LIFECYCLES env
- Apply lifecycle gating consistently for workstation and server tests
- Fix minor bug in invokable parsing (avoid shadowing built-in list)
- Improve logging with lifecycle exclusion details
https://chatgpt.com/share/695fbcf4-2148-800f-8685-56ee73a9bae0
- Always derive roles/ path from repository root instead of accepting a parameter
- Fail fast if roles directory is missing or mislocated
- Add explicit typing and Path-based path handling
- Update unit tests to rely on real repo roles instead of temporary fixtures
- Ensure tests cover correct role discovery and inventory validation
https://chatgpt.com/share/695fb926-1f5c-800f-9012-e2922bb1df3f
- Print full raw inventory file when application_id validation fails
- Fix invalid reason detection to use in_roles / in_inventory flags
- Simplify CI debugging for per-app dedicated deploy tests
https://chatgpt.com/share/695fb5d2-801c-800f-a1c8-06c2bcace450
* Avoid GitHub Actions matrix job limits by looping distros inside the per-app job
* Simplify discover output emission and pin checkout/upload-artifact to stable versions
* Tidy long log lines and minor formatting in deploy/test helpers
https://chatgpt.com/share/695fa9b9-4460-800f-bcc3-d566b83649b2
* Add `cli.deploy.test` module to orchestrate compose-based CI deploy tests
* Support server per-app runs (including run_after dependencies) and workstation selection
* Add optional image build flags (--no-cache, --missing) and stack retention on failure
* Simplify `scripts/tests/deploy.sh` to a thin wrapper that forwards args to the Python runner
https://chatgpt.com/share/695f9e22-6e9c-800f-9a50-65f553619af2
Drop VOLUME /sys/fs/cgroup from Dockerfile and rely on docker-compose
to mount cgroups explicitly for systemd-based CI containers.
Prevents creation of anonymous volumes in derived images.
https://chatgpt.com/share/695f94d9-d4a0-800f-a9eb-19e67445a0fe
- Introduce CLI tool to resolve galaxy_info.run_after dependencies transitively
- Detect and report circular run_after dependencies explicitly
- Validate role existence and run_after schema strictly
- Provide whitespace-separated output for easy shell usage
- Add comprehensive unittest coverage including CLI behavior and error cases
https://chatgpt.com/share/695f8e09-54f4-800f-9f5f-ed9c2fdd664b
- Refactor shared `user` role to use `user_key` exclusively (remove user_name)
- Resolve system username, home, group, and ownership via users[user_key]
- Update SSH authorized_keys handling to read from users[user_key]
- Adjust documentation to clearly describe user_key-based SPOT model
- Migrate all calling roles (administrator, backup, root) to pass user_key
- Introduce new `user-workstation` role with dedicated README, vars, tasks, and metadata
- Add workstation stage integration to ensure workstation user setup runs explicitly
- Ensure consistent variable naming (lowercase internals, uppercase constants)
- Improve robustness and clarity of user management across all roles
https://chatgpt.com/share/695ea93e-3fa0-800f-b848-ec2ced2a8291
- Make user roles optional and default to empty list
- Avoid failures when roles key is missing or null
- Centralize role-based logic via mailu_user_roles
- Ensure admin/user action selection remains consistent
https://chatgpt.com/share/695ea61f-2fc8-800f-adba-60b2f12763e8
- Replace pkgmgr-install with sys-pip-install for gitconfig CLI
- Ensure gitconfig is available in PATH during Ansible runs
- Run git configuration as WORKSTATION_USER to write into correct home
- Prevent command-not-found errors during initial setup
https://chatgpt.com/share/695ea278-7888-800f-aa16-d17b7d3317ef
- Introduce WORKSTATION_USER in sample inventory
- Switch desktop roles from desktop_username to users[WORKSTATION_USER]
- Add placeholder GPG key for git signing configuration
- Modernize Arduino user group task to structured user module syntax
- Rename desk-docker README title for clarity
https://chatgpt.com/share/695e9c5b-4f80-800f-a31d-95d800f98c21
- Make pull-specific-host.py fail on any command error (and rsync after retries), emit clear stderr, and exit 0/1 via main()
- Keep remote `find ... -execdir basename {} ;` unchanged to stay compatible with existing ssh-wrapper.sh
- Update wrapper script to continue across hosts but return exit 1 if any host failed
- Adjust unit tests to expect exceptions instead of SystemExit
https://chatgpt.com/share/695e9615-6014-800f-a77d-5809cf45559d
- Replace DEFAULT_SYSTEM_EMAIL merge with flat SYSTEM_EMAIL_* variables
- Update templates across apps to new variable names
- Fix msmtp health check to use -t and local username fallback
- Improve postfix localhost config (localdomain, mydestination, timeouts)
- Extend sys-hostname to ensure /etc/hosts mapping once
https://chatgpt.com/share/695e8f39-0694-800f-b91c-a74f4b78d7c8