| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #!/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 <<EOF
- Pushed:
- $BACKEND_IMAGE:$TAG
- $BACKEND_IMAGE:latest
- $FRONTEND_IMAGE:$TAG
- $FRONTEND_IMAGE:latest
- EOF
|