cairn
Frappe + ERPNext + your custom apps, on a single VPS, running the current commit — automatically.
cairn owns its Docker build recipe and compose configuration outright
(bootstrapped from frappe/frappe_docker) and pairs it with a CI/CD lifecycle you won't find anywhere
else for a Frappe stack:
build, register, and converge a live deployment
- no GitHub Actions
- no webhooks
- no infrastructure to run.
Cairn: a trail marker of stacked stones. Each deploy drops a durable marker (ref → resolved commits → image tag → digest) you can navigate back to.
The magic
Push to a tracked branch. That's the whole workflow:
flowchart TD
A[git push] -. poll .-> B[cairn-build]
B -->|build + push image| C[(registry)]
C -. poll .-> D[cairn-adopt]
D -->|pull + reconcile| E[live ERPNext stack]
Two lightweight systemd timers do the polling — one on the builder, one on the target. Both reach outward; neither GitHub nor anything else ever reaches in. No GitHub Actions runner, no webhook receiver, and no SSH key handed to GitHub for access to your VPS — the box never opens a port for this. A merged commit becomes a rebuilt image, pushed and tagged, and a running stack that pulls it, migrates, and restarts — all within minutes, with zero CI infrastructure to stand up or pay for.
Three roles, one install
Builder — cairn-build |
Registry — cairn-registry |
Target — cairn-adopt |
|
|---|---|---|---|
| Does | Builds the image, pushes it, moves the environment pointer | Hosts images, if you self-host — optional, bring your own registry instead | Polls for the pointer, pulls, and converges the running stack |
One pip install datahenge-cairn installs all three.
📖 Read the docs: datahenge.github.io/cairn
Start with Get Started for installation, or jump straight to the Builder, Target, and Registry walkthroughs.
Release files for datahenge-cairn 0.4.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| datahenge_cairn-0.4.6.tar.gz | 578.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| datahenge_cairn-0.4.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:739.0 kB
Release files / datahenge_cairn-0.4.6.tar.gz
| Download URL | datahenge_cairn-0.4.6.tar.gz |
|---|---|
| Size | 578.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b45216226b157f92c92c62cc1523b82cc3533dc22e3c012d377cc91bbdbb17cd
|
|
BLAKE2b-256 checksum How to use checksums |
899fea787895de6cdc7a92188cac2e884f11eab0f700f9ae5642fa315117e5ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / datahenge_cairn-0.4.6-py3-none-any.whl
| Download URL | datahenge_cairn-0.4.6-py3-none-any.whl |
|---|---|
| Size | 160.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
300f530ed8269b808b3e40e38c3f3eb094e050976307cf6e3fe2c99ebe8df2ab
|
|
BLAKE2b-256 checksum How to use checksums |
089ef7ec476f0626a85673e5dff0fe12f3b6543fcd125736447dcc054e2343e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|