utils/tasks/docker-run.py (50 lines of code) (raw):

#!/usr/bin/env python3 import argparse import subprocess import os import platform import sys def get_args(): parser = argparse.ArgumentParser(description="Run the local docker image.") parser.add_argument( "--volume", action="append", help="Specify additional volume(s) to mount in the Docker container.", metavar="VOLUME", ) parser.add_argument( "--run-as-user", action="store_true", help="Run the Docker container as the current user's UID and GID.", ) args, other_args = parser.parse_known_args() args.other_args = other_args return args def main(): args = get_args() docker_command = [ "docker", "run", "--interactive", "--tty", "--rm", "--volume", f"{os.getcwd()}:/builds/worker/checkouts", "--workdir", "/builds/worker/checkouts", "--expose", "8000", # Expose the mkdocs connection ] # fmt: skip # Export the host operating system as an environment variable within the container. host_os = platform.system() docker_command.extend(["--env", f"HOST_OS={host_os}"]) # Add additional volumes if provided if args.volume: for volume in args.volume: docker_command.extend(["--volume", volume]) # Run Docker with the current user's UID and GID if --run-as-user is specified if args.run_as_user: uid = os.getuid() gid = os.getgid() docker_command.extend(["--user", f"{uid}:{gid}"]) # Specify the Docker image docker_command.append("translations-local") # Append any additional args if args.other_args: docker_command.extend(args.other_args) print("Executing command:", " ".join(docker_command)) result = subprocess.run(docker_command, check=False) sys.exit(result.returncode) if __name__ == "__main__": main()