- Run deployment tests sequentially for focused E2E stabilization
- Make universal depend on server
- Make workstation depend on server and universal
- Keep image build as single entry point
https://chatgpt.com/share/6967e809-7df4-800f-a234-b40ead86626f
Unify PR, push, nightly and release workflows under a single global
concurrency group (infinito-ci-global) to ensure only one CI run executes
at a time.
Configure the nightly workflow to run daily at 00:00 UTC and to cancel any
in-progress CI runs, giving nightly jobs priority for cleanup and full
validation.
This prevents overlapping CI runs, reduces runner/disk pressure, and
enforces a strictly serialized CI pipeline.
https://chatgpt.com/share/6967d742-9178-800f-ad20-f1c3f77f69bc
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
Refactor Listmonk database setup into a dedicated task routine.
- Add 01_database.yml for centralized DB lifecycle handling
- Detect reachable and empty database reliably
- Run --install only on empty databases
- Run --upgrade only when DB is initialized and MODE_UPDATE is enabled
- Tolerate SIGPIPE (rc=141) from yes-pipe via failed_when
- Use docker compose run for non-interactive install/upgrade
This prevents failing CI runs and ensures deterministic Listmonk bootstrap.
https://chatgpt.com/share/6967c1e9-0818-800f-a327-7407195cc281
- Stop deleting /tmp and /var/tmp to avoid breaking running processes and Ansible module execution
- Drop Cargo, Maven and Gradle cache cleanup to prevent race conditions and CI flakes
- Keep lightweight cache cleanup (apt/dnf/pacman, pip, npm, yarn, go-build)
Introduce a new sys-cleanup role to perform cross-distro cleanup (apt, pacman,
dnf, yum, language caches, temp dirs and journald) for CI/container environments.
Add aggressive Docker prune handler (system + buildx + builder + log truncate)
to prevent GitHub Actions images from growing uncontrollably.
Integrate Nix garbage collection and store optimisation for CI runs.
Cleanup is guarded by MODE_CLEANUP and DOCKER_IN_CONTAINER to ensure it never
runs on real production hosts.
https://chatgpt.com/share/6967ad99-8e50-800f-b4e9-4cd8e45c29bc
Add a docker-compose handler that aggressively prunes unused Docker data
(system, volumes, buildx cache and legacy builder cache) when running inside
a container.
This is required for GitHub Actions runs, otherwise the resulting Docker image
grows to ~14GB due to accumulated layers, caches and volumes.
The prune handler is guarded by DOCKER_IN_CONTAINER to ensure it only runs in
CI/container environments and never on real production hosts.
https://chatgpt.com/share/6967ad99-8e50-800f-b4e9-4cd8e45c29bc
Switch Listmonk database access from docker compose exec postgres to docker exec on the shared database container.
This fixes initialization and upgrade failures when using a shared PostgreSQL stack.
- Introduce LISTMONK_EXEC_DATABASE helper command
- Use shared DB container for schema checks and SQL updates
- Prevent failures when no local postgres service exists in listmonk compose project
https://chatgpt.com/share/69679b64-607c-800f-922e-7dc282498bc4
- Build CI images workflow now always publishes :latest instead of ci-<sha>
- Removed obsolete tag input and CI tag computation logic
- Deploy in real GitHub Actions now pulls ghcr.io/.../infinito-<distro>:latest
- Skip docker compose build when INFINITO_NO_BUILD=1
- Respect INFINITO_IMAGE for --missing image existence check
This ensures deploy jobs use the already published production image and never rebuild in CI.
https://chatgpt.com/share/69678e2c-7d7c-800f-b422-15e98c8e4b6e
- Control INSTALL_LOCAL_BUILD centrally via Makefile depending on CI context:
- real GitHub Actions runner: disable local rebuild
- act and local runs: enable local rebuild
- Pass INSTALL_LOCAL_BUILD through docker-compose using environment expansion
- Remove hardcoded INSTALL_LOCAL_BUILD=1 from CI container runner
- Keep Dockerfile local-build during image build for CI images
This ensures consistent local/CI behavior and avoids unnecessary rebuilds on real CI runners.
https://chatgpt.com/share/6967876f-e400-800f-90ec-fe870e565bf3
- 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
Suppress docker cleanup service flush while svc-* roles are deploying to avoid
side effects where required networks (e.g. MariaDB, OpenLDAP, Ollama) get
deleted before the stack is fully deployed.
Introduce role-aware logic based on group_names and add
SYS_CTL_CLN_DOCKER_SERVICE_ROLE_DEPLOY helper flag.
https://chatgpt.com/share/69677353-a86c-800f-8306-d88c0b02b9fb
This prevents the deployment from failing when the target path already exists
as a regular file (e.g. copied by Ansible temp handling):
Error: src file does not exist, use 'force=yes' if you really want to create the link
path: /opt/docker/bigbluebutton/services/repository/.env
src: /opt/docker/bigbluebutton/.env/env
Using force guarantees idempotent behavior and replaces any pre-existing file
with the correct symbolic link.
https://chatgpt.com/share/696771a3-a414-800f-ac7a-e70addb19347
- Merge docker engine, compose, buildx and python dependencies into a single package task
- Remove silent omit logic and fail hard on unsupported distributions
- Ensure Docker Compose v2 requirements (buildx) are always installed
- Improve CI safety by preventing partial or broken Docker installations
https://chatgpt.com/share/69676a55-f02c-800f-88d5-d5ac4991ff15
- Rename CI workflow and MODE from "rest" to "universal"
- Extend CLI and test runner to support universal deploy type
- Add tasks/stages/02_universal.yml for universal host type
- Update discover logic to use universal app selection
- Remove legacy rest->server mapping and obsolete select helper
https://chatgpt.com/share/6967625e-81c8-800f-8592-5d5b8edec1e2
- Replace registry-based build cache with GitHub Actions cache (type=gha)
- Add disk usage diagnostics before and after builds
- Enable buildx installation for deterministic behavior
- Add aggressive cleanup to avoid runner disk exhaustion
https://chatgpt.com/share/696752fb-befc-800f-9cf1-57093178297a
Grant `${LDAP_ROOT_DN}` manage rights on the `config` database (in addition to SASL EXTERNAL) so tools like `ldapsm` can read/write `cn=config` over LDAP and no longer fail with “No such object”.
https://chatgpt.com/share/6966da0f-b458-800f-8e40-97a919b976f5
- Normalize OPENLDAP_MODULE_DN to always include ,cn=config suffix
- Normalize OPENLDAP_DATA_BACKEND_DN to always include ,cn=config suffix
- Prevent ldapmodify/ldapadd failures due to missing superior DN
https://chatgpt.com/share/6966dc9d-03c8-800f-a9c7-e6d479694bb3
- Add explicit `database config` backend so cn=config is accessible via ldapi
- Fix access rules for EXTERNAL SASL on cn=config
- Resolve module DN from /etc/ldap/slapd.d instead of ldapsearch
- Simplify docker-compose role inclusion and network wiring
https://chatgpt.com/share/6966da0f-b458-800f-8e40-97a919b976f5
- add --debug / --no-debug flag to deploy test CLI and runner
- make Ansible debug mode optional instead of always enabled
- extend deploy.sh with debug flag forwarding
- add make target test-deploy-rapid for fast single-app deploys
https://chatgpt.com/share/6966c80c-661c-800f-8fb9-769659da290d
- Rework Docker image to start from a clean slapd.d and data dir
- Bootstrap cn=config via slaptest from generated slapd.conf
- Deterministic MDB initialization (creates data.mdb on first start)
- Enforce correct ownership and permissions for slapd, config, and DB
- Add logging and fatal guards for broken bootstrap states
- Make memberof check optional in healthcheck
- Ensure base LDAP tree and OUs via Ansible (root, people, groups, roles)
- Cleanup Docker hardening vars
Result: stable, reproducible OpenLDAP container startup with clean volumes.
https://chatgpt.com/share/6966b019-d604-800f-86c2-d6ee04129130
Ensure systemd is started immediately as PID 1 in the infinito container
to avoid blocking on pkgmgr during boot. Increase compose runner timeout
to match healthcheck window and make healthcheck script executable in the
image.
This fixes containers getting stuck in "starting" state and makes CI
startup deterministic.
https://chatgpt.com/share/696683a2-9350-800f-a0cf-587d4013cb29
Add a systemd-based Docker HEALTHCHECK that verifies:
- systemd readiness
- infinito CLI availability and executability
- infinito CLI smoke test (--help)
Update CI compose runner to wait for Docker health status instead of
manual systemd polling. The runner now:
- resolves the infinito container via docker compose
- waits for healthy state
- dumps journalctl and docker logs on timeout
This removes boot race conditions and makes container readiness deterministic.
https://chatgpt.com/share/696683a2-9350-800f-a0cf-587d4013cb29
Extend wait_for_systemd_ready() to automatically print the last 200 log
lines on timeout for easier CI debugging.
- Adds journalctl output (preferred for systemd containers)
- Adds docker logs fallback
- Improves timeout error diagnostics
https://chatgpt.com/share/69667eca-088c-800f-af12-5682d0038351
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
Replace GitHub Actions cache backend with GHCR registry-based build cache
to avoid intermittent 5xx errors and improve reliability for multi-distro
Buildx jobs.
Each distro now uses its own cache namespace:
infinito-cache-<distro>:buildcache
https://chatgpt.com/share/69665ae7-37f4-800f-b287-e095714e80a4