#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" IMAGE_TAG="${IMAGE_TAG:-ours-rp-runtime-arm64:dev}" IMAGE_TAR="${IMAGE_TAR:-}" OUT_DIR="${OUT_DIR:-$REPO_ROOT/target/arm64-installer}" PACKAGE_PREFIX="${PACKAGE_PREFIX:-ours-rp-arm64-installer}" TEMPLATE_DIR="${TEMPLATE_DIR:-$REPO_ROOT/deploy/arm64-installer}" usage() { cat <<'USAGE' Usage: scripts/docker/build_arm64_installer_package.sh [options] Options: --image Runtime image tag recorded in package manifest. --image-tar Existing docker save tar/tar.gz to include. --out-dir Output directory. --prefix Package directory/tar prefix. -h, --help Show help. If --image-tar is omitted, the script uses the newest target/arm64-docker/*.tar.gz file. USAGE } while [[ $# -gt 0 ]]; do case "$1" in --image) IMAGE_TAG="$2" shift 2 ;; --image-tar) IMAGE_TAR="$2" shift 2 ;; --out-dir) OUT_DIR="$2" shift 2 ;; --prefix) PACKAGE_PREFIX="$2" shift 2 ;; -h|--help) usage exit 0 ;; *) echo "unknown option: $1" >&2 usage >&2 exit 2 ;; esac done [[ -d "$TEMPLATE_DIR" ]] || { echo "missing template dir: $TEMPLATE_DIR" >&2 exit 2 } if [[ -z "$IMAGE_TAR" ]]; then IMAGE_TAR="$(find "$REPO_ROOT/target/arm64-docker" -maxdepth 1 -type f \( -name '*.tar.gz' -o -name '*.tar' \) -printf '%T@ %p\n' 2>/dev/null | sort -nr | awk 'NR==1 {print $2}')" fi [[ -n "$IMAGE_TAR" && -f "$IMAGE_TAR" ]] || { cat >&2 </dev/null || echo unknown)" timestamp="$(date -u +%Y%m%dT%H%M%SZ)" package_name="${PACKAGE_PREFIX}-${timestamp}-${commit}" stage="$OUT_DIR/$package_name" tar_path="$OUT_DIR/$package_name.tar.gz" rm -rf "$stage" mkdir -p "$stage/images" rsync -a --delete "$TEMPLATE_DIR"/ "$stage"/ cp "$IMAGE_TAR" "$stage/images/" if [[ -f "$stage/.env.example" ]]; then tmp_env="$stage/.env.example.tmp" awk -v image="$IMAGE_TAG" ' BEGIN { done=0 } /^RPKI_IMAGE=/ { print "RPKI_IMAGE=" image; done=1; next } { print } END { if (!done) print "RPKI_IMAGE=" image } ' "$stage/.env.example" > "$tmp_env" mv "$tmp_env" "$stage/.env.example" fi cat > "$stage/PACKAGE-MANIFEST.env" </dev/null | wc -l | tr -d ' ') image_tag=$IMAGE_TAG image_tar=$(basename "$IMAGE_TAR") image_tar_size_bytes=$(wc -c < "$IMAGE_TAR") target_platform=linux/arm64 EOF chmod +x "$stage"/*.sh "$stage/scripts"/*.sh tar -C "$OUT_DIR" -czf "$tar_path" "$package_name" { echo "package=$tar_path" echo "package_dir=$stage" echo "package_size_bytes=$(wc -c < "$tar_path")" echo "manifest=$stage/PACKAGE-MANIFEST.env" } > "$OUT_DIR/$package_name.summary.env" echo "package built: $tar_path"