feat(ci): add /explain-ci bot command for PR failure help#60821
Draft
miaulalala wants to merge 3 commits into
Draft
feat(ci): add /explain-ci bot command for PR failure help#60821miaulalala wants to merge 3 commits into
miaulalala wants to merge 3 commits into
Conversation
Adds a new GitHub Actions workflow that responds to `/explain-ci` comments on pull requests. When triggered, nextcloud-bot posts a summary of all currently-failing CI checks with a plain-language description of what each check validates and step-by-step local fix instructions. Covers all 40 developer-facing PR workflows: PHPUnit (all DB backends), linting (ESLint, Stylelint, PHP, PHP-CS-Fixer), Psalm, Cypress, Node build/tests, REUSE, OpenAPI, Rector, Behat integration tests, external storage tests, object storage tests, block checks (fixup commits, conventional commits, outdated 3rdparty), Code checkers, and CodeQL. Uses the same slash-command pattern as /compile and /update-3rdparty: issue_comment trigger (works on fork PRs), COMMAND_BOT_PAT for bot identity, and peter-evans/create-or-update-comment for the +1 reaction acknowledgement. AI-Assisted-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Anna Larch <anna@nextcloud.com>
2a82f09 to
a893f1f
Compare
Adds two improvements to the developer testing experience:
1. /explain-ci bot (.github/workflows/ci-bot.yml)
- Triggered by commenting /explain-ci on any PR
- nextcloud-bot replies with a summary of all currently-failing
checks: what each one validates and how to fix it locally
- Separates known-flaky checks (Cypress, MySQL race, external
services) from checks that need investigation
- Covers all 40 PR-facing workflows with specific fix commands,
Docker run instructions, and composer script references
2. Docker service support in autotest.sh
- PRIMARY_STORAGE_CONFIG=s3: spins up minio/minio for S3 primary
object store tests (preseed-config.php already handles the config
via OBJECT_STORE env vars)
- PRIMARY_STORAGE_CONFIG=azure: spins up Azurite for Azure primary
object store tests
- ENABLE_MEMCACHE=memcached with USEDOCKER=1: spins up Memcached
on port 11212; adds tests/memcached.config.php
- EXTERNAL_STORAGE=ftp|sftp|smb|webdav|amazons3: full self-contained
flow — installs Nextcloud with SQLite, enables files_external,
spins up the appropriate Docker service, writes the config.X.php,
runs the storage test suite, cleans up
- Pre-flight checks for missing system dependencies (php-memcached,
smbclient) with clear install instructions before any work is done
- print_syntax updated with all new environment variables
AI-Assisted-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Anna Larch <anna@nextcloud.com>
AI-Assisted-By: claude-sonnet-4-6 <noreply@anthropic.com> Signed-off-by: Anna Larch <anna@nextcloud.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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, sharding, primary object store, all files_external backends), ESLint, Stylelint, PHP lint, PHP-CS-Fixer, Psalm, Cypress, 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/), and CodeQL.
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=1tests/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 — no manual cleanup needed. Pre-flight checks catch missing system dependencies (e.g.
php-smbclient,smbclientbinary) before wasting time on an install.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.sh→ all FTP tests passEXTERNAL_STORAGE=amazons3 NOCOVERAGE=1 ./autotest.sh→ all S3 tests passPRIMARY_STORAGE_CONFIG=s3 USEDOCKER=1 NOCOVERAGE=1 ./autotest.sh sqlite lib/Files/ObjectStore/S3Test.php→ MinIO tests pass🤖 Generated with Claude Code