mirror of
https://github.com/status-im/status-python-sdk.git
synced 2026-08-27 20:21:07 +00:00
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
import shutil, os, subprocess, sys, time
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
from .logger import Logger
|
|
from . import exceptions
|
|
|
|
def launch_docker_container(commit: Optional[str] = None, wait_seconds: int = 5):
|
|
"""
|
|
Launch the Status Backend Docker container using `docker-compose.yaml`
|
|
|
|
Parameters:
|
|
- `commit` - the commit SHA. If no commit is provided, the latest version is pulled
|
|
- `wait_seconds` - nunmber of seconds to wait before the code resumes. Sleep prevents calling `class Account` faster than launching the docker container. This only happens when the container already exists and it is must be turned on.
|
|
"""
|
|
logger = Logger()
|
|
platform = sys.platform
|
|
is_windows = platform == "win32"
|
|
if not shutil.which("docker"):
|
|
raise exceptions.DockerError("Please install Docker.")
|
|
|
|
logger.info(f"Running Docker on {platform}")
|
|
ref = commit if commit else "develop"
|
|
DOCKER_COMPOSE_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "docker-compose.yaml")
|
|
docker_path = DOCKER_COMPOSE_PATH
|
|
if is_windows:
|
|
p = Path(DOCKER_COMPOSE_PATH)
|
|
drive = p.drive.rstrip(":").lower()
|
|
docker_path = f"/mnt/{drive}/" + "/".join(p.parts[1:])
|
|
|
|
cmd = ["env", f"STATUS_GO_REF={ref}", "docker", "compose", "-f", docker_path, "up", "-d", "--build"]
|
|
|
|
if is_windows:
|
|
if not shutil.which("wsl"):
|
|
raise exceptions.DockerError("Please install wsl - https://learn.microsoft.com/en-us/windows/wsl/install.")
|
|
cmd.insert(0, "wsl")
|
|
|
|
logger.info(f"Running:\n{' '.join(cmd)}")
|
|
result = subprocess.run(
|
|
cmd,
|
|
cwd=os.path.dirname(DOCKER_COMPOSE_PATH),
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
)
|
|
|
|
if result.returncode != 0:
|
|
raise exceptions.DockerError(result.stderr.strip())
|
|
|
|
logger.info(f"Sleeping for {wait_seconds}s")
|
|
time.sleep(wait_seconds)
|