build(deps): bump the maven group across 11 directories with 1 update #455
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "CI: Foundation E2E" | |
| # Runs the Playwright suite under /e2e (the foundation proof | |
| # samples). Separate workflow from e2e.yml so it doesn't compete with | |
| # the integration-tests matrix for runners; it boots personal-assistant | |
| # and coding-agent samples via `./mvnw spring-boot:run` (no fat-jar | |
| # prebuild, no shell curl for readiness — the /actuator/health endpoint | |
| # is the standard Spring Boot liveness probe). | |
| # | |
| # Specs that require a live LLM (schedule/research/draft) are skipped | |
| # when no LLM_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY is set — they | |
| # still run nightly in e2e-real-llm.yml. | |
| on: | |
| push: | |
| branches: ['**'] | |
| paths: | |
| - 'modules/**' | |
| - 'samples/spring-boot-personal-assistant/**' | |
| - 'samples/spring-boot-coding-agent/**' | |
| - 'samples/spring-boot-reattach-harness/**' | |
| - 'e2e/**' | |
| - '.mvn/**' | |
| - 'pom.xml' | |
| - '.github/workflows/foundation-e2e.yml' | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| concurrency: | |
| group: foundation-e2e-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| foundation-e2e: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 25 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v5 | |
| with: | |
| java-version: 21 | |
| distribution: temurin | |
| cache: maven | |
| - name: Use Node 20 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| - name: Install framework modules into local Maven repo | |
| # spring-boot:run needs the framework deps on the classpath but does | |
| # not produce a fat jar; install the reactor once so all three | |
| # samples can resolve them at run-time. | |
| run: | | |
| ./mvnw install -Pfastinstall -DskipTests \ | |
| -pl samples/spring-boot-personal-assistant,samples/spring-boot-coding-agent,samples/spring-boot-reattach-harness \ | |
| -am -q | |
| - name: Install Playwright deps | |
| working-directory: e2e | |
| run: | | |
| npm ci | |
| npx playwright install --with-deps chromium | |
| - name: Type-check Playwright specs | |
| working-directory: e2e | |
| run: npx tsc --noEmit | |
| # ── Personal-assistant sample ───────────────────────────────── | |
| - name: Start personal-assistant sample | |
| run: | | |
| # Boot via Spring Boot Maven plugin — no fat-jar repackage step, | |
| # no custom classpath assembly. The JVM process backgrounds here | |
| # and tears down via PID file after the specs run. | |
| nohup ./mvnw -pl samples/spring-boot-personal-assistant -q \ | |
| spring-boot:run \ | |
| -Dspring-boot.run.arguments='--server.port=8080' \ | |
| > /tmp/pa-run.log 2>&1 & | |
| echo $! > /tmp/pa.pid | |
| - name: Wait for personal-assistant /actuator/health | |
| # actuator/health is the standard Spring Boot readiness probe. | |
| # Replaces the old curl-the-console loop — status UP guarantees | |
| # the Atmosphere framework finished init, not just Tomcat. | |
| run: npx --yes wait-on --timeout 180000 http://localhost:8080/actuator/health | |
| - name: Run personal-assistant specs | |
| working-directory: e2e | |
| env: | |
| ATMO_E2E_BASE_URL: http://localhost:8080 | |
| run: npx playwright test tests/personal-assistant.spec.ts --reporter=list | |
| - name: Stop personal-assistant | |
| if: always() | |
| run: | | |
| if [ -f /tmp/pa.pid ]; then | |
| kill "$(cat /tmp/pa.pid)" 2>/dev/null || true | |
| fi | |
| # Kill any leftover maven/spring-boot child java process on 8080. | |
| pkill -f "spring-boot-personal-assistant" 2>/dev/null || true | |
| sleep 2 | |
| # ── Coding-agent sample ─────────────────────────────────────── | |
| - name: Verify Docker available for sandbox spec | |
| # ubuntu-latest ships with Docker; the clone/read spec needs the | |
| # DockerSandboxProvider. Fail early here if the runner changed. | |
| run: docker version --format '{{.Server.Version}}' | |
| - name: Start coding-agent sample | |
| run: | | |
| nohup ./mvnw -pl samples/spring-boot-coding-agent -q \ | |
| spring-boot:run \ | |
| -Dspring-boot.run.arguments='--server.port=8080' \ | |
| > /tmp/ca-run.log 2>&1 & | |
| echo $! > /tmp/ca.pid | |
| - name: Wait for coding-agent /actuator/health | |
| run: npx --yes wait-on --timeout 180000 http://localhost:8080/actuator/health | |
| - name: Run coding-agent specs | |
| working-directory: e2e | |
| env: | |
| ATMO_E2E_BASE_URL: http://localhost:8080 | |
| run: | | |
| # Full spec set including the Docker sandbox clone+read regression | |
| # — the surface where the argv-form exec + strict URL allowlist | |
| # live. SKIP_SANDBOX_E2E is deliberately NOT set. | |
| npx playwright test tests/coding-agent.spec.ts --reporter=list | |
| - name: Stop coding-agent | |
| if: always() | |
| run: | | |
| if [ -f /tmp/ca.pid ]; then | |
| kill "$(cat /tmp/ca.pid)" 2>/dev/null || true | |
| fi | |
| pkill -f "spring-boot-coding-agent" 2>/dev/null || true | |
| # ── Reattach-harness sample ─────────────────────────────────── | |
| # Deterministic harness for the mid-stream reattach wire. Runs on | |
| # port 8096 so it can coexist with the personal-assistant/coding-agent | |
| # stops above (those used 8080). The sample has no LLM dispatch — | |
| # just a slow-emit @AiEndpoint plus a REST surface that pre-populates | |
| # the RunRegistry so the Playwright spec can drive the HTTP → | |
| # reattachPendingRun → replayPendingRun wire without timing flake. | |
| - name: Start reattach-harness sample | |
| run: | | |
| nohup ./mvnw -pl samples/spring-boot-reattach-harness -q \ | |
| spring-boot:run \ | |
| -Dspring-boot.run.arguments='--server.port=8096' \ | |
| > /tmp/rh-run.log 2>&1 & | |
| echo $! > /tmp/rh.pid | |
| - name: Wait for reattach-harness readiness | |
| # The harness exposes the AI endpoint only; /actuator isn't wired. | |
| # A successful GET against the endpoint root means the framework | |
| # + @AiEndpoint registrar are up. | |
| run: npx --yes wait-on --timeout 120000 http://localhost:8096/atmosphere/agent/harness/ | |
| - name: Run reattach spec | |
| working-directory: e2e | |
| env: | |
| ATMO_E2E_BASE_URL: http://localhost:8096 | |
| run: npx playwright test tests/reattach.spec.ts --reporter=list | |
| - name: Stop reattach-harness | |
| if: always() | |
| run: | | |
| if [ -f /tmp/rh.pid ]; then | |
| kill "$(cat /tmp/rh.pid)" 2>/dev/null || true | |
| fi | |
| - name: Dump sample logs on failure | |
| if: failure() | |
| run: | | |
| echo '=== pa-run.log ===' | |
| cat /tmp/pa-run.log || true | |
| echo '=== ca-run.log ===' | |
| cat /tmp/ca-run.log || true | |
| echo '=== rh-run.log ===' | |
| cat /tmp/rh-run.log || true |