1818 required : false
1919 type : boolean
2020 default : false
21+ run_tests :
22+ description : " Run full backend (Maven / gate) and frontend (web + web-element) tests before packaging. Default: enabled. When enabled, product mvn does NOT pass -DskipTests."
23+ required : false
24+ type : boolean
25+ default : true
2126
2227permissions :
2328 contents : write
3439 source_ref : ${{ steps.meta.outputs.source_ref }}
3540 is_prerelease : ${{ steps.meta.outputs.is_prerelease }}
3641 publish_release : ${{ steps.meta.outputs.publish_release }}
42+ run_tests : ${{ steps.meta.outputs.run_tests }}
3743 docker_tags : ${{ steps.meta.outputs.docker_tags }}
3844 chains_dev_jars_repository : ${{ steps.manifest.outputs.chains_dev_jars_repository }}
3945 chains_dev_jars_ref : ${{ steps.manifest.outputs.chains_dev_jars_ref }}
@@ -113,11 +119,21 @@ jobs:
113119 PUBLISH_RELEASE="false"
114120 fi
115121
122+ # Default: run full frontend + backend tests (only skip when explicitly false).
123+ RUN_TESTS_INPUT="${{ inputs.run_tests }}"
124+ if [ "$RUN_TESTS_INPUT" = "false" ]; then
125+ RUN_TESTS="false"
126+ else
127+ RUN_TESTS="true"
128+ fi
129+
116130 echo "release_version=$VERSION" >> "$GITHUB_OUTPUT"
117131 echo "release_tag=$RELEASE_TAG" >> "$GITHUB_OUTPUT"
118132 echo "source_ref=$SOURCE_REF" >> "$GITHUB_OUTPUT"
119133 echo "is_prerelease=$IS_PRERELEASE" >> "$GITHUB_OUTPUT"
120134 echo "publish_release=$PUBLISH_RELEASE" >> "$GITHUB_OUTPUT"
135+ echo "run_tests=$RUN_TESTS" >> "$GITHUB_OUTPUT"
136+ echo "run_tests=$RUN_TESTS publish=$PUBLISH_RELEASE"
121137 {
122138 echo "docker_tags<<EOF"
123139 echo "javachains/javachains:${VERSION}"
@@ -164,6 +180,8 @@ jobs:
164180 build :
165181 needs : resolve_release_meta
166182 runs-on : ubuntu-latest
183+ # gate + frontend tests + package; allow headroom when run_tests=true
184+ timeout-minutes : 120
167185 outputs :
168186 source_sha : ${{ steps.source_revision.outputs.source_sha }}
169187 frontend_sha : ${{ steps.frontend.outputs.frontend_sha }}
@@ -272,11 +290,12 @@ jobs:
272290 - name : Set up Node.js
273291 uses : actions/setup-node@v4
274292 with :
275- node-version : ' 22'
293+ # Match chains gate.yml / java-chains-server frontend.node.version
294+ node-version : ' 22.12.0'
276295
277296 - uses : pnpm/action-setup@v4
278297 with :
279- version : 9
298+ version : 9.15.0
280299
281300 - name : Cache Maven dependencies
282301 uses : actions/cache@v4
@@ -306,8 +325,70 @@ jobs:
306325 mvn clean install -DskipTests
307326 )
308327
328+ # ── Tests (default on via run_tests; set false only for emergency rebuilds) ──
329+ - name : Install local deps for backend gate
330+ if : needs.resolve_release_meta.outputs.run_tests == 'true'
331+ env :
332+ CHAINS_DEPS_TOKEN : ${{ secrets.DEPENDENCY_REPO_TOKEN }}
333+ run : |
334+ set -euo pipefail
335+ if [ -x scripts/ci/install-local-deps.sh ]; then
336+ scripts/ci/install-local-deps.sh
337+ else
338+ echo "WARNING: scripts/ci/install-local-deps.sh missing; relying on release-deps installs"
339+ fi
340+
341+ - name : Frontend tests (java-chains-web-element)
342+ if : needs.resolve_release_meta.outputs.run_tests == 'true'
343+ working-directory : java-chains-web-element
344+ run : |
345+ set -euo pipefail
346+ pnpm install --frozen-lockfile
347+ pnpm typecheck
348+ pnpm test:run
349+ # Public RMI surface defaults (same checks as chains gate.yml web-element job)
350+ if [ -f tests/config/rmi-workbench.test.ts ]; then
351+ pnpm exec vitest run tests/config/rmi-workbench.test.ts tests/adapters/rmi-menu-routes.test.ts
352+ fi
353+
354+ - name : Frontend tests (java-chains-web)
355+ if : needs.resolve_release_meta.outputs.run_tests == 'true'
356+ run : |
357+ set -euo pipefail
358+ if [ ! -f java-chains-web/package.json ]; then
359+ echo "java-chains-web absent; skip"
360+ exit 0
361+ fi
362+ cd java-chains-web
363+ npm ci
364+ npm run typecheck
365+ npm run test
366+ if [ -f src/config/internal-features.test.ts ]; then
367+ npm test -- --run src/config/internal-features.test.ts
368+ fi
369+
370+ - name : Backend tests (scripts/ci/gate.sh)
371+ if : needs.resolve_release_meta.outputs.run_tests == 'true'
372+ env :
373+ CHAINS_JDK8_HOME : ${{ env.JAVA_HOME }}
374+ run : |
375+ set -euo pipefail
376+ test -x scripts/ci/gate.sh
377+ scripts/ci/gate.sh
378+
379+ - name : Upload surefire reports on test failure
380+ if : failure() && needs.resolve_release_meta.outputs.run_tests == 'true'
381+ uses : actions/upload-artifact@v4
382+ with :
383+ name : surefire-reports-release
384+ path : ' **/target/surefire-reports/**'
385+ retention-days : 7
386+
309387 - name : Build Ship Artifacts (Element SPA + CLI)
388+ env :
389+ RUN_TESTS : ${{ needs.resolve_release_meta.outputs.run_tests }}
310390 run : |
391+ set -euo pipefail
311392 # Product SPA = java-chains-web-element (pnpm → generated-resources/static).
312393 # Prefer in-tree ship script from chains; fall back to release-repo copy.
313394 if [ ! -f scripts/frontend/package-java-chains-web-element.sh ]; then
@@ -318,10 +399,22 @@ jobs:
318399 # ONE Maven invocation: second `mvn -am package` without -Pfrontend reuses
319400 # server target/ but a new maven.build.timestamp → Vector A session mismatch.
320401 # Product surface: server + java-chains-cli (no java-chains-sdk).
321- mvn -pl java-chains-server,java-chains-cli -am clean package \
322- -DskipTests -Pfrontend,with-exploits \
323- -Dfrontend.working.directory="${PWD}/java-chains-web-element" \
324- -Dfrontend.package.script="${PWD}/scripts/frontend/package-java-chains-web-element.sh"
402+ MVN_ARGS=(
403+ -pl java-chains-server,java-chains-cli
404+ -am
405+ clean
406+ package
407+ -Pfrontend,with-exploits
408+ "-Dfrontend.working.directory=${PWD}/java-chains-web-element"
409+ "-Dfrontend.package.script=${PWD}/scripts/frontend/package-java-chains-web-element.sh"
410+ )
411+ if [ "${RUN_TESTS}" = "true" ]; then
412+ echo "run_tests=true: product mvn WITHOUT -DskipTests (test phase runs)"
413+ else
414+ echo "run_tests=false: product mvn WITH -DskipTests (tests skipped)"
415+ MVN_ARGS+=(-DskipTests)
416+ fi
417+ mvn "${MVN_ARGS[@]}"
325418
326419 - name : Prepare Base Artifacts
327420 run : |
0 commit comments