Add cross-arch buildscript
This commit is contained in:
56
build-and-push.sh
Executable file
56
build-and-push.sh
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/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
|
||||
|
||||
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"
|
||||
Reference in New Issue
Block a user