--- sidebar_position: 6 title: Prerequisites and Build Validation description: Required tools, Azure access, NGC credentials, and build validation commands for contributing author: Microsoft Robotics-AI Team ms.date: 2026-03-25 ms.topic: how-to keywords: - prerequisites - azure - terraform - validation - contributing --- > [!NOTE] > This guide expands on the [Prerequisites](README.md#-prerequisites) section of the main contributing guide. Tools, Azure access, and build validation requirements for contributing to the Physical AI Toolchain. ## Required Tools Install these tools before contributing: | Tool | Minimum Version | Installation | |----------------|-----------------|---------------------------------------------------------------------------------------------------------------------------| | Terraform | 1.9.8 | | | TFLint | 0.61.0 | | | Azure CLI | 2.65.0 | | | kubectl | 1.31 | | | Helm | 4.0 | | | Node.js/npm | 20+ LTS | | | Python | 3.12+ | | | shellcheck | 0.10+ | | | uv | latest | | | Go | 1.24+ | | | golangci-lint | 2.11+ | | | Docker | latest | (with NVIDIA Container Toolkit) | | OSMO CLI | latest | | | terraform-docs | 0.21.0 | | | OSV-Scanner | 2.3.8 | (installed automatically by `setup-dev.sh` / `setup-dev.ps1`) | | hve-core | latest | | > [!NOTE] > GitHub Copilot Coding Agent runs in a separate cloud GitHub Actions environment provisioned by [.github/workflows/copilot-setup-steps.yml](../../.github/workflows/copilot-setup-steps.yml). When you bump a language runtime or test runner version locally (devcontainer or this list), update the matching pin in that workflow so cloud-agent sessions stay aligned. ## Azure Access Requirements Deploying this architecture requires Azure subscription access with specific permissions and quotas: ### Subscription Roles * `Contributor` role for resource group creation and management * `User Access Administrator` role for managed identity assignment ### GPU Quota * Request GPU VM quota in your target region before deployment * Architecture uses `Standard_NC24ads_A100_v4` (24 vCPU, 220 GB RAM, 1x A100 80GB GPU) * Check quota: `az vm list-usage --location --query "[?name.value=='standardNCadsA100v4Family']"` * Request increase through Azure Portal → Quotas → Compute ### Regional Availability * Verify GPU VM availability in target region: * Architecture validated in `eastus`, `westus2`, `westeurope` ## NVIDIA NGC Account Training workflows use NVIDIA GPU Operator and Isaac Lab, which require NGC credentials: * Create account: * Generate API key: NGC Console → Account Settings → Generate API Key * Store API key in Azure Key Vault or Kubernetes secret (deployment scripts provide guidance) ## Cost Awareness Full deployment validation incurs Azure costs. Understand cost structure before deploying: ### GPU Virtual Machines * `Standard_NC24ads_A100_v4`: ~$3.06/hour per VM (pay-as-you-go) * 8-hour validation session: ~$25 * 40-hour work week: ~$125 ### Managed Services * AKS control plane: ~$0.10/hour (~$73/month) * Log Analytics workspace: ~$2.76/GB ingested * Storage accounts: ~$0.02/GB (block blob, hot tier) * Azure Container Registry: Basic tier ~$5/month ### Cost Optimization * Use `terraform destroy` immediately after validation * Automate cleanup with `-auto-approve` flag * Monitor costs: Azure Portal → Cost Management + Billing * Set budget alerts to prevent overruns ### Estimated Costs * Quick validation (deploy + verify + destroy): ~$25-50 * Extended development session (8 hours): ~$50-100 * Monthly development (40 hours): ~$200-300 ## Build and Validation Requirements ### Tool Version Verification Verify tool versions before validating: ```bash # Terraform terraform version # >= 1.9.8 # TFLint (Terraform linter) tflint --version # >= 0.61.0 # Azure CLI az version # >= 2.65.0 # kubectl kubectl version --client # >= 1.31 # Helm helm version # >= 3.16 # Node.js (for documentation linting) node --version # >= 20 # Python (for training scripts) python --version # >= 3.12 # shellcheck (for shell script validation) shellcheck --version # >= 0.10 # uv (Python package manager) uv --version # Go go version # >= 1.24 # golangci-lint golangci-lint version # >= 2.11 # Docker with NVIDIA Container Toolkit docker --version nvidia-ctk --version # OSMO CLI osmo --version # terraform-docs terraform-docs --version # >= 0.21.0 # OSV-Scanner (dependency vulnerability scanner) osv-scanner --version # == 2.3.8 (pinned; installed by setup-dev scripts) # hve-core (VS Code extension — verify via extensions list) code --list-extensions | grep -i hve-core ``` ### TFLint Local Setup Install TFLint v0.61.0 or newer before changing Terraform modules: ```bash # macOS brew install tflint # Linux curl -s https://raw.githubusercontent.com/terraform-linters/tflint/master/install_linux.sh | bash ``` ```powershell # Windows (Chocolatey) choco install tflint # Windows (Scoop) scoop install tflint ``` Initialize the repository TFLint plugins once from the repository root. This downloads the Azure provider ruleset declared in `.tflint.hcl`: ```bash tflint --init ``` Then run the project wrapper before pushing Terraform changes: ```bash npm run lint:tf ``` The wrapper runs TFLint recursively against `infrastructure/terraform/` with the shared `.tflint.hcl` configuration. A VS Code TFLint extension is optional for inline diagnostics, but the CLI setup above remains the required validation path. ### Validation Commands Run these commands before committing: **Terraform:** ```bash # Format check (required) terraform fmt -check -recursive infrastructure/terraform/ # Initialize and validate (required for infrastructure changes) cd infrastructure/terraform/ terraform init terraform validate # Lint Terraform configurations (required for infrastructure changes) tflint --init # first time only, installs plugins from .tflint.hcl tflint --recursive infrastructure/terraform/ ``` **Shell Scripts:** ```bash # Lint all shell scripts (required) shellcheck deploy/**/*.sh scripts/**/*.sh ``` **Go:** ```bash # Lint Go modules (required for Go changes) npm run lint:go # Test Go modules (required for Go changes) npm run test:go # Contract tests (validates Terraform outputs against Go struct — requires terraform-docs) # Run after adding/removing/renaming Terraform outputs ./infrastructure/terraform/e2e/run-contract-tests.sh ``` **Documentation:** ```bash # Install dependencies (first time only) npm install # Lint markdown (required for documentation changes) npm run lint:md ``` ## VS Code Configuration The workspace is configured with `python.analysis.extraPaths` pointing to `src/`, enabling imports like: ```python from training.utils import AzureMLContext, bootstrap_azure_ml ``` Select the `.venv/bin/python` interpreter in VS Code for IntelliSense support. The workspace `.vscode/settings.json` also configures Copilot Chat to load instructions, prompts, and chat modes from hve-core: | Setting | hve-core Paths | |-----------------------------------|------------------------------------------------------------------------------| | `chat.modeFilesLocations` | `../hve-core/.github/chatmodes`, `../hve-core/copilot/beads/chatmodes` | | `chat.instructionsFilesLocations` | `../hve-core/.github/instructions`, `../hve-core/copilot/beads/instructions` | | `chat.promptFilesLocations` | `../hve-core/.github/prompts`, `../hve-core/copilot/beads/prompts` | These paths resolve when hve-core is installed as a peer directory or via the VS Code Extension. Without hve-core, Copilot still functions but shared conventions, prompts, and chat modes are unavailable. For a complete list of available agents, prompts, and skills, see [Copilot Artifacts](../reference/copilot-artifacts.md). ## Related Documentation * [Contributing Guide](README.md) - Main contributing guide with all sections * [Deployment Validation](deployment-validation.md) - Validation levels and testing templates * [Cost Considerations](cost-considerations.md) - Component costs, budgeting, regional pricing