Skip to content

Commit 9981f1c

Browse files
committed
support install compose
1 parent 0d84263 commit 9981f1c

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

cli/homl_cli/main.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,62 @@ def check_and_install_docker():
7676
if docker_exists and compose_exists:
7777
return True
7878

79+
if docker_exists and not compose_exists:
80+
click.secho("🔥 Docker Compose (plugin) not found.", fg="yellow")
81+
# Try to install docker compose via local package manager
82+
distro = None
83+
distro_like = None
84+
try:
85+
with open("/etc/os-release") as f:
86+
for line in f:
87+
if line.startswith("ID="):
88+
distro = line.strip().split("=")[1].strip('"')
89+
elif line.startswith("ID_LIKE="):
90+
distro_like = line.strip().split("=")[1].strip('"')
91+
except Exception:
92+
pass
93+
installed = False
94+
if distro in ["ubuntu", "debian"]:
95+
click.echo("Attempting to install docker-compose-plugin via apt...")
96+
try:
97+
subprocess.run(["sudo", "apt-get", "update"], check=True)
98+
subprocess.run(["sudo", "apt-get", "install", "-y", "docker-compose-plugin"], check=True)
99+
# Re-check if compose is now available
100+
result = subprocess.run(["docker", "compose", "version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
101+
if result.returncode == 0:
102+
click.secho("✅ Docker Compose plugin installed successfully.", fg="green")
103+
return True
104+
else:
105+
click.secho("❌ Docker Compose plugin installation failed.", fg="red")
106+
except Exception as e:
107+
click.secho(f"❌ Failed to install docker-compose-plugin: {e}", fg="red")
108+
elif distro in ["fedora", "centos", "rhel", "amzn"] or (distro_like and "fedora" in distro_like):
109+
click.echo("Attempting to install docker-compose-plugin via dnf...")
110+
try:
111+
subprocess.run(["sudo", "dnf", "install", "-y", "docker-compose-plugin"], check=True)
112+
result = subprocess.run(["docker", "compose", "version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
113+
if result.returncode == 0:
114+
click.secho("✅ Docker Compose plugin installed successfully.", fg="green")
115+
return True
116+
else:
117+
click.secho("❌ Docker Compose plugin installation failed.", fg="red")
118+
except Exception as e:
119+
click.secho(f"❌ Failed to install docker-compose-plugin: {e}", fg="red")
120+
elif distro in ["arch", "manjaro"]:
121+
click.echo("Attempting to install docker-compose via pacman...")
122+
try:
123+
subprocess.run(["sudo", "pacman", "-Sy", "docker-compose"], check=True)
124+
result = subprocess.run(["docker", "compose", "version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
125+
if result.returncode == 0:
126+
click.secho("✅ Docker Compose installed successfully.", fg="green")
127+
return True
128+
else:
129+
click.secho("❌ Docker Compose installation failed.", fg="red")
130+
except Exception as e:
131+
click.secho(f"❌ Failed to install docker-compose: {e}", fg="red")
132+
# If not installed, fallback to official script
133+
click.secho("Could not install Docker Compose plugin via package manager.", fg="yellow")
134+
79135
click.secho("🔥 Docker or Docker Compose not found.", fg="yellow")
80136
if click.confirm("May I attempt to install them using the official script? (Requires sudo)"):
81137
try:

0 commit comments

Comments
 (0)