#!/bin/bash # ============================================================================= # Prepara imagens de benchmark em formato GZIP e eStargz # ============================================================================= # # Constrói a MESMA imagem em dois formatos de compressão e envia ao registry. # Isso garante que a única variável no benchmark é o formato de compressão. # # Pré-requisitos: # - docker com buildx # - Acesso ao registry (docker login) # - Organização "bench" criada no Gitea # # Uso: # export REGISTRY=gitea.kube.quest # ./prepare-images.sh # # ============================================================================= set -euo pipefail REGISTRY="${REGISTRY:-gitea.kube.quest}" ORG="bench" PLATFORM="linux/arm64" # Hetzner CAX = ARM64 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[OK]${NC} $1"; } log_error() { echo -e "${RED}[ERRO]${NC} $1"; } echo "" echo -e "${CYAN}════════════════════════════════════════════════════${NC}" echo -e "${CYAN} Preparando imagens de benchmark (gzip + estargz)${NC}" echo -e "${CYAN}════════════════════════════════════════════════════${NC}" echo "" echo " Registry: ${REGISTRY}" echo " Org: ${ORG}" echo " Platform: ${PLATFORM}" echo "" # ───────────────────────────────────────────────────────────── # Pré-requisitos # ───────────────────────────────────────────────────────────── if ! command -v docker &>/dev/null; then log_error "docker não encontrado" exit 1 fi log_info "Login no registry..." docker login "$REGISTRY" || { log_error "Falha no login"; exit 1; } # Criar builder multi-platform se necessário BUILDER_NAME="bench-builder" if ! docker buildx inspect "$BUILDER_NAME" &>/dev/null; then log_info "Criando builder multi-platform..." docker buildx create --name "$BUILDER_NAME" --driver docker-container fi docker buildx use "$BUILDER_NAME" # ───────────────────────────────────────────────────────────── # Imagens a construir # ───────────────────────────────────────────────────────────── # Cada entrada: nome_local:imagem_base:descrição IMAGES=( "nginx:nginx:1.27-alpine:Web server (~45MB comprimido)" "node:node:22-alpine:Runtime Node.js (~130MB comprimido)" "postgres:postgres:17-alpine:Banco de dados (~100MB comprimido)" ) TMPDIR=$(mktemp -d) trap "rm -rf $TMPDIR" EXIT for entry in "${IMAGES[@]}"; do IFS=':' read -r name base_image base_tag description <<< "$entry" base="${base_image}:${base_tag}" echo "" echo -e "${CYAN}────────────────────────────────────────────${NC}" echo -e " ${name} — ${description}" echo -e " Base: ${base}" echo -e "${CYAN}────────────────────────────────────────────${NC}" # Dockerfile idêntico para ambos os formatos cat > "${TMPDIR}/Dockerfile" <