labzero/bootleg
70.7
Strong · 18 September 2026
2.4k
lines of production code
Elixir
primary language
1
measurement over time
What this system is
This system is a deployment tool for Elixir applications, providing capabilities to build, deploy, and manage application releases across remote hosts. It supports multiple build strategies, including local, remote, and Docker-based compilation, and handles SSH operations for remote command execution and file transfer. The tool offers a DSL-based configuration system for defining host roles and deployment hooks, along with tasks for managing application lifecycle events such as starting, stopping, restarting, and rolling back releases.
Features
Add CircleCI environment preparation script
A new \script/ci/prepare.sh\ script has been added to handle the setup of the CI environment for CircleCI. This script installs specific versions of Erlang (28.0) and Elixir (v1.18.4) into a local installation path, and conditionally installs Hex and Rebar package managers. It also fetches, compiles dependencies, and runs Dialyzer to generate a PLT, ensuring the build environment is consistent and static analysis is performed before tests run.
script/ci · high confidence
Add Credo linting configuration and Elixir code formatter
The project now includes a \.credo.exs\ configuration file that enables strict linting with a comprehensive set of consistency, design, readability, refactoring, and warning checks, and a \.formatter.exs\ file that standardizes code formatting for \mix.exs\ and source files in \config\, \lib\, and \test\ directories. These additions enforce consistent code style and quality standards across the codebase.
(repo-wide) · high confidence
Introduce named Agent for shared configuration state
A new \Bootleg.Config.Agent\ module has been added to manage shared configuration state across different contexts. This agent initializes with default roles, hooks, and environment settings, and provides functions to get, put, merge, and increment configuration values. It also includes a monitor that automatically unloads dynamic tasks and callbacks when the agent process terminates, ensuring clean state management during deployments.
lib/bootleg/config · high confidence
Support for Docker, local, and remote build strategies
The build task system now supports three distinct build strategies: Docker, local, and remote. Users can configure \build\_type\ to \:docker\ to execute compilation and release generation inside a specified Docker image, or use the default local build which runs \mix\ commands directly on the host. Additionally, a remote build strategy is available, allowing code to be pushed to or pulled from a remote server for compilation and release generation, with options to copy or download the resulting release archive. This replaces previous build implementations and provides explicit configuration for each strategy's specific requirements, such as \docker\_build\_image\ for Docker builds.
lib/bootleg/tasks/build · high confidence
Behavioural changes
Added empty production deployment configuration
A new, empty configuration file for the production deployment environment has been added at config/deploy/production.exs. This file currently contains no settings but establishes the location for future production-specific deployment configurations.
config/deploy · medium confidence
Bootleg configuration system refactored to use a new DSL
The configuration mechanism has been replaced with a new DSL-based approach. Users must now use \use Bootleg.DSL\ instead of the deprecated \use Bootleg.Config\. The new system introduces a \role\ macro for defining host groups, a \config\ macro for setting and retrieving configuration values, and support for \before\_task\ and \after\_task\ hooks. Configuration files are now loaded in a specific order: internal tasks, third-party tasks, the main \config/deploy.exs\, and finally environment-specific files in \config/deploy/\. The \Bootleg.Config\ module now acts as a wrapper that imports the DSL and provides helper functions like \get\_role\ and \load\.
lib/bootleg · high confidence
Bootleg tasks rewritten using the DSL
The build, deploy, ping, restart, rollback, start, stop, and update tasks have been converted to use the new DSL syntax. This change introduces a \build\_type\ configuration option (defaulting to "remote") to control whether builds are local or remote, and modifies the deploy process to support copying releases from a release workspace. The update task now silently stops running nodes before starting the new release.
lib/bootleg/tasks · high confidence
Introduce dedicated UI, Git, and SSH error handling modules
This change introduces three new modules to the library: \Bootleg.UI\ for managing application output, verbosity levels, and user prompts; \Bootleg.Git\ for encapsulating Git command execution; and \SSHError\ for structured error reporting during remote SSH operations. Additionally, the main \Bootleg\ module has been simplified by removing the unused \hello\ function and updating its documentation to focus on configuration and deployment capabilities.
lib · high confidence
Migrate to Elixir 1.10+ Config Module and Add Test Environment Config
The application configuration has been updated to use the modern \Config\ module instead of the deprecated \Mix.Config\, aligning with Elixir 1.10+ standards. Additionally, a dedicated \config/test.exs\ file has been introduced to explicitly set the logger level to \:warning\ during test runs, ensuring cleaner test output by suppressing informational logs.
config · high confidence
Redesign of Mix tasks to use DSL and simplified help output
The Bootleg Mix tasks have been refactored to use a new DSL-based structure via \use Bootleg.MixTask\, replacing the previous hardcoded implementation logic (such as the inline SSH and Git commands in the build task) with a strategy-driven approach. New dedicated tasks are introduced for initialization (\mix bootleg.init\), which generates environment configuration files, and invocation (\mix bootleg.invoke\), allowing users to call arbitrary Bootleg tasks. The main \mix bootleg\ command now displays a clean help list of available tasks instead of a static usage string, and the build task is simplified to rely on the new DSL configuration rather than embedded shell scripts.
lib/mix · high confidence
Test coverage
Added comprehensive test suite for Bootleg configuration, DSL, and SSH functionality; Added functional and unit tests for Bootleg deployment tasks; Added functional, UI, and SSH error tests with Docker-based test harness; Added test fixture for N00b project structure; Added test fixture for Umbrella project structure; Added test fixture infrastructure for Docker-based app testing; Added test fixtures for task provider validation; Added test fixtures for the build\_me application; Added test support infrastructure for functional testing; Added tests for Bootleg.Config.Agent.
Dependencies
Major dependency overhaul and Elixir 1.6+ support
The project has upgraded its minimum supported Elixir version to 1.6 and replaced the SSH library \sshex\ with \sshkit\ (from the \bitcrowd/sshkit.ex\ repository) and \ssh\_client\_key\_api\. This change is accompanied by a significant update to the development toolchain, introducing \credo\ for linting, \dialyxir\ for static analysis, and \excoveralls\ for test coverage reporting, while also adding test dependencies like \mock\ and \junit\_formatter\. Additionally, documentation generation now utilizes \mkdocs\ with the \material\ theme, requiring new Python dependencies (\mkdocs\, \mkdocs-material\, \pygments\, \pymdown-extensions\).
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 71.
Lenses
- Code Health 100
- Architecture 94
- Maturity 59
- Readiness 67
- Security 96
Changes since last survey
- 271 commits — 256 feature/other, 15 fixes
By area
- (root) — 91 commits
- lib/bootleg — 67 commits
- lib/strategies — 23 commits
- (repo) — 20 commits
- test/bootleg — 18 commits
- lib/mix — 15 commits
- test/fixtures — 7 commits
- lib/git.ex — 4 commits
- lib/bootleg.ex — 3 commits
- lib/ui.ex — 3 commits
- test/strategies — 3 commits
- test/support — 3 commits
- .circleci/config.yml — 2 commits
- lib/ssh.ex — 2 commits
- script/ci — 2 commits
- .github/ISSUE_TEMPLATE — 1 commit
- .github/PULL_REQUEST_TEMPLATE.md — 1 commit
- config/deploy — 1 commit
- config/test.exs — 1 commit
- docs/config — 1 commit
Notable commits
- fix: Fix Code.ensure_compiled? and Collectable empty list deprecations (#316)
- fix: Fix Docker configuration docs (#306)
- fix: Fix Merge Confilict (#322)
- fix: Fix all credo warnings (#35)
- fix: Fix compile warning about unused default in private function (#102)
- fix: Fix config file locations and clean up test warnings (#217)
- fix: Fix error when SSH port is not defined. (#106)
- fix: Fix host attribute filtering in remote/3. (#148)
- fix: Fix link 'writing-docs' (#293)
- fix: Fix mix tasks error (#226)
- fix: Fix placeholder email in code of conduct. (#138)
- fix: Fix test failure due to reuse of task names (#301)
- fix: Fix unicode conversion errors (#167)
- fix: Fix warnings and remove remote_ssh renmants (#45)
- fix: Merge Recent Fixes (#321)
- change: Add config/1 for retrieving configuration values. (#184)
- change: Add "pending" functional tests. (#103)
- change: Add :env option when defining roles (#218)
- change: Add Acknowledgments to README (#124)
- change: Add Administration Ping command (#37)
- …and 251 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
labzero/bootleg was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit de0dae823a0b47c8488e2ff37fddcb0efb9080d8 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.