feat!: respect COMPOSE_FILE env and remove docker command
Read COMPOSE_FILE from env and use it if it is set. Default is still docker/local/docker-compose.yaml. BREAKING CHANGE: Removed docker subcommand. Added deprecation notice to compose subcommand.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use super::{Django, Docker, DockerCompose, Postgres};
|
||||
use super::{Django, DockerCompose, Postgres};
|
||||
use clap::{Parser, Subcommand};
|
||||
|
||||
/// A program for interacting with various dockerized applications.
|
||||
@@ -11,12 +11,6 @@ pub struct Ahab {
|
||||
|
||||
#[derive(Debug, Subcommand)]
|
||||
pub enum Commands {
|
||||
/// Docker related subcommands
|
||||
Docker {
|
||||
#[command(subcommand)]
|
||||
command: Docker,
|
||||
},
|
||||
|
||||
/// Docker compose related subcommands
|
||||
Compose {
|
||||
#[command(subcommand)]
|
||||
|
@@ -1,7 +0,0 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
pub enum Docker {
|
||||
/// Stop all containers via `docker stop $(docker ps -q)`
|
||||
StopAll,
|
||||
}
|
@@ -1,11 +1,9 @@
|
||||
mod ahab;
|
||||
mod django;
|
||||
mod docker;
|
||||
mod docker_compose;
|
||||
mod postgres;
|
||||
|
||||
pub use ahab::{Ahab, Commands};
|
||||
pub use django::Django;
|
||||
pub use docker::Docker;
|
||||
pub use docker_compose::DockerCompose;
|
||||
pub use postgres::Postgres;
|
||||
|
@@ -1,6 +1,7 @@
|
||||
use anyhow::{anyhow, Context, Result};
|
||||
use std::{
|
||||
collections::VecDeque,
|
||||
env,
|
||||
ffi::OsStr,
|
||||
fmt::Display,
|
||||
fs::{File, OpenOptions},
|
||||
@@ -27,10 +28,15 @@ impl From<&String> for Args {
|
||||
|
||||
impl From<&[String]> for Args {
|
||||
fn from(value: &[String]) -> Self {
|
||||
Self(Vec::from_iter(value.iter().map(|x| x.to_string())))
|
||||
Self(value.to_vec())
|
||||
}
|
||||
}
|
||||
|
||||
fn get_compose_file() -> Result<String> {
|
||||
let cf = env::var("COMPOSE_FILE")?;
|
||||
Ok(cf)
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct CommandBuilder {
|
||||
args: Vec<String>,
|
||||
@@ -52,7 +58,9 @@ impl CommandBuilder {
|
||||
}
|
||||
|
||||
pub fn docker_compose() -> Self {
|
||||
Self::default().args("docker compose -f docker/local/docker-compose.yaml")
|
||||
let cf =
|
||||
get_compose_file().unwrap_or_else(|_| "docker/local/docker-compose.yaml".to_string());
|
||||
Self::default().args("docker compose -f").args(&cf)
|
||||
}
|
||||
|
||||
pub fn args<T>(mut self, args: T) -> Self
|
||||
@@ -64,7 +72,7 @@ impl CommandBuilder {
|
||||
}
|
||||
|
||||
pub fn build(self) -> Result<Command> {
|
||||
debug_eprintln!("-----\n{self}\n-----");
|
||||
debug_eprintln!("running `{self}`");
|
||||
|
||||
let (first, rest) = self.args.split_first().context("empty args")?;
|
||||
let mut command = Command::new(first);
|
||||
|
30
src/main.rs
30
src/main.rs
@@ -13,21 +13,21 @@ fn main() -> Result<()> {
|
||||
let args = cli::Ahab::parse();
|
||||
|
||||
match args.command {
|
||||
cli::Commands::Docker { command } => match command {
|
||||
cli::Docker::StopAll => scripts::docker::stop_all(),
|
||||
},
|
||||
cli::Commands::Compose { command } => match command {
|
||||
cli::DockerCompose::Bash => scripts::docker_compose::bash(),
|
||||
cli::DockerCompose::Build => scripts::docker_compose::build(),
|
||||
cli::DockerCompose::Down => scripts::docker_compose::down(),
|
||||
cli::DockerCompose::Exec { rest } => scripts::docker_compose::exec(&rest),
|
||||
cli::DockerCompose::Ps => scripts::docker_compose::ps(),
|
||||
cli::DockerCompose::Rebuild => scripts::docker_compose::rebuild(),
|
||||
cli::DockerCompose::Restart => scripts::docker_compose::restart(),
|
||||
cli::DockerCompose::Start => scripts::docker_compose::start(None),
|
||||
cli::DockerCompose::Stop => scripts::docker_compose::stop(),
|
||||
cli::DockerCompose::Up => scripts::docker_compose::up(),
|
||||
},
|
||||
cli::Commands::Compose { command } => {
|
||||
eprintln!("DEPRECATION NOTICE: this is deprecated in favor of docker compose COMPOSE_FILE env");
|
||||
match command {
|
||||
cli::DockerCompose::Bash => scripts::docker_compose::bash(),
|
||||
cli::DockerCompose::Build => scripts::docker_compose::build(),
|
||||
cli::DockerCompose::Down => scripts::docker_compose::down(),
|
||||
cli::DockerCompose::Exec { rest } => scripts::docker_compose::exec(&rest),
|
||||
cli::DockerCompose::Ps => scripts::docker_compose::ps(),
|
||||
cli::DockerCompose::Rebuild => scripts::docker_compose::rebuild(),
|
||||
cli::DockerCompose::Restart => scripts::docker_compose::restart(),
|
||||
cli::DockerCompose::Start => scripts::docker_compose::start(None),
|
||||
cli::DockerCompose::Stop => scripts::docker_compose::stop(),
|
||||
cli::DockerCompose::Up => scripts::docker_compose::up(),
|
||||
}
|
||||
}
|
||||
cli::Commands::Django { command } => match command {
|
||||
cli::Django::MakeCommand { app, name } => scripts::django::make_command(&app, &name),
|
||||
cli::Django::Makemigrations => scripts::django::makemigrations(),
|
||||
|
Reference in New Issue
Block a user