Delivery

Deployment pipeline

Four Azure DevOps pipelines. CI on every change to main; infrastructure, API, and UI deploy to the shared dev environment on demand.

Delivery is Azure DevOps YAML under infra/pipelines/. CI runs on every pull request and push to main. The three deploy pipelines have no branch trigger. They are started by hand and target the event-sourcing-dev environment. The four pipelines are independent. They are not a single 1-through-4 sequence.

Dev only, on demand

There is no staging or production pipeline. Infrastructure, application, and UI deploys are manual and land in the shared dev environment that hosts the live demo.

Pipelines

Pipeline YAML Trigger What it does
CI ci.yml main and PRs to main Restore, lint, build, Domain and Application unit tests
Infrastructure deploy-infra-dev.yml Manual Build, validate, what-if, then deploy Bicep
Application deploy-app-dev.yml Manual Build, test, deploy API and projection Function
UI deploy-ui-dev.yml Manual Lint, build, and deploy the Angular App Service

The three deploy pipelines use the sc-esr-dev service connection and the event-sourcing-dev Azure DevOps environment.

CI

Runs on ubuntu-latest with the .NET 10 SDK. Restores the solution, lints with dotnet format --verify-no-changes, builds, then runs unit tests in tests/BlastPlanning.Domain.Tests and tests/BlastPlanning.Application.Tests. It does not deploy.

  1. 1 Restore Restore the solution packages
  2. 2 Lint dotnet format --verify-no-changes
  3. 3 Build Release build of the solution
  4. 4 Unit tests Domain and Application test projects

Infrastructure

Subscription-scoped Bicep for australiaeast, using infra/bicep/environments/dev/main.bicep and main.dev.bicepparam. Connection strings for Cosmos, SQL, and Service Bus are supplied as pipeline secrets.

  1. 1 Build Compile the Bicep template
  2. 2 Validate az deployment sub validate
  3. 3 What-If Preview the resource delta
  4. 4 Deploy Create the subscription deployment and list resources

Application

Builds the Blast Planning API and the projection Function on .NET 10, reruns the same Domain and Application tests, then publishes zip artifacts. Deploys to api-adt-blastplanning-dev and func-adt-blastplanning-dev.

  1. 1 Build and test Restore, build, test, and package API and Function
  2. 2 Deploy API Zip-deploy api-adt-blastplanning-dev
  3. 3 Deploy Function Zip-deploy func-adt-blastplanning-dev
  4. 4 Verify Confirm both hosts are running

UI

Builds the Angular app in src/frontend/blast-planning-ui with Node 24 (npm ci, npm run lint, production configuration). Deploys to web-adt-blastplanning-dev.

  1. 1 Lint npm run lint
  2. 2 Build Production Angular build and package
  3. 3 Deploy Zip-deploy web-adt-blastplanning-dev
  4. 4 Verify Confirm the UI host is running

Gates

Pipeline Blocks progress when
CI Restore, dotnet format, build, or Domain/Application unit tests fail
Infrastructure Bicep compile, subscription validate, or what-if fails
Application Unit tests fail, or the API/Function deploy or host check fails
UI npm run lint or the Angular production build fails, or the App Service deploy or host check fails

Deploy stages run as Azure DevOps environment jobs on event-sourcing-dev. CI is the automatic merge gate; the other three are started when that environment needs a new infrastructure, API, or UI drop.

Live demo

The running environment is the outcome of these pipelines, not a sidecar.