Uecko_ERP_FactuGES_sync/scripts/build.sh
2025-11-30 10:43:57 +01:00

114 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_VERSION="1.0.0"
# ================================================
# FACTUGES SYNC - Docker Build Script
# -----------------------------------------------
# Uso:
# ./build.sh <company> [--load]
# ================================================
# ---------- 1. Validación de parámetros ----------
if [[ $# -eq 0 || "$1" == --* ]]; then
echo "❌ ERROR: Falta el parámetro <company>"
echo "Uso: ./build.sh <company> [--load]"
exit 1
fi
COMPANY="$1"
LOAD=false
if [[ "${2:-}" == "--load" ]]; then
LOAD=true
fi
# ---------- 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"
cd "$PROJECT_DIR"
# ---------- 3. Versión del proyecto ----------
IMAGE_NAME="factuges-sync"
IMAGE_VERSION=$(sed -n 's/^version[[:space:]]*=[[:space:]]*\(.*\)$/\1/p' setup.cfg | head -n1)
IMAGE_VERSION="${IMAGE_VERSION:-0.0.0}"
IMAGE_TAG_VERSION="${IMAGE_NAME}:${COMPANY}-${IMAGE_VERSION}"
IMAGE_TAG_LATEST="${IMAGE_NAME}:${COMPANY}-latest"
# ---------- 4. Info del sistema ----------
DATE=$(date +'%Y%m%d-%H%M%S')
ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
USER_NAME=$(whoami)
echo ""
echo "-------------------------------------------------------"
echo " FACTUGES SYNC Build Script v${SCRIPT_VERSION}"
echo " Compañía: ${COMPANY}"
echo " Version: ${IMAGE_VERSION}"
echo " Imagen: ${IMAGE_TAG_VERSION}"
echo " Latest tag: ${IMAGE_TAG_LATEST}"
echo " Load: ${LOAD}"
echo "-------------------------------------------------------"
echo ""
# ---------- 5. Build de la imagen Docker ----------
echo "📦 Construyendo imagen Docker..."
docker build \
-t "${IMAGE_TAG_VERSION}" \
-t "${IMAGE_TAG_LATEST}" \
.
echo "✔ Build OK: ${IMAGE_TAG_VERSION}"
echo ""
# ---------- 6. Generar manifest JSON ----------
MANIFEST_FILE="${OUT_DIR}/manifest-${IMAGE_VERSION}-${DATE}.json"
cat > "$MANIFEST_FILE" <<EOF
{
"company": "${COMPANY}",
"image_version": "${IMAGE_VERSION}",
"image_tag_version": "${IMAGE_TAG_VERSION}",
"image_tag_latest": "${IMAGE_TAG_LATEST}",
"build_time": "${ISO_DATE}",
"user": "${USER_NAME}"
}
EOF
echo "📄 Manifest generado: ${MANIFEST_FILE}"
echo ""
# ---------- 7. LOAD opcional ----------
if [[ "$LOAD" == true ]]; then
echo "📥 Subiendo imagen al servidor..."
TAR_FILE="${OUT_DIR}/${IMAGE_NAME}-${COMPANY}-latest.tar"
docker save -o "${TAR_FILE}" "${IMAGE_TAG_LATEST}"
scp -P 49152 "${TAR_FILE}" \
rodax@vps-2.rodax-software.com:/opt/factuges/${COMPANY}/
ssh -p 49152 rodax@vps-2.rodax-software.com \
"docker load -i /opt/factuges/${COMPANY}/$(basename "$TAR_FILE")"
echo "✔ Imagen cargada en producción"
fi
# ---------- 8. Resumen ----------
echo ""
echo "-------------------------------------------------------"
echo "🎯 Resultado final para '${COMPANY}'"
echo "✔ Build OK: ${IMAGE_TAG_VERSION}"
if [[ "$LOAD" == true ]]; then
echo "✔ Load OK"
fi
echo "🧩 Script version: ${SCRIPT_VERSION}"
echo "-------------------------------------------------------"
echo ""