#!/usr/bin/env bash set -euo pipefail SCRIPT_VERSION="1.1.0" # ================================================ # FACTUGES SYNC - Docker Build Script # ----------------------------------------------- # Uso: # ./build.sh [--load] # ================================================ # ---------- 1. Validación ---------- if [[ $# -eq 0 || "$1" == --* ]]; then echo "❌ ERROR: Falta el parámetro " echo "Uso: ./build.sh [--load]" exit 1 fi COMPANY="$1" LOAD=false [[ "${2:-}" == "--load" ]] && LOAD=true # ---------- 2. Directorios ---------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(realpath "${SCRIPT_DIR}/..")" OUT_DIR="${PROJECT_DIR}/out/${COMPANY}" mkdir -p "$OUT_DIR" # ---------- 3. Info ---------- DATE=$(date +'%Y%m%d-%H%M%S') ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") USER_NAME=$(whoami) IMAGE_VERSION=$(sed -n 's/^version[[:space:]]*=[[:space:]]*\(.*\)$/\1/p' "$PROJECT_DIR/setup.cfg" | head -n1) IMAGE_VERSION="${IMAGE_VERSION:-0.0.0}" echo "" echo "-------------------------------------------------------" echo " FACTUGES SYNC Build Script v${SCRIPT_VERSION}" echo " Compañía: ${COMPANY}" echo " Versión: ${IMAGE_VERSION}" echo " Fecha: ${DATE}" echo "-------------------------------------------------------" echo "" # ---------- 4. Función para generar 1 build ---------- build_image() { local MODE="$1" # factuges | verifactu local IMAGE_NAME="factuges-sync-${MODE}" local TAG_VERSION="${IMAGE_NAME}:${COMPANY}-${IMAGE_VERSION}" local TAG_LATEST="${IMAGE_NAME}:${COMPANY}-latest" echo "📦 Construyendo imagen Docker (${MODE})..." docker build --no-cache \ -t "${TAG_VERSION}" \ -t "${TAG_LATEST}" \ --build-arg COMPANY="${COMPANY}" \ -f "${PROJECT_DIR}/Dockerfile.${MODE}" "${PROJECT_DIR}" echo "✅ Imagen construida: ${TAG_VERSION}" local TAR_V="${OUT_DIR}/${IMAGE_NAME}-${COMPANY}-v${IMAGE_VERSION}-${DATE}.tar" local TAR_LATEST="${OUT_DIR}/${IMAGE_NAME}-${COMPANY}-latest.tar" docker save -o "${TAR_V}" "${TAG_VERSION}" "${TAG_LATEST}" cp -f "${TAR_V}" "${TAR_LATEST}" echo "📦 Imagen guardada:" echo " - ${TAR_V}" echo " - ${TAR_LATEST}" # Exportamos variables a nivel global para el LOAD opcional echo "${TAR_V}" echo "${TAR_LATEST}" echo "${TAR_V}|${TAR_LATEST}" } # ---------- 5. Ejecutar build para ambos modos ---------- BUILD_OUT_FACTUGES=$(build_image "factuges") FACTUGES_TAR_V=$(echo "$BUILD_OUT_FACTUGES" | cut -d '|' -f1) FACTUGES_TAR_LATEST=$(echo "$BUILD_OUT_FACTUGES" | cut -d '|' -f2) BUILD_OUT_VERIFACTU=$(build_image "verifactu") VERIFACTU_TAR_V=$(echo "$BUILD_OUT_VERIFACTU" | cut -d '|' -f1) VERIFACTU_TAR_LATEST=$(echo "$BUILD_OUT_VERIFACTU" | cut -d '|' -f2) # ---------- 6. Manifest ---------- MANIFEST_FILE="${OUT_DIR}/manifest-${IMAGE_VERSION}-${DATE}.json" cat > "${MANIFEST_FILE}" <