Introducing Bacula GitHub Cloud
Complete GitHub Backup Through Bacula

We are releasing Bacula GitHub Cloud — a production-grade Rust orchestrator that backs up GitHub repositories, wikis, LFS objects, releases, gists, package registries, and over twenty categories of API metadata into your existing Bacula deployment, using standard hooks and no Bacula patches.


GitHub is not a backup

Source code is infrastructure. Repositories accumulate years of commit history, documented decisions in issues and pull requests, release binaries, Actions workflows, and organisation metadata that has real operational value. Yet most teams treat GitHub as their archive.

GitHub does not guarantee recovery from accidental deletion, ransomware, or account suspension. Their own documentation is explicit: the platform is not a backup service. When something goes wrong — a force-push that wipes history, a deleted organisation, an account compromise — the window for recovery is short and the outcome is uncertain.

If you already run Bacula to protect servers, databases, and storage, your GitHub data should live under the same retention policies, access controls, and disaster recovery guarantees. Bacula GitHub Cloud makes that possible without introducing new infrastructure or custom tooling.


What it is

Bacula GitHub Cloud is two self-contained static binaries — github-backup and github-restore — with no runtime dependencies beyond git and git-lfs. The backup binary runs as a Bacula ClientRunBeforeJob hook: before each backup job, it mirrors everything from your configured GitHub organisations to a local staging directory. Bacula's FileDaemon then sweeps that directory into tape or long-term storage exactly as it would any other FileSet.

The restore binary works in reverse. Select a point-in-time from bconsole, let Bacula recover the staging files from disk, and the binary pushes code, wikis, LFS objects, releases, labels, milestones, issues, and discussions back to GitHub automatically. Every completed step is recorded in a bundled SQLite database, so an interrupted restore resumes from exactly where it stopped.


What gets backed up

A plain git mirror preserves commit history. Bacula GitHub Cloud goes further:


Incremental, rate-limit safe, and observable

From the second run onwards, every API call uses HTTP ETags and since= filtering stored in a bundled SQLite database. Only genuinely changed data is re-fetched, regardless of repository count.

All parallel workers share an async-safe rate-limit budget. When remaining allowance drops below a configurable threshold, every task pauses automatically and resumes after GitHub's reset window — the tool never hits the 5,000 req/hr cap.

After each run, a Prometheus-compatible metrics.prom file is written for ingestion via Node Exporter's textfile collector. A last_run.json summary records repository counts, failure counts, API calls made, run duration, and staging directory size. Optional Slack and PagerDuty failure alerts are available via environment variables.


Getting started

V=v0.10.0
OS=linux-x86_64
AR=bacula-ghe-cloud-${V}-${OS}.tar.gz

# Verify and install
sha256sum -c ${AR}.sha256
gpg --verify ${AR}.asc ${AR}
tar -xzf ${AR}
sudo cp bacula-ghe-cloud-${V}/github-backup \
        bacula-ghe-cloud-${V}/github-restore \
        /usr/local/bin/

Wire it into your Bacula Director with a single ClientRunBeforeJob directive pointing at github-backup --config /etc/github-backup/config.yaml. The full configuration reference, Bacula Director example, and administrator guide are included in the repository.


Where to find it

Bacula GitHub Cloud is published under the BSD 2-Clause licence. Pre-built, GPG-signed binary tarballs are available on the release page. The current release is v0.10.0.

Resources page: the Bacula GitHub Cloud product page on this site has a full feature summary, coverage breakdown, and quick start guide.

This is the same tooling we use internally. It is production-tested, actively maintained, and ships through the same quality pipeline as everything else we publish — GPG-signed releases, SHA256 checksums, and a signed bill of materials on every tag.


Questions about integrating Bacula GitHub Cloud into your backup infrastructure? We are available via the contact form below.

Get in touch