Skip to content

feat(ci): add /explain-ci bot command for PR failure help#60821

Draft
miaulalala wants to merge 1 commit into
masterfrom
feat/noid/explain-ci-bot
Draft

feat(ci): add /explain-ci bot command for PR failure help#60821
miaulalala wants to merge 1 commit into
masterfrom
feat/noid/explain-ci-bot

Conversation

@miaulalala
Copy link
Copy Markdown
Contributor

Summary

  • Adds .github/workflows/ci-bot.yml: a new slash-command bot triggered by commenting /explain-ci on any pull request
  • When invoked, nextcloud-bot reacts 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 locally
  • Covers all ~40 developer-facing PR workflows with specific fix instructions

How it works

The bot uses the issue_comment trigger (same pattern as /compile and /update-3rdparty), so it has access to COMMAND_BOT_PAT and works on fork PRs too. It:

  1. Fetches all completed workflow runs for the PR's current commit SHA via the Actions API
  2. Deduplicates by workflow name (takes the most recent run per workflow)
  3. Looks up each failing workflow in a static explanation map
  4. Posts a formatted summary — or a "no failures found" message if everything is green

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.

Example usage

Comment /explain-ci on a PR with failing checks → nextcloud-bot replies:

CI failure summary

Found 2 failing check(s) on commit abc1234:


Lint eslint

What this checks: Checks JavaScript/TypeScript/Vue source files for ESLint rule violations.

How to fix locally:

  • Run npm run lint to see all violations.
  • Run npm run lint:fix to auto-fix many of them, then review remaining errors manually.

View failed run

Test plan

  • Comment /explain-ci on a PR with at least one failing check → bot reacts with 👍 and posts summary
  • Comment /explain-ci on a PR where all checks pass → bot replies "no failing checks found"
  • Comment /explain-ci on a fork PR → bot works (issue_comment runs in base repo context)
  • Re-run a failed check, then comment /explain-ci → only still-failing checks appear in summary

🤖 Generated with Claude Code

@miaulalala miaulalala requested a review from a team as a code owner May 28, 2026 20:42
@miaulalala miaulalala requested review from ArtificialOwl, icewind1991, leftybournes and salmart-dev and removed request for a team May 28, 2026 20:42
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>
@miaulalala miaulalala marked this pull request as draft May 28, 2026 21:18
@miaulalala miaulalala force-pushed the feat/noid/explain-ci-bot branch from 2a82f09 to a893f1f Compare May 28, 2026 21:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant