From f2afe92991a8e48e297d9d03c4890f289225c5e6 Mon Sep 17 00:00:00 2001 From: dscadmin Date: Thu, 2 Jul 2026 03:08:12 -0600 Subject: [PATCH] Add deploy.yaml --- .gitea/workflows/deploy.yaml | 85 ++++++++++++++++++++++++++++++++++++ package-lock.json | 18 ++++++++ 2 files changed, 103 insertions(+) create mode 100644 .gitea/workflows/deploy.yaml diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml new file mode 100644 index 0000000..d1a3c87 --- /dev/null +++ b/.gitea/workflows/deploy.yaml @@ -0,0 +1,85 @@ +name: Despliegue Automatizado Universal + +on: + push: + branches: + - develop + - master + +jobs: + get-context: + runs-on: host + outputs: + node_version: ${{ steps.setup.outputs.version }} + target_app: ${{ steps.setup.outputs.app }} + steps: + - name: Resolver Aplicación desde apps.conf + id: setup + run: | + # 1. Obtener el nombre del repositorio actual en Gitea (ej: front-Censo) + REPO_NAME="${{ github.event.repository.name }}" + + # 2. Determinar si buscamos un entorno -dev (develop) o producción (master) + if [ "${{ github.ref_name }}" = "develop" ]; then + SUFFIX="-dev" + else + SUFFIX="" + fi + + echo "Buscando qué sección de apps.conf tiene REPO=$REPO_NAME y termina en '$SUFFIX'..." + + # 3. Buscar en /etc/apps.conf el bloque que contenga REPO=nombre_del_repo + TARGET_APP=$(awk -v repo="REPO=$REPO_NAME" -v suf="$SUFFIX" ' + /^\[/ { gsub(/[\[\]]/, "", $0); current_box=$0; next } + $0 == repo { + if ((suf == "-dev" && current_box ~ /-dev$/) || (suf == "" && current_box !~ /-dev$/)) { + print current_box; + exit + } + } + ' /etc/apps.conf) + + if [ -z "$TARGET_APP" ]; then + echo "ERROR: No se encontró ninguna sección en /etc/apps.conf para el repositorio $REPO_NAME con el sufijo correcto." + exit 1 + fi + + # 4. Leer la versión de Node del bloque encontrado + VERSION=$(awk -v app="$TARGET_APP" ' + $0=="["app"]" { found=1; next } + /^\[/ && found { exit } + found && /^NODE=/ { split($0, a, "="); print a[2]; exit } + ' /etc/apps.conf) + + MAJOR_VERSION=$(echo "$VERSION" | tr -d '[:space:]' | grep -oE '[0-9]+' | head -n1) + + echo "-> ID de Aplicación encontrado: $TARGET_APP" + echo "-> Versión Mayor de Node resuelta: $MAJOR_VERSION" + + echo "app=${TARGET_APP}" >> $GITHUB_OUTPUT + echo "version=${MAJOR_VERSION}" >> $GITHUB_OUTPUT + + build: + needs: get-context + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Configurar Node.js dinámicamente + uses: actions/setup-node@v4 + with: + node-version: ${{ needs.get-context.outputs.node_version }} + + - run: npm ci + - run: npm run build + + deploy: + needs: [get-context, build] + runs-on: host + steps: + - name: Ejecutar Despliegue en Servidor Físico + run: | + TARGET_APP="${{ needs.get-context.outputs.target_app }}" + BRANCH_NAME="${{ github.ref_name }}" + + sudo -u deploy /home/deploy/scripts/deploy-front.sh "$TARGET_APP" "$BRANCH_NAME" diff --git a/package-lock.json b/package-lock.json index 34a1e87..d387462 100644 --- a/package-lock.json +++ b/package-lock.json @@ -696,6 +696,7 @@ "version": "2.5.6", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -735,6 +736,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -755,6 +757,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -775,6 +778,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -795,6 +799,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -815,6 +820,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -835,6 +841,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -855,6 +862,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -875,6 +883,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -895,6 +904,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -915,6 +925,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -935,6 +946,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -955,6 +967,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -975,6 +988,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2635,6 +2649,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "optional": true, "engines": { @@ -2677,6 +2692,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -3190,6 +3206,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, "license": "MIT", "optional": true }, @@ -3290,6 +3307,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, "license": "MIT", "optional": true, "engines": {