title: How to develop on borgmatic eleventyNavigation: key: 🏗️ Develop on borgmatic parent: How-to guides
To get set up to develop on borgmatic, first install
uv
to make managing your borgmatic environment
easier without impacting other Python applications on your system.
Then, clone borgmatic via HTTPS or SSH:
git clone https://projects.torsion.org/borgmatic-collective/borgmatic.git
Or:
git clone ssh://git@projects.torsion.org:3022/borgmatic-collective/borgmatic.git
Finally, install borgmatic "editable" so that you can run borgmatic actions during development to make sure your changes work:
cd borgmatic
uv tool update-shell
uv tool install --editable .
Or to work on the Apprise hook, change that last line to:
uv tool install --editable .[Apprise]
To get oriented with the borgmatic source code, have a look at the source code reference.
Assuming you've cloned the borgmatic source code as described above and you're
in the borgmatic/
working copy, install tox and
tox-uv using uv, which are used for setting
up testing environments:
uv tool install tox --with tox-uv
Also install Ruff, which borgmatic uses for code linting and formatting:
uv tool install ruff
Finally, to actually run tests, run tox from inside the borgmatic source directory:
tox
That runs tests against all supported versions of Python, which takes a while. So if you'd only like to run tests against a single version of Python, e.g. Python 3.13:
tox -e py313
If when running tests, you get an error from Ruff's linter about files that don't meet linting requirements, you can ask Ruff to attempt to fix them for you via the following:
tox -e lint-fix
And if you get an error from the Ruff's code formatter about files that would be reformatted, you can ask Ruff to format them for you:
tox -e format
Similarly, if you get errors about spelling mistakes in source code, you can ask codespell to correct them:
tox -e spell
borgmatic additionally includes some end-to-end tests that integration test
with Borg and supported databases for a few representative scenarios. These
tests don't run by default when running tox
, because they're relatively slow
and depend on containers for runtime dependencies. These tests do run on the
continuous integration (CI) server, and running them on your developer machine
is the closest thing to dev-CI parity.
If you would like to run the end-to-end tests, first install Docker (or Podman; see below) and Docker Compose. Then run:
scripts/run-end-to-end-tests
This script assumes you have permission to run docker
. If you don't, then
you may need to run with sudo
.
borgmatic's end-to-end tests optionally support using rootless Podman instead of Docker.
Setting up Podman is outside the scope of this documentation, but here are some key points to double-check:
/etc/subuid
and /etc/subgid
to map users/groups for the
non-root user who will run tests.Create a non-root Podman socket for that user:
systemctl --user enable --now podman.socket
systemctl --user start --now podman.socket
Then you'll be able to run end-to-end tests as per normal, and the test script will automatically use your non-root Podman socket instead of a Docker socket.
When writing code for borgmatic, start with PEP 8. But then, apply the following deviations from it:
index
instead of idx
. There are some notable exceptions to
this though (like config
).if
statements,
return
s, etc. Readability is more important than packing code tightly.import os.path
instead of
from os import path
. (Some exceptions to this are made in tests.)Since borgmatic uses Ruff for code lining and formatting, many other code style requirements are also enforced when running automated tests.
Each commit to main triggers a continuous integration build which runs the test suite and updates documentation. These builds are also linked from the commits for the main branch.
Updates to borgmatic's documentation are welcome. It's formatted in Markdown
and located in the docs/
directory in borgmatic's source, plus the
README.md
file at the root.
To build and view a copy of the documentation with your local changes, run the following from the root of borgmatic's source code:
scripts/dev-docs
This requires Docker (or Podman; see below) to be installed on your system.
This script assumes you have permission to run docker
. If you don't, then
you may need to run with sudo
.
After you run the script, you can point your web browser at http://localhost:8080 to view the documentation with your changes.
To close the documentation server, ctrl-C the script. Note that it does not currently auto-reload, so you'll need to stop it and re-run it for any additional documentation changes to take effect.
borgmatic's developer build for documentation optionally supports using rootless Podman instead of Docker.
Setting up Podman is outside the scope of this documentation. But once you
install and configure Podman, then scripts/dev-docs
should automatically use
Podman instead of Docker.