Add Buildkite CI pipeline (Sorbet, Rubocop, tests)#74
Open
dduugg wants to merge 3 commits into
Open
Conversation
Adds a Buildkite pipeline mirroring the current GitHub Actions CI: Sorbet type-check, Rubocop, and the minitest suite across Ruby 3.3, 3.4, and 4.0. Each step runs in a Docker container built from Dockerfile.test (ripgrep installed for packwerk; Bundler pinned to 4.0.7 to match Gemfile.lock). The Gusto-internal gemstash mirror is left commented out so the image builds on public agents. Also simplifies the dependabot-tapioca workflow back to a plain push. Buildkite builds the RBI commit via its webhook integration regardless of the pushing credential, so the GITHUB_TOKEN recursion guard that previously left RBI commits without CI status no longer applies.
dkisselev
approved these changes
Jun 2, 2026
Public repo only uses public gems, so drop the commented-out internal mirror config and reword the publish note to not name internal infra.
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
Adds a Buildkite pipeline that runs the same checks as our current GitHub Actions CI — Sorbet, Rubocop, and the minitest suite — bringing this repo onto Gusto's standard CI tool.
Why
While investigating why CI didn't appear on #73, the root cause turned out to be that the
dependabot-tapiocaworkflow pushes the regenerated-RBI commit using the defaultGITHUB_TOKEN. GitHub Actions intentionally ignores pushes made withGITHUB_TOKEN(a recursion guard), so the RBI commit becomes the PR HEAD with no CI status — making it look like nothing ran (and hiding a real Rubocop failure on that PR).Buildkite isn't subject to that guard: it builds commits via its GitHub webhook integration regardless of who pushed them. So moving CI to Buildkite fixes the re-trigger gap inherently — no GitHub App token or PAT needed.
What's included
.buildkite/pipeline.yml—:sorbet:(srb tc),:rubocop:, and:minitest:(rake test) across a Ruby 3.3 / 3.4 / 4.0 matrix (matches the gemspec's>= 3.3and the prior shared-config matrix). Each step runs via thedocker-compose#v5.6.0plugin..buildkite/docker-compose.yml— buildsDockerfile.test, passingRUBY_VERSION(default 3.4, overridden per matrix entry) and forwarding the standardBUILDKITE_*env vars.Dockerfile.test—ruby:${RUBY_VERSION}base; installs ripgrep (packwerk needs it); pins Bundler to 4.0.7 to matchGemfile.lock'sBUNDLED WITH; layer-caches the bundle. Gems install from rubygems.org..github/workflows/dependabot-tapioca.yml— simplified back to a plaingit push(the inlinesrb tcworkaround is no longer needed, since Buildkite now runs the full suite against the RBI commit).Gem publishing is intentionally not moved here — it stays in
cd.yml. Moving it would require publish credentials available only on dedicated agents.Verification (local)
Built
Dockerfile.testfor Ruby 3.4 and ran each command in-container:bundle exec rake test→ 88 runs, 0 failuresbundle exec srb tc→ No errorsbundle exec rubocop→ 67 files, no offensesAll three YAML files parse.
Follow-up (requires Buildkite-org admin — not in this PR)
buildkite-agent pipeline upload .buildkite/pipeline.ymlas the bootstrap step. (This repo is public, so it belongs in the dedicatedgusto-open-sourceorg, not the main internal Gusto org.).github/workflows/ci.ymland update branch-protection required checks from the Actions jobs to the Buildkite check.Open questions for reviewers
ci.ymlrunning in parallel during the transition (suggested), or remove it in this PR?