First development run
This path runs the minimal example against the development stack and an
existing SSH-reachable Linux machine. The machine needs curl, a supported
service manager, and an SSH account allowed to install the agent. Its host key
is required; Graphene never uses trust-on-first-use.
1. Start the control plane
Follow Development installation, then verify the context:
$ graphenectl whoami
$ graphenectl get namespace
If the target machine is remote, set GRAPHENE_SERVER_EXTERNAL to an address
it can reach before starting Compose. The agent opens an outbound connection;
no inbound agent port is needed.
2. Store the SSH key
The example accepts a secret name, never private-key bytes:
$ graphenectl secret set bare-ssh-key --value-file ~/.ssh/id_ed25519
$ graphenectl get secret bare-ssh-key
The value cannot be read back. Rotation creates another event on the same secret record.
3. Inspect and publish the pipeline
$ git clone https://github.com/graphene-ci/examples.git
$ cd examples/minimal
$ go run . plan
$ go run . push
push cross-compiles this main, creates its worker image without a local
Docker daemon, pushes it through the server door, and publishes the typed
manifest. Repeating it with unchanged code reuses the content-addressed image.
Verify what landed:
$ graphenectl get pipeline baseline
$ graphenectl tree pipeline/baseline
4. Start and watch
The development stack contains an agent credential for vm-1. Use that record
name and the SSH host's exact public key:
$ go run . run \
--host 192.0.2.40:22 \
--user root \
--hostKey 'ssh-ed25519 AAAA...' \
--agent vm-1 \
--key bare-ssh-key \
--work 'uname -a' \
--keep 10m \
--watch
The binary pushes only if its content changed, installs the outbound agent by
SSH, executes work on the machine, publishes artifact/baseline-report, and
prints the typed result. --watch exits non-zero when the run fails.
In another terminal:
$ graphenectl get run -w
$ graphenectl run status <run-id>
$ graphenectl tree run/<run-id>
Use run status for the current activity and retry reason; use run watch for
the changing tree, events, and log tail.
5. Inspect and clean up
$ graphenectl get artifact baseline-report
$ graphenectl tree pipeline/baseline
$ graphenectl delete pipeline baseline --wait
Deletion follows ownership: children finalize before their owner, and records
remove the bytes they own. The example's Keep sleep delays completion; cancel
the run with graphenectl run cancel <run-id> if you do not want to wait.
Alternative: Git source and revision
Production-shaped source flow is server-side and immutable:
apply gitsourcewith repository, ref, subdirectory, and runtime;revision materializeto build a revision;revision runto test the draft;invoke pipeline ... activateto make it current.
The exact commands are in Pipelines, sources and revisions.
The two publication paths create the same pipeline contract; choose direct
push for local development and Git materialization for controlled source.
Next: write a pipeline, understand resource ownership, or open Studio.