Skip to content

Commit 0aab51c

Browse files
Ar3hcursoragent
andcommitted
ci: run full frontend/backend tests on public release by default
Add workflow_dispatch run_tests (default true). When enabled, run web-element/web tests and scripts/ci/gate.sh, and package without -DskipTests. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 4c243e4 commit 0aab51c

1 file changed

Lines changed: 99 additions & 6 deletions

File tree

.github/workflows/build-and-release.yml

Lines changed: 99 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ on:
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

2227
permissions:
2328
contents: write
@@ -34,6 +39,7 @@ jobs:
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

Comments
 (0)