#!/bin/bash set -euo pipefail ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) cd "$ROOT_DIR" if [ -f .env ]; then while IFS= read -r line || [ -n "$line" ]; do # Skip empty lines and comments (leading whitespace ignored). [[ $line =~ ^[[:space:]]*# ]] && continue [[ -z ${line//[[:space:]]/} ]] && continue if [[ $line =~ ^([A-Za-z_][A-Za-z0-9_]*)=(.*)$ ]]; then key="${BASH_REMATCH[1]}" value="${BASH_REMATCH[2]}" # Strip trailing comments and surrounding whitespace. value="${value%%#*}" value="${value%$'\r'}" value="${value#${value%%[![:space:]]*}}" value="${value%${value##*[![:space:]]}}" # Remove simple single or double quotes around the value. if [[ $value =~ ^\".*\"$ || $value =~ ^\'.*\'$ ]]; then value="${value:1:${#value}-2}" fi case "$key" in SPYDER_IMAGE|BUILDX_PLATFORMS|BUILDX_BUILDER_NAME|LOCAL_IMAGE_NAME) export "$key"="$value" ;; esac fi done < .env fi : "${SPYDER_IMAGE:?SPYDER_IMAGE must be set in .env or environment}" PLATFORMS=${BUILDX_PLATFORMS:-linux/amd64,linux/arm64} BUILDER=${BUILDX_BUILDER_NAME:-spyder-buildx} if ! docker buildx inspect "$BUILDER" >/dev/null 2>&1; then docker buildx create --name "$BUILDER" --use else docker buildx use "$BUILDER" fi if [[ -n "${REGISTRY_HOST:-}" && -n "${REGISTRY_USER:-}" && -n "${REGISTRY_TOKEN:-}" ]]; then echo "Logging in to $REGISTRY_HOST for non-interactive push" echo "$REGISTRY_TOKEN" | docker login "$REGISTRY_HOST" --username "$REGISTRY_USER" --password-stdin fi echo "Building multi-arch image for $SPYDER_IMAGE on platforms: $PLATFORMS" docker buildx build \ --platform "$PLATFORMS" \ --tag "$SPYDER_IMAGE" \ --push \ --file Dockerfile \ . echo "Image pushed: $SPYDER_IMAGE"