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 Restore Restore the solution packages
- 2 Lint dotnet format --verify-no-changes
- 3 Build Release build of the solution
- 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 Build Compile the Bicep template
- 2 Validate az deployment sub validate
- 3 What-If Preview the resource delta
- 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 Build and test Restore, build, test, and package API and Function
- 2 Deploy API Zip-deploy api-adt-blastplanning-dev
- 3 Deploy Function Zip-deploy func-adt-blastplanning-dev
- 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 Lint npm run lint
- 2 Build Production Angular build and package
- 3 Deploy Zip-deploy web-adt-blastplanning-dev
- 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.