feat(ci): add /explain-ci bot command for PR failure help - #60821
feat(ci): add /explain-ci bot command for PR failure help#60821miaulalala wants to merge 2 commits into
Conversation
063c0a7 to
a767e76
Compare
| with: | ||
| github-token: ${{ secrets.COMMAND_BOT_PAT }} | ||
| script: | | ||
| const WORKFLOW_EXPLANATIONS = { |
There was a problem hiding this comment.
I fear that the keys will get out of sync and we won't notice. I don't have a good solution for it though.
There was a problem hiding this comment.
Ah, you mean the workflow names? Well, no use worrying about it for now. This is a test run more or less. If the bot works well for our community contributors, we can move it to the workflow repo and find a different solution for it.
- Adds `.github/workflows/ci-bot.yml`: slash command `/explain-ci` on
any PR triggers nextcloud-bot to post a summary of all currently-
failing checks with purpose, fix steps, Docker commands, and
prerequisites. Covers all ~40 PR-facing workflows. Uses the
`issue_comment` trigger (works on fork PRs) and posts via
`COMMAND_BOT_PAT`, matching the `/compile` and `/update-3rdparty`
pattern.
- Extends `autotest.sh` with Docker-backed service helpers so external-
service CI failures can be reproduced locally without manual setup:
- `EXTERNAL_STORAGE=ftp/sftp/smb/webdav/amazons3` — spins up the
relevant service container, installs Nextcloud, enables
files_external, runs the storage tests, and tears down the container
- `PRIMARY_STORAGE_CONFIG=s3/azure USEDOCKER=1` — spins up MinIO or
Azurite as primary object store
- `ENABLE_MEMCACHE=memcached USEDOCKER=1` — spins up Memcached
- Pre-flight checks warn about missing system dependencies before
wasting time on an install
- Adds `tests/memcached.config.php` for Memcached cache configuration
AI-Assisted-By: claude-sonnet-4-6 <noreply@anthropic.com>
Signed-off-by: Anna Larch <anna@nextcloud.com>
…n-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>
a767e76 to
bc14d46
Compare
|
Nice idea! I fear this will get out of sync very quickly with what workflows do etc. Why not instead improve the failing workflows?
Which could of course improved, a bit. But then you directly can see why it failed and also you can explain what it does. |
Summary
.github/workflows/ci-bot.yml: a new slash-command bot triggered by commenting/explain-cion any pull requestnextcloud-botreacts to the comment with 👍 and posts a single summary of all currently-failing CI checks, explaining what each one validates and how to fix it locallyautotest.shwith Docker-backed service helpers for local reproduction of external-service CI failuresHow the bot works
The bot uses the
issue_commenttrigger (same pattern as/compileand/update-3rdparty), so it has access toCOMMAND_BOT_PATand works on fork PRs too. It:Workflows covered
All PHPUnit variants (SQLite, MariaDB, MySQL, PostgreSQL, OCI, nodb, 32bits, memcached, key-value store, sharding, primary object store, all files_external backends), ESLint, Stylelint, PHP lint, PHP-CS-Fixer, Psalm, Cypress, Playwright, Node build/tests, REUSE, OpenAPI, Rector, Behat integration tests (DAV, Litmus, SQLite), object storage tests (S3, Azure, Swift), Samba Kerberos SSO, Code checkers, block checks (fixup commits, unconventional commits, outdated 3rdparty/), AI Policy, and CodeQL.
The AI Policy entry also flags a known issue on fork PRs (nextcloud/.github#767): the label-write step can 403 and fail the whole job even when there is no real trailer violation. The bot's explanation calls this out so contributors do not mistake it for a real policy failure.
New
autotest.shDocker service helpersautotest.shnow supports spinning up Docker-backed external services automatically, making it possible to reproduce CI failures locally without any manual container setup:EXTERNAL_STORAGE=ftpfiles_externalFTP testsEXTERNAL_STORAGE=sftpfiles_externalSFTP testsEXTERNAL_STORAGE=smbfiles_externalSMB testsEXTERNAL_STORAGE=webdavfiles_externalWebDAV testsEXTERNAL_STORAGE=amazons3files_externalS3 testsPRIMARY_STORAGE_CONFIG=s3 USEDOCKER=1PRIMARY_STORAGE_CONFIG=azure USEDOCKER=1ENABLE_MEMCACHE=memcached USEDOCKER=1ghcr.io/nextcloud/continuous-integration-memcached), copiestests/memcached.config.phpEach helper installs Nextcloud, enables the relevant app/config, waits for the service to be healthy, runs the tests, and tears down the container, so there is no manual cleanup needed. Pre-flight checks catch missing system dependencies (e.g.
php-smbclient,smbclientbinary) before wasting time on an install.I checked for existing overlap before adding these:
autotest-external.shand theapps/files_external/tests/env/start-*.shscripts cover similar ground for files_external backends, but current CI (e.g.files-external-ftp.yml) no longer calls them, it sets up services directly in the workflow instead. Those scripts are legacy and unused by CI today; removing them is a separate cleanup and out of scope here.Example usage
Comment
/explain-cion a PR with failing checks.nextcloud-botreplies:Test plan
/explain-cion a PR with at least one failing check, bot reacts with 👍 and posts summary/explain-cion a PR where all checks pass, bot replies "no failing checks found"/explain-cion a fork PR, bot works (issue_comment runs in base repo context)/explain-ci, only still-failing checks appear in summaryEXTERNAL_STORAGE=ftp NOCOVERAGE=1 ./autotest.shruns all FTP tests and passesEXTERNAL_STORAGE=amazons3 NOCOVERAGE=1 ./autotest.shruns all S3 tests and passesPRIMARY_STORAGE_CONFIG=s3 USEDOCKER=1 NOCOVERAGE=1 ./autotest.sh sqlite lib/Files/ObjectStore/S3Test.phpruns MinIO tests and passesENABLE_MEMCACHE=memcached USEDOCKER=1 NOCOVERAGE=1 ./autotest.sh sqlite lib/Path/To/SpecificTest.phpstarts Memcached on port 11211 and passesNote on upcoming compiled-assets change
Per the engineering list announcement (2026-07-21), asset compilation is moving out of the PR workflow into a post-merge step starting early August 2026, with a new check to reject PRs that include compiled assets. That workflow (
update-node-dist.yml) is not on master yet, so the bot does not cover it in this PR. Once it lands, the Node explanation entry should be revisited and a new entry added for the compiled-assets check.🤖 Generated with Claude Code