Publish erlang-builder and erlang-runtime as :latest, use them in prod and API test builds, auto-collect NIF libs, and sync CI to pull/push bases before eventhub build. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
# Erlang builder + runtime в registry (git.sabilin.com/eventhub/*:latest).
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/build-erlang-base-images.sh # pull latest или собрать локально
|
||||
# ./scripts/build-erlang-base-images.sh --push # + push :latest в registry
|
||||
# ./scripts/build-erlang-base-images.sh --force-build # пересобрать без pull
|
||||
set -euo pipefail
|
||||
|
||||
PUSH=0
|
||||
FORCE=0
|
||||
for arg in "$@"; do
|
||||
case "${arg}" in
|
||||
--push) PUSH=1 ;;
|
||||
--force-build) FORCE=1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
REGISTRY="${REGISTRY:-git.sabilin.com/eventhub}"
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
BUILDER="${REGISTRY}/erlang-builder:latest"
|
||||
RUNTIME="${REGISTRY}/erlang-runtime:latest"
|
||||
|
||||
check_alpine_sync() {
|
||||
local erlang_ver runtime_ver erlang_mm
|
||||
erlang_ver="$(docker run --rm erlang:28-alpine cat /etc/alpine-release)"
|
||||
runtime_ver="$(grep '^ARG ALPINE_VERSION=' "${ROOT}/docker/erlang/Dockerfile.runtime" | cut -d= -f2)"
|
||||
erlang_mm="$(echo "${erlang_ver}" | cut -d. -f1-2)"
|
||||
if [[ "${erlang_mm}" != "${runtime_ver}" ]]; then
|
||||
echo "ERROR: erlang:28-alpine uses Alpine ${erlang_ver}, runtime pins ${runtime_ver}"
|
||||
echo " Обновите ALPINE_VERSION в docker/erlang/Dockerfile.runtime"
|
||||
exit 1
|
||||
fi
|
||||
echo "Alpine sync OK: ${erlang_mm} (erlang image ${erlang_ver})"
|
||||
}
|
||||
|
||||
build_one() {
|
||||
local file="$1"
|
||||
local tag="$2"
|
||||
local extra=()
|
||||
if docker image inspect "${tag}" >/dev/null 2>&1; then
|
||||
extra+=(--cache-from "${tag}")
|
||||
fi
|
||||
bash "${ROOT}/scripts/retry-docker-build.sh" 5 60 -- \
|
||||
docker buildx build \
|
||||
--network=host \
|
||||
--pull \
|
||||
"${extra[@]}" \
|
||||
--file "${file}" \
|
||||
--tag "${tag}" \
|
||||
--load \
|
||||
--provenance=false \
|
||||
--sbom=false \
|
||||
"${ROOT}"
|
||||
}
|
||||
|
||||
try_pull_bases() {
|
||||
docker pull "${BUILDER}" >/dev/null 2>&1 && docker pull "${RUNTIME}" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
need_build=1
|
||||
if (( FORCE == 0 )) && try_pull_bases; then
|
||||
echo "Using erlang base images from registry:"
|
||||
echo " ${BUILDER}"
|
||||
echo " ${RUNTIME}"
|
||||
need_build=0
|
||||
fi
|
||||
|
||||
if (( need_build )); then
|
||||
echo "Building erlang base images locally..."
|
||||
check_alpine_sync
|
||||
build_one "${ROOT}/docker/erlang/Dockerfile.builder" "${BUILDER}"
|
||||
build_one "${ROOT}/docker/erlang/Dockerfile.runtime" "${RUNTIME}"
|
||||
echo "=== erlang base images built ==="
|
||||
echo " ${BUILDER}"
|
||||
echo " ${RUNTIME}"
|
||||
fi
|
||||
|
||||
if (( PUSH )); then
|
||||
bash "${ROOT}/scripts/retry-docker-build.sh" 5 30 -- docker push "${BUILDER}"
|
||||
bash "${ROOT}/scripts/retry-docker-build.sh" 5 30 -- docker push "${RUNTIME}"
|
||||
echo "Pushed ${BUILDER} and ${RUNTIME}"
|
||||
fi
|
||||
Reference in New Issue
Block a user