Project

dmatrix

0.0
No commit activity in last 3 years
No release in over 3 years
Docker matrix runner with parallel execution
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.5
>= 0
>= 0
~> 3.8

Runtime

~> 1.13
~> 4.5
 Project Readme

Dmatrix

Docker matrix. Parallel execution of each possible combination defined in your matrix file.

The matrix file can contain build_arg and env values which will be passed to Docker during the image build and execution of your command.

Inspired by the Travis Build Matrix.

Example

.matrix.yaml

matrix:
  build_arg:
    FROM_IMAGE:
      - ruby:2.4-alpine
      - ruby:2.5-alpine
      - ruby:2.6-alpine
    BUNDLE_GEMFILE:
      - gemfiles/factory_bot_4_8.gemfile
      - gemfiles/factory_bot_5.gemfile

This would produce six combinations. In this example the gemfiles are created with the Appraisal gem.

Dockerfile

ARG FROM_IMAGE=ruby:2.6-alpine
FROM $FROM_IMAGE

RUN apk update && \
    apk add git && \
    mkdir -p /app/lib/my_gem

WORKDIR /app

COPY Gemfile* my_gem.gemspec Appraisals /app/
COPY gemfiles/*.gemfile /app/gemfiles/
COPY lib/my_gem/version.rb /app/lib/my_gem/version.rb

ARG BUNDLE_GEMFILE=Gemfile
ENV BUNDLE_GEMFILE=$BUNDLE_GEMFILE

RUN bundle install --jobs=4 --retry=3

COPY . /app

Running a command

bundle exec dmatrix -- bundle exec rspec

This would use dmatrix to build & run bundle exec rspec for each combination your matrix defines. In your terminal you should see output like this:

my_repo:ruby-2-4-alpine-gemfiles-factory_bot_4_8-gemfile   Build: success  Run: success
my_repo:ruby-2-4-alpine-gemfiles-factory_bot_5-gemfile     Build: success  Run: success
my_repo:ruby-2-5-alpine-gemfiles-factory_bot_4_8-gemfile   Build: success  Run: success
my_repo:ruby-2-5-alpine-gemfiles-factory_bot_5-gemfile     Build: success  Run: success
my_repo:ruby-2-6-alpine-gemfiles-factory_bot_4_8-gemfile   Build: success  Run: success
my_repo:ruby-2-6-alpine-gemfiles-factory_bot_5-gemfile     Build: success  Run: success

A build-log and run-log is written per combination in ./tmp/dmatrix:

build-dmatrix-ruby-2-4-alpine-gemfiles-factory_bot_4_8-gemfile.log
run-dmatrix-ruby-2-4-alpine-gemfiles-factory_bot_4_8-gemfile.log
# etc

Setup

Get the gem

# Gemfile

gem "dmatrix"

Create a matrix

Create a .matrix.yaml file:

matrix:
  build_arg:
    ARG1:
      - abc
      - def
  env:
    ENV1:
      - 123
      - 456

N.B. the build_arg and env keys can both contain multiple variants.

Adapt your Dockerfile

Wire-up the ARG and ENV variables as required.

Run

bundle exec dmatrix -- <your command>

If no command is specified the default Docker command will run.