Introduced Docker setup, including `docker-compose.yml`, `dockerfile.server`, and related Python helper scripts (`image-create.py`, `image-push.py`, `publish-project.py`, `publish-aio.py`) for building, managing, and deploying Docker images. Updated `.gitignore` to exclude published files, and renamed a field label in the Blazor component for better clarity.
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
import subprocess
|
|
from datetime import datetime
|
|
|
|
def image_exists_on_server(full_image_tag):
|
|
"""
|
|
Check if a Docker image exists on the remote server.
|
|
Uses 'docker manifest inspect' which returns 0 if the image is found.
|
|
Debug output is printed for inspection.
|
|
"""
|
|
try:
|
|
subprocess.run(
|
|
["docker", "manifest", "inspect", full_image_tag],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
check=True
|
|
)
|
|
print(f"[DEBUG] Found image on server: {full_image_tag}")
|
|
return True
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"[DEBUG] Image not found on server: {full_image_tag}. Error: {e.stderr.strip()}")
|
|
return False
|
|
|
|
def get_date_tag(base_tag, today):
|
|
"""
|
|
Given the base image tag (e.g. 'ghcr.io/troogs/fs-onboarding/server')
|
|
and today's date, find the first available tag in the format YYYYMMDD-i
|
|
that is not already present on the remote server.
|
|
"""
|
|
i = 1
|
|
while True:
|
|
date_tag = f"{today}-{i}"
|
|
full_tag = f"{base_tag}:{date_tag}"
|
|
print(f"[DEBUG] Checking tag {date_tag}: {full_tag}")
|
|
|
|
if not image_exists_on_server(full_tag):
|
|
print(f"[DEBUG] Tag {date_tag} is available for use.")
|
|
return date_tag
|
|
else:
|
|
print(f"[DEBUG] Tag {date_tag} is already in use. Incrementing index.")
|
|
i += 1
|
|
|
|
def main():
|
|
# Get today's date in YYYYMMDD format.
|
|
today = datetime.now().strftime("%Y%m%d")
|
|
print(f"Using date tag base: {today}")
|
|
|
|
base_image_tag = "ghcr.io/troogs/fs-onboarding/server"
|
|
date_tag = get_date_tag(base_image_tag, today)
|
|
print(f"Common date tag determined: {date_tag}")
|
|
|
|
# Build command using the common date tag for the server image.
|
|
command = (
|
|
f"docker build -f dockerfile.server "
|
|
f"-t {base_image_tag}:latest "
|
|
f"-t {base_image_tag}:{date_tag} ..\\"
|
|
)
|
|
print(f"Executing: {command}")
|
|
subprocess.run(command, shell=True, check=True)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|