An inventory group web-app-cst-<name> with applications.<id>.custom: true and
a pinned source {url, version, path} is pulled into roles/ before the play,
read raw (Jinja, Ansible tags and credential URLs refused), placed through a
staging directory under an exclusive lock, and owned by a marker that names
its own directory, so a pull or roles-clean never replaces or removes a
directory it did not place and a failed pull leaves roles/ as it was.
Directory inventories, host lists and non-UTF-8 files behave as Ansible
reads them; generated test deploys pass --skip-pull. make roles-pull,
roles-clean and roles list, INFINITO_EXTRA_MOUNTS for local sources, the
web-app-cst category, the reserved prefix lint and a central
repository_files() that also yields the gitignored custom roles let every
lint scan them like in-tree roles. Supersedes the uncommitted 045 External
Roles draft and reuses its fetch, sync and mount design.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Container Deploy Helpers 🐳
This directory holds the in-container halves of the local deploy flows.
Each script runs inside the development compose container (the repo is bind-mounted at ${INFINITO_SRC_DIR}) and is invoked by a matching host wrapper under apps/.
Layout 🗂️
The subtree mirrors the host-side apps/ structure verb by verb and scope by scope:
| Host wrapper | Container half |
|---|---|
apps/initialize/all.sh |
container/initialize/all.sh |
apps/update/all.sh |
container/update/all.sh |
apps/update/selection.sh |
container/update/selection.sh |
Verbs without a container half (reinstall/, apps/initialize/selection.sh) call the dev CLI directly from the host and do not need a paired in-container helper.
Conventions 📐
Each script MUST be entered via cli.administration.deploy.development exec --env KEY=VAL (or an equivalent docker exec -e … invocation) so the host wrapper can inject the required environment.
Each script MUST assert its required env-vars at the top with : "${VAR:?}" so missing context surfaces immediately.
Each script MUST cd "${INFINITO_SRC_DIR}" before running anything so relative paths resolve against the bind-mounted repo.
Each script SHOULD run ./scripts/docker/entry.sh true for entry bootstrap before the deploy step.