Skip to main content

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.
  1. Standmachines come up in your cloud account through Crossplane
  2. Databasedeployed and tuned for the machine it got
  3. LoadStroppy runs the workload; you watch it live
  4. Reportcollected and kept after the run
  5. 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

The other tools