lobehub/.github/workflows/claude-auto-e2e-testing.yml
Innei aaefe6c0d2
👷 chore(ci): unify CI package manager from bun to pnpm (#13464)
* 👷 chore(ci): unify CI package manager from bun to pnpm

Replace bun with pnpm across all GitHub Actions workflows to ensure
lockfile consistency with pnpm-lock.yaml as single source of truth.

* 👷 chore(ci): replace bun run with pnpm run in package.json scripts

Fix build failure in CI where bun is not installed. Replace bun run
references in root and e2e package.json scripts with pnpm run.

* 👷 chore(e2e): replace bunx with npx in e2e server startup

* 👷 chore(ci): create unified setup-env action, use pnpm install + bun run

- Add .github/actions/setup-env composite action (pnpm + bun + node)
- Refactor desktop-build-setup to use setup-env internally
- All workflows: pnpm install for deps, bun run for scripts
- Revert package.json/e2e scripts back to bun run
- Remove all direct pnpm/action-setup and oven-sh/setup-bun from workflows

* 🐛 fix(test): inline lexical ESM deps for vitest under pnpm

pnpm's strict node_modules layout causes vitest ESM resolution to fail
for lexical's named exports. Add lexical and @lexical/* to inline deps.
2026-04-01 14:08:37 +08:00

130 lines
4.3 KiB
YAML

name: Claude Auto E2E Testing
description: Automatically add E2E tests to improve user journey coverage
on:
schedule:
# Run daily at 21:00 UTC (05:00 Beijing Time)
- cron: '0 21 * * *'
workflow_dispatch:
inputs:
target_module:
description: 'Specific module/feature to add E2E tests (e.g., agent/conversation, knowledge/rag)'
required: false
type: string
concurrency:
group: auto-e2e-testing
cancel-in-progress: false
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres
DATABASE_DRIVER: node
KEY_VAULTS_SECRET: LA7n9k3JdEcbSgml2sxfw+4TV1AzaaFU5+R176aQz4s=
AUTH_SECRET: e2e-test-secret-key-for-better-auth-32chars!
AUTH_EMAIL_VERIFICATION: '0'
S3_ACCESS_KEY_ID: e2e-mock-access-key
S3_SECRET_ACCESS_KEY: e2e-mock-secret-key
S3_BUCKET: e2e-mock-bucket
S3_ENDPOINT: https://e2e-mock-s3.localhost
jobs:
add-e2e-tests:
runs-on: ubuntu-latest
timeout-minutes: 60
permissions:
contents: write
pull-requests: write
id-token: write
services:
postgres:
image: paradedb/paradedb:latest
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
ports:
- 5432:5432
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Setup environment
uses: ./.github/actions/setup-env
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Playwright browsers (with system deps)
run: bunx playwright install --with-deps chromium
- name: Run database migrations
run: bun run db:migrate
- name: Build application
run: bun run build
env:
SKIP_LINT: '1'
- name: Configure Git
run: |
git config --global user.name "claude-bot[bot]"
git config --global user.email "claude-bot[bot]@users.noreply.github.com"
- name: Copy prompts
run: |
mkdir -p /tmp/claude-prompts
cp .claude/prompts/auto-e2e-testing.md /tmp/claude-prompts/
cp .claude/prompts/security-rules.md /tmp/claude-prompts/
cp e2e/CLAUDE.md /tmp/claude-prompts/e2e-guide.md
- name: Run Claude Code for Auto E2E Testing
uses: anthropics/claude-code-action@v1
with:
github_token: ${{ secrets.GH_TOKEN }}
allowed_non_write_users: '*'
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
claude_args: |
--allowedTools "Bash,Read,Edit,Write,Glob,Grep"
--append-system-prompt "$(cat /tmp/claude-prompts/security-rules.md)"
prompt: |
Follow the auto E2E testing guide located at:
```bash
cat /tmp/claude-prompts/auto-e2e-testing.md
```
Also read the E2E testing reference guide:
```bash
cat /tmp/claude-prompts/e2e-guide.md
```
## Task Assignment
${{ inputs.target_module && format('Process the specified module/feature: {0}', inputs.target_module) || 'Automatically select one module/feature from the product modules table that needs E2E coverage' }}
## Environment Information
- Repository: ${{ github.repository }}
- Branch: ${{ github.ref_name }}
- Target Module: ${{ inputs.target_module || 'Auto-select' }}
- Run ID: ${{ github.run_id }}
## E2E Runtime Environment
- PostgreSQL is running at localhost:5432 (user: postgres, password: postgres)
- Application has been built and is ready to start
- Playwright chromium is installed
- To start the server for E2E tests, run: `bunx next start -p 3006 &` from the project root, then wait for it to be ready
- Run E2E tests with: `cd e2e && BASE_URL=http://localhost:3006 pnpm exec cucumber-js --config cucumber.config.js --tags "<your-tags>"`
**Start the auto E2E testing process now.**
- name: Upload E2E test artifacts (on failure)
if: failure()
uses: actions/upload-artifact@v6
with:
name: e2e-artifacts
path: |
e2e/reports
e2e/screenshots
if-no-files-found: ignore