Deployment
Fairway services can now expose more than one port
A service that speaks gRPC to the cluster and HTTP to the world could not be expressed in a Fairway manifest. spec.listeners replaces spec.containerPort, and existing manifests keep working untouched.
Decision: database migrations ship as a forward/backward contract, run by an init container
Milestone 1 of Theseus database migrations is agreed: modular features supply paired forward and backward migrations as an API contract, an init container applies them, and Fairway deploys it automatically when a Postgres service opts in.
The feature-flags service is ready for production use
Feature flags for services outside the monolith are now available to all of GitLab engineering — define a flag in git, evaluate it with the LabKit client, and de-risk your next rollout.
Fairway v3.0.0: charts validate their own values
Every generated chart now ships a values.schema.json, so Helm rejects typo'd keys and out-of-range values before they reach a cluster — a breaking change worth reading before you regenerate.
Platform bindings
One declarative interface, resolved per deployment target — and the rules for the Enterprise Platform Binding.
Pass application configuration via Fairway
Declare app config once in your Fairway manifest and let every environment deliver it — a ConfigMap in-cluster, a baked profile on Runway, per-cell values on Cells.
Get distributed tracing on Runway
From scaffold to spans in Google Cloud Trace with LabKit v2, Fairway, and Runway — the effort is deploying.
Get structured logging on Runway
From scaffold to queryable logs in Grafana — JSON on stderr is the whole contract, and the scaffold already honours it.
Get Prometheus metrics on Runway
Expose metrics with LabKit v2, declare the port in Fairway, flip one deploy-time switch — then query Mimir in Grafana.
Fairway manifest schema
Field reference for the FairwayManifest declarative service interface.
Go service template (exemplar)
A live, complete example of a Theseus service — read it alongside the docs when onboarding.
The Observability Story
Instrument once with LabKit, collected by Runway with zero configuration, rendered on consistent dashboards — and, next, dashboards defined in the service repo and picked up automatically on deploy.
Co-located Grafana dashboards
Dashboards are part of the service: jsonnet in the service repo, compiled in CI, shipped in the Helm chart, and discovered by whatever Grafana lives in the cell.
Get Started
Bootstrap a production-ready modular service with common-template-copier — LabKit baked in from the first commit.