69 lines
1.9 KiB
Bash
69 lines
1.9 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
#
|
||
|
|
# sync-server-image.sh — build or push the mtgc sync server's container image.
|
||
|
|
#
|
||
|
|
# The image is tagged ${DOCKER_REGISTRY}/mtgc/sync-server:${IMAGE_TAG}.
|
||
|
|
#
|
||
|
|
# Usage:
|
||
|
|
# DOCKER_REGISTRY=registry.example.com ./scripts/sync-server-image.sh build
|
||
|
|
# DOCKER_REGISTRY=registry.example.com ./scripts/sync-server-image.sh push
|
||
|
|
#
|
||
|
|
# Or through npm: `npm run sync-server:build` / `npm run sync-server:push`.
|
||
|
|
#
|
||
|
|
# Environment:
|
||
|
|
# DOCKER_REGISTRY (required) registry host, optionally with a namespace path
|
||
|
|
# IMAGE_TAG tag to build/push (default: latest)
|
||
|
|
# CONTAINER_ENGINE docker or podman (default: docker if installed, else podman)
|
||
|
|
#
|
||
|
|
# `push` pushes what `build` produced; it doesn't rebuild. Log in to the
|
||
|
|
# registry first (`docker login "$DOCKER_REGISTRY"`).
|
||
|
|
#
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
usage() {
|
||
|
|
sed -n '3,20p' "$0" | sed 's/^# \{0,1\}//'
|
||
|
|
exit "${1:-0}"
|
||
|
|
}
|
||
|
|
|
||
|
|
[ $# -eq 1 ] || usage 1
|
||
|
|
case "$1" in
|
||
|
|
build | push) action="$1" ;;
|
||
|
|
-h | --help) usage ;;
|
||
|
|
*) usage 1 ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
if [ -z "${DOCKER_REGISTRY:-}" ]; then
|
||
|
|
echo "sync-server-image: set DOCKER_REGISTRY (e.g. registry.example.com)" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
engine="${CONTAINER_ENGINE:-}"
|
||
|
|
if [ -z "$engine" ]; then
|
||
|
|
if command -v docker >/dev/null 2>&1; then
|
||
|
|
engine=docker
|
||
|
|
elif command -v podman >/dev/null 2>&1; then
|
||
|
|
engine=podman
|
||
|
|
else
|
||
|
|
echo "sync-server-image: neither docker nor podman is installed" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
image="${DOCKER_REGISTRY%/}/mtgc/sync-server:${IMAGE_TAG:-latest}"
|
||
|
|
|
||
|
|
# The Dockerfile builds from the workspace root, so run from there whatever
|
||
|
|
# directory this was invoked in.
|
||
|
|
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
|
cd "$repo_root"
|
||
|
|
|
||
|
|
case "$action" in
|
||
|
|
build)
|
||
|
|
echo "==> building $image"
|
||
|
|
"$engine" build -f crates/mtgc-server/Dockerfile -t "$image" .
|
||
|
|
;;
|
||
|
|
push)
|
||
|
|
echo "==> pushing $image"
|
||
|
|
"$engine" push "$image"
|
||
|
|
;;
|
||
|
|
esac
|