Skip to content

ADR-0004: Pulumi over Bicep for Infrastructure as Code

Decision

This page records a decision and its status. A Proposed decision is not binding; an Accepted decision is binding on the Factory until amended or superseded.

  • Status: Accepted
  • Date: 2026-01-01
  • Deciders: Cloud Architect, DevOps Architect
  • Tags: iac, devops, cloud

Reviewed 2026-10-09 — verified, retained

  • Disposition: retain (review question R-03 closed).
  • Verified: zero .bicep files across the ConnectSoft repositories (depth 4); thirteen Pulumi.yaml files; template InfrastructureModel projects reference Pulumi.AzureNative (BaseTemplate, AgentTemplate, ApiGatewayTemplate inspected); DerechHaLev's AuthServer and Identity services carry Pulumi programs with dev and aws-dev stacks. Template Deployment/ folders hold docker-compose and Kubernetes manifests, not IaC programs.
  • Clarification: the Factory itself provisions nothing yet; each repository's pipeline runs its own Pulumi program. "Bicep as legacy alternative" stays as written.
  • Drift for other owners: CompanyDocumentation's Factory business model still lists Bicep as a deliverable; the Factory site mentions Bicep on 60 pages, mostly in agent specifications and blueprints that list IaC options.
  • Provenance: Date is the 2026-06-17 bulk-commit value.

Context

The factory provisions its own infrastructure and the infrastructure of generated runtimes, and must re-provision in a secondary region for disaster recovery. Earlier specs referenced Bicep. The team prefers IaC authored in the same language as the platform (.NET/C#), with reusable components and strong testing.

Decision

Use Pulumi (.NET/C#) as the primary IaC tool, executed by the DevOps / GitOps IaCProvisioningService. Bicep is treated only as a legacy alternative.

Consequences

Positive

  • IaC in C#: shared types, unit-testable infrastructure, reusable components aligned with generation.
  • Multi-cloud-capable and consistent with the agent-generated programming model.

Negative / trade-offs

  • Pulumi state backend must be managed; residual Bicep references reframed as legacy.

Neutral

  • Provisioning runs through governed pipelines with approval gates.

Alternatives considered

Alternative Why not chosen
Bicep Azure-only DSL; not aligned with C# generation and reuse model. Retained as legacy alternative.
Terraform (HCL) Separate language/toolchain; less aligned with the .NET generation model.