Filter `bin/ci` by group or step

bin/ci currently runs the whole config/ci.rb workflow. With parallel groups (#56774) now being supported, that file is a good place to declare independent local checks, but there is still no way to run just one group or step without copying the command outside the CI runner (and losing CI=true / shared options like --fail-fast).

I’d like to add small selectors:

bin/ci -g style
bin/ci --group Style
bin/ci -s "Style: Ruby"
bin/ci --help

Example config:

group "Style", parallel: 4 do
  step "Style: Ruby", "bin/rubocop"
  step "Style: ERB", "bin/erb_lint"
  step "Style: JavaScript", "yarn lint"
  step "Style: CSS", "yarn stylelint"
end

bin/ci -g style would run that group with its existing parallel behavior. Matching is exact and case-insensitive (not substring/regex), so a later Styles group or Security: Gem audit update step does not get pulled in by accident. --group and --step can be repeated, combining them ANDs the filters. A filtered run that matches nothing exits nonzero. Unselected steps are simply skipped, partial runs are not full CI.

This continues the local-CI ergonomics line of #56194 (--fail-fast) and #56774 (groups). Implementation stays inside ActiveSupport::ContinuousIntegration (OptionParser + selection through sequential/parallel groups), no new public types.

I have a focused patch with tests ready. Any objection to exact --group / --step (vs a single --only or pattern matching like routes -g)?

PR opened: Add group and step filtering to bin/ci by thibaudgg · Pull Request #58333 · rails/rails · GitHub