senro
senro (線路, “railway track”) defines pipelines in Go, executes them, and exposes a live attach
protocol so a second process can watch and debug a run in progress. Reach for it when you want a
pipeline as real, typed, testable Go code instead of YAML.
It is a pipeline engine first, and nothing in the API is CI-specific. CI/CD is the most familiar
thing to build on it, but a data pipeline, a batch job, an infrastructure rollout or a release
script is built the same way: steps with dependencies, retries and failure handlers, one event
stream you can attach to.
The railway metaphor lives in prose and error messages, never in identifiers. A step is a
station, a workflow is a line, the resolved execution graph is a timetable; the Go API says
Pipeline, Workflow, Step and Plan.
Start
Page What it gives you Install go get, requirements, platform supportQuickstart A pipeline, a run, and a terminal attached to it Concepts Pipeline, workflow, step, plan, event stream
Steps: the building blocks
Page What it covers Steps What a step is, exec.Command, the two step kinds Ordering Needs on a step, senro.Needs on a workflowSettings Env, WorkDir, Timeout, ContinueOnErrorRetries Retry, RetryPolicy, the predicates, backoffHandlers OnFailure, Always, and what a handler inheritsEnd states The ten end states, and how they propagate Conditions When, Branch, ParamIs, EnvIsFunc steps RegisterFunc, senro.Func, senro.Ctx
Executors: where steps run
Page What it covers Executors The four targets, senro.On, read-only enforcement Containers container.Image, its five properties, container.UserKubernetes A workflow on a pod: setup, behavior, refusals SSH A workflow on a remote host: setup, behavior, refusals Func off the coordinator A Func step over SSH or in a container
Data: workspaces and caching
Page What it covers Workspaces senro.Workspace, Mount, ScopeRun, snapshotsPersistent workspaces ScopePersistent and its four rulesScratch cache ScratchCache, Key, RestoreKeysCaching a step Pure(), Inputs, Outputs, CacheEnvCache keys What enters a key, and cache explain Shared cache The S3 and OCI tier, config, degradation Archiving Archiving a run, and logs fetch
Monorepos
Page What it covers Monorepos The problem, and which tool solves which part Fan-out Expand, Template, MaxParallel, MaxNodesPer-unit ordering Per-unit edges versus the workflow barrier Partitioning Partition, TemplateShard, the duration historyAffected Running only what a change affects
Unit graphs
Page What it covers Choosing a graph The eight graphs, and which support Affected globOne unit per directory matching a pattern goworkGo modules and packages, via go list cargoRust crates, from the manifests jsworknpm, pnpm, Yarn and Bun workspace packages mavenMaven reactor projects gradleGradle projects, from the declarative subset pyprojectPython distributions, and why Affected is refused bazelBazel packages, with and without running bazel Write your own UnitGraph and UnitAffector
Secrets
Page What it covers Secrets Declaring and using a secret; the file-path rule Channels Safe, redacted, refused; per-executor delivery
Watch and control a run
Triggers
Page What it covers Running on an event Wiring WithTrigger, the matchers, the three outcomes Run it as a server Your binary as the webhook endpoint, verified per source The event file The envelope every source is delivered through GitHub push, pull_request, and tags arriving as pushesGitLab Push, tag push, merge request, and GitLab’s own action words Bitbucket repo:push, pullrequest:*, and the missing file listsGitea push, pull_request, create, and the double tagSchedule & manual The neutral shape, for cron and for a button Write your own trigger.Provider and trigger.Matcher
Notifications
Page What it covers Sending a result out The destinations, every option, delivery and retries Slack A line in a channel, and what widening it costs Webhook Raw events as JSON, and verifying a signature GitHub Checks A check run on the commit, with annotations Write your own notify.Renderer and notify.Requester
Failure analyzers
Extend
Reference
Page What it covers CLI Every command in one table, plus exit codes Running and watching senro run, attach, shell, uiCache commands cache gc, cache explain, verifyWorkspace commands ws ls/pull/diff, logs fetch, func checkThe event stream The event envelope, and turning it into live state apiThe api package as a wire contract Run options and outcomes Every senro.Run option, and reading RunError Reading a failed run The run directory, file by file Agent skill The skill that teaches an AI agent senro
Next → Install