From 836bbaac08a991803d6130f202bb2310700b677d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Mon, 7 Sep 2026 12:01:26 +0000 Subject: [PATCH] feat: let docker compose find its own file --- README.md | 12 +++++++++++- src/command_builder.rs | 10 +--------- src/scripts/docker_compose.rs | 7 ------- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 0f71077..59708f9 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,17 @@ SHELL_COMPLETIONS_DIR_FISH=~/.config/fish/completions \ `SHELL_COMPLETIONS_DIR` writes every shell into one directory instead. +## the compose file + +`ahab` does not pass `-f`. docker compose finds the file itself, so set +docker's own `COMPOSE_FILE` when it is not in the working directory, including +its `base.yaml:override.yaml` form. A project's `.env` is a good place for it, +since docker reads that too: + +``` +COMPOSE_FILE=docker/docker-compose.yaml +``` + ## compose Wrappers around the matching `docker compose` call, plus `exec` and `bash` @@ -89,7 +100,6 @@ from the git `origin` remote. Currently `ahab` respects the following environment variables. -- `COMPOSE_FILE`: control which docker-compose file is used - defaults to `docker/local/docker-compose.yaml` - `AHAB_DJANGO_CONTAINER`: control which compose service is used for sending django commands - defaults to `django` - `AHAB_POSTGRES_CONTAINER`: control which compose service is used for sending postgres commands - defaults to `db` - `AHAB_LINK_ROOT`: root of the out-of-repo store `ahab link` moves paths into - defaults to `${XDG_DATA_HOME:-$HOME/.local/share}/ahab` diff --git a/src/command_builder.rs b/src/command_builder.rs index 4381fa3..e57697d 100644 --- a/src/command_builder.rs +++ b/src/command_builder.rs @@ -1,6 +1,5 @@ use anyhow::{Context, Result}; use std::{ - env, fmt::Display, process::{Child, Command, Stdio}, }; @@ -27,11 +26,6 @@ impl From<&[String]> for Args { } } -fn get_compose_file() -> Result { - let cf = env::var("COMPOSE_FILE")?; - Ok(cf) -} - #[derive(Default)] pub struct CommandBuilder { args: Vec, @@ -49,9 +43,7 @@ impl CommandBuilder { } pub fn docker_compose() -> Self { - let cf = - get_compose_file().unwrap_or_else(|_| "docker/local/docker-compose.yaml".to_string()); - Self::default().args("docker compose -f").args(&cf) + Self::default().args("docker compose") } pub fn args(mut self, args: T) -> Self diff --git a/src/scripts/docker_compose.rs b/src/scripts/docker_compose.rs index c5d403f..ddff849 100644 --- a/src/scripts/docker_compose.rs +++ b/src/scripts/docker_compose.rs @@ -24,13 +24,6 @@ pub fn ps() -> Result<()> { CommandBuilder::docker_compose().args("ps").exec() } -/// Start containers via `docker compose start`. Optionally pass containers to be started. -/// ``` -/// # use ahab::scripts::docker_compose::start; -/// start(None); -/// ``` -/// is roughly the same as -/// `docker compose --env-file ./.env -f docker/local/docker-compose.yaml up start` pub fn start(containers: Option<&str>) -> Result<()> { let args = format!("start {}", containers.unwrap_or("")); CommandBuilder::docker_compose().args(&args).exec()