Files
metabuilder/deployment/cli/build_base.py
johndoe6345789 03d07635a2 feat(deployment): add modular Python CLI, fix node-deps registry routing, bump to Node 24
- Dockerfile.node-deps: upgrade FROM node:22 to node:24
- Dockerfile.node-deps: rewrite main registry= line to Nexus when detected
  (was only rewriting scoped @esbuild-kit registry, leaving registry.npmjs.org
  unreachable inside Docker)
- Dockerfile.node-deps: fix sed ordering so cleanup of old auth lines runs
  before registry rewrite (prevents new registry= line from being deleted)
- Add deployment/cli/ modular Python CLI powered by JSON config, replacing
  12 shell scripts (build-base-images.sh, build-apps.sh, deploy.sh,
  start-stack.sh, release.sh, nexus-init.sh, nexus-ci-init.sh,
  push-to-nexus.sh, populate-nexus.sh, publish-npm-patches.sh,
  build-testcontainers.sh, artifactory-init.sh)
- Bump rocksdict 0.3.23 -> 0.3.29 (old version removed from PyPI)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 01:13:47 +00:00

58 lines
1.9 KiB
Python

"""Build base Docker images (apt, node-deps, pip-deps, conan-deps, android-sdk, devcontainer)."""
import argparse
from cli.helpers import (
BASE_DIR, PROJECT_ROOT, GREEN, NC,
build_with_retry, docker_image_exists, docker_image_size,
log_ok, log_warn, log_err,
)
def run(args: argparse.Namespace, config: dict) -> int:
defs = config["definitions"]
build_order = defs["base_build_order"]
base_images = defs["base_images"]
targets = args.images if args.images else list(build_order)
for t in targets:
if t not in base_images:
log_err(f"Unknown base image: {t}")
print(f"Available: {', '.join(build_order)}")
return 1
print(f"\nMetaBuilder Base Image Builder")
print(f"Building: {' '.join(targets)}\n")
failed = []
for name in build_order:
if name not in targets:
continue
img = base_images[name]
tag = img["tag"]
if not args.force and docker_image_exists(tag):
log_ok(f"Skipping {name}{tag} already exists (use --force to rebuild)")
continue
context = str(BASE_DIR) if img.get("context") == "base-images" else str(PROJECT_ROOT)
dockerfile = str(BASE_DIR / img["dockerfile"])
if not build_with_retry(tag, dockerfile, context):
failed.append(name)
log_warn("Continuing with remaining images...")
print()
if not failed:
print(f"{GREEN}All base images built successfully!{NC}\n")
for name in targets:
tag = base_images[name]["tag"]
if docker_image_exists(tag):
print(f" {GREEN}{NC} {tag} ({docker_image_size(tag)})")
print(f"\nNow run: python3 deployment.py build apps")
return 0
log_err(f"Some images failed: {' '.join(failed)}")
print(f"Re-run: python3 deployment.py build base {' '.join(failed)}")
return 1