| title | description | author | date | version | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
DevExp-DevBox |
Enterprise-grade Infrastructure-as-Code (IaC) solution built with Azure Bicep for deploying and managing Microsoft Dev Box environments at scale |
DevExp Team |
2026-01-23 |
1.0.0 |
|
Note
π Target Audience: Platform Engineers, DevOps Engineers, Cloud Architects, and IT Administrators β±οΈ Estimated Reading Time: 20-25 minutes
An enterprise-grade Infrastructure-as-Code (IaC) solution built with Azure Bicep for deploying and managing Microsoft Dev Box environments at scale. This accelerator implements Azure Landing Zone principles with a modular architecture that separates concerns across security, monitoring, connectivity, and workload layersβenabling platform engineering teams to provision consistent, secure developer workstations in minutes.
Whether you're setting up a development environment for a small team or deploying Dev Boxes across an enterprise, DevExp-DevBox provides the automation, governance, and flexibility you need. The solution integrates seamlessly with GitHub Actions for CI/CD, uses OIDC federation for passwordless Azure authentication, and supports PowerShell DSC for customizing Dev Box images with role-specific tooling.
| Section | Description |
|---|---|
| β¨ Features | Key capabilities and highlights |
| ποΈ Architecture | Landing zone design and service overview |
| π Prerequisites | Required tools and Azure permissions |
| π Quick Start | Step-by-step deployment guide |
| π Project Structure | Repository directory layout |
| βοΈ Configuration | YAML settings and customization options |
| π CI/CD Pipelines | GitHub Actions workflows |
| π¦ Module Reference | Bicep module catalog |
| π§Ή Cleanup | Resource removal options |
| π€ Contributing | Development guidelines |
| π License | MIT License information |
| π Additional Resources | Documentation and external links |
Tip
Use the links above to jump directly to any section. Each major section includes a "Back to Top" link for easy navigation.
| Feature | Description |
|---|---|
| π’ Landing Zone Architecture | Implements Azure best practices with segregated resource groups for Security, Monitoring, and Workload layers |
| π Configuration-as-Code | YAML-based configuration with JSON Schema validation for type safety and IDE IntelliSense |
| π§© Modular Bicep Design | Reusable, composable modules with clear input/output contracts and typed parameters |
| π OIDC Authentication | Passwordless GitHub Actions deployment using Azure AD federated credentials |
| π Multi-Project Support | Deploy multiple Dev Box projects with distinct pools, catalogs, and access controls |
| π₯ Role-Based Access Control | Hierarchical RBAC with Managed Identities following least-privilege principles |
| βοΈ DSC Customization | PowerShell Desired State Configuration (DSC) for Dev Box image customization |
| π Automated Provisioning | Azure Developer CLI (azd) integration for streamlined setup and deployment |
| π Centralized Monitoring | Log Analytics workspace integration for unified observability |
| π Network Flexibility | Support for both Microsoft-managed and custom VNet configurations |
DevExp-DevBox implements a Landing Zone pattern that organizes Azure resources by function, ensuring proper separation of concerns and alignment with the Azure Well-Architected Framework.
The solution deploys a centralized Azure DevCenter that serves as the management hub for all developer workstations. Resources are organized into three distinct landing zones:
- Security Landing Zone β Houses Azure Key Vault for secrets management and credential storage
- Monitoring Landing Zone β Contains Log Analytics workspace for centralized logging and diagnostics
- Workload Landing Zone β Deploys DevCenter, projects, pools, and network connectivity
This separation ensures that security-sensitive resources are isolated, monitoring is centralized, and workload components can scale independently. The modular Bicep architecture enables teams to customize configurations through YAML files while maintaining infrastructure consistency across environments.
Tip
π For detailed architecture documentation including TOGAF-aligned decision records, see the Architecture Documentation.
---
title: DevExp-DevBox High-Level Architecture
---
flowchart TB
%% ===== EXTERNAL RESOURCES =====
subgraph External["π External Resources"]
GH["π GitHub Catalog<br/>DSC Configurations"]
end
%% ===== AZURE SUBSCRIPTION =====
subgraph SUB["βοΈ Azure Subscription"]
%% ===== SECURITY LANDING ZONE =====
subgraph Security["π Security Landing Zone"]
KV[("π Key Vault<br/>Secrets & Credentials")]
end
%% ===== MONITORING LANDING ZONE =====
subgraph Monitoring["π Monitoring Landing Zone"]
LA[("π Log Analytics<br/>Centralized Logging")]
end
%% ===== WORKLOAD LANDING ZONE =====
subgraph Workload["π¦ Workload Landing Zone"]
DC["π₯οΈ DevCenter<br/>Management Hub"]
subgraph Projects["π Projects"]
P1["π Project 1"]
P2["π Project 2"]
end
subgraph Pools["π Dev Box Pools"]
POOL1["π» Frontend Pool"]
POOL2["π» Backend Pool"]
end
end
%% ===== CONNECTIVITY =====
subgraph Connectivity["π Connectivity"]
VNET["π Virtual Network"]
NC["π Network Connection"]
end
end
%% ===== CONNECTIONS =====
DC -->|"manages"| P1 & P2
P1 & P2 -->|"provisions"| POOL1 & POOL2
POOL1 & POOL2 -->|"connects via"| NC
NC -->|"uses"| VNET
DC -.->|"syncs catalogs"| GH
DC -.->|"reads secrets"| KV
KV & DC & VNET -->|"sends diagnostics"| LA
%% ===== NODE STYLES =====
classDef primary fill:#4F46E5,stroke:#3730A3,color:#FFFFFF
classDef secondary fill:#10B981,stroke:#059669,color:#FFFFFF
classDef datastore fill:#F59E0B,stroke:#D97706,color:#000000
classDef external fill:#6B7280,stroke:#4B5563,color:#FFFFFF,stroke-dasharray:5 5
classDef trigger fill:#818CF8,stroke:#4F46E5,color:#FFFFFF
%% ===== APPLY NODE CLASSES =====
class DC,P1,P2 primary
class POOL1,POOL2,VNET,NC secondary
class KV,LA datastore
class GH external
%% ===== SUBGRAPH STYLES =====
style SUB fill:#F3F4F6,stroke:#6B7280,stroke-width:2px
style Security fill:#FEE2E2,stroke:#F44336,stroke-width:2px
style Monitoring fill:#FEF3C7,stroke:#F59E0B,stroke-width:2px
style Workload fill:#ECFDF5,stroke:#10B981,stroke-width:2px
style Projects fill:#D1FAE5,stroke:#059669,stroke-width:1px
style Pools fill:#D1FAE5,stroke:#059669,stroke-width:1px
style Connectivity fill:#E0E7FF,stroke:#4F46E5,stroke-width:2px
style External fill:#F3F4F6,stroke:#6B7280,stroke-width:2px
| Service | Purpose |
|---|---|
| Azure DevCenter | Central hub for developer workstation management |
| Dev Box Projects | Project-level organization with team-specific configurations |
| Dev Box Pools | VM allocation with role-specific SKUs and images |
| Azure Key Vault | Secure storage for secrets (e.g., GitHub PAT for catalogs) |
| Log Analytics | Centralized logging and monitoring for all resources |
| Virtual Network | Network isolation with managed or custom VNet options |
---
title: Module Dependency Flow
---
flowchart LR
%% ===== ORCHESTRATION LAYER =====
subgraph Orchestration["π― Orchestration"]
MAIN["main.bicep<br/>(Subscription Scope)"]
end
%% ===== LANDING ZONE MODULES =====
subgraph LandingZones["ποΈ Landing Zone Modules"]
SEC["security.bicep"]
MON["logAnalytics.bicep"]
WL["workload.bicep"]
end
%% ===== CORE RESOURCES =====
subgraph CoreResources["βοΈ Core Resources"]
KV[("keyVault.bicep")]
LA[("logAnalytics.bicep")]
DC["devCenter.bicep"]
VNET["vnet.bicep"]
end
%% ===== PROJECT RESOURCES =====
subgraph ProjectResources["π Project Resources"]
PROJ["project.bicep"]
POOL["projectPool.bicep"]
PCAT["projectCatalog.bicep"]
end
%% ===== PRIMARY FLOW CONNECTIONS =====
MAIN ==>|"deploys"| SEC & MON & WL
SEC -->|"creates"| KV
MON -->|"creates"| LA
WL -->|"creates"| DC & VNET
DC -->|"creates"| PROJ
PROJ -->|"creates"| POOL & PCAT
%% ===== DEPENDENCY CONNECTIONS =====
KV -.->|"provides secrets"| DC
LA -.->|"receives diagnostics"| DC
VNET -.->|"provides network"| POOL
%% ===== NODE STYLES =====
classDef trigger fill:#818CF8,stroke:#4F46E5,color:#FFFFFF
classDef primary fill:#4F46E5,stroke:#3730A3,color:#FFFFFF
classDef secondary fill:#10B981,stroke:#059669,color:#FFFFFF
classDef datastore fill:#F59E0B,stroke:#D97706,color:#000000
%% ===== APPLY NODE CLASSES =====
class MAIN trigger
class SEC,MON,WL primary
class KV,LA,DC,VNET secondary
class PROJ,POOL,PCAT datastore
%% ===== SUBGRAPH STYLES =====
style Orchestration fill:#EEF2FF,stroke:#4F46E5,stroke-width:2px
style LandingZones fill:#E0E7FF,stroke:#4F46E5,stroke-width:2px
style CoreResources fill:#ECFDF5,stroke:#10B981,stroke-width:2px
style ProjectResources fill:#FEF3C7,stroke:#F59E0B,stroke-width:2px
Important
Ensure you have the following tools installed and properly configured before proceeding with deployment.
Ensure you have the following tools installed before proceeding:
| Tool | Version | Purpose | Installation |
|---|---|---|---|
| Azure CLI | 2.50+ | Azure resource management | Install Azure CLI |
| Azure Developer CLI (azd) | Latest | Deployment orchestration | Install azd |
| GitHub CLI | 2.0+ | Repository and secret management | Install gh |
| Bicep CLI | 0.20+ | Template compilation | Included with Azure CLI |
| PowerShell | 7.0+ | Script execution | Install PowerShell |
Important
The following Azure permissions and configurations are required for successful deployment.
- β An active Azure subscription with Owner or Contributor + User Access Administrator permissions
- β Azure AD permissions to create App Registrations (for OIDC setup)
- β Registered resource providers:
# Register required resource providers
az provider register --namespace Microsoft.DevCenter
az provider register --namespace Microsoft.KeyVault
az provider register --namespace Microsoft.Network
az provider register --namespace Microsoft.OperationalInsights# Check Azure CLI
az --version
# Check azd
azd version
# Check GitHub CLI
gh --version
# Check PowerShell
pwsh --versionDeploy your Dev Box environment in 4 steps:
git clone https://github.com/Evilazaro/DevExp-DevBox.git
cd DevExp-DevBox# Login to Azure (interactive)
az login
# Set your target subscription
az account set --subscription "<subscription-id>"
# Login to GitHub (required for OIDC credential setup)
gh auth loginThe setup script performs the following:
- β Initializes Azure Developer CLI environment
- β Creates Azure AD App Registration for OIDC
- β Configures federated credentials for GitHub Actions
- β Sets up GitHub repository secrets and variables
Linux/macOS:
chmod +x setUp.sh
./setUp.sh -e <environment-name> -s githubWindows (PowerShell):
.\setUp.ps1 -EnvName <environment-name> -SourceControl githubNote
Parameters:
-e/-EnvName: Environment identifier (e.g.,dev,staging,prod)-s/-SourceControl: Source control platform (githuboradogit)
# Deploy all resources to Azure
azd provisionThe deployment takes approximately 15-30 minutes depending on the number of projects and pools configured.
Tip
For automated CI/CD deployments, use the GitHub Actions workflow. See CI/CD Pipelines.
π§ Troubleshooting Common Issues
| Issue | Solution |
|---|---|
| OIDC Authentication Failed | Verify federated credentials are configured correctly in Azure AD |
| Resource Provider Not Registered | Run az provider register --namespace <provider> for missing providers |
| Insufficient Permissions | Ensure you have Owner or Contributor + User Access Administrator roles |
| azd Provision Timeout | Check network connectivity and retry with azd provision --debug |
Click to expand full directory tree
DevExp-DevBox/
βββ π azure.yaml # azd configuration (Linux/macOS)
βββ π azure-pwh.yaml # azd configuration (Windows PowerShell)
βββ π setUp.sh # Setup script (Bash)
βββ π setUp.ps1 # Setup script (PowerShell)
βββ π cleanSetUp.ps1 # Cleanup script
βββ π package.json # Hugo documentation dependencies
β
βββ π .configuration/ # Runtime configurations
β βββ π devcenter/workloads/ # DSC configurations for Dev Box images
β β βββ common-config.dsc.yaml
β β βββ common-backend-config.dsc.yaml
β β βββ ...
β βββ π powershell/ # PowerShell utility scripts
β βββ π setup/ # Setup helper scripts
β βββ π Azure/ # Azure credential management
β βββ π GitHub/ # GitHub secret management
β
βββ π .github/ # GitHub Actions configuration
β βββ π actions/ci/ # Reusable composite actions
β β βββ bicep-standard-ci/ # Bicep build action
β β βββ generate-release/ # Semantic versioning action
β βββ π workflows/
β βββ ci.yml # Continuous Integration
β βββ deploy.yml # Azure deployment
β βββ release.yml # Release management
β
βββ π docs/ # TOGAF-aligned documentation
β βββ π architecture/ # Architecture decision records
β βββ π devops/ # CI/CD documentation
β βββ π scripts/ # Script usage guides
β
βββ π infra/ # Bicep orchestration layer
β βββ π main.bicep # Entry point (subscription scope)
β βββ π main.parameters.json # Parameter file
β βββ π settings/ # YAML configuration files
β βββ π resourceOrganization/ # Landing zone resource groups
β βββ π security/ # Key Vault settings
β βββ π workload/ # DevCenter configuration
β
βββ π src/ # Reusable Bicep modules
βββ π connectivity/ # Network resources
β βββ connectivity.bicep
β βββ vnet.bicep
β βββ networkConnection.bicep
βββ π identity/ # RBAC assignments
β βββ devCenterRoleAssignment.bicep
β βββ projectIdentityRoleAssignment.bicep
βββ π management/ # Monitoring resources
β βββ logAnalytics.bicep
βββ π security/ # Security resources
β βββ keyVault.bicep
β βββ secret.bicep
β βββ security.bicep
βββ π workload/ # DevCenter resources
βββ workload.bicep
βββ π core/ # DevCenter core modules
β βββ devCenter.bicep
β βββ catalog.bicep
β βββ environmentType.bicep
βββ π project/ # Project-level modules
βββ project.bicep
βββ projectPool.bicep
βββ projectCatalog.bicep
βββ projectEnvironmentType.bicep
Note
DevExp-DevBox uses YAML configuration files with JSON Schema validation for a type-safe, IDE-friendly experience. Each configuration file has a corresponding JSON Schema that provides IntelliSense and validation in VS Code.
| File | Purpose | Schema |
|---|---|---|
| azureResources.yaml | Resource group naming, tagging, and landing zone organization | azureResources.schema.json |
| security.yaml | Key Vault configuration and access policies | security.schema.json |
| devcenter.yaml | DevCenter, projects, pools, catalogs, and RBAC | devcenter.schema.json |
Configure resource groups in infra/settings/resourceOrganization/azureResources.yaml:
# Workload Resource Group - Dev Center and projects
workload:
create: true
name: devexp-workload
tags:
environment: dev
project: Contoso-DevExp-DevBox
costCenter: IT
# Security Resource Group - Key Vault
security:
create: true
name: devexp-security
tags:
environment: dev
landingZone: Security
# Monitoring Resource Group - Log Analytics
monitoring:
create: true
name: devexp-monitoring
tags:
environment: dev
landingZone: MonitoringTip
Edit infra/settings/workload/devcenter.yaml to add a new project. The JSON Schema provides IntelliSense for available options.
Edit infra/settings/workload/devcenter.yaml to add a project:
projects:
- name: "my-new-project"
description: "My team's development environment"
# Network configuration
network:
name: my-project-vnet
create: true
virtualNetworkType: Managed # Or "Unmanaged" for custom VNets
addressPrefixes:
- 10.1.0.0/16
subnets:
- name: devbox-subnet
properties:
addressPrefix: 10.1.1.0/24
# Identity and access control
identity:
type: SystemAssigned
roleAssignments:
- azureADGroupId: "<your-aad-group-id>"
azureADGroupName: "My Team Developers"
azureRBACRoles:
- name: "Dev Box User"
id: "45d50f46-0b78-4001-a660-4198cbe8cd05"
scope: Project
# Dev Box pools
pools:
- name: "standard-pool"
imageDefinitionName: "my-image-definition"
vmSku: general_i_16c64gb256ssd_v2
# Environment types available to this project
environmentTypes:
- name: "dev"
deploymentTargetId: ""| SKU | vCPUs | RAM | Storage | Use Case |
|---|---|---|---|---|
general_i_8c32gb256ssd_v2 |
8 | 32 GB | 256 GB | Light development |
general_i_16c64gb256ssd_v2 |
16 | 64 GB | 256 GB | Standard development |
general_i_32c128gb512ssd_v2 |
32 | 128 GB | 512 GB | Heavy workloads, builds |
Dev Box images can be customized using PowerShell Desired State Configuration (DSC). Sample configurations are provided in .configuration/devcenter/workloads/:
| Configuration | Purpose |
|---|---|
common-config.dsc.yaml |
Base configuration for all Dev Boxes |
common-backend-config.dsc.yaml |
Backend developer tools (Azure CLI, .NET SDK, Docker) |
common-frontend-usertasks-config.dsc.yaml |
Frontend developer tools (Node.js, npm) |
winget-upgrade-packages.dsc.yaml |
Automated package updates |
# .configuration/devcenter/workloads/common-backend-config.dsc.yaml
properties:
configurationVersion: "0.2.0"
resources:
# Azure CLI
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Microsoft.AzureCLI
settings:
id: Microsoft.AzureCLI
# Azure Developer CLI
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Microsoft.Azd
settings:
id: Microsoft.Azd
# Visual Studio Code
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Microsoft.VisualStudioCode
settings:
id: Microsoft.VisualStudioCodeNote
DevExp-DevBox includes a complete CI/CD pipeline architecture using GitHub Actions with OIDC-based authentication for secure, passwordless Azure deployments. The pipeline follows DevOps best practices with semantic versioning, artifact management, and environment-specific deployment gates.
---
title: CI/CD Pipeline Architecture
---
flowchart TB
%% ===== TRIGGERS =====
subgraph Triggers["π― Triggers"]
direction LR
T1(["πΏ Push: feature/**"])
T2(["π§ Push: fix/**"])
T3(["π PR to main"])
T4(["π±οΈ Manual: Deploy"])
T5(["π±οΈ Manual: Release"])
end
%% ===== CONTINUOUS INTEGRATION =====
subgraph CI["π Continuous Integration (ci.yml)"]
direction TB
CI1["π generate-tag-version<br/>Semantic Version Calculation"]
CI2["π¨ build<br/>Bicep Compilation & Validation"]
CI1 -->|"passes version"| CI2
end
%% ===== DEPLOYMENT =====
subgraph Deploy["π Deployment (deploy.yml)"]
direction TB
D1["β
Validate Variables<br/>Check Required Secrets"]
D2["π¨ Build Bicep<br/>Compile Templates"]
D3["π OIDC Auth<br/>Federated Credentials"]
D4["βοΈ azd provision<br/>Deploy to Azure"]
D1 -->|"validates"| D2
D2 -->|"authenticates"| D3
D3 -->|"deploys"| D4
end
%% ===== RELEASE =====
subgraph Release["π·οΈ Release (release.yml)"]
direction TB
R1["π generate-release<br/>Tag & Changelog"]
R2["π¨ build<br/>Final Artifacts"]
R3[/"π publish-release<br/>GitHub Release"/]
R1 -->|"generates"| R2
R2 -->|"publishes"| R3
end
%% ===== WORKFLOW CONNECTIONS =====
T1 & T2 & T3 -->|"triggers"| CI
T4 -->|"triggers"| Deploy
T5 -->|"triggers"| Release
%% ===== NODE STYLES =====
classDef trigger fill:#818CF8,stroke:#4F46E5,color:#FFFFFF
classDef primary fill:#4F46E5,stroke:#3730A3,color:#FFFFFF
classDef secondary fill:#10B981,stroke:#059669,color:#FFFFFF
classDef datastore fill:#F59E0B,stroke:#D97706,color:#000000
%% ===== APPLY NODE CLASSES =====
class T1,T2,T3,T4,T5 trigger
class CI1,CI2 primary
class D1,D2,D3,D4 secondary
class R1,R2,R3 datastore
%% ===== SUBGRAPH STYLES =====
style Triggers fill:#EEF2FF,stroke:#4F46E5,stroke-width:2px
style CI fill:#E0E7FF,stroke:#4F46E5,stroke-width:2px
style Deploy fill:#ECFDF5,stroke:#10B981,stroke-width:2px
style Release fill:#FEF3C7,stroke:#F59E0B,stroke-width:2px
| Workflow | File | Trigger | Purpose |
|---|---|---|---|
| Continuous Integration | .github/workflows/ci.yml |
Push to feature/**, fix/**; PRs to main |
Build and validate Bicep templates |
| Deploy to Azure | .github/workflows/deploy.yml |
Manual dispatch | Provision infrastructure to Azure |
| Release | .github/workflows/release.yml |
Manual dispatch | Generate semantic versions and GitHub releases |
| Variable | Description | Example |
|---|---|---|
AZURE_CLIENT_ID |
App Registration client ID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
AZURE_TENANT_ID |
Azure AD tenant ID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
AZURE_SUBSCRIPTION_ID |
Target subscription ID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
AZURE_LOCATION |
Default Azure region | eastus2 |
| Secret | Description |
|---|---|
KEY_VAULT_SECRET |
GitHub Personal Access Token for private catalog access |
Important
Ensure all required repository variables and secrets are configured before triggering a deployment.
- Navigate to Actions β Deploy to Azure
- Click Run workflow
- Configure deployment parameters:
AZURE_ENV_NAME: Environment name (e.g.,dev,staging,prod)AZURE_LOCATION: Azure region (e.g.,eastus2,westus2)
- Click Run workflow
The setup scripts automatically configure OIDC, but you can also set it up manually:
# Create App Registration and federated credentials
.\.configuration\setup\powershell\Azure\generateDeploymentCredentials.ps1Tip
For comprehensive CI/CD pipeline documentation including reusable actions, versioning strategy, and best practices, see the DevOps Documentation.
Click to expand module catalog
| Module | Path | Description |
|---|---|---|
main.bicep |
infra/main.bicep |
Orchestration entry point (subscription scope) |
| Module | Path | Description |
|---|---|---|
security.bicep |
src/security/security.bicep |
Security landing zone orchestrator |
keyVault.bicep |
src/security/keyVault.bicep |
Azure Key Vault with RBAC |
secret.bicep |
src/security/secret.bicep |
Key Vault secret management |
| Module | Path | Description |
|---|---|---|
logAnalytics.bicep |
src/management/logAnalytics.bicep |
Log Analytics workspace |
| Module | Path | Description |
|---|---|---|
connectivity.bicep |
src/connectivity/connectivity.bicep |
Connectivity orchestrator |
vnet.bicep |
src/connectivity/vnet.bicep |
Virtual network with subnets |
networkConnection.bicep |
src/connectivity/networkConnection.bicep |
DevCenter network connection |
resourceGroup.bicep |
src/connectivity/resourceGroup.bicep |
Connectivity resource group |
| Module | Path | Description |
|---|---|---|
workload.bicep |
src/workload/workload.bicep |
Workload orchestrator |
devCenter.bicep |
src/workload/core/devCenter.bicep |
DevCenter resource |
catalog.bicep |
src/workload/core/catalog.bicep |
DevCenter catalog |
environmentType.bicep |
src/workload/core/environmentType.bicep |
Environment type definition |
project.bicep |
src/workload/project/project.bicep |
DevCenter project |
projectPool.bicep |
src/workload/project/projectPool.bicep |
Dev Box pool |
projectCatalog.bicep |
src/workload/project/projectCatalog.bicep |
Project-level catalog |
projectEnvironmentType.bicep |
src/workload/project/projectEnvironmentType.bicep |
Project environment type |
| Module | Path | Description |
|---|---|---|
devCenterRoleAssignment.bicep |
src/identity/devCenterRoleAssignment.bicep |
DevCenter RBAC |
projectIdentityRoleAssignment.bicep |
src/identity/projectIdentityRoleAssignment.bicep |
Project RBAC |
keyVaultAccess.bicep |
src/identity/keyVaultAccess.bicep |
Key Vault access policies |
orgRoleAssignment.bicep |
src/identity/orgRoleAssignment.bicep |
Organization-level RBAC |
Warning
The cleanup operations below will permanently delete Azure resources and associated data. Ensure you have backed up any important configurations before proceeding.
Remove all deployed resources when no longer needed.
# Remove all resources and purge Key Vault
azd down --purge --forceThe cleanup script performs a comprehensive teardown:
.\cleanSetUp.ps1 -EnvName <environment-name> -Location <azure-region>What the cleanup script removes:
| Resource Type | Action |
|---|---|
| Subscription Deployments | Deletes all ARM deployments |
| Role Assignments | Removes user and managed identity RBAC |
| Service Principals | Deletes OIDC app registrations |
| GitHub Secrets | Removes Azure credential secrets |
| Resource Groups | Deletes Security, Monitoring, Workload, and Connectivity RGs |
# List resource groups
az group list --query "[?starts_with(name, 'devexp-')].name" -o tsv
# Delete specific resource groups
az group delete --name devexp-workload-<env>-<region>-RG --yes --no-wait
az group delete --name devexp-security-<env>-<region>-RG --yes --no-wait
az group delete --name devexp-monitoring-<env>-<region>-RG --yes --no-waitCaution
Key Vault soft-delete is enabled by default. Use --purge flag or manually purge deleted vaults to fully remove secrets. Soft-deleted Key Vaults consume quota and may block re-deployment with the same name.
Note
Contributions are welcome! We follow a standard GitHub workflow with conventional commits.
-
Fork the repository
-
Create a feature branch:
git checkout -b feature/amazing-feature
-
Make your changes following the guidelines below
-
Test locally:
az bicep build --file infra/main.bicep
-
Commit your changes:
git commit -m 'feat: add amazing feature' -
Push to the branch:
git push origin feature/amazing-feature
-
Open a Pull Request to
main
| Area | Guideline |
|---|---|
| Bicep | Follow Bicep best practices |
| Parameters | Include @description() decorators for all parameters |
| Resources | Add appropriate tags to all resources |
| Naming | Use consistent naming conventions (camelCase for variables, kebab-case for resources) |
| Documentation | Update README and architecture docs for configuration changes |
| Testing | Validate Bicep files compile before submitting PRs |
We use Conventional Commits:
feat: add new Dev Box pool configuration
fix: correct Key Vault access policy
docs: update README with DSC examples
refactor: simplify network module
This project is licensed under the MIT License β see the LICENSE file for details.
| Resource | Description |
|---|---|
| Architecture Documentation | TOGAF-aligned architecture decision records |
| DevOps Documentation | Comprehensive CI/CD pipeline documentation |
| Script Documentation | Setup and configuration script guides |
| Resource | Link |
|---|---|
| Microsoft Dev Box | Documentation |
| Azure DevCenter | Documentation |
| Azure Bicep | Documentation |
| Azure Landing Zones | Cloud Adoption Framework |
| Azure Developer CLI | Documentation |
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
| Document | Description |
|---|---|
| Business Architecture | Business context and drivers |
| Data Architecture | Data models and flows |
| Application Architecture | Application components and interactions |
| Technology Architecture | Technology stack and infrastructure |
| Security Architecture | Security controls and compliance |
| Deployment Architecture | Deployment patterns and strategies |
| DevOps Documentation | CI/CD and operational guides |
| Scripts Documentation | Setup and configuration scripts |
π§ Navigation
β¬οΈ Back to Top Β· π Documentation Β· ποΈ Architecture Β· π§ DevOps
Built with β€οΈ by the Evilazaro Alves