Skip to content

GitOps Seed

Self-hosting availability

Self-hosting is available on request. The source repository is not public. Contact hello@wanepia.com to get access.

Wanepia supports declarative configuration via YAML seed files. On startup, cmd/migrate applies any seed files it finds in the seeds/ directory — idempotently, so re-running is safe.

Use seeds to version-control your catalog structure alongside your application code.

Seed file format

# seeds/001_services.yaml
blueprints:
  - slug: api
    name: HTTP API
    description: Public-facing REST services
    fields:
      - name: team
        field_type: string
        required: true
        sort_order: 1
      - name: repo_url
        field_type: url
        required: false
        sort_order: 2
      - name: on_call
        field_type: string
        required: false
        sort_order: 3

  - slug: database
    name: Database
    fields:
      - name: engine
        field_type: string
        required: true
        sort_order: 1
      - name: version
        field_type: string
        required: false
        sort_order: 2

entities:
  - blueprint: api
    slug: payments-api
    name: Payments API
    fields:
      team: platform
      repo_url: https://github.com/acme/payments

  - blueprint: api
    slug: auth-api
    name: Auth API
    fields:
      team: identity

  - blueprint: database
    slug: postgres-primary
    name: Postgres Primary
    fields:
      engine: postgresql
      version: "16"

checks:
  - entity: payments-api
    type: http
    url: https://api.acme.com/payments/health
    interval_seconds: 30
    expected_status: 200
    body_contains: '"status":"ok"'
    failure_threshold: 2

  - entity: postgres-primary
    type: tcp
    host: db.internal
    port: 5432
    interval_seconds: 60
    failure_threshold: 3

Applying seeds

Seeds are applied automatically when cmd/migrate runs:

make migrate
# or
docker compose run --rm migrate

Seeds are applied in alphabetical order. Name them with a numeric prefix to control order:

seeds/
  001_blueprints.yaml
  002_entities.yaml
  003_checks.yaml

Idempotency

Seed application is idempotent: - Blueprints and entities are upserted by slug - Checks are matched by entity + type + target; existing checks are updated - No records are deleted — add a manual deletion step if you need to remove something

Example: monorepo integration

Keep your seed files alongside each service:

services/
  payments-api/
    catalog.yaml       # defines the entity and its checks
  auth-api/
    catalog.yaml
infra/
  databases/
    catalog.yaml

A CI step merges and applies them:

# .github/workflows/catalog-sync.yml
- name: Apply catalog seeds
  run: |
    cat services/*/catalog.yaml infra/**/catalog.yaml > seeds/generated.yaml
    docker compose run --rm migrate

Relations via seed

relations:
  - from: payments-api
    to: postgres-primary
    type: depends_on

  - from: payments-api
    to: auth-api
    type: calls