Skip to content

CI/CD

Formation uses GitHub Actions for CI/CD. Each service has two workflows:

  1. Validate — Runs on pull requests to verify builds, tests, and linting
  2. Deploy — Runs on pushes to main to build, push, and deploy containers
graph LR
PR[Pull Request] --> VALIDATE[Validate Workflow]
VALIDATE --> BUILD[Build & Test]
BUILD --> LINT[Lint & Type Check]
MAIN[Push to main] --> DEPLOY[Deploy Workflow]
DEPLOY --> VERSION[Semantic Version]
VERSION --> DOCKER[Build Docker Image]
DOCKER --> ACR[Push to ACR]
ACR --> ACA[Deploy to Container Apps]

Each workflow only triggers when files in its service directory change:

on:
push:
branches: [main]
paths:
- src/services/web/**
- .github/workflows/web-service-deploy.yml

Semantic versioning is applied automatically using semantic-version action:

- name: Version bump
uses: paulhatch/semantic-version@v6.0.2
with:
change_path: ./src/services/web
namespace: web
bump_each_commit: true

CI pipelines publish auto-generated documentation assets to Azure Blob Storage. The docs site then serves these via a proxy route.

Built during the web service pipeline and uploaded to generated-docs/storybook/.

Generated during test runs and uploaded to generated-docs/coverage/.

Generated during data pipeline runs and uploaded to generated-docs/dbt/.

Generated from the SQL project and uploaded to generated-docs/dbdocs/.