#!/usr/bin/env bash # Сборка observer-web / logrotate на сервере IFT (fallback, если runner не тянет Alpine). # Usage: BACK_DIR=/path/to/back build-optional-aux-on-server.sh 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