73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
import subprocess
|
|
import os
|
|
|
|
# Define your images, tags, and Dockerfile paths
|
|
images = ["api-service", "auth-service", "character-service", "database-service", "packet-service", "session-service", "world-service"]
|
|
dockerfile_paths = [
|
|
"../api-service/Dockerfile",
|
|
"../auth-service/Dockerfile",
|
|
"../character-service/Dockerfile",
|
|
"../database-service/Dockerfile",
|
|
"../packet-service/Dockerfile",
|
|
"../session-service/Dockerfile",
|
|
"../world-service/Dockerfile",
|
|
]
|
|
|
|
common_tag = "latest"
|
|
version_tag = "v0.1.1"
|
|
image_tag_prefix = "gitea.azgstudio.com/raven/"
|
|
build_context = "../"
|
|
|
|
def run_command(command):
|
|
"""Run a shell command and handle errors."""
|
|
try:
|
|
subprocess.run(command, check=True)
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error: Command '{' '.join(command)}' failed with exit code {e.returncode}")
|
|
exit(1)
|
|
|
|
|
|
def build_images(images, dockerfile_paths, common_tag, version_tag, image_tag_prefix, build_context):
|
|
"""Build all Docker images."""
|
|
for image, dockerfile_path in zip(images, dockerfile_paths):
|
|
# Add the prefix to the image name
|
|
full_image_name = f"{image_tag_prefix}{image}"
|
|
|
|
# Build the image with both tags
|
|
print(f"Building {full_image_name}:{version_tag} and {full_image_name}:{common_tag} using Dockerfile at {dockerfile_path}...")
|
|
run_command([
|
|
"docker", "build",
|
|
"-t", f"{full_image_name}:{version_tag}",
|
|
"-t", f"{full_image_name}:{common_tag}",
|
|
"-f", dockerfile_path,
|
|
build_context
|
|
])
|
|
|
|
|
|
def push_images(images, common_tag, version_tag, image_tag_prefix):
|
|
"""Push all Docker images."""
|
|
for image in images:
|
|
# Add the prefix to the image name
|
|
full_image_name = f"{image_tag_prefix}{image}"
|
|
|
|
# Push both tags
|
|
print(f"Pushing {full_image_name}:{version_tag}...")
|
|
run_command(["docker", "push", f"{full_image_name}:{version_tag}"])
|
|
|
|
print(f"Pushing {full_image_name}:{common_tag}...")
|
|
run_command(["docker", "push", f"{full_image_name}:{common_tag}"])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
os.chdir(script_dir)
|
|
|
|
# Build all images first
|
|
print("Starting the build phase...")
|
|
build_images(images, dockerfile_paths, common_tag, version_tag, image_tag_prefix, build_context)
|
|
|
|
# Push all images after builds are complete
|
|
print("Starting the push phase...")
|
|
push_images(images, common_tag, version_tag, image_tag_prefix)
|
|
|