162 lines
4.4 KiB
Bash
Executable File
162 lines
4.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_VERSION="2.3"
|
|
|
|
# ================================================
|
|
# FACTUGES SYNC - Docker Build Script (Simplificado)
|
|
# -----------------------------------------------
|
|
# Uso:
|
|
# ./build.sh <company> [--load]
|
|
# ================================================
|
|
|
|
# ---------- 1. Validación ----------
|
|
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
|
|
[[ "${2:-}" == "--load" ]] && LOAD=true
|
|
|
|
SSH_USER="rodax"
|
|
SSH_HOST="vps-2.rodax-software.com"
|
|
SSH_PORT="49152"
|
|
|
|
# Override por compañía específica
|
|
if [[ "$COMPANY" == "rodax" ]]; then
|
|
SSH_USER="rodax"
|
|
SSH_HOST="factuges.rodax-software.local"
|
|
SSH_PORT="22"
|
|
fi
|
|
|
|
# ---------- 2. Directorios ----------
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_DIR="$(realpath "${SCRIPT_DIR}/..")"
|
|
OUT_DIR="${PROJECT_DIR}/out/${COMPANY}"
|
|
|
|
rm -rf "$OUT_DIR"
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
|
|
# ---------- 3. Info ----------
|
|
DATE=$(date +'%Y%m%d-%H%M%S')
|
|
ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
|
|
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 " Carga: ${LOAD}"
|
|
echo " Modos: factuges + verifactu"
|
|
echo "-------------------------------------------------------"
|
|
echo ""
|
|
|
|
|
|
# ---------- 4. Función 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}"
|
|
|
|
# Devuelve SOLO datos (para uso posterior)
|
|
echo "${TAR_V}|${TAR_LATEST}"
|
|
}
|
|
|
|
|
|
# ---------- 5. Builds ----------
|
|
FACTUGES_OUT=$(build_image "factuges")
|
|
FACTUGES_TAR_V="${FACTUGES_OUT%%|*}"
|
|
FACTUGES_TAR_LATEST="${FACTUGES_OUT##*|}"
|
|
|
|
VERIFACTU_OUT=$(build_image "verifactu")
|
|
VERIFACTU_TAR_V="${VERIFACTU_OUT%%|*}"
|
|
VERIFACTU_TAR_LATEST="${VERIFACTU_OUT##*|}"
|
|
VERIFACTU_TAR_LATEST=$(build_image "verifactu" | sed -n '2p')
|
|
|
|
|
|
# ---------- 6. Manifest ----------
|
|
MANIFEST_FILE="${OUT_DIR}/manifest-${IMAGE_VERSION}-${DATE}.json"
|
|
cat > "${MANIFEST_FILE}" <<EOF
|
|
{
|
|
"company": "${COMPANY}",
|
|
"version": "${IMAGE_VERSION}",
|
|
"build_time": "${ISO_DATE}",
|
|
"docker_images": {
|
|
"factuges": {
|
|
"versioned": "$(basename "${FACTUGES_TAR_V}")",
|
|
"latest": "$(basename "${FACTUGES_TAR_LATEST}")"
|
|
},
|
|
"verifactu": {
|
|
"versioned": "$(basename "${VERIFACTU_TAR_V}")",
|
|
"latest": "$(basename "${VERIFACTU_TAR_LATEST}")"
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
|
|
echo ""
|
|
echo "📄 Manifest generado: ${MANIFEST_FILE}"
|
|
echo ""
|
|
|
|
|
|
# ---------- 7. LOAD opcional ----------
|
|
if [[ "$LOAD" == true ]]; then
|
|
echo "📥 Subiendo imágenes al servidor ${SSH_HOST}..."
|
|
|
|
ssh -p "${SSH_PORT}" "${SSH_USER}@${SSH_HOST}" \
|
|
"mkdir -p /opt/factuges/${COMPANY}/sync"
|
|
|
|
scp -P "${SSH_PORT}" "${OUT_DIR}"/*.tar \
|
|
"${SSH_USER}@${SSH_HOST}:/opt/factuges/${COMPANY}/sync/"
|
|
|
|
echo "📥 Cargando imágenes en Docker remoto..."
|
|
|
|
ssh -p "${SSH_PORT}" "${SSH_USER}@${SSH_HOST}" <<EOF
|
|
docker load -i /opt/factuges/${COMPANY}/sync/$(basename "${FACTUGES_TAR_V}")
|
|
docker load -i /opt/factuges/${COMPANY}/sync/$(basename "${VERIFACTU_TAR_V}")
|
|
EOF
|
|
|
|
echo "✔ Imágenes cargadas correctamente"
|
|
fi
|
|
|
|
|
|
# ---------- 8. Resumen ----------
|
|
echo ""
|
|
echo "-------------------------------------------------------"
|
|
echo "🎯 BUILD COMPLETADO PARA '${COMPANY}'"
|
|
[[ "$LOAD" == true ]] && echo "✔ Load OK en ${SSH_HOST}"
|
|
echo "🧩 Script version: ${SCRIPT_VERSION}"
|
|
echo "-------------------------------------------------------"
|
|
echo ""
|