Skip to main content

Full Project Bootstrap

A minimal but complete set that takes a Go service from source to a running Cloud Run deployment with a database — end to end. It stitches together the pieces from the previous pages.

Repository layout

manifests/
├── organization.yaml
├── organization-user-group/retail-developers.yaml
├── github-connection/default/
│ └── default.yaml
│ └── github-repository/payment-api/
│ ├── payment-api.yaml
│ └── build-definition/payment-api.yaml
├── artifact-registry/docker-private.yaml
└── organizational-unit/retail-banking/
├── retail-banking.yaml
├── release-track/main-track/
│ ├── main-track.yaml
│ └── application-set/payments/
│ ├── payments.yaml
│ └── application/payment-api.yaml
└── environment/prod/
├── prod.yaml
└── project/login-svc/
├── login-svc.yaml
├── database/accounts-db.yaml
└── deployment-config/payment-api.yaml

The manifests

Foundation, source/build, registry, and identity come straight from the earlier pages (Organization Foundation, Source & Build, Access & Identity). The delivery + data pieces that tie it together:

# .../release-track/main-track/application-set/payments/application/payment-api.yaml
apiVersion: lowops.manifests.v1
kind: Application
metadata:
name: payment-api
application-set: payments
release-track: main-track
organizational-unit: retail-banking
organization: fincorp
spec:
description: "Payment processing API."
target: CLOUD_RUN
meshStrategy: DISABLED
source: payment-api # the BuildDefinition
container: payment-api # container it produces
project: login-svc
accessControl:
database:
name: accounts-db
schema: accounts
privileges: [USAGE, CREATE]
secretSource:
envVar: DATABASE_URL
# .../environment/prod/project/login-svc/database/accounts-db.yaml
apiVersion: lowops.manifests.v1
kind: Database
metadata:
name: accounts-db
project: login-svc
environment: prod
organizational-unit: retail-banking
organization: fincorp
spec:
description: "Accounts and auth data."
databases:
- name: accounts
alloydb:
cpuCount: 4
clusterSize: 1
# .../environment/prod/project/login-svc/deployment-config/payment-api.yaml
apiVersion: lowops.manifests.v1
kind: DeploymentConfig
metadata:
name: payment-api # matches the Application
project: login-svc
environment: prod
organizational-unit: retail-banking
organization: fincorp
spec:
version: v1.0.0
container:
env:
- name: LOG_LEVEL
value: info
ports:
8080: http
scaling:
min: 1
max: 5
health:
liveness:
protocol: HTTP
port: 8080
path: /healthz

What happens on merge

  1. The engine builds a dependency graph from all the manifests' metadata links.
  2. It provisions the foundation (org → OU → environment → project), the GitHub repo + CI, and the registry.
  3. CI builds and publishes the payment-api image.
  4. The Database is provisioned with the accounts logical database; a scoped user and credentials are created for payment-api.
  5. The Application + DeploymentConfig roll out to Cloud Run in prod, with DATABASE_URL injected — promoted through the main-track stages with approvals.