strip docker type — site-publish is static-content only
Removes type: docker handling from action.yaml, scripts (build/deploy/utils/setup), and templates (deployment.yaml.j2, service-docker.yaml.j2). Renamed service-static.yaml.j2 -> service.yaml.j2. If site.yaml has type: docker, parse_site_yaml() now dies with a clear message pointing to action/image-build + action/image-push + action/image-deploy with hand-authored apps-repo manifests. rainsounds.vino.network was the only docker consumer and has already migrated. Drops registry-password input from action.yaml (no longer needed).
This commit is contained in:
+4
-90
@@ -1,9 +1,8 @@
|
||||
"""Deploy phase — S3 sync or docker push, manifest rendering, alias reconcile."""
|
||||
"""Deploy phase — S3 sync, manifest rendering, alias reconcile."""
|
||||
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from urllib.error import HTTPError, URLError
|
||||
@@ -108,62 +107,7 @@ def ensure_bucket_aliases(site_name, aliases, admin_token):
|
||||
raise
|
||||
|
||||
|
||||
def docker_push(cfg):
|
||||
image = cfg["image"]
|
||||
run_number = env("GITHUB_RUN_NUMBER", "0")
|
||||
for tag in [f"{image}:latest", f"{image}:{run_number}"]:
|
||||
run(f"docker push {tag}")
|
||||
|
||||
|
||||
def docker_tag_cleanup(cfg, token):
|
||||
"""Keep the 3 newest numeric tags, delete the rest via Gitea API."""
|
||||
image = cfg["image"]
|
||||
parts = image.split("/")
|
||||
if len(parts) < 3:
|
||||
print(f"Cannot parse image for tag cleanup: {image}")
|
||||
return
|
||||
org = parts[1]
|
||||
pkg_name = parts[2]
|
||||
|
||||
url = f"https://{GITEA_HOST}/api/v1/packages/{org}?type=container"
|
||||
req = Request(url, headers={"Authorization": f"token {token}"})
|
||||
try:
|
||||
with urlopen(req) as resp:
|
||||
packages = json.loads(resp.read())
|
||||
except Exception as e:
|
||||
print(f"Warning: failed to list packages for cleanup: {e}")
|
||||
return
|
||||
|
||||
numeric_versions = []
|
||||
for pkg in packages:
|
||||
if pkg.get("name") == pkg_name:
|
||||
ver = pkg.get("version", "")
|
||||
if ver.isdigit():
|
||||
numeric_versions.append(int(ver))
|
||||
|
||||
numeric_versions.sort()
|
||||
to_delete = numeric_versions[:-3] if len(numeric_versions) > 3 else []
|
||||
|
||||
for ver in to_delete:
|
||||
del_url = f"https://{GITEA_HOST}/api/v1/packages/{org}/container/{pkg_name}/{ver}"
|
||||
print(f" Deleting {pkg_name}:{ver}")
|
||||
req = Request(del_url, method="DELETE", headers={"Authorization": f"token {token}"})
|
||||
try:
|
||||
urlopen(req)
|
||||
except Exception as e:
|
||||
print(f" Warning: failed to delete {pkg_name}:{ver}: {e}")
|
||||
|
||||
if to_delete:
|
||||
print(f" Cleaned up {len(to_delete)} old tags")
|
||||
else:
|
||||
print(" No old tags to clean up")
|
||||
|
||||
|
||||
def docker_cleanup():
|
||||
run("docker system prune --all --force")
|
||||
|
||||
|
||||
def render_site_manifests(site_name, action_dir, app_dir, manifests_dir, cfg, extra=None):
|
||||
def render_site_manifests(site_name, action_dir, app_dir, manifests_dir, cfg):
|
||||
"""Always re-render manifests from current site.yaml. Templates own
|
||||
domain + aliases, so changes propagate without manual edits."""
|
||||
manifests_dir.mkdir(parents=True, exist_ok=True)
|
||||
@@ -173,11 +117,8 @@ def render_site_manifests(site_name, action_dir, app_dir, manifests_dir, cfg, ex
|
||||
"domain": cfg["domain"],
|
||||
"aliases": cfg["aliases"],
|
||||
"namespace": NAMESPACE,
|
||||
"site_type": cfg["type"],
|
||||
}
|
||||
if extra:
|
||||
template_vars.update(extra)
|
||||
render_templates(action_dir, template_vars, app_dir, manifests_dir, cfg["type"])
|
||||
render_templates(action_dir, template_vars, app_dir, manifests_dir)
|
||||
|
||||
|
||||
def deploy_static(site_name, site_dir, action_dir, token, cfg):
|
||||
@@ -193,30 +134,6 @@ def deploy_static(site_name, site_dir, action_dir, token, cfg):
|
||||
commit_and_push(apps_dir, f"Deploy {site_name}")
|
||||
|
||||
|
||||
def deploy_docker(site_name, site_dir, action_dir, token, cfg):
|
||||
docker_push(cfg)
|
||||
|
||||
run_number = env("GITHUB_RUN_NUMBER", "0")
|
||||
image = cfg["image"]
|
||||
apps_dir = clone_apps(token)
|
||||
app_dir = apps_dir / "sjc001" / "websites" / site_name
|
||||
manifests_dir = app_dir / "manifests"
|
||||
|
||||
render_site_manifests(site_name, action_dir, app_dir, manifests_dir, cfg, extra={
|
||||
"image": image,
|
||||
"port": cfg["port"],
|
||||
"health_path": cfg["health_path"],
|
||||
"replicas": cfg["replicas"],
|
||||
})
|
||||
# Pin to this build's tag (kustomize edit appends an `images:` override).
|
||||
run(f"cd {manifests_dir} && kustomize edit set image {image}={image}:{run_number}")
|
||||
|
||||
commit_and_push(apps_dir, f"Deploy {site_name} #{run_number}")
|
||||
|
||||
docker_tag_cleanup(cfg, token)
|
||||
docker_cleanup()
|
||||
|
||||
|
||||
def decommission(site_name, token):
|
||||
"""Remove manifests from apps repo."""
|
||||
user = env("CI_BOT_USER", "ci-bot")
|
||||
@@ -249,7 +166,4 @@ def cmd_deploy():
|
||||
decommission(site_name, token)
|
||||
return
|
||||
|
||||
if cfg["type"] == "docker":
|
||||
deploy_docker(site_name, site_dir, action_dir, token, cfg)
|
||||
else:
|
||||
deploy_static(site_name, site_dir, action_dir, token, cfg)
|
||||
deploy_static(site_name, site_dir, action_dir, token, cfg)
|
||||
|
||||
Reference in New Issue
Block a user