134 lines
4.1 KiB
Bash
Executable File
134 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ===========================================================================
|
|
# publish.sh — Push all built images to a container registry
|
|
#
|
|
# Usage:
|
|
# REGISTRY=ghcr.io/myorg ./publish.sh # push all versions
|
|
# REGISTRY=ghcr.io/myorg ./publish.sh 8.4 # push only PHP 8.4 tags
|
|
# REGISTRY=ghcr.io/myorg ./publish.sh 8.3 8.4 # push PHP 8.3 + 8.4
|
|
#
|
|
# Environment:
|
|
# REGISTRY — registry prefix (REQUIRED, e.g. ghcr.io/myorg)
|
|
# IMAGE_NAME — image name (default: docker-laravel)
|
|
# DRY_RUN — set to 1 to print commands without executing
|
|
# ===========================================================================
|
|
set -euo pipefail
|
|
|
|
if [ -z "${REGISTRY:-}" ]; then
|
|
echo "ERROR: REGISTRY is required."
|
|
echo ""
|
|
echo "Usage: REGISTRY=ghcr.io/myorg ./publish.sh [php_versions...]"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " REGISTRY=ghcr.io/myorg ./publish.sh"
|
|
echo " REGISTRY=docker.io/myuser ./publish.sh 8.4"
|
|
exit 1
|
|
fi
|
|
|
|
IMAGE_NAME="${IMAGE_NAME:-docker-laravel}"
|
|
LOCAL="${IMAGE_NAME}"
|
|
REMOTE="${REGISTRY}/${IMAGE_NAME}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# PHP → Laravel version mapping (must match build.sh)
|
|
# ---------------------------------------------------------------------------
|
|
declare -A PHP_LARAVEL_MAP=(
|
|
["7.4"]=""
|
|
["8.0"]="9"
|
|
["8.1"]="9 10"
|
|
["8.2"]="9 10 11 12"
|
|
["8.3"]="10 11 12 13"
|
|
["8.4"]="11 12 13"
|
|
["8.5"]="12 13"
|
|
)
|
|
|
|
declare -A LARAVEL_RECOMMENDED_PHP=(
|
|
["9"]="8.1"
|
|
["10"]="8.3"
|
|
["11"]="8.4"
|
|
["12"]="8.5"
|
|
["13"]="8.5"
|
|
)
|
|
|
|
LATEST_PHP="8.4"
|
|
ALL_PHP_VERSIONS=("7.4" "8.0" "8.1" "8.2" "8.3" "8.4" "8.5")
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Determine which versions to push
|
|
# ---------------------------------------------------------------------------
|
|
if [ $# -gt 0 ]; then
|
|
PUSH_VERSIONS=("$@")
|
|
else
|
|
PUSH_VERSIONS=("${ALL_PHP_VERSIONS[@]}")
|
|
fi
|
|
|
|
for v in "${PUSH_VERSIONS[@]}"; do
|
|
if [[ ! -v "PHP_LARAVEL_MAP[$v]" ]]; then
|
|
echo "ERROR: Unknown PHP version: $v"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Helper
|
|
# ---------------------------------------------------------------------------
|
|
run() {
|
|
if [ "${DRY_RUN:-0}" = "1" ]; then
|
|
echo "[dry-run] $*"
|
|
else
|
|
"$@"
|
|
fi
|
|
}
|
|
|
|
tag_and_push() {
|
|
local LOCAL_TAG="$1"
|
|
local REMOTE_TAG="$2"
|
|
run docker tag "${LOCAL_TAG}" "${REMOTE_TAG}"
|
|
run docker push "${REMOTE_TAG}"
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Push
|
|
# ---------------------------------------------------------------------------
|
|
TOTAL=0
|
|
PUSHED=0
|
|
|
|
for PHP_VERSION in "${PUSH_VERSIONS[@]}"; do
|
|
echo ""
|
|
echo "==========================================="
|
|
echo " Pushing PHP ${PHP_VERSION}"
|
|
echo "==========================================="
|
|
|
|
# Base PHP tag
|
|
tag_and_push "${LOCAL}:php${PHP_VERSION}" "${REMOTE}:php${PHP_VERSION}"
|
|
TOTAL=$((TOTAL + 1)); PUSHED=$((PUSHED + 1))
|
|
|
|
# Laravel combo tags
|
|
LARAVEL_VERSIONS="${PHP_LARAVEL_MAP[$PHP_VERSION]}"
|
|
for LV in $LARAVEL_VERSIONS; do
|
|
tag_and_push "${LOCAL}:php${PHP_VERSION}" "${REMOTE}:laravel${LV}-php${PHP_VERSION}"
|
|
TOTAL=$((TOTAL + 1)); PUSHED=$((PUSHED + 1))
|
|
|
|
# Bare laravelN tag
|
|
if [ "${LARAVEL_RECOMMENDED_PHP[$LV]}" = "$PHP_VERSION" ]; then
|
|
tag_and_push "${LOCAL}:php${PHP_VERSION}" "${REMOTE}:laravel${LV}"
|
|
TOTAL=$((TOTAL + 1)); PUSHED=$((PUSHED + 1))
|
|
fi
|
|
done
|
|
|
|
# latest
|
|
if [ "$PHP_VERSION" = "$LATEST_PHP" ]; then
|
|
tag_and_push "${LOCAL}:php${PHP_VERSION}" "${REMOTE}:latest"
|
|
TOTAL=$((TOTAL + 1)); PUSHED=$((PUSHED + 1))
|
|
fi
|
|
done
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Summary
|
|
# ---------------------------------------------------------------------------
|
|
echo ""
|
|
echo "==========================================="
|
|
echo " Publish complete"
|
|
echo "==========================================="
|
|
echo "Pushed ${PUSHED} tags to ${REGISTRY}/${IMAGE_NAME}"
|