#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
usage() {
cat <<'EOF'
Usage: scripts/build-docker.sh
or: scripts/build.sh docker
Builds the RBS image from deployment/docker/dockerfile.
With Docker: requires Buildx (`docker buildx version`). With Podman: uses `podman build`.
Environment:
VERSION Image tag (default: latest)
REGISTRY Image prefix (default: globaltrustauthority-rbs), image: REGISTRY/rbs:VERSION
CONTAINER_ENGINE CLI to use: docker or podman (default: docker if on PATH, else podman)
SOURCE_URL Optional OCI label org.opencontainers.image.source (e.g. repository URL)
Example:
VERSION=1.2.3 REGISTRY=myrepo scripts/build-docker.sh
CONTAINER_ENGINE=podman scripts/build-docker.sh
EOF
}
if [[ "${1:-}" == "-h" ]] || [[ "${1:-}" == "--help" ]]; then
usage
exit 0
fi
source "$SCRIPT_DIR/lib/build-deps.sh"
cd "$PROJECT_ROOT"
VERSION=${VERSION:-latest}
REGISTRY=${REGISTRY:-globaltrustauthority-rbs}
CONTAINER_CLI="${CONTAINER_ENGINE:-}"
if [[ -z "$CONTAINER_CLI" ]]; then
if command -v docker >/dev/null 2>&1; then
CONTAINER_CLI=docker
elif command -v podman >/dev/null 2>&1; then
CONTAINER_CLI=podman
else
ensure_docker_cli
CONTAINER_CLI=docker
fi
elif ! command -v "$CONTAINER_CLI" >/dev/null 2>&1; then
echo "error: CONTAINER_ENGINE=$CONTAINER_CLI is not on PATH." >&2
exit 1
fi
echo "Building RBS OCI image for version $VERSION (engine=$CONTAINER_CLI)..."
oci_label_args=()
if [[ -n "${SOURCE_URL:-}" ]]; then
oci_label_args+=(--label "org.opencontainers.image.source=${SOURCE_URL}")
fi
oci_label_args+=(--label "org.opencontainers.image.version=${VERSION}")
if [[ -z "${SOURCE_URL:-}" ]] && command -v git >/dev/null 2>&1; then
_git_remote_origin_url="$(git -C "$PROJECT_ROOT" config --get remote.origin.url 2>/dev/null || true)"
if [[ -n "$_git_remote_origin_url" ]]; then
oci_label_args+=(--label "org.opencontainers.image.source=${_git_remote_origin_url}")
fi
fi
oci_label_args+=(--label "org.opencontainers.image.title=rbs")
oci_label_args+=(--label "org.opencontainers.image.description=Global Trust Authority Resource Broker Service")
if [[ "$CONTAINER_CLI" == "docker" ]]; then
if ! docker buildx version >/dev/null 2>&1; then
echo "error: docker buildx is required (legacy \`docker build\` is not used). Install Buildx: https://docs.docker.com/build/buildx/install/" >&2
exit 1
fi
docker buildx build --load -f deployment/docker/dockerfile "${oci_label_args[@]}" -t "$REGISTRY/rbs:$VERSION" .
else
"$CONTAINER_CLI" build -f deployment/docker/dockerfile "${oci_label_args[@]}" -t "$REGISTRY/rbs:$VERSION" .
fi
echo "OCI image built successfully!"
echo "Image: $REGISTRY/rbs:$VERSION"
echo ""
echo "Note: RBC and tools are not containerized, use RPM deployment instead."