ci: bump skill matrix parser test timeout; install playwright in isolated dir
CI / Architecture Guardrails (push) Successful in 19m4s
CI / Assistant Split Regression (push) Successful in 20m21s
CI / Lint (push) Successful in 21m52s
CI / Typecheck (push) Successful in 22m37s
CI / Unit Tests (push) Successful in 7m48s
CI / Build (push) Successful in 5m16s
CI / Fresh-Linux Docker Deploy (push) Failing after 12m42s
CI / E2E Tests (push) Failing after 35m15s
CI / Release Images (push) Has been skipped

Unit Tests flaked on QNAP: skillMatrixParser ExcelJS workbook builds exceeded
the 5s default per-test timeout (runtime ~8.6s for the suite). Bumped to 30s.

Docker Deploy smoke tests failed because `npm install` in the repo root tried
to resolve sibling workspace:* deps (pnpm protocol, not npm-supported).
Install @playwright/test into /tmp/pw-install instead and symlink the package
dirs into apps/web/node_modules so the CJS require() in playwright.ci.config.ts
resolves it by walking up from apps/web/.
This commit is contained in:
2026-04-13 01:11:37 +02:00
parent a88db567ad
commit a0b407e92d
2 changed files with 18 additions and 8 deletions
+15 -6
View File
@@ -496,20 +496,29 @@ jobs:
node-version: "20"
- name: Install Playwright and Chromium
# Install locally (not -g) so the CJS require() in playwright.ci.config.ts
# resolves @playwright/test by walking up from apps/web/. A global
# install puts it in /opt/hostedtoolcache/.../lib/node_modules which
# Node's resolver doesn't check.
# The repo root package.json uses pnpm `workspace:*` deps which npm
# cannot resolve, so install into an isolated temp dir and symlink
# @playwright/test into apps/web/node_modules so playwright.ci.config.ts
# (CJS) can resolve it by walking up from apps/web/.
run: |
set -e
mkdir -p /tmp/pw-install
cd /tmp/pw-install
[ -f package.json ] || npm init -y >/dev/null
npm install --no-save --no-package-lock @playwright/test@1.49
npx playwright install chromium --with-deps
cd "$GITHUB_WORKSPACE"
mkdir -p apps/web/node_modules
ln -sfn /tmp/pw-install/node_modules/@playwright apps/web/node_modules/@playwright
ln -sfn /tmp/pw-install/node_modules/playwright apps/web/node_modules/playwright
ln -sfn /tmp/pw-install/node_modules/playwright-core apps/web/node_modules/playwright-core
/tmp/pw-install/node_modules/.bin/playwright install chromium --with-deps
- name: Run smoke tests
env:
# App runs on the compose network; act_runner job is on gitea_gitea
# (docker-compose.ci.yml attaches services to both). Override baseURL.
PLAYWRIGHT_BASE_URL: http://app:3100
run: npx playwright test --config apps/web/playwright.ci.config.ts
run: /tmp/pw-install/node_modules/.bin/playwright test --config apps/web/playwright.ci.config.ts
- name: Upload Playwright report
if: failure()
+3 -2
View File
@@ -21,6 +21,7 @@ async function createWorkbookBuffer(
describe("skill matrix parser", () => {
it("extracts employee info and merges skills by highest proficiency", async () => {
// ExcelJS dynamic import + workbook writeBuffer is slow on constrained CI runners.
const workbook = await createWorkbookBuffer([
{
name: "Employee Information",
@@ -71,7 +72,7 @@ describe("skill matrix parser", () => {
},
]),
});
});
}, 30000);
it("rejects duplicate headers in skill sheets", async () => {
const workbook = await createWorkbookBuffer([
@@ -96,7 +97,7 @@ describe("skill matrix parser", () => {
]);
await expect(parseSkillMatrixWorkbook(workbook)).rejects.toThrow('duplicate header "item"');
});
}, 30000);
it("matches role names by exact and partial matches", () => {
expect(matchRoleName("Compositing", ["Producer", "Compositing"])).toBe("Compositing");