Skip to content

Commit bc14d46

Browse files
committed
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>
1 parent c056d48 commit bc14d46

2 files changed

Lines changed: 35 additions & 3 deletions

File tree

.github/workflows/ci-bot.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,16 @@ jobs:
149149
'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.',
150150
],
151151
},
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+
},
152162
'PHPUnit sharding': {
153163
purpose: 'Runs PHPUnit tests with database sharding enabled, where data is distributed across multiple MySQL instances.',
154164
fix: [
@@ -345,6 +355,17 @@ jobs:
345355
'Ensure your local Nextcloud instance is running before executing Cypress.',
346356
],
347357
},
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+
},
348369
'Node': {
349370
purpose: 'Builds JavaScript/TypeScript/Vue assets and verifies no uncommitted compiled files remain.',
350371
fix: [
@@ -406,6 +427,17 @@ jobs:
406427
'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.',
407428
],
408429
},
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+
},
409441
'Block merging with outdated 3rdparty/': {
410442
purpose: 'Ensures the `3rdparty/` submodule points to the latest commit on the target branch.',
411443
fix: [

autotest.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,10 +449,10 @@ function execute_tests {
449449
if [ ! -z "$USEDOCKER" ] ; then
450450
echo "Fire up the Memcached docker"
451451
DOCKER_SERVICE_CONTAINER_ID=$(docker run -d \
452-
-p 11212:11212 \
453-
memcached memcached -p 11212)
452+
-p 11211:11211 \
453+
ghcr.io/nextcloud/continuous-integration-memcached:latest)
454454
echo "Waiting for Memcached initialisation ..."
455-
if ! apps/files_external/tests/env/wait-for-connection localhost 11212 30; then
455+
if ! apps/files_external/tests/env/wait-for-connection localhost 11211 30; then
456456
echo "[ERROR] Waited 30 seconds, no Memcached response" >&2
457457
exit 1
458458
fi

0 commit comments

Comments
 (0)