Folder structure¶
Top-level layout of the AzureLocal/platform repository.
platform/
├── .github/
│ └── workflows/
│ ├── platform-ci.yml # platform's own CI (markdownlint, yamllint, Pester)
│ ├── deploy-docs.yml # deploys this docs site
│ ├── release-please.yml # automated release PRs
│ ├── add-to-project.yml # project-board automation
│ ├── validate-repo-structure.yml # self-validation
│ ├── drift-audit.yml # monthly org-wide audit
│ ├── reusable-mkdocs-deploy.yml # reusable workflow
│ ├── reusable-iac-validate.yml # reusable workflow
│ ├── reusable-ps-module-ci.yml # reusable workflow
│ ├── reusable-ts-web-ci.yml # reusable workflow
│ ├── reusable-maproom-run.yml # reusable workflow
│ └── reusable-drift-check.yml # reusable workflow
│
├── docs/ # This MkDocs Material site
│ ├── getting-started/
│ ├── onboarding/
│ ├── standards/
│ ├── reusable-workflows/
│ ├── maproom/
│ ├── trailhead/
│ ├── repo-management/
│ ├── templates/
│ ├── modules/
│ ├── governance/
│ ├── reference/
│ ├── contributing/
│ └── testing/
│ └── repo-survey.md # Repo survey that grounded ADR-0004
│
├── standards/ # Canonical standards docs (single source of truth)
│
├── testing/
│ ├── maproom/
│ │ ├── AzureLocal.Maproom.psd1 # Module manifest
│ │ ├── AzureLocal.Maproom.psm1
│ │ ├── framework/
│ │ │ ├── Public/ # Exported functions
│ │ │ ├── Private/ # Internal helpers
│ │ │ └── Classes/ # PS classes
│ │ ├── generators/
│ │ ├── harness/
│ │ ├── schema/
│ │ │ └── fixture.schema.json
│ │ └── README.md
│ │
│ ├── trailhead/
│ │ ├── scripts/
│ │ │ ├── Start-TrailheadRun.ps1
│ │ │ └── TrailheadLog-Helpers.ps1
│ │ ├── templates/
│ │ ├── docs/
│ │ └── README.md
│ │
│ └── iic-canon/
│ ├── iic-azure-local-01.json
│ └── README.md
│
├── modules/
│ └── powershell/
│ └── AzureLocal.Common/
│ ├── AzureLocal.Common.psd1
│ ├── AzureLocal.Common.psm1
│ └── README.md
│
├── repo-management/
│ └── org-scripts/
│ ├── Invoke-RepoAudit.ps1
│ ├── Sync-Labels.ps1
│ ├── Sync-BranchProtection.ps1
│ ├── Sync-CommonFiles.ps1
│ ├── New-AzureLocalRepo.ps1
│ └── labels.json # Canonical label set (16 labels)
│
├── templates/
│ ├── _common/ # Files copied into every variant
│ ├── ps-module/
│ ├── ts-web-app/
│ ├── iac-solution/
│ ├── migration-runbook/
│ └── training-site/
│
├── scripts/
│ ├── Seed-DocStubs.ps1 # Original docs-stub seeder
│ └── README.md
│
├── decisions/ # ADRs
│ ├── 0001-create-platform-repo.md
│ ├── 0002-standards-single-source.md
│ ├── 0003-maproom-iic-canon.md
│ ├── 0004-testing-toolset-classification.md
│ ├── README.md
│ └── template.md
│
├── .azurelocal-platform.yml # Self-descriptor — platform is its own first consumer
├── .markdownlint.json
├── .yamllint.yml
├── CHANGELOG.md
├── CODEOWNERS
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── mkdocs.yml
├── release-please-config.json
└── requirements-docs.txt
Depth limits¶
- Keep top-level directories flat. New things go under an existing folder when possible.
- Templates variants never nest more than 2 levels deep inside
templates/<variant>/. - ADRs stay at
decisions/root — no subfolders.
Why the split¶
testing/(notmodules/) holdsAzureLocal.Maproombecause MAPROOM is a testing framework, not a general helper.AzureLocal.Commonis general — it lives undermodules/powershell/.standards/is the source of standards;docs/standards/is the rendered navigation-friendly version. The two diverge only while docs are being authored.scripts/is for platform's own tooling (runs on the platform repo).repo-management/org-scripts/runs against consumer repos.