You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(ci): cover ai-policy, phpunit-kvstore, and playwright in /explain-ci
Add explanation-map entries for the three workflows introduced upstream
since this branch was created, and fix the Memcached Docker helper in
autotest.sh to use the same image/port as the CI service
(ghcr.io/nextcloud/continuous-integration-memcached on 11211) instead of
a mismatched generic memcached image on 11212.
Signed-off-by: Anna Larch <anna@nextcloud.com>
Copy file name to clipboardExpand all lines: .github/workflows/ci-bot.yml
+32Lines changed: 32 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -149,6 +149,16 @@ jobs:
149
149
'Prerequisites: Docker installed and running, PHP `memcached` extension loaded (`php -m | grep memcached`; install with `sudo apt install php-memcached`), PHP in your PATH, and `composer install` run from the server repository root at least once.',
150
150
],
151
151
},
152
+
'PHPUnit key-value store': {
153
+
purpose: 'Runs PHPUnit tests against Valkey in three topologies (single server, cluster, sentinel) to validate the key-value store cache backend.',
154
+
fix: [
155
+
'Check the CI log to see which topology (single/cluster/sentinel) and PHP version failed.',
156
+
'Reproducing the cluster/sentinel topologies locally requires manually starting several Valkey containers — see the `Start Valkey (...)` steps in `.github/workflows/phpunit-kvstore.yml` for the exact commands.',
157
+
'For the single-server topology: `docker run -d --name kv-single -p 6379:6379 valkey/valkey:8`, then `cp tests/kvstore-single.config.php config/` before installing Nextcloud.',
158
+
'Run the suite with: `composer run test -- --group KeyValueCache --log-junit junit.xml`',
159
+
'If only one topology fails, look for topology-specific assumptions (e.g. single-node vs multi-node key routing) in the changed code.',
160
+
],
161
+
},
152
162
'PHPUnit sharding': {
153
163
purpose: 'Runs PHPUnit tests with database sharding enabled, where data is distributed across multiple MySQL instances.',
154
164
fix: [
@@ -345,6 +355,17 @@ jobs:
345
355
'Ensure your local Nextcloud instance is running before executing Cypress.',
346
356
],
347
357
},
358
+
'Playwright Tests': {
359
+
purpose: 'Runs end-to-end browser tests (Playwright) against a live Nextcloud instance, sharded across 6 jobs, plus a separate installer-test job covering every supported database backend.',
360
+
flaky: true,
361
+
flakiness_note: 'Only runs when Playwright test files changed, the PR carries `force-e2e-tests`/`3. to review`/`4. to release`, or is marked ready for review — a skipped "gate" is expected and not a real failure.',
362
+
fix: [
363
+
'Check the job name to see which shard (1-6) or which installer DB backend (mysql/mariadb/postgres/oracle) failed, and download the HTML report artifact (`html-report--attempt-*`) for traces/screenshots.',
364
+
'Run locally: `npx playwright install --with-deps && npm run playwright`',
365
+
'To run just the installer/setup tests: `npm run playwright:setup`',
366
+
'To target a single shard: `npm run playwright -- --shard=\'2/6\'`',
367
+
],
368
+
},
348
369
'Node': {
349
370
purpose: 'Builds JavaScript/TypeScript/Vue assets and verifies no uncommitted compiled files remain.',
350
371
fix: [
@@ -406,6 +427,17 @@ jobs:
406
427
'To fix bad messages: `git rebase -i HEAD~N`, change `pick` to `reword` for each commit to rename, save, then update the messages when prompted. Force-push when done.',
407
428
],
408
429
},
430
+
'AI Policy': {
431
+
purpose: 'Scans PR commit messages for coding-agent trailers. Labels the PR "AI assisted" if it finds an `Assisted-by`/`AI-Assisted-By` trailer, or an agent-associated `Signed-off-by`/`Co-Authored-By`. Fails only if a coding agent itself appears in `Signed-off-by`, since the DCO sign-off can only be attested by a human.',
432
+
flaky: true,
433
+
flakiness_note: 'Known bug on fork PRs (nextcloud/.github#767): the label-write step 403s because GitHub forces a read-only token on pull_request runs from forks, and that failure isn\'t guarded with `|| true` — so it can fail the whole job even when there\'s no real trailer violation. If the log only shows a 403 on label creation/assignment and no "Offending trailer(s)" section, this is that known issue, not a real problem with your commits.',
434
+
fix: [
435
+
'First check the job log for an actual "Offending trailer(s)" section — if it\'s just a label-write 403 with no trailers listed, this is the known fork-PR bug (nextcloud/.github#767); a maintainer re-run from the base repo, or the upstream fix, resolves it — no action needed on your commits.',
436
+
'If there IS a genuine offending trailer: amend the commit(s) to remove the agent `Signed-off-by` line, and add your own human sign-off plus an `Assisted-by` trailer instead, e.g.: `Assisted-by: Claude Code:claude-sonnet-4-6`',
437
+
'Use `git commit --amend -s` (or an interactive rebase for older commits), then `git push --force-with-lease`.',
438
+
'See `AGENTS.md` in this repo and https://github.com/nextcloud/.github/blob/master/AI_POLICY.md for the full policy.',
439
+
],
440
+
},
409
441
'Block merging with outdated 3rdparty/': {
410
442
purpose: 'Ensures the `3rdparty/` submodule points to the latest commit on the target branch.',
0 commit comments