Control plane for CI and its infrastructure
Graphene CI
Pipelines are typed Go programs; the machines, containers and files they need are resources a run owns.
CI tools track only steps; infrastructure tools track only desired state. Graphene keeps both in one model, so a run knows what it brought up, cleans it up when it ends, and can leave a failed environment standing for you to look at.
- Pipelines in Go
- Docker, Kubernetes, Crossplane, Git, files
- CLI, Studio and an API
How it works
A pipeline is a Go program with one entry point: its id, a typed run function, and its triggers. Resources come from libraries (Docker, Kubernetes and Crossplane, Git, files) and belong to the run.
- A run owns a tree of resources; they are finalized when the run ends.
- A failed environment can be handed over to a stand for investigation, with an optional time to live.
- Agents connect outward, so a remote or existing machine needs no inbound port.
- After a worker crash, execution resumes against the recorded resources instead of recreating them.
main.go
func main() {
pipeline.Main("perf-nightly", run,
pipeline.WithTriggers(
trigger.Cron("0 3 * * *",
trigger.Params(map[string]any{...})),
trigger.Webhook("push", trigger.HookSecret("gh-hook")),
),
pipeline.WithConcurrency(pipeline.Queue),
)
}
func run(ctx pipeline.Context, params Params) (Result, error) { ... }
In Stroppy Cloud
Every Stroppy Cloud run is a Graphene pipeline, and the stand it brings up belongs to that run. A suite is a pipeline of runs compared together.
- Standmachines come up in your cloud account through Crossplane
- Databasedeployed and tuned for the machine it got
- LoadStroppy runs the workload; you watch it live
- Reportcollected and kept after the run
- Teardownthe stand goes, or stays for a set time to look into a failure
Get started
Build a plan from the full example without a server, then bring up the development stack and drive it with graphenectl, Studio or the Management API. The repository is a development installation, not a hardened production distribution.
Terminal
git clone https://github.com/graphene-ci/examples.git
cd examples/full && go run . plan
git clone https://github.com/graphene-ci/graphene.git
cd graphene && make configure && make compose-up
go build -o bin/graphenectl ./cmd/graphenectl
printf '%s\n' dev-admin-token | bin/graphenectl login \
--server 127.0.0.1:7233 --token-stdin --insecure
bin/graphenectl get pipeline