feat(mumble F2-14c): drop cc-ci compose.host-ports.yml fork; deploy 0.2.0 base minimally, add native host-ports on upgrade-to-latest via new UPGRADE_EXTRA_ENV harness hook + COMPOSE_FILE-aware READY_PROBE/install skip

This commit is contained in:
autonomic-bot
2026-05-31 05:07:44 +00:00
parent e3720bedf3
commit 4bf9e1d43d
8 changed files with 101 additions and 80 deletions

View File

@ -81,8 +81,8 @@ def recipe_checkout(recipe: str, version: str) -> None:
path = os.path.expanduser(f"~/.abra/recipes/{recipe}")
# -f (force): the version-pinning checkout must yield the EXACT ref tree. Without it, a cc-ci
# install_steps-provided overlay (e.g. mumble's compose.host-ports.yml, copied into a version that
# predates it) is an UNTRACKED file that collides with the same path TRACKED in a later ref, and
# install_steps-provided overlay (e.g. discourse's compose.ccci.yml, copied into the pinned base)
# is an UNTRACKED file that collides with the same path TRACKED in a later ref, and
# `git checkout <ref>` aborts ("untracked working tree files would be overwritten"). Force resolves
# it by writing the ref's tracked version. Safe: we never want local recipe-tree state preserved
# across a version switch (and chaos deploys re-provide the overlay via install_steps when needed).
@ -137,6 +137,25 @@ def env_set(domain: str, key: str, value: str) -> None:
fh.write("\n".join(out) + "\n")
def env_get(domain: str, key: str) -> str | None:
"""Read a key from the app's .env (last uncommented assignment wins). None if absent. Symmetric
with env_set; abra has no getter. Strips surrounding quotes from the value."""
import os
import re
path = os.path.expanduser(f"~/.abra/servers/default/{domain}.env")
if not os.path.exists(path):
return None
pat = re.compile(rf"^\s*{re.escape(key)}=(.*)$")
val = None
with open(path) as fh:
for ln in fh.read().splitlines():
m = pat.match(ln)
if m:
val = m.group(1).strip().strip('"').strip("'")
return val
def secret_generate(domain: str, timeout: int = 300) -> None:
# -m avoids the TTY/table (ioctl) path; output (which contains the generated values) is
# captured by _run and never logged. -C -o keep the recipe at the PR checkout (without -o it