77 lines
2.3 KiB
Bash
77 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
# Сборка observer-web / logrotate на сервере IFT (fallback, если runner не тянет Alpine).
|
|
# Usage: BACK_DIR=/path/to/back build-optional-aux-on-server.sh <registry> <sha-tag> <commit-sha>
|
|
set -euo pipefail
|
|
|
|
REGISTRY="${1:?registry}"
|
|
TAG="${2:?sha-tag}"
|
|
COMMIT="${3:?commit-sha}"
|
|
|
|
git_with_auth() {
|
|
if [[ -n "${REGISTRY_USER:-}" && -n "${REGISTRY_PASSWORD:-}" ]]; then
|
|
local askpass
|
|
askpass="$(mktemp)"
|
|
cat > "${askpass}" <<'EOF'
|
|
#!/bin/sh
|
|
case "$1" in
|
|
*[Pp]assword*) printf '%s\n' "$REGISTRY_PASSWORD" ;;
|
|
*) printf '%s\n' "$REGISTRY_USER" ;;
|
|
esac
|
|
EOF
|
|
chmod +x "${askpass}"
|
|
GIT_TERMINAL_PROMPT=0 GIT_ASKPASS="${askpass}" \
|
|
REGISTRY_USER="${REGISTRY_USER}" REGISTRY_PASSWORD="${REGISTRY_PASSWORD}" \
|
|
"$@"
|
|
rm -f "${askpass}"
|
|
else
|
|
GIT_TERMINAL_PROMPT=0 "$@"
|
|
fi
|
|
}
|
|
|
|
need_build() {
|
|
docker buildx imagetools inspect "${REGISTRY}/$1:${TAG}" >/dev/null 2>&1 && return 1
|
|
docker buildx imagetools inspect "${REGISTRY}/$1:ift" >/dev/null 2>&1 && return 1
|
|
return 0
|
|
}
|
|
|
|
build_one() {
|
|
local name="$1"
|
|
local context="$2"
|
|
local dockerfile="$3"
|
|
|
|
if ! need_build "${name}"; then
|
|
if docker buildx imagetools inspect "${REGISTRY}/${name}:${TAG}" >/dev/null 2>&1; then
|
|
echo "== ${name}: ${TAG} exists, skip"
|
|
else
|
|
echo "== ${name}: promote :ift -> ${TAG}"
|
|
docker buildx imagetools create -t "${REGISTRY}/${name}:${TAG}" "${REGISTRY}/${name}:ift"
|
|
fi
|
|
return 0
|
|
fi
|
|
|
|
echo "== ${name}: build on IFT server"
|
|
bash scripts/retry-docker-build.sh 5 60 -- \
|
|
docker buildx build -f "${dockerfile}" --push \
|
|
-t "${REGISTRY}/${name}:${TAG}" \
|
|
-t "${REGISTRY}/${name}:ift" \
|
|
--provenance=false --sbom=false \
|
|
"${context}" || {
|
|
echo "WARN: ${name}: server build failed, deploy continues without it"
|
|
return 0
|
|
}
|
|
}
|
|
|
|
if [[ -n "${BACK_DIR:-}" ]]; then
|
|
cd "${BACK_DIR}"
|
|
else
|
|
WORKDIR="$(mktemp -d)"
|
|
trap 'rm -rf "${WORKDIR}"' EXIT
|
|
git_with_auth git clone --depth 1 "https://git.sabilin.com/EventHub/EventHubBack.git" "${WORKDIR}/back"
|
|
git_with_auth git -C "${WORKDIR}/back" fetch --depth 1 origin "${COMMIT}"
|
|
git -C "${WORKDIR}/back" checkout "${COMMIT}"
|
|
cd "${WORKDIR}/back"
|
|
fi
|
|
|
|
build_one observer-web . docker/ObserverWeb.Dockerfile
|
|
build_one logrotate docker/logrotate docker/logrotate/Dockerfile
|