Skip to main content

Batect

Keep your builds green and developers happy with the fast, consistent way to run your development and testing tasks everywhere.

Fast

Tasks are fast to start due to parallelisation and fast to run thanks to caching. We’ve seen 17% quicker execution than Docker Compose.

Save time and share tasks between projects with bundles, and use existing bundles to get up and running quickly.

Consistent

Free yourself from manual setup and maintenance of tools and dependencies: run builds, integration tests or deployments with a single command whether it’s the first time you’re using the project or the fiftieth.

And because Batect uses Docker to create a clean, isolated environment every time you run a task, there’s no more “works on my machine”.

Everywhere

Your machine, your colleagues’ machines and CI: everyone runs exactly the same thing, every time. Works on macOS, Linux and even Windows.

No installation required. Just drop the script in your project and run ./batect.

Hello world in less than 30 seconds

batect.yml
containers:
my-container:
image: alpine:3.18.4

tasks:
say-hello:
description: Say hello to everyone
run:
container: my-container
command: echo 'Hello world!'
$ # Let's see what tasks are available                                                                                                                                                                                                                                                                                                                                                                          $ ./batect --list-tasks                                                                                                                                                                                 Available tasks:                                                                                                                                                                                        - say-hello: Say hello to everyone                                                                                                                                                                                                                                                                                                                                                                              $ # Let's run our task                                                                                                                                                                                                                                                                                                                                                                                          $ ./batect say-hello                                                                                                                                                                                    Running say-hello...                                                                                                                                                                                    my-container: running echo 'Hello world!'                                                                                                                                                                                                                                                                                                                                                                       Hello world!                                                                                                                                                                                                                                                                                                                                                                                                    say-hello finished with exit code 0 in 1.0s.                                                                                                                                                                                                                                                                                                                                                                    $                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
00:00-00:24

Local integration testing in less than 30 seconds

Running build...                                                                                                                                                                                        build-env: running bundle exec rake prepareImage                                                                                                                                                                                                                                                                                                                                                                rm -rf /code/.batect/international-transfers-service/app                                                                                                                                                mkdir -p /code/.batect/international-transfers-service/app                                                                                                                                              cp Gemfile /code/.batect/international-transfers-service/app                                                                                                                                            cp Gemfile.lock /code/.batect/international-transfers-service/app                                                                                                                                       cp config.ru /code/.batect/international-transfers-service/app                                                                                                                                          cp -r bin /code/.batect/international-transfers-service/app/bin                                                                                                                                         cp -r lib /code/.batect/international-transfers-service/app/lib                                                                                                                                                                                                                                                                                                                                                 build finished with exit code 0 in 2.7s.                                                                                                                                                                                                                                                                                                                                                                        Running journeyTest...                                                                                                                                                                                  database: starting container...                                                                                                                                                                         exchange-rate-service: starting container...                                                                                                                                                            international-transfers-service: waiting for dependencies database and exchange-rate-service to be ready...                                                                                             build-env: waiting for cache initialisation to finish...                                                                                                                                                                                                                                                                                                                                                        
00:00-00:17
This project builds and tests a small service. Batect is configured to build the service, start a local version of the service’s dependencies (a database and an external service), then test the service.

Subscribe to the Batect newsletter

Get news and announcements direct to your inbox.