Skip to content

Commit 29645e3

Browse files
feat: initial toolkit migration from prodtech-docs-azl-toolkit
- Scaffold: MkDocs Material, release-please, deploy-docs, add-to-project workflows - Content: 242 deployment scripts (stages 02-08), config templates, ARM templates - Branding: all TierPoint/prodtech/tplabs references replaced - Security: all real Azure GUIDs replaced with placeholders - Docs: deployment stage stubs, configuration reference, roadmap - Solutions: 6 placeholder dirs (ai_foundry, aks, app_services, iot_operations, machine_learning, mi_sql) Closes #12
0 parents  commit 29645e3

353 files changed

Lines changed: 83727 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
name: Add to Project
2+
3+
on:
4+
issues:
5+
types: [opened, labeled]
6+
pull_request:
7+
types: [opened, labeled]
8+
9+
jobs:
10+
add-to-project:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/add-to-project@v1.0.2
14+
id: add
15+
with:
16+
project-url: https://github.com/orgs/AzureLocal/projects/3
17+
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
18+
19+
set-fields:
20+
needs: add-to-project
21+
runs-on: ubuntu-latest
22+
if: github.event_name == 'issues'
23+
env:
24+
GH_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
25+
PROJECT_ID: "PVT_kwDOCxeiOM4BR2KZ"
26+
SOLUTION_FIELD: "PVTSSF_lADOCxeiOM4BR2KZzg_jXuY"
27+
PRIORITY_FIELD: "PVTSSF_lADOCxeiOM4BR2KZzg_jXvs"
28+
CATEGORY_FIELD: "PVTSSF_lADOCxeiOM4BR2KZzg_jXxA"
29+
steps:
30+
- name: Get project item ID
31+
id: find-item
32+
run: |
33+
ITEM_ID=$(gh project item-list 3 --owner AzureLocal --format json --limit 200 \
34+
| jq -r --arg url "${{ github.event.issue.html_url }}" \
35+
'.items[] | select(.content.url == $url) | .id')
36+
echo "item_id=$ITEM_ID" >> "$GITHUB_OUTPUT"
37+
38+
- name: Set Solution field
39+
if: steps.find-item.outputs.item_id != ''
40+
run: |
41+
ITEM_ID="${{ steps.find-item.outputs.item_id }}"
42+
LABELS='${{ toJson(github.event.issue.labels.*.name) }}'
43+
OPTION_ID=""
44+
if echo "$LABELS" | grep -q '"solution/sofs"'; then
45+
OPTION_ID="1695a3e2"
46+
elif echo "$LABELS" | grep -q '"solution/avd"'; then
47+
OPTION_ID="1d1bf6c0"
48+
elif echo "$LABELS" | grep -q '"solution/loadtools"'; then
49+
OPTION_ID="bb2d53f9"
50+
elif echo "$LABELS" | grep -q '"solution/vmconvert"'; then
51+
OPTION_ID="942759d7"
52+
elif echo "$LABELS" | grep -q '"solution/docs-site"'; then
53+
OPTION_ID="75fa7361"
54+
elif echo "$LABELS" | grep -q '"solution/workspace"'; then
55+
OPTION_ID="d60c979e"
56+
elif echo "$LABELS" | grep -q '"solution/toolkit"'; then
57+
OPTION_ID=""
58+
fi
59+
if [ -n "$OPTION_ID" ]; then
60+
gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" \
61+
--field-id "$SOLUTION_FIELD" --single-select-option-id "$OPTION_ID"
62+
fi
63+
64+
- name: Set Priority field
65+
if: steps.find-item.outputs.item_id != ''
66+
run: |
67+
ITEM_ID="${{ steps.find-item.outputs.item_id }}"
68+
LABELS='${{ toJson(github.event.issue.labels.*.name) }}'
69+
OPTION_ID=""
70+
if echo "$LABELS" | grep -q '"priority/critical"'; then
71+
OPTION_ID="74334e8d"
72+
elif echo "$LABELS" | grep -q '"priority/high"'; then
73+
OPTION_ID="2e3ede9d"
74+
elif echo "$LABELS" | grep -q '"priority/medium"'; then
75+
OPTION_ID="7709e85d"
76+
elif echo "$LABELS" | grep -q '"priority/low"'; then
77+
OPTION_ID="2182b5f9"
78+
fi
79+
if [ -n "$OPTION_ID" ]; then
80+
gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" \
81+
--field-id "$PRIORITY_FIELD" --single-select-option-id "$OPTION_ID"
82+
fi
83+
84+
- name: Set Category field
85+
if: steps.find-item.outputs.item_id != ''
86+
run: |
87+
ITEM_ID="${{ steps.find-item.outputs.item_id }}"
88+
LABELS='${{ toJson(github.event.issue.labels.*.name) }}'
89+
OPTION_ID=""
90+
if echo "$LABELS" | grep -q '"type/feature"'; then
91+
OPTION_ID="7a4fa8ea"
92+
elif echo "$LABELS" | grep -q '"type/bug"'; then
93+
OPTION_ID="206e624a"
94+
elif echo "$LABELS" | grep -q '"type/docs"'; then
95+
OPTION_ID="355ce6c1"
96+
elif echo "$LABELS" | grep -q '"type/infra"'; then
97+
OPTION_ID="05996f93"
98+
elif echo "$LABELS" | grep -q '"type/refactor"'; then
99+
OPTION_ID="7f5509ab"
100+
elif echo "$LABELS" | grep -q '"type/security"'; then
101+
OPTION_ID="d2af4749"
102+
fi
103+
if [ -n "$OPTION_ID" ]; then
104+
gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" \
105+
--field-id "$CATEGORY_FIELD" --single-select-option-id "$OPTION_ID"
106+
fi

.github/workflows/deploy-docs.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: Deploy Documentation
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- 'docs/**'
8+
- 'mkdocs.yml'
9+
workflow_dispatch:
10+
11+
permissions:
12+
contents: read
13+
pages: write
14+
id-token: write
15+
16+
concurrency:
17+
group: pages
18+
cancel-in-progress: false
19+
20+
jobs:
21+
build:
22+
runs-on: ubuntu-latest
23+
steps:
24+
- uses: actions/checkout@v4
25+
26+
- uses: actions/setup-python@v5
27+
with:
28+
python-version: '3.12'
29+
30+
- name: Install MkDocs Material
31+
run: pip install mkdocs-material
32+
33+
- name: Build site
34+
run: mkdocs build --strict
35+
36+
- uses: actions/upload-pages-artifact@v3
37+
with:
38+
path: site
39+
40+
deploy:
41+
needs: build
42+
runs-on: ubuntu-latest
43+
environment:
44+
name: github-pages
45+
url: ${{ steps.deployment.outputs.page_url }}
46+
steps:
47+
- id: deployment
48+
uses: actions/deploy-pages@v4
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: Release Please
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
permissions:
9+
contents: write
10+
pull-requests: write
11+
12+
jobs:
13+
release-please:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: googleapis/release-please-action@v4
17+
with:
18+
token: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Terraform
2+
.terraform/
3+
.terraform.lock.hcl
4+
*.tfstate
5+
*.tfstate.backup
6+
*.tfvars
7+
!*.tfvars.example
8+
crash.log
9+
override.tf
10+
override.tf.json
11+
*_override.tf
12+
*_override.tf.json
13+
14+
# Ansible
15+
ansible/roles/
16+
*.retry
17+
ansible/.vault_pass
18+
19+
# PowerShell
20+
*.psm1~
21+
*.psd1~
22+
23+
# Secrets / credentials
24+
*.pem
25+
*.key
26+
*.pfx
27+
*.p12
28+
*.cer
29+
*.crt
30+
*.creds
31+
*.secrets
32+
.env
33+
.env.*
34+
!.env.example
35+
36+
# Central config (actual values — never commit)
37+
configs/infrastructure-*.yml
38+
!configs/infrastructure.yml
39+
configs/credentials/
40+
41+
# Log files (keep the directory via .gitkeep)
42+
logs/**
43+
!logs/.gitkeep
44+
45+
# Temp / scratch
46+
temp/
47+
48+
# Editor / OS artifacts
49+
.vscode/
50+
.idea/
51+
*.suo
52+
*.user
53+
Thumbs.db
54+
.DS_Store
55+
*~
56+
57+
# Build output
58+
dist/
59+
out/
60+
build/
61+
site/
62+
63+
# Node (if mkdocs plugins ever need it)
64+
node_modules/

.release-please-manifest.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
".": "0.0.0"
3+
}

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6+
7+
## [Unreleased]
8+
9+
### Features
10+
11+
- Initial repository scaffold — MkDocs Material, release-please, GitHub Pages, CI/CD workflows
12+
- Migrate toolkit content from AzureLocalCloud-docs-azl-toolkit (scripts, configs, solution placeholders)
13+
- Branding scrub — remove all Azure Local Cloud/AzureLocalCloud/HCS references

CONTRIBUTING.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Contributing
2+
3+
Thank you for your interest in contributing to the Azure Local Toolkit project. Contributions are welcome — especially around deployment scripts, validation suites, config management, and solution packages for Azure Local.
4+
5+
## Before You Start
6+
7+
- Read the [README](README.md) for an overview of the project
8+
- This project contains platform automation for Azure Local — **test all changes in a non-production environment**
9+
- Check open issues and pull requests to avoid duplicate work
10+
11+
## How to Contribute
12+
13+
### Reporting Bugs
14+
15+
Open an issue with:
16+
- Azure Local version (22H2, 23H2, etc.)
17+
- Which script or configuration failed and at which deployment stage
18+
- Full error message and relevant log output
19+
20+
### Suggesting Features
21+
22+
Open an issue describing the use case, not just the solution.
23+
24+
### Documentation Issues
25+
26+
Open an issue for missing, incorrect, or unclear docs.
27+
28+
### Submitting Pull Requests
29+
30+
1. Fork the repo and create a branch from `main`
31+
2. Name branches using conventional types: `feat/new-validation-suite`, `fix/config-loader`, `docs/deployment-guide`
32+
3. Keep changes focused — one logical change per PR
33+
4. Update the README and relevant `docs/` pages if your change affects usage or prerequisites
34+
5. Add an entry to [CHANGELOG.md](CHANGELOG.md) under `[Unreleased]`
35+
6. Test your changes against at least one real Azure Local environment before submitting
36+
7. Fill out the pull request template completely
37+
38+
## Commit Messages
39+
40+
This project uses [Conventional Commits](https://www.conventionalcommits.org/):
41+
42+
```
43+
<type>(<scope>): <description>
44+
```
45+
46+
| Type | When |
47+
|------|------|
48+
| `feat` | New feature |
49+
| `fix` | Bug fix |
50+
| `docs` | Documentation only |
51+
| `infra` | CI/CD, workflows, config |
52+
| `chore` | Maintenance |
53+
| `refactor` | Code improvement, no behavior change |
54+
| `test` | Tests |
55+
56+
Examples:
57+
- `feat(scripts): add cluster health validation suite`
58+
- `fix(config): correct Key Vault resolver path handling`
59+
- `docs(deployment): add stage 04 walkthrough`
60+
61+
## Development Guidelines
62+
63+
### PowerShell Style
64+
65+
- Use approved PowerShell verbs (`Get-`, `Set-`, `New-`, `Remove-`, etc.)
66+
- Include `[CmdletBinding()]` and `param()` blocks on all scripts
67+
- Use `Write-Verbose` for diagnostic output, `Write-Warning` for non-fatal issues, `Write-Error` for failures
68+
- Guard destructive operations with `-WhatIf` / `-Confirm` where practical
69+
70+
### Infrastructure as Code
71+
72+
- Terraform, Bicep, and ARM files should follow the conventions in `docs/standards/`
73+
- Use variables for all environment-specific values — no hardcoded IPs, names, or paths
74+
75+
### Testing
76+
77+
- Test against a real Azure Local environment before submitting
78+
- Describe your test environment and results in the PR
79+
80+
## Code of Conduct
81+
82+
Be respectful and constructive. Keep discussions on-topic and collaborative.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 AzureLocal
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

0 commit comments

Comments
 (0)