Files
spyder-desktop-docker/build-and-push.sh
2025-10-13 21:40:13 +02:00

62 lines
1.8 KiB
Bash
Executable File

#!/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"