Skip to content

Tutorial: your first bupha run ​

Goal: push-triggered CI on a repo, end to end, in ~10 minutes.

Prereqs: Linux + systemd (shell runner needs bash; macOS/Windows unsupported for now); git; cargo install bupha (until 0.1.0 lands on crates.io: cargo install --git https://github.com/9aia/bupha); docker only if you use the dagger runner. Also a stable public URL for the webhook — named cloudflared tunnel or a direct box; quick tunnels are convenient but flaky.

  1. cd your-repo && bupha init — scaffolds the dagger module + delegate (the module builds a Rust workspace — needs cargo in the pipeline image; for anything else write ci.sh and use the shell runner).
  2. bupha deploy env → set BUPHA_WEBHOOK_SECRET + BUPHA_TOKEN (a repo-scoped PAT) — in ~/.config/bupha/env, or store them in your OS keyring with secret-tool (resolution: env → keyring → file).
  3. Write bupha.toml (see examples/bupha.toml.example): your repo's [[repo]] entry, runner.kind, tunnel.
  4. bupha doctor — checks this box (binaries, secrets, config) before you commit; fix anything red.
  5. bupha deploy service — systemd unit written + enabled (loginctl enable-linger once for boot persistence).
  6. bupha deploy webhook — registers POST <public_url>/hook on the repo; bupha deploy check verifies unit+secrets+endpoint.
  7. Push. ci/bupha commit status appears; superseded/cancelled shas get honest error statuses.

Done. Logs: journalctl --user -u bupha-watch -f.