Skip to content

Gate PRs on the full test suite, not just after merge - #6699

Draft
dayaffe wants to merge 8 commits into
mainfrom
david-yaffe/gate-prs-on-full-test-suite
Draft

Gate PRs on the full test suite, not just after merge#6699
dayaffe wants to merge 8 commits into
mainfrom
david-yaffe/gate-prs-on-full-test-suite

Conversation

@dayaffe

@dayaffe dayaffe commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Adds a required full-test-suite check (make test-all: all-features + failpoints + every broker backend — Kafka, Pulsar, Azurite, fake-GCS, Pub/Sub emulator, LocalStack, Postgres). Today that suite only runs post-merge via coverage.yml; ci.yml only exercises 2 of ~15 feature flags on PRs, so a broken optional feature or broker integration can land on main before anyone notices.

full-tests.yml runs only via workflow_dispatch, triggered by full-tests-trigger.yml when a PR comment starting with /ci-run-full-tests is posted by someone holding maintain/admin permission on the repo (checked via the API, not just comment/review association).

full-tests.yml also has a temporary pull_request: trigger active right now (clearly marked in the file) to confirm the job graph passes on this PR before merge; it will be removed before this goes in.

coverage.yml runs make test-all (all-features + failpoints + every
broker backend) only on push to main, so broken optional features or
broker integrations land on main before anyone notices. Add a
pull_request-triggered workflow that runs the same suite before merge.
apt's protobuf-compiler doesn't support proto3 optional fields by
default, which the substrait crate (pulled in by --all-features via
the datafusion feature) requires. coverage.yml already works around
this the same way; this job needs it too since it now builds with
--all-features.
Running the full broker/all-features suite unconditionally on every PR
push doesn't match how the team already runs CI on the sibling vector
repo: there, the equivalent full suite is merge-queue- or
maintainer-comment-gated, never automatic-for-everyone.

full-tests.yml now only runs via workflow_dispatch. The new
full-tests-trigger.yml fires on a submitted PR review whose body
starts with /ci-run-full-tests, checks the reviewer's actual
repos.getCollaboratorPermissionLevel (maintain/admin — not
author_association, which can't distinguish write-only collaborators
from maintainers), sets a pending commit status, and dispatches the
run against the reviewed commit. It's still a required status check:
since only maintain/admin reviewers can trigger it and that's also
who can merge, a PR can't merge without that same person having run
and passed the full suite themselves.
full-tests.yml:
- Split status-posting into its own jobs (set-pending, report-status)
  so the job that checks out and runs untrusted PR content
  (full-tests) never holds statuses:write — previously that job could
  have forged a passing status onto any commit via the token
  persisted by actions/checkout during `make test-all`.
- persist-credentials: false on that checkout, since it doesn't need
  git credentials at all.
- Validate inputs.sha/inputs.pr_number to a strict shape
  (validate-inputs) before any other job trusts them, and pass them
  to github-script via env:/process.env rather than templating into
  script source — workflow_dispatch inputs are free-text fields
  anyone with repo write access can set to anything via the Actions
  UI/API, so a crafted value could otherwise break out of a string
  literal in a step holding statuses:write.

full-tests-trigger.yml:
- Bind the permission check to
  github.event.review.user.login (who actually submitted the review)
  instead of context.actor (whoever triggered this workflow run) —
  those differ on a manual re-run, where actor becomes the re-runner
  while the review payload stays frozen from the original event.
Comment thread .github/workflows/full-tests.yml Fixed
Comment thread .github/workflows/full-tests.yml Fixed
Comment thread .github/workflows/full-tests.yml Fixed
Comment thread .github/workflows/full-tests.yml Fixed
@dayaffe

dayaffe commented Aug 17, 2026

Copy link
Copy Markdown
Contributor Author

/ci-run-full-tests

pull_request_review requires using Files changed -> Review changes ->
Submit review with the command as the review body; a normal comment
on the Conversation tab (issue_comment) doesn't fire it, which is
exactly how the first real attempt to use this failed. issue_comment
has no commit sha the way a submitted review does, so this resolves
the PR's current head sha itself via pulls.get before posting status
or dispatching.
Only running the redesigned validate-inputs/set-pending/full-tests/
report-status split, the protoc fix, and the docker-compose service
setup once so far, on a maintainer-comment trigger that can't fire
until this merges to main. Adding pull_request: here to actually see
it pass before switching the real trigger on. Doesn't post commit
statuses on pull_request runs (gated to workflow_dispatch only) so
this can't accidentally satisfy the same-named required check on
other PRs in the repo. Remove this trigger and the two workflow_
dispatch-only conditions before merging.
gh-ubuntu-arm64 killed the job at ~8 minutes on two separate runs
(7m45s and 7m35s), both mid-compile, both with a runner shutdown
signal rather than a test failure or our own timeout-minutes. Matches
how vector's CI (test.yml) runs everything on plain GitHub-hosted
runners (ubuntu-24.04, ubuntu-24.04-8core for the heavy jobs) rather
than a custom label. Starting with the standard tier since we can't
confirm quickwit-oss has GitHub's larger-runner tier provisioned.
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.

2 participants