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.10
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.10.tar.gz | 613.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| datahenge_cairn-0.4.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:779.9 kB
Release files / datahenge_cairn-0.4.10.tar.gz
| Download URL | datahenge_cairn-0.4.10.tar.gz |
|---|---|
| Size | 613.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7274e71857c5e0802eae3a2506e565962cd75c88234690ab49890ed5448f2a8a
|
|
BLAKE2b-256 checksum How to use checksums |
e6eb98fba45ec8789a3c4c7c853f85a1e6584e5e91e3aedb686fbddacee2003d
|
| 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.10-py3-none-any.whl
| Download URL | datahenge_cairn-0.4.10-py3-none-any.whl |
|---|---|
| Size | 166.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
067a66b905cb306466b3cb08953487361cc03dcd70dc935eea9e6bb899225f44
|
|
BLAKE2b-256 checksum How to use checksums |
4a3499be7a0c83e1732210d933bc63b2dc34f95e619fd9200bb9d9f6f52e1ff1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|