ci: restore the Code Quality gate (baseline probe — do not merge yet) - #238
ci: restore the Code Quality gate (baseline probe — do not merge yet)#238rubenvdlinde wants to merge 1 commit into
Conversation
Reference-only change on top of an otherwise untouched `development`, so the Vue 3 migration PR has a like-for-like baseline to be compared against.
Quality Report — ConductionNL/larpingapp @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 94/94 | |||
| npm | ✅ | ✅ 315/315 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/17 statements)
Quality workflow — 2026-07-31 21:24 UTC
Download the full PDF report from the workflow artifacts.
…ure) The shared `features-extract` job that regenerates this file is skipped on pull_request, and on a push to development its bot commit is rejected by branch protection (ConductionNL/.github#61), so the file has been drifting from openspec/specs/ with nothing able to correct it. Regenerated with ConductionNL/.github scripts/extract-features.py; `--check` is now clean. Pre-existing: the same failure reproduces on an untouched development in the baseline probe (#238).
…1.0-vue3.13) (#239) * feat(vue3): migrate larpingapp to Vue 3 - deps: vue 3.5, @nextcloud/vue 9, vue-router 4, @nextcloud/dialogs 7, @conduction/nextcloud-vue pinned exactly to 2.1.0-vue3.13 - lint: adopt the shared conductionVue3Fixes preset (spread last) - bootstrap: createApp/app.use, vue-router 4 catch-all, reactive() - webpack: vue-router$ singleton alias, entry-FILE aliases for the exports-map-only @nextcloud/vue and @nextcloud/dialogs - remove dead Vue-2 files (jest.config.js, MainMenu.vue, UserSettings.vue) * fix(e2e): centralise the base URL and drop every localhost:8080 fallback playwright.config.ts, global-setup.ts, workflows/fixtures.ts and detail-forms-admin.spec.ts each computed their own `?? localhost:8080` default. :8080 is the SHARED dev container, so the fixture WRITE paths seeded registers/schemas/objects into other people's environment, and a spec could create a fixture on one instance and open it on another. tests/e2e/_base-url.ts is now the single resolver: PLAYWRIGHT_BASE_URL > NEXTCLOUD_URL > NC_BASE_URL, and it THROWS when none is set. Also fixes the remaining lint warnings (JSDoc @param types/descriptions). * fix(webpack): derive publicPath at runtime; fix(ci): restore the shared workflow refs webpack: @nextcloud/webpack-vue-config hardcodes output.publicPath to /apps/<app>/js/. An app deployed into Nextcloud's second apps path is served from /custom_apps/, so every LAZY chunk 404s, comes back as the text/html error page, is refused on MIME grounds and kills the page with a ChunkLoadError. The entry bundle is fine (NC writes that tag itself), so nothing in the build reports a problem. publicPath 'auto' derives it from the URL the entry script actually loaded from. ci: all 8 reusable-workflow calls pointed at Conduction/.github, which Actions cannot resolve. Every Code Quality run since 2026-06-01 produced ZERO jobs. The shared workflows live in ConductionNL/.github. * style(skill-tree): satisfy rule-empty-line-before (pre-existing stylelint failure) Four single-line rule blocks tripped `rule-empty-line-before`. The failure is pre-existing and was invisible because the Code Quality workflow had produced zero jobs since 2026-06-01. * docs: regenerate docs/features.json (pre-existing Features Check failure) The shared `features-extract` job that regenerates this file is skipped on pull_request, and on a push to development its bot commit is rejected by branch protection (ConductionNL/.github#61), so the file has been drifting from openspec/specs/ with nothing able to correct it. Regenerated with ConductionNL/.github scripts/extract-features.py; `--check` is now clean. Pre-existing: the same failure reproduces on an untouched development in the baseline probe (#238). * fix(e2e): resolve register/schema ids from the app's settings API detail-forms-admin.spec.ts hardcoded register 8 and schemas 18-25 with a comment saying '8 on the dev instance'. On any other instance LarpingApp's register imports with a different id (15 on a fresh NC 34 install, with a different schema assignment), so every seed POST 404s, seedObject() swallowed it, the ids became the literal 'seed-missing', and eight specs failed 60s later as TIMEOUTS — which reads like a rendering regression. Now resolved at runtime from /apps/larpingapp/api/settings, the same source workflows/fixtures.ts and the SPA itself use, honouring the per-type <type>_register over the shared one. Explicit LARPING_* env vars still win. seedObject() now reports the status and body on failure instead of returning null silently. * fix(dashboard): call registerBuiltinDashboardWidgets() at bootstrap nc-vue declares `sideEffects: ["**/*.css"]` (ADR-061), so webpack may legally drop registerDashboardWidgets.js's bare side-effect imports. The manifest's `stat` KPI tiles and `object-table` lists are registered ONLY that way, so getWidgetTypeEntry() missed and CnDashboardPage rendered its 'Widget not available' placeholder for 5 of the 7 dashboard widgets. The one widget that did render, `chart`, is registered by an INLINE registerDashboardWidget() call that tree-shaking cannot reach — which is what identified the mechanism. The library ships this explicit no-op for exactly this purpose. * fix(webpack): refuse to alias a MAJOR-mismatched local nc-vue checkout The USE_LOCAL_LIB alias is opt-OUT and silently overrides the exactly pinned @conduction/nextcloud-vue dependency. The shared apps-extra/nextcloud-vue checkout sits on wip/cnindexpage-export-action at 1.0.0-beta.184 — the Vue 2 line — so any build run from apps-extra/larpingapp would have compiled Vue 2 library sources into this Vue 3 app, successfully, with the first symptom appearing at runtime as a migration bug. Now the alias is used only when the local checkout's major matches the pinned dependency's; a mismatch throws with the versions named. USE_LOCAL_LIB=false still disables it outright. * fix(e2e): dismiss the onboarding tour, not just an aria-label=Close button The app's first load opens a six-step onboarding tour ('Welcome to LARPing') whose controls are labelled 'Close tour' and 'Skip'. All five copies of dismissSupportDialog matched only button[aria-label="Close"], so the tour stayed open across the viewport. Measured on the isolated instance: two live [role="dialog"] nodes, two modal masks, and elementFromPoint(innerWidth/2, innerHeight/2) returning the tour's <video>. The page underneath renders perfectly, so toBeVisible() keeps passing while every locator.click() hangs on actionability until the test times out — which reads like a rendering regression and is really an undismissed overlay. One implementation now lives in _nav.ts and the five duplicates import it; it closes any visible dialog by the labels actually used, repeating until none remains (the tour and its step controls are two dialogs). * fix(e2e): drop the last unsatisfiable networkidle wait in gotoDetail Every other mention of networkidle in this suite is a comment saying never to use it (ADR-074 rule 4 — Nextcloud's notification poll keeps the network permanently busy). One live call survived, in the gotoDetail helper backing every character-detail spec. The trailing .catch(() => {}) made it look safe. It is not: the call takes no timeout, so it inherits the unbounded navigation timeout and never settles; the TEST times out at 60s first and the catch never runs. The failures surface as 'Test timeout of 60000ms exceeded', which reads like a slow or broken page instead of a wait that can never succeed. Replaced with the app-content visibility wait used everywhere else. * docs(e2e): record the verified cause of the detail-page blocker Re-verified on a clean isolated NC 34 instance, as the note itself asked. The cause is a MISSING player SCHEMA. larpingapp_register.json declares ten schemas including 'player'; after import the register holds nine — item/event/attendance arrive prefixed (larping_*) and player is dropped entirely, leaving player_register and player_schema empty in app config. The character schema REQUIRES ocName, typed format:uuid with $ref:player. With no player schema there is no player UUID, so the OR API rejects every character create. seedObject() swallowed it, ids became the string 'seed-missing', and every character-detail spec failed 60s later as a timeout. Register-import side, not the test layer.
|
Closing as superseded — both the change and its purpose have landed. The one-line fix is already on That also resolves the "Not fixed here" list in the description — the other seven callers named there were fixed too, not just The baseline this probe existed to capture is moot. It was cut from an untouched Mechanically it is also unmergeable in its current form ( Since it landed, the gate has moved on twice more: #248 turned on the shared Playwright job and #269 moved Closed as obsolete, superseded by #261. |
Why this exists
.github/workflows/code-quality.ymlcallsConduction/.github/.github/workflows/quality.yml@main. That repository is not reachable from Actions, so every run of this workflow produces ZERO jobs and fails immediately with "This run likely failed because of a workflow file issue".Verified, not inferred:
Introduced by e2faa09 (2026-06-01) — "point reusable workflows at Conduction/.github (org rename)". The rename went the wrong way: the shared workflows live in
ConductionNL/.github(public, readable), and every app that references that spelling gets its jobs (openregister→ 24,openconnector→ 22).So since 2026-06-01 larpingapp has had no ESLint, PHPCS, PHPMD, PHPStan, license/security scan or PHPUnit (4-way NC/PHP matrix) on any push or PR.
What this PR does
One line, one file:
Conduction/.github→ConductionNL/.githubincode-quality.yml.It is deliberately cut from an untouched
developmentso that whatever the restored gate reports here is the true pre-existing baseline, to be compared against the Vue 3 migration PR.Not fixed here
The other 7 workflows in this repo carry the same wrong reference (
branch-protection,documentation,issue-triage,openspec-sync,release-beta,release-stable,sync-to-beta), and so do 6 other fleet apps —pipelinq,procest,opencatalogi,docudesk,softwarecatalog,decidesk,openbuild.