0.0
No release in over 3 years
Adds parallel execution, fail-fast, resume, and plain output to Rails' local CI runner.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies
 Project Readme

local_ci_plus

local_ci_plus improves Rails local CI for both developers and agents with parallel execution, fail-fast, resume, and plain output.

parallel.mp4

Installation

Add to your Gemfile:

gem "local_ci_plus"

Then run:

bundle install

Usage

local_ci_plus overrides ActiveSupport::ContinuousIntegration when it is loaded, so the default Rails bin/ci continues to work without changes. In plain/non-TTY mode, output is ASCII-only.

bin/ci

If your app does not already require the gem in bin/ci, run the installer generator:

bin/rails generate local_ci_plus:install

If you already have a bin/ci and want to patch it in place, run:

bin/rails generate local_ci_plus:update

If you want to edit bin/ci manually, add require "local_ci_plus" right after the boot file:

#!/usr/bin/env ruby
require_relative "../config/boot"
require "local_ci_plus"
require_relative "../config/ci"

Options

-f, --fail-fast   Stop immediately when a step fails
-c, --continue    Resume from the last failed step
-fc, -cf          Combine fail-fast and continue
-p, --parallel    Run all steps concurrently
--plain           Disable ANSI cursor updates/colors (also used for non-TTY)
-h, --help        Show this help

Compatibility:
  --parallel cannot be combined with --fail-fast or --continue

State file

By default, the first failing step is stored in tmp/ci_state. Set CI_STATE_FILE to override the path. To reset the resume point, delete the file.

Development

Run tests:

bundle exec ruby -Itest test/continuous_integration_test.rb

Run linting:

bundle exec standardrb

Or run them both:

bin/ci --parallel

Publishing Updates

  1. Bump the version in lib/local_ci_plus/version.rb.
  2. Build and push:
gem build local_ci_plus.gemspec
gem push local_ci_plus-X.Y.Z.gem

Prior Work

This project is based off of ActiveSupport::ContinuousIntegration.

Many thanks to the Rails team for shipping the original work.