#!/bin/bash # Build bastion container image (multi-arch) and push to Gitea container registry set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" cd "$PROJECT_ROOT" # Load .env for GITEA_TOKEN if [ -f .env ]; then set -a; source .env; set +a fi # ── Argument parsing ─────────────────────────────────────────────── PUSH=false PLATFORMS="linux/amd64,linux/arm64" usage() { cat < Building bastion image" echo " Tag: $TAG" echo " Platforms: $PLATFORMS" echo " Registry: $FULL_IMAGE" # ── Build multi-arch manifest ──────────────────────────────────── MANIFEST="lab-bastion:$TAG" # Remove existing manifest/image with the same tag podman manifest rm "$MANIFEST" 2>/dev/null || true podman rmi "$MANIFEST" 2>/dev/null || true echo "==> Building for platforms: $PLATFORMS..." podman build \ --platform "$PLATFORMS" \ --manifest "$MANIFEST" \ -f Dockerfile.bastion \ . echo "==> Build complete. Manifest:" podman manifest inspect "$MANIFEST" | grep -E '"(architecture|os)"' # ── Push ───────────────────────────────────────────────────────── if [ "$PUSH" = true ]; then if [ -z "$GITEA_TOKEN" ]; then # Try reading from ~/.gitea-token if [ -f "$HOME/.gitea-token" ]; then GITEA_TOKEN="$(cat "$HOME/.gitea-token")" else echo "ERROR: GITEA_TOKEN not set and ~/.gitea-token not found" exit 1 fi fi # Use --tls-verify=false for plain HTTP registries (e.g. 10.0.0.194:3012) TLS_FLAG="" if [[ "$REGISTRY" =~ ^[0-9] ]] || [[ "$REGISTRY" =~ ^localhost ]]; then TLS_FLAG="--tls-verify=false" fi echo "==> Logging in to $REGISTRY..." podman login $TLS_FLAG -u michal -p "$GITEA_TOKEN" "$REGISTRY" echo "==> Pushing $FULL_IMAGE:$TAG..." podman manifest push --all $TLS_FLAG "$MANIFEST" "docker://$FULL_IMAGE:$TAG" # Also tag as :latest if not already if [ "$TAG" != "latest" ]; then echo "==> Also pushing as :latest..." podman manifest push --all $TLS_FLAG "$MANIFEST" "docker://$FULL_IMAGE:latest" fi # Link package to repository if script exists if [ -f "$SCRIPT_DIR/link-package.sh" ]; then source "$SCRIPT_DIR/link-package.sh" link_package "container" "bastion" fi echo "==> Pushed successfully!" else echo "==> Skipping push (use --push to push to registry)" fi echo "==> Done!" echo " Image: $FULL_IMAGE:$TAG" echo " Platforms: $PLATFORMS"