Skip to content

fix(ci): prevent playwright e2e timeout by skipping unnecessary app builds#888

Merged
jhaynie merged 1 commit intomainfrom
task/debug-e2e-timeout
Feb 6, 2026
Merged

fix(ci): prevent playwright e2e timeout by skipping unnecessary app builds#888
jhaynie merged 1 commit intomainfrom
task/debug-e2e-timeout

Conversation

@jhaynie
Copy link
Member

@jhaynie jhaynie commented Feb 6, 2026

Summary

  • Fix intermittent Playwright E2E smoke test CI timeout caused by the integration-suite Vite/esbuild build hanging indefinitely during SDK preparation
  • The e2e job now only builds SDK packages (not test apps) using a new --packages-only flag, and has a 5-minute step timeout as a safety net

Root Cause

In run 21745237075, the "Prepare SDK for testing" step ran bun run build which builds all 13 SDK packages and 3 test apps. The integration-suite Vite build hung with an orphaned esbuild process for 14+ minutes, hitting the 15-minute job timeout. The Playwright tests never even started.

The e2e job only needs SDK package tarballs installed in e2e-web — the test apps (integration-suite, cloud-deployment, e2e-web) don't need production builds since the e2e dev server compiles on-the-fly via Vite.

Changes

File Change
package.json Add build:packages script (same as build but omits test app builds)
scripts/build-sdk.sh Add --packages-only flag that uses build:packages
scripts/prepare-sdk-for-testing.sh Forward "$@" to build-sdk.sh
.github/workflows/package-smoke-test.yaml playwright-e2e-test: pass --packages-only + add timeout-minutes: 5

Other CI jobs (integration-test, cloud-deployment-test, framework-demo-test) are unchanged and still get the full build.

Summary by CodeRabbit

  • Chores
    • Updated smoke test workflow to apply timeout and packages-only build mode for streamlined testing
    • Introduced new packages-only build option, enabling focused compilation of core packages while excluding test applications

…uilds

The Playwright E2E smoke test job was occasionally timing out because
prepare-sdk-for-testing.sh builds ALL packages AND test apps, including
integration-suite which uses Vite/esbuild and can hang indefinitely in CI.

The e2e job only needs SDK package tarballs - it doesn't need
integration-suite, cloud-deployment, or e2e-web app builds (the dev
server compiles on-the-fly).

Changes:
- Add build:packages script that builds only SDK packages (no test apps)
- Add --packages-only flag to build-sdk.sh
- Forward args from prepare-sdk-for-testing.sh to build-sdk.sh
- Use --packages-only for playwright-e2e-test CI job
- Add 5-minute step timeout as safety net
@coderabbitai
Copy link

coderabbitai bot commented Feb 6, 2026

📝 Walkthrough

Walkthrough

Introduces a --packages-only flag to selectively build packages while skipping test apps. The workflow applies this flag with a 5-minute timeout. Build scripts and configuration files were updated to support and forward this new parameter.

Changes

Cohort / File(s) Summary
CI/CD Workflow
.github/workflows/package-smoke-test.yaml
Added 5-minute timeout and --packages-only flag to the SDK preparation step, enabling selective package-only builds in smoke tests.
Build Configuration and Scripts
package.json, scripts/build-sdk.sh, scripts/prepare-sdk-for-testing.sh
Introduced build:packages npm script, added --packages-only flag support to build-sdk.sh, and enabled argument forwarding in prepare-sdk-for-testing.sh.
🚥 Pre-merge checks | ✅ 1
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


🧹 Recent nitpick comments
package.json (1)

11-12: build:packages duplicates build — consider a single parameterized script.

build:packages is a copy of build with the trailing three app-filter commands removed. If a new package is added to the build chain, both scripts must be updated in lockstep, which is easy to forget.

One alternative: a single script (e.g., scripts/build-all.sh) that accepts a --packages-only flag (you already have this in build-sdk.sh) and have both "build" and "build:packages" delegate to it — or simply always invoke build-sdk.sh directly. This would keep the package list in one place.

Not blocking since the current approach works and the build order is unlikely to change frequently.

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f77460c and fd9e45e.

📒 Files selected for processing (4)
  • .github/workflows/package-smoke-test.yaml
  • package.json
  • scripts/build-sdk.sh
  • scripts/prepare-sdk-for-testing.sh
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js,jsx,json,md}

📄 CodeRabbit inference engine (AGENTS.md)

Use Prettier for code formatting with tabs (width 3), single quotes, and semicolons

Files:

  • package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
  • GitHub Check: Package Installation & Usage Test
  • GitHub Check: Pack & Upload
  • GitHub Check: Build
  • GitHub Check: Framework Integration Tests (TanStack & Next.js)
  • GitHub Check: Template Integration Tests
  • GitHub Check: Standalone Agent Test
  • GitHub Check: Sandbox CLI Tests
  • GitHub Check: Queue SDK Tests
  • GitHub Check: SDK Integration Test Suite
  • GitHub Check: Cloud Deployment Tests
  • GitHub Check: Playwright E2E Smoke Test
🔇 Additional comments (4)
scripts/build-sdk.sh (1)

11-16: Clean implementation of the --packages-only flag.

The argument parsing and conditional build logic are straightforward and correct. The verification loop (lines 80–89) only checks packages/*, so it remains valid in both modes.

Also applies to: 68-73

scripts/prepare-sdk-for-testing.sh (1)

17-17: LGTM — clean argument forwarding.

Using "$@" to forward arguments to build-sdk.sh is the correct and idiomatic approach. Packing (line 22) correctly does not receive the forwarded args.

.github/workflows/package-smoke-test.yaml (2)

343-345: Good addition of both the step-level timeout and --packages-only flag.

The 5-minute step timeout provides a clear fail-fast boundary instead of waiting for the full 15-minute job timeout if the build hangs. Combined with --packages-only, this addresses the root cause (orphaned esbuild from Vite app builds) while keeping the Playwright job focused on what it actually needs.


350-352: Helpful inline comment explaining the rationale.

This context will save future maintainers from accidentally adding a redundant production build step. Good documentation practice.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

📦 Canary Packages Published

version: 1.0.3-fd9e45e

Packages
Package Version URL
@agentuity/server 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-server-1.0.3-fd9e45e.tgz
@agentuity/workbench 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-workbench-1.0.3-fd9e45e.tgz
@agentuity/runtime 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-runtime-1.0.3-fd9e45e.tgz
@agentuity/opencode 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-opencode-1.0.3-fd9e45e.tgz
@agentuity/drizzle 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-drizzle-1.0.3-fd9e45e.tgz
@agentuity/cli 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-cli-1.0.3-fd9e45e.tgz
@agentuity/react 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-react-1.0.3-fd9e45e.tgz
@agentuity/core 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-core-1.0.3-fd9e45e.tgz
@agentuity/frontend 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-frontend-1.0.3-fd9e45e.tgz
@agentuity/schema 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-schema-1.0.3-fd9e45e.tgz
@agentuity/evals 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-evals-1.0.3-fd9e45e.tgz
@agentuity/auth 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-auth-1.0.3-fd9e45e.tgz
@agentuity/postgres 1.0.3-fd9e45e https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-postgres-1.0.3-fd9e45e.tgz
Install

Add to your package.json:

{
  "dependencies": {
    "@agentuity/server": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-server-1.0.3-fd9e45e.tgz",
    "@agentuity/workbench": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-workbench-1.0.3-fd9e45e.tgz",
    "@agentuity/runtime": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-runtime-1.0.3-fd9e45e.tgz",
    "@agentuity/opencode": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-opencode-1.0.3-fd9e45e.tgz",
    "@agentuity/drizzle": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-drizzle-1.0.3-fd9e45e.tgz",
    "@agentuity/cli": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-cli-1.0.3-fd9e45e.tgz",
    "@agentuity/react": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-react-1.0.3-fd9e45e.tgz",
    "@agentuity/core": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-core-1.0.3-fd9e45e.tgz",
    "@agentuity/frontend": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-frontend-1.0.3-fd9e45e.tgz",
    "@agentuity/schema": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-schema-1.0.3-fd9e45e.tgz",
    "@agentuity/evals": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-evals-1.0.3-fd9e45e.tgz",
    "@agentuity/auth": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-auth-1.0.3-fd9e45e.tgz",
    "@agentuity/postgres": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-postgres-1.0.3-fd9e45e.tgz"
  }
}

Or install directly:

bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-server-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-workbench-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-runtime-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-opencode-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-drizzle-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-cli-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-react-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-core-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-frontend-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-schema-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-evals-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-auth-1.0.3-fd9e45e.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/1.0.3-fd9e45e/agentuity-postgres-1.0.3-fd9e45e.tgz

@jhaynie jhaynie merged commit ed7a5a5 into main Feb 6, 2026
15 checks passed
@jhaynie jhaynie deleted the task/debug-e2e-timeout branch February 6, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant