feat: let docker compose find its own file

This commit is contained in:
2026-09-07 12:01:26 +00:00
parent 7d71dd054c
commit 836bbaac08
3 changed files with 12 additions and 17 deletions

View File

@@ -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`

View File

@@ -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<String> {
let cf = env::var("COMPOSE_FILE")?;
Ok(cf)
}
#[derive(Default)]
pub struct CommandBuilder {
args: Vec<String>,
@@ -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<T>(mut self, args: T) -> Self

View File

@@ -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()