Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9418fb4d1a | ||
|
|
c492269740 | ||
|
|
1f467f2b8f | ||
|
|
e3ab3f7fc0 | ||
|
|
1df1c3a3c1 | ||
|
|
6773a8085d | ||
|
|
ea7d5e7f47 | ||
|
|
98096ab69f |
+50
-14
@@ -1,10 +1,14 @@
|
||||
name: Build and Push Frontend
|
||||
|
||||
on:
|
||||
# NOTA: sin anchors/aliases de YAML (&x / *x) a propósito -- el parser
|
||||
# de workflows de Gitea Actions no los resuelve en el bloque "on:" y
|
||||
# descarta el archivo completo con "unknown on type" (visto en vivo el
|
||||
# 2026-08-15). Las dos listas de paths quedan duplicadas literalmente.
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths: &frontend_paths
|
||||
paths:
|
||||
# Código y configuración real del frontend.
|
||||
# Los cambios exclusivos de GitOps (frontend.yaml, ingress, patches, etc.)
|
||||
# no vuelven a construir la imagen.
|
||||
@@ -32,7 +36,28 @@ on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths: *frontend_paths
|
||||
paths:
|
||||
- 'workloads/ecommerce/Dockerfile'
|
||||
- 'workloads/ecommerce/.dockerignore'
|
||||
- 'workloads/ecommerce/.npmrc'
|
||||
- 'workloads/ecommerce/package.json'
|
||||
- 'workloads/ecommerce/package-lock.json'
|
||||
- 'workloads/ecommerce/next.config.*'
|
||||
- 'workloads/ecommerce/tsconfig.json'
|
||||
- 'workloads/ecommerce/tailwind.config.*'
|
||||
- 'workloads/ecommerce/postcss.config.*'
|
||||
- 'workloads/ecommerce/eslint.config.*'
|
||||
- 'workloads/ecommerce/*.js'
|
||||
- 'workloads/ecommerce/*.mjs'
|
||||
- 'workloads/ecommerce/*.ts'
|
||||
- 'workloads/ecommerce/*.tsx'
|
||||
- 'workloads/ecommerce/app/**'
|
||||
- 'workloads/ecommerce/src/**'
|
||||
- 'workloads/ecommerce/components/**'
|
||||
- 'workloads/ecommerce/lib/**'
|
||||
- 'workloads/ecommerce/public/**'
|
||||
- 'workloads/ecommerce/styles/**'
|
||||
- '.gitea/workflows/build.yaml'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -260,6 +285,27 @@ jobs:
|
||||
--exit-code 0 \
|
||||
"${MANIFEST_FILE}"
|
||||
|
||||
# Instalado directo con pip (no como container aparte): el runner de
|
||||
# Gitea ejecuta cada job ya dentro de un contenedor propio que habla
|
||||
# con el daemon Docker del host (sibling containers) -- un
|
||||
# `docker run -v "${{ github.workspace }}:/src"` desde acá intenta
|
||||
# montar una ruta que solo existe DENTRO del contenedor del job, no
|
||||
# en el host real, y falla con "read-only file system". Evitamos por
|
||||
# completo el problema corriendo Semgrep nativo, igual que
|
||||
# gitleaks/trivy/syft/cosign.
|
||||
# venv en vez de "pip3 install --break-system-packages": la imagen del
|
||||
# runner ya trae paquetes de Python instalados por apt (ej. PyJWT)
|
||||
# sin metadata compatible con pip, y pip aborta al intentar
|
||||
# reemplazarlos ("RECORD file not found"). Un venv aislado evita
|
||||
# tocar los paquetes del sistema por completo.
|
||||
- name: Instalar Semgrep
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
python3 -m venv /tmp/semgrep-venv
|
||||
/tmp/semgrep-venv/bin/pip install --quiet "semgrep==1.173.0"
|
||||
/tmp/semgrep-venv/bin/semgrep --version
|
||||
|
||||
# Modo auditoría: sin --error a propósito, Semgrep siempre termina
|
||||
# con exit 0 aunque reporte hallazgos. Es la primera vuelta — se
|
||||
# revisan los resultados en conjunto antes de decidir qué reglas
|
||||
@@ -268,13 +314,7 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SEMGREP_IMAGE="semgrep/semgrep:1.173.0"
|
||||
|
||||
docker run --rm \
|
||||
-v "${{ github.workspace }}:/src" \
|
||||
-w /src \
|
||||
"${SEMGREP_IMAGE}" \
|
||||
semgrep scan \
|
||||
/tmp/semgrep-venv/bin/semgrep scan \
|
||||
--config=p/typescript \
|
||||
--config=p/react \
|
||||
--config=p/nextjs \
|
||||
@@ -284,11 +324,7 @@ jobs:
|
||||
"${APP_DIR}"
|
||||
|
||||
echo "=== Resumen Semgrep ==="
|
||||
docker run --rm \
|
||||
-v "${{ github.workspace }}:/src" \
|
||||
-w /src \
|
||||
"${SEMGREP_IMAGE}" \
|
||||
python3 -c "
|
||||
/tmp/semgrep-venv/bin/python -c "
|
||||
import json
|
||||
data = json.load(open('semgrep-report.json'))
|
||||
results = data.get('results', [])
|
||||
|
||||
@@ -16,7 +16,7 @@ spec:
|
||||
- name: gitea-registry-secret
|
||||
containers:
|
||||
- name: docs-portal
|
||||
image: gitea.cruzcloud.net/devops/docs-portal:v1.0.97
|
||||
image: gitea.cruzcloud.net/devops/docs-portal:v1.0.98
|
||||
ports:
|
||||
- containerPort: 80
|
||||
resources:
|
||||
|
||||
Reference in New Issue
Block a user