punchcard
A one-binary CI server that runs the same mise run ci you run on your laptop, on a machine that remembers.
go install github.com/vt100io/punchcard@latest
View on GitHub →
Why
Hosted CI runners start from nothing on every build: a fresh machine, fresh tool installs, cold caches. Punchcard keeps a workspace per repo on a machine I own. When I push, it fetches, resets to the exact commit and runs the repo's ci task.
There is no CI language. The pipeline is a mise task in the repo, so if it passes on my laptop it passes in CI, and a CI failure can be debugged on my own machine.
A GitHub App posts the checks. A repo opts in by having a ci task; there is no list of repos to keep.
Getting started
- Install the binary with
go install. - Create a GitHub App: contents read, commit statuses write, push and pull request events.
- Start it with the webhook secret and the App's key:
punchcard. - Make it reachable:
tailscale funnel --bg 8081on a laptop, orunit deployon a server. - Add
[tasks.ci]to a repo's mise.toml and push. - Watch it:
punchcard tui.
Leans on mise, GitHub App.