@@ -14,83 +14,83 @@ jobs:
1414 steps :
1515 - uses : actions/checkout@v4
1616
17- - name : Show tree (debug)
17+ - name : Detectar tipo de proyecto
18+ id : detect
1819 run : |
19- pwd
20- ls -la
21- echo "Lockfiles: "
22- ls -la | grep -E "package-lock.json|yarn.lock|pnpm-lock.yaml" || true
20+ if [ -f "package.json" ]; then echo "node_project=true" >> $GITHUB_OUTPUT; fi
21+ if [ -f "index.html" ]; then echo "static_html=true" >> $GITHUB_OUTPUT; fi
22+ echo "Node? $([[ -f package.json ]] && echo YES || echo NO) "
23+ echo "HTML? $([[ -f index.html ]] && echo YES || echo NO)"
2324
25+ # Solo si es proyecto Node (Next/React/etc.)
2426 - name : Setup Node
27+ if : ${{ steps.detect.outputs.node_project == 'true' }}
2528 uses : actions/setup-node@v4
2629 with :
27- node-version : 18 # más compatible; si tu proyecto requiere 20, cámbialo a 20
30+ node-version : 18
2831 cache : npm
2932 cache-dependency-path : demo/package-lock.json
3033
31- - name : Detect package manager
32- id : pm
34+ - name : Instalar dependencias (Node)
35+ if : ${{ steps.detect.outputs.node_project == 'true' }}
3336 run : |
34- if [ -f "pnpm-lock.yaml" ]; then
35- echo "mgr=pnpm" >> $GITHUB_OUTPUT
36- elif [ -f "yarn.lock" ]; then
37- echo "mgr=yarn" >> $GITHUB_OUTPUT
38- else
39- echo "mgr=npm" >> $GITHUB_OUTPUT
40- fi
37+ if [ -f package-lock.json ]; then npm ci; else npm install; fi
4138
42- - name : Setup pnpm
43- if : steps.pm.outputs.mgr == 'pnpm'
44- uses : pnpm/action-setup@v4
45- with :
46- version : 8
47-
48- - name : Enable corepack (yarn/pnpm)
49- if : steps.pm.outputs.mgr != 'npm'
50- run : corepack enable
51-
52- - name : Install deps
53- run : |
54- if [ "${{ steps.pm.outputs.mgr }}" = "pnpm" ]; then pnpm install --frozen-lockfile; \
55- elif [ "${{ steps.pm.outputs.mgr }}" = "yarn" ]; then yarn install --immutable; \
56- else if [ -f package-lock.json ]; then npm ci; else npm install; fi; fi
57-
58- - name : Build
39+ - name : Build (Node)
40+ if : ${{ steps.detect.outputs.node_project == 'true' }}
5941 env :
6042 NEXT_TELEMETRY_DISABLED : 1
61- CI : false # evita que algunos linters detengan el build en CI
43+ CI : false
44+ run : npm run build --if-present
45+
46+ # Si NO es proyecto Node y SOLO hay HTML estático, valida que exista el archivo y pasa
47+ - name : Validar HTML estático
48+ if : ${{ steps.detect.outputs.node_project != 'true' && steps.detect.outputs.static_html == 'true' }}
6249 run : |
63- if [ "${{ steps.pm.outputs.mgr }}" = "pnpm" ]; then pnpm build; \
64- elif [ "${{ steps.pm.outputs.mgr }}" = "yarn" ]; then yarn build; \
65- else npm run build --if-present; fi
50+ test -f index.html
51+ echo "OK: proyecto estático con index.html"
6652
6753 backend :
68- name : Backend (Gradle)
54+ name : Backend
6955 runs-on : ubuntu-latest
7056 defaults :
7157 run :
7258 working-directory : backend
7359 steps :
7460 - uses : actions/checkout@v4
7561
76- - name : Show tree (debug)
62+ - name : Detectar herramienta de build
63+ id : b
7764 run : |
78- pwd
79- ls -la
80- echo "Gradle wrapper?"; if [ -f gradlew ]; then echo "YES"; else echo "NO"; fi
65+ if [ -f "gradlew" ] || [ -f "build.gradle" ] || [ -f "build.gradle.kts" ]; then echo "use_gradle=true" >> $GITHUB_OUTPUT; fi
66+ if [ -f "pom.xml" ]; then echo "use_maven=true" >> $GITHUB_OUTPUT; fi
67+ echo "Gradle? $([[ -f gradlew || -f build.gradle || -f build.gradle.kts ]] && echo YES || echo NO)"
68+ echo "Maven? $([[ -f pom.xml ]] && echo YES || echo NO)"
8169
8270 - name : Setup Java
71+ if : ${{ steps.b.outputs.use_gradle == 'true' || steps.b.outputs.use_maven == 'true' }}
8372 uses : actions/setup-java@v4
8473 with :
8574 distribution : temurin
86- java-version : 17 # cambia a 21 si tu build.gradle lo exige
75+ java-version : 17 # súbelo a 21 si tu build.gradle/pom lo exige
8776
8877 - uses : gradle/actions/setup-gradle@v3
78+ if : ${{ steps.b.outputs.use_gradle == 'true' }}
8979
90- - name : Make gradlew executable (if exists)
91- run : if [ -f gradlew ]; then chmod +x gradlew; fi
80+ - name : Permisos para gradlew
81+ if : ${{ steps.b.outputs.use_gradle == 'true' && hashFiles('backend/gradlew') != '' }}
82+ run : chmod +x gradlew
9283
93- - name : Build (wrapper if present, else system gradle)
84+ - name : Build (Gradle)
85+ if : ${{ steps.b.outputs.use_gradle == 'true' }}
9486 run : |
9587 if [ -f gradlew ]; then ./gradlew build --no-daemon --stacktrace; \
9688 else gradle build --no-daemon --stacktrace; fi
89+
90+ - name : Build (Maven)
91+ if : ${{ steps.b.outputs.use_maven == 'true' }}
92+ run : mvn -B -DskipTests package
93+
94+ - name : No hay proyecto backend detectable (OK)
95+ if : ${{ steps.b.outputs.use_gradle != 'true' && steps.b.outputs.use_maven != 'true' }}
96+ run : echo "Sin build.gradle/pom.xml en backend: se omite build y el job pasa."
0 commit comments