mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-10-12 04:29:51 +08:00
- The list now ships the templates of Insert > Template, the PlantUML parser of Insert > Advanced and the template dialog's icon: the menu items were shown but failed with 404s. 15.1 MB packed; the tarball cap goes from 40 MB to 20 MB, where it still catches a list that grew by a whole js/ directory. - The guard drives both features, fails when the copy it runs against lacks files the editor asked for or when an export does not answer, checks that the copy is the pinned draw.io version, and runs in CI (npm run check-drawio, one E2E shard) so a list regression cannot reach a release.
103 lines
3.0 KiB
YAML
103 lines
3.0 KiB
YAML
name: Test
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [main]
|
|
push:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
lint-and-unit:
|
|
name: Lint & Unit Tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: "20"
|
|
cache: "npm"
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Run lint
|
|
run: npm run check
|
|
|
|
- name: Run unit tests
|
|
run: npm run test -- --run
|
|
|
|
# The MCP server package ships its own vitest because its DOM polyfill
|
|
# (linkedom) needs `environment: node`, while the root vitest uses jsdom
|
|
# for the Next.js app. Install + run its tests separately so CI catches
|
|
# multi-page mxfile regressions.
|
|
- name: Install MCP server dependencies
|
|
run: npm --prefix packages/mcp-server ci
|
|
|
|
- name: Run MCP server unit tests
|
|
run: npm --prefix packages/mcp-server test
|
|
|
|
# Tests run from src/, so check the built npm package separately
|
|
- name: Build MCP server and check package contents
|
|
run: npm --prefix packages/mcp-server run build && npm --prefix packages/mcp-server run check-package
|
|
|
|
e2e:
|
|
# Six jobs at once, each with a sixth of the tests and one worker: the
|
|
# same conditions per test, a fraction of the time
|
|
name: E2E Tests (${{ matrix.shard }}/6)
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
shard: [1, 2, 3, 4, 5, 6]
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: "20"
|
|
cache: "npm"
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Cache Playwright browsers
|
|
uses: actions/cache@v5
|
|
id: playwright-cache
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
|
|
|
|
- name: Install Playwright browsers
|
|
if: steps.playwright-cache.outputs.cache-hit != 'true'
|
|
run: npx playwright install chromium --with-deps
|
|
|
|
- name: Install Playwright deps (cached)
|
|
if: steps.playwright-cache.outputs.cache-hit == 'true'
|
|
run: npx playwright install-deps chromium
|
|
|
|
- name: Build app
|
|
run: npm run build
|
|
|
|
# The MCP package ships a trimmed draw.io; this drives the full copy
|
|
# (public/drawio, downloaded by the build) in Chromium and fails when
|
|
# the editor requests a file its list does not have. Once is enough.
|
|
- name: Check the MCP draw.io file list
|
|
if: matrix.shard == 1
|
|
run: npm --prefix packages/mcp-server run check-drawio
|
|
|
|
- name: Run E2E tests
|
|
run: npm run test:e2e -- --shard=${{ matrix.shard }}/6
|
|
env:
|
|
CI: true
|
|
|
|
- name: Upload test results
|
|
uses: actions/upload-artifact@v6
|
|
if: always()
|
|
with:
|
|
name: playwright-report-${{ matrix.shard }}
|
|
path: playwright-report/
|
|
retention-days: 7
|