diff --git a/ops/build-image.sh b/ops/build-image.sh index 9278a0b..e4a18e2 100755 --- a/ops/build-image.sh +++ b/ops/build-image.sh @@ -8,13 +8,17 @@ if ! command -v docker >/dev/null 2>&1; then exit 1 fi -IMAGE_NAME=${IMAGE_NAME:-jukebox-maker} +GITEA_REGISTRY="${GITEA_REGISTRY:-git.mchus.pro}" +GITEA_OWNER="${GITEA_OWNER:-reanimator}" +IMAGE_NAME="${IMAGE_NAME:-jukebox-maker}" DEFAULT_TAG=$(git -C "${ROOT_DIR}" rev-parse --short HEAD 2>/dev/null || echo dev) -IMAGE_TAG=${1:-${IMAGE_TAG:-${DEFAULT_TAG}}} +IMAGE_TAG="${1:-${IMAGE_TAG:-${DEFAULT_TAG}}}" -echo "building ${IMAGE_NAME}:${IMAGE_TAG}" +FULL_IMAGE="${GITEA_REGISTRY}/${GITEA_OWNER}/${IMAGE_NAME}" + +echo "building ${FULL_IMAGE}:${IMAGE_TAG}" docker build \ -f "${ROOT_DIR}/Dockerfile" \ - -t "${IMAGE_NAME}:${IMAGE_TAG}" \ - -t "${IMAGE_NAME}:latest" \ + -t "${FULL_IMAGE}:${IMAGE_TAG}" \ + -t "${FULL_IMAGE}:latest" \ "${ROOT_DIR}" diff --git a/ops/push-image.sh b/ops/push-image.sh new file mode 100755 index 0000000..0d004a3 --- /dev/null +++ b/ops/push-image.sh @@ -0,0 +1,75 @@ +#!/bin/sh +# Build a multi-arch Docker image and push it to a Gitea container registry. +# +# Usage: +# ./ops/push-image.sh [TAG] +# +# Environment variables: +# GITEA_REGISTRY – registry host, e.g. git.mchus.pro (default: git.mchus.pro) +# GITEA_OWNER – Gitea user or organisation (default: reanimator) +# IMAGE_NAME – image name (default: jukebox-maker) +# PLATFORMS – comma-separated platform list (default: linux/amd64,linux/arm64) +# PUSH_LATEST – also tag and push :latest (default: true) +# +# Assumes docker is already logged in to GITEA_REGISTRY. +# +# Examples: +# ./ops/push-image.sh +# ./ops/push-image.sh v1.0 + +set -eu + +ROOT_DIR=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd) + +die() { echo "error: $*" >&2; exit 1; } + +command -v docker >/dev/null 2>&1 || die "docker not found in PATH" +command -v git >/dev/null 2>&1 || die "git not found in PATH" +docker buildx version >/dev/null 2>&1 || die "docker buildx not available" + +GITEA_REGISTRY="${GITEA_REGISTRY:-git.mchus.pro}" +GITEA_OWNER="${GITEA_OWNER:-reanimator}" +IMAGE_NAME="${IMAGE_NAME:-jukebox-maker}" +PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}" +PUSH_LATEST="${PUSH_LATEST:-true}" + +DEFAULT_TAG=$(git -C "${ROOT_DIR}" rev-parse --short HEAD 2>/dev/null || echo dev) +IMAGE_TAG="${1:-${IMAGE_TAG:-${DEFAULT_TAG}}}" + +FULL_IMAGE="${GITEA_REGISTRY}/${GITEA_OWNER}/${IMAGE_NAME}" + +echo "registry : ${GITEA_REGISTRY}" +echo "image : ${FULL_IMAGE}" +echo "tag : ${IMAGE_TAG}" +echo "platforms: ${PLATFORMS}" + +BUILDER_NAME="jukebox-multiarch" +if ! docker buildx inspect "${BUILDER_NAME}" >/dev/null 2>&1; then + echo "creating buildx builder: ${BUILDER_NAME}" + docker buildx create \ + --name "${BUILDER_NAME}" \ + --driver docker-container \ + --bootstrap +fi +docker buildx use "${BUILDER_NAME}" + +TAGS="-t ${FULL_IMAGE}:${IMAGE_TAG}" +if [ "${PUSH_LATEST}" = "true" ]; then + TAGS="${TAGS} -t ${FULL_IMAGE}:latest" +fi + +echo "building and pushing..." +# shellcheck disable=SC2086 +docker buildx build \ + --platform "${PLATFORMS}" \ + --file "${ROOT_DIR}/Dockerfile" \ + ${TAGS} \ + --push \ + "${ROOT_DIR}" + +echo "" +echo "pushed:" +echo " ${FULL_IMAGE}:${IMAGE_TAG}" +if [ "${PUSH_LATEST}" = "true" ]; then + echo " ${FULL_IMAGE}:latest" +fi