Installation

Add this line to your application's Gemfile:

gem 'ci-queue'

And then execute:

$ bundle

Or install it yourself as:

$ gem install ci-queue

Usage

Supported CI providers

ci-queue automatically infers most of its configuration if ran on one of the following CI providers:

  • Buildkite
  • CircleCI
  • Travis
  • Heroku CI
  • Semaphore 2

If you are using another CI system, please refer to the command usage message.

Minitest

Assuming you use one of the supported CI providers, the command can be as simple as:

minitest-queue --queue redis://example.com run -Itest test/**/*_test.rb

Additionally you can configure the requeue settings (see main README) with --max-requeues and --requeue-tolerance.

If you'd like to centralize the error reporting you can do so with:

minitest-queue --queue redis://example.com --timeout 600 report

The runner also comes with a tool to investigate leaky tests:

minitest-queue --queue path/to/test_order.log --failing-test 'SomeTest#test_something' bisect -Itest test/**/*_test.rb

RSpec [DEPRECATED]

The rspec-queue runner is deprecated. The minitest-queue runner continues to be supported and is actively being improved. At Shopify, we strongly recommend that new projects set up their test suite using Minitest rather than RSpec.

Assuming you use one of the supported CI providers, the command can be as simple as:

rspec-queue --queue redis://example.com

If you'd like to centralize the error reporting you can do so with:

rspec-queue --queue redis://example.com --timeout 600 --report

Limitations

Because of how ci-queue executes the examples, before(:all) and after(:all) hooks are not supported. rspec-queue will explicitly reject them.

Custom Redis Expiry

ci-queue expects the Redis server to have an eviction policy of allkeys-lru.

You can also use --redis-ttl to set a custom expiration time for all CI Queue keys, this defaults to 8 hours (28,800 seconds)