Let prose-only commits skip CI

AGENTS.md now asks for the skip-ci marker at the end of the subject line
of a commit that only edits the text of existing documentation files,
and in the PR title. The subject is the one place both CI systems look:
GitHub Actions accepts the marker anywhere in the message, AppVeyor
reads the first line only. PR #3520 had it on the second line, and
AppVeyor built it anyway.

The rule lists what does not count as prose, and why. It also covers
the reverse case: GitHub matches the marker even inside quotes, and a
squash message built from a PR description takes in the template's
checklist line. That is how ab178fbf2 and 3f6d8a57c, both code changes,
reached master without a CI run.

The marker also skips the tool-internal links check, which runs on
pull_request, so the rule asks for a manual look at the message and the
PR text. The pre-PR checklist in section 8 gains the matching line.

pypi.yml no longer runs on changes to doc/ReleaseManagement.md. The
workflow builds and checks the Python sdist and wheels and never reads
that file, so the path only pulled wording changes to the release guide
into a full CI run.

This commit changes a workflow, so it is not prose-only and carries no
marker.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jens GeyerandClaude Opus 5 authored and Jens Geyer committed 2026-09-20 01:35:24 +02:00
1 parent 12dcbffd5c
commit 1f9ebe6d9a
2 files changed
+24 -1

No files matched your search

-1
View File
@@ -27,7 +27,6 @@ on:
- master
paths:
- ".github/workflows/pypi.yml"
- "doc/ReleaseManagement.md"
- "lib/py/MANIFEST.in"
- "lib/py/pyproject.toml"
- "lib/py/setup.cfg"
+24
View File
@@ -120,6 +120,29 @@ authentication, serialization bounds, or anything flagged by the project's secur
or mix fixes into existing/unrelated work unless told otherwise.
- Follow a strict test-first workflow: write or update tests demonstrating the bug BEFORE applying the fix,
and inspect any generated code before changing it.
- **Prose-only changes skip CI.** A commit that only edits the text of existing documentation
files ends its subject line with `[skip ci]`, and the PR title carries it too:
```
THRIFT-9999: Clarify the TLS options in lib/cpp/README.md [skip ci]
```
GitHub then runs none of the `push` and `pull_request` workflows for it, and AppVeyor skips
the build.
- Only the subject line works for both: AppVeyor ignores the rest of the message. A squash
merge of several commits takes its subject from the PR title.
- Not prose-only, so no marker: source code, comments and doc comments included; build,
packaging and CI files; tests and test data (`compiler/cpp/test/compiler/DocTest.md` is a
golden file, not documentation); adding, removing or renaming a file. `EXTRA_DIST` in the
`Makefile.am` files lists documentation files by name: a removed or renamed one breaks the
`make dist` job, and a new one needs an entry of its own, which no CI job asks for. Several
package manifests name a README, too. When in doubt, leave the marker out.
- The marker can skip CI for everything pushed along with it, so push a marked commit on its
own. When a review round adds anything but prose, drop the marker as you amend.
- GitHub also matches the marker when it is quoted. A commit that is not prose-only must not
contain it, or GitHub's variants `[ci skip]`, `[no ci]`, `[skip actions]` and
`[actions skip]`, anywhere in its message. A squash message built from a PR description
picks it up from the checklist in the PR template.
- The marker also stops the tool-internal links check (§4) from running, so check the commit
message (`git log --format=%B`) and the PR text yourself before pushing.
---
@@ -131,6 +154,7 @@ authentication, serialization bounds, or anything flagged by the project's secur
- [ ] PR title starts with `THRIFT-NNNN:` (if ticket exists)
- [ ] Commit message includes affected `Client:` languages
- [ ] Single squashed commit
- [ ] Prose-only change: `[skip ci]` ends the commit subject and the PR title; any other change: no such marker anywhere in the commit message
- [ ] Tests added or updated
- [ ] `make style` passes
- [ ] AI authorship labelled with `Co-Authored-By:` / `Generated-by:` where applicable