From d2c6ab72b26e3e3345f4a49d64e86d2dfc2886f4 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 16 Dec 2025 10:12:55 -0800 Subject: [PATCH] Add CF_CONFIG env var for simpler Docker workflow Config search order is now: 1. --config CLI option 2. CF_CONFIG environment variable 3. ./compose-farm.yaml 4. ~/.config/compose-farm/compose-farm.yaml Docker workflow simplified: mount compose_dir once, set CF_CONFIG to config file within it. No more symlink issues or multiple mounts. --- docker-compose.yml | 8 ++++---- src/compose_farm/config.py | 9 ++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index afbe07e..cfc0555 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,9 +3,9 @@ services: image: ghcr.io/basnijholt/compose-farm:latest volumes: - ${SSH_AUTH_SOCK}:/ssh-agent:ro - # Config directory (must contain compose-farm.yaml, stores state.yaml) - - ${CF_CONFIG_DIR:-~/.config/compose-farm}:/root/.config/compose-farm - # Compose directory (mount at same path so compose_dir in config works) - - ${CF_COMPOSE_DIR:-/opt/compose}:${CF_COMPOSE_DIR:-/opt/compose}:ro + # Compose directory (contains compose files AND compose-farm.yaml config) + - ${CF_COMPOSE_DIR:-/opt/compose}:${CF_COMPOSE_DIR:-/opt/compose} environment: - SSH_AUTH_SOCK=/ssh-agent + # Config file path (state stored alongside it) + - CF_CONFIG=${CF_COMPOSE_DIR:-/opt/compose}/compose-farm.yaml diff --git a/src/compose_farm/config.py b/src/compose_farm/config.py index 2c1c43f..9a56486 100644 --- a/src/compose_farm/config.py +++ b/src/compose_farm/config.py @@ -148,9 +148,10 @@ def load_config(path: Path | None = None) -> Config: """Load configuration from YAML file. Search order: - 1. Explicit path if provided - 2. ./compose-farm.yaml - 3. $XDG_CONFIG_HOME/compose-farm/compose-farm.yaml (defaults to ~/.config) + 1. Explicit path if provided via --config + 2. CF_CONFIG environment variable + 3. ./compose-farm.yaml + 4. $XDG_CONFIG_HOME/compose-farm/compose-farm.yaml (defaults to ~/.config) """ search_paths = [ Path("compose-farm.yaml"), @@ -159,6 +160,8 @@ def load_config(path: Path | None = None) -> Config: if path: config_path = path + elif env_path := os.environ.get("CF_CONFIG"): + config_path = Path(env_path) else: config_path = None for p in search_paths: