Skip to content

Overview

Selective is a test orchestration service for Ruby suites. You keep your CI provider, your test framework and your nodes. You add a gem, swap one command, and each CI node connects to Selective for its share of the work.

From that point Selective does four things to a run:

  • Test selection. For each change, it runs only the tests that could be affected, using a map of which files each test executes. Everything else is skipped. See How test selection works.
  • Queue distribution. Tests are handed to nodes from one central queue as nodes free up, so no node sits idle while another finishes a heavy file. See Queue distribution.
  • Flake handling. A failing test is retried immediately on another node while the run continues. A pass on retry is recorded as a flake, tracked over time, and can be quarantined. See Flakes and retries.
  • Live results. Results stream to the dashboard and to the selective CLI as tests finish, so people and coding agents can react before the run is over. See Real-time results.
Supported
Test frameworksRSpec (selective-ruby-rspec), Minitest (selective-ruby-minitest)
Detected automaticallyGitHub Actions, CircleCI, Semaphore, Buildkite, RWX
Any other CIYes, by setting a few environment variables
Ruby platformsx86_64-linux, aarch64-linux, x86_64-darwin, arm64-darwin
Git hostsGitHub, GitLab, Bitbucket
  1. Each CI node runs bundle exec selective rspec (or selective minitest) instead of the plain test command.
  2. The runner connects to Selective over a WebSocket and sends the run’s context (branch, commit, run and attempt identifiers) and the list of tests it can see.
  3. Selective decides which tests the run needs, orders them so the ones most likely to fail go first, and feeds them to whichever node asks next.
  4. Results stream back as each test finishes. Failures are retried on another node. When the queue is empty the run is complete.

Selective is free while in open beta. Questions go to [email protected].