62 lines
1.8 KiB
Bash
Executable File
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"
|