2026-01-30 10:36:16 +00:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
2026-02-03 15:23:25 +00:00
|
|
|
|
SCRIPT_VERSION="0.4"
|
2026-01-30 10:36:16 +00:00
|
|
|
|
|
|
|
|
|
|
# =====================================================
|
|
|
|
|
|
# FACTUGES Document Signing Service Build Script
|
|
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
|
# Build + Subida a producción de la imagen Docker
|
|
|
|
|
|
# =====================================================
|
|
|
|
|
|
# Uso:
|
|
|
|
|
|
# ./build_docker.sh <company> [--load]
|
|
|
|
|
|
#
|
|
|
|
|
|
# =====================================================
|
|
|
|
|
|
|
|
|
|
|
|
# --- Configuración base ---
|
|
|
|
|
|
COMPANY=""
|
|
|
|
|
|
LOAD=false
|
|
|
|
|
|
|
|
|
|
|
|
# --- Validar que el primer argumento existe y no es un flag ---
|
|
|
|
|
|
if [[ $# -eq 0 || "$1" == --* ]]; then
|
|
|
|
|
|
echo "❌ ERROR: Falta el parámetro <company>"
|
|
|
|
|
|
echo "Uso: ./build_docker.sh <company> [--load]"
|
|
|
|
|
|
echo "Ejemplos:"
|
|
|
|
|
|
echo " ./build_docker.sh acme --load"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
COMPANY="$1"
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
# --- Parseo de flags ---
|
|
|
|
|
|
shift # quitamos el <company>, ahora solo quedan flags
|
|
|
|
|
|
|
|
|
|
|
|
for arg in "$@"; do
|
|
|
|
|
|
case "$arg" in
|
|
|
|
|
|
--load) LOAD=true ;;
|
|
|
|
|
|
*) echo "⚠️ Argumento desconocido: $arg" ;;
|
|
|
|
|
|
esac
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
# --- Paths base ---
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
|
PROJECT_DIR="$(realpath "${SCRIPT_DIR}/..")"
|
|
|
|
|
|
OUT_DIR="${PROJECT_DIR}/build/"
|
|
|
|
|
|
|
|
|
|
|
|
if [[ -z "$COMPANY" ]]; then
|
|
|
|
|
|
echo "❌ Error: debes indicar la compañía. Ejemplo: ./build_docker.sh acme [--load]"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ $COMPANY =~ --.* ]]; then
|
|
|
|
|
|
echo "❌ Error: debes indicar la compañía. Ejemplo: ./build_docker.sh acme [--load]"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2026-02-03 15:23:25 +00:00
|
|
|
|
# --- Detectar nombre y versión ---
|
|
|
|
|
|
IMAGE_NAME=$(python - <<'EOF'
|
|
|
|
|
|
import tomllib
|
|
|
|
|
|
|
|
|
|
|
|
with open("../pyproject.toml", "rb") as f:
|
|
|
|
|
|
data = tomllib.load(f)
|
|
|
|
|
|
|
|
|
|
|
|
print(data["project"]["name"])
|
|
|
|
|
|
EOF
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
IMAGE_VERSION=$(python - <<'EOF'
|
|
|
|
|
|
import tomllib
|
|
|
|
|
|
|
|
|
|
|
|
with open("../pyproject.toml", "rb") as f:
|
|
|
|
|
|
data = tomllib.load(f)
|
|
|
|
|
|
|
|
|
|
|
|
print(data["project"]["version"])
|
|
|
|
|
|
EOF
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2026-01-30 10:36:16 +00:00
|
|
|
|
|
|
|
|
|
|
PORT="8000" # valor por defecto
|
|
|
|
|
|
|
|
|
|
|
|
# --- 3. Etiquetas e información ---
|
|
|
|
|
|
DATE=$(date +'%Y%m%d-%H%M%S')
|
|
|
|
|
|
ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
|
|
|
|
USER_NAME=$(whoami)
|
|
|
|
|
|
GIT_HASH=$(git -C "$PROJECT_DIR" rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
|
|
|
|
GIT_BRANCH=$(git -C "$PROJECT_DIR" rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
|
|
|
|
|
|
|
|
|
|
|
|
IMAGE_TAG_V="${IMAGE_NAME}:v${IMAGE_VERSION}"
|
|
|
|
|
|
IMAGE_TAG_LATEST="${IMAGE_NAME}:latest"
|
|
|
|
|
|
|
|
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
|
|
rm -rf "${OUT_DIR:?}/"*
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "-------------------------------------------------------"
|
|
|
|
|
|
echo " FACTUGES Document Signing Service Build Script v${SCRIPT_VERSION}"
|
|
|
|
|
|
echo " Compañía: ${COMPANY}"
|
|
|
|
|
|
echo " Proyecto: ${IMAGE_NAME}"
|
|
|
|
|
|
echo " Versión: ${IMAGE_VERSION}"
|
|
|
|
|
|
echo " Puerto: ${PORT}"
|
|
|
|
|
|
echo " Etiquetas: ${IMAGE_TAG_V}, ${IMAGE_TAG_LATEST}"
|
|
|
|
|
|
echo " Dir. out: ${OUT_DIR}"
|
|
|
|
|
|
echo " Cargar: ${LOAD}"
|
|
|
|
|
|
echo "-------------------------------------------------------"
|
|
|
|
|
|
|
|
|
|
|
|
cd "${PROJECT_DIR}"
|
|
|
|
|
|
echo "🐳 Construyendo imagen Docker..."
|
|
|
|
|
|
|
|
|
|
|
|
docker build \
|
|
|
|
|
|
-t "${IMAGE_TAG_V}" -t "${IMAGE_TAG_LATEST}" \
|
|
|
|
|
|
--build-arg PORT="${PORT}" \
|
|
|
|
|
|
-f "${PROJECT_DIR}/Dockerfile" "${PROJECT_DIR}"
|
|
|
|
|
|
|
|
|
|
|
|
echo "✅ Imagen Docker construida correctamente"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TAR_FILE_V="${OUT_DIR}/${IMAGE_NAME}-v${IMAGE_VERSION}-${DATE}.tar"
|
|
|
|
|
|
echo "🐳 Guardando imagen Docker ${TAR_FILE_V} ..."
|
|
|
|
|
|
docker save "${IMAGE_TAG_V}" "${IMAGE_TAG_LATEST}" -o "${TAR_FILE_V}"
|
|
|
|
|
|
|
|
|
|
|
|
echo "📦 Imagen guardada:"
|
|
|
|
|
|
echo " ${TAR_FILE_V}"
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "$LOAD" == true ]]; then
|
|
|
|
|
|
echo "📥 Cargando imagen en producción ${SSH_HOST}..."
|
|
|
|
|
|
scp -r -P "${SSH_PORT}" "${OUT_DIR}" "${SSH_USER}@${SSH_HOST}:/opt/factuges-document-signing-service/"
|
|
|
|
|
|
|
|
|
|
|
|
RESULT=$(ssh -p "${SSH_PORT}" "${SSH_USER}@${SSH_HOST}" \
|
|
|
|
|
|
"docker load -i /opt/factuges-document-signing-service/build/$(basename "${TAR_FILE_V}") && \
|
|
|
|
|
|
docker tag ${IMAGE_TAG_V} ${IMAGE_TAG_LATEST} " 2>&1)
|
|
|
|
|
|
|
|
|
|
|
|
echo "${RESULT}"
|
|
|
|
|
|
echo "✅ Imagen cargada en producción"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# =====================================================
|
|
|
|
|
|
# 3️⃣ Resumen
|
|
|
|
|
|
# =====================================================
|
|
|
|
|
|
echo "-------------------------------------------------------"
|
|
|
|
|
|
echo "🎯 Resultado final para '${COMPANY}'"
|
|
|
|
|
|
echo " 🐳 v${IMAGE_VERSION} → ${OUT_DIR}"
|
|
|
|
|
|
echo "🧩 Script version: ${SCRIPT_VERSION} - FIN"
|
|
|
|
|
|
echo "-------------------------------------------------------"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
|