#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" REGISTRY="${REGISTRY:-ghcr.io/gyj2032-byte}" IMAGE_PREFIX="${IMAGE_PREFIX:-stylist}" PLATFORM="${PLATFORM:-linux/amd64}" NODE_IMAGE="${NODE_IMAGE:-node:20-alpine}" NGINX_IMAGE="${NGINX_IMAGE:-nginx:1.27-alpine}" if [ "$#" -gt 1 ]; then echo "Usage: $0 [tag]" >&2 exit 2 fi if [ "$#" -eq 1 ]; then TAG="$1" else TAG="$(git -C "$ROOT_DIR" rev-parse --short HEAD 2>/dev/null || date +%Y%m%d%H%M%S)" fi BACKEND_IMAGE="$REGISTRY/${IMAGE_PREFIX}-backend" FRONTEND_IMAGE="$REGISTRY/${IMAGE_PREFIX}-frontend" if ! command -v docker >/dev/null 2>&1; then echo "docker is required but was not found in PATH." >&2 exit 1 fi if ! docker buildx version >/dev/null 2>&1; then echo "docker buildx is required but is not available." >&2 exit 1 fi echo "Building and pushing Linux images:" echo " $BACKEND_IMAGE:$TAG" echo " $BACKEND_IMAGE:latest" echo " $FRONTEND_IMAGE:$TAG" echo " $FRONTEND_IMAGE:latest" echo "Platform: $PLATFORM" buildx_build() { if [ -n "${BUILDER:-}" ]; then docker buildx build --builder "$BUILDER" "$@" else docker buildx build "$@" fi } buildx_build \ --platform "$PLATFORM" \ --build-arg NODE_IMAGE="$NODE_IMAGE" \ -f "$ROOT_DIR/docker/backend.Dockerfile" \ -t "$BACKEND_IMAGE:$TAG" \ -t "$BACKEND_IMAGE:latest" \ --push "$ROOT_DIR" buildx_build \ --platform "$PLATFORM" \ --build-arg NODE_IMAGE="$NODE_IMAGE" \ --build-arg NGINX_IMAGE="$NGINX_IMAGE" \ -f "$ROOT_DIR/docker/frontend.Dockerfile" \ -t "$FRONTEND_IMAGE:$TAG" \ -t "$FRONTEND_IMAGE:latest" \ --push "$ROOT_DIR" cat <