Require Azure resource groups in Radius.Core environments#12495
Conversation
Co-authored-by: willtsai <28876888+willtsai@users.noreply.github.com>
Co-authored-by: willtsai <28876888+willtsai@users.noreply.github.com>
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
There was a problem hiding this comment.
Pull request overview
This PR tightens the Azure provider contract for Radius.Core/environments (2025-08-01-preview) so environments can no longer be configured without providers.azure.resourceGroupName, preventing invalid subscription-scoped recipe contexts and failing earlier with a property-specific error.
Changes:
- Make
providers.azure.resourceGroupNamerequired in TypeSpec and regenerate OpenAPI/Go/Bicep type artifacts. - Update internal datamodel JSON contract to treat
resourceGroupNameas required (noomitempty). - Add fast-fail validation in the recipe config loader plus a unit test case for missing resource group.
Reviewed changes
Copilot reviewed 5 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| typespec/Radius.Core/environments.tsp | Makes Azure resourceGroupName required in the source contract. |
| swagger/specification/radius/resource-manager/Radius.Core/preview/2025-08-01-preview/openapi.json | Regenerated OpenAPI to require resourceGroupName and update its description. |
| hack/bicep-types-radius/generated/radius/radius.core/2025-08-01-preview/types.json | Regenerated Bicep types so resourceGroupName is required. |
| pkg/corerp/api/v20250801preview/zz_generated_models.go | Regenerated Go API model marking ResourceGroupName as required. |
| pkg/corerp/datamodel/environment_v20250801preview.go | Aligns internal datamodel JSON tags to require resourceGroupName. |
| pkg/recipes/configloader/environment.go | Fails fast when Azure provider is configured without a resource group. |
| pkg/recipes/configloader/environment_test.go | Updates tests to expect the new error when RG is missing; keeps coverage for valid RG. |
Files not reviewed (1)
- pkg/corerp/api/v20250801preview/zz_generated_models.go: Generated file
| if envDatamodel.Properties.Providers.Azure.ResourceGroupName == "" { | ||
| return nil, fmt.Errorf("providers.azure.resourceGroupName is required when the Azure provider is configured") | ||
| } | ||
| scope := "/subscriptions/" + envDatamodel.Properties.Providers.Azure.SubscriptionId + | ||
| "/resourceGroups/" + envDatamodel.Properties.Providers.Azure.ResourceGroupName |
| @doc("Azure resource group hosting deployed resources.") | ||
| resourceGroupName: string; |
Unit Tests 2 files ±0 457 suites ±0 7m 32s ⏱️ +6s Results for commit 22242d2. ± Comparison against base commit d5258ce. This pull request removes 1 and adds 1 tests. Note that renamed tests count towards both.♻️ This comment has been updated with latest results. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #12495 +/- ##
==========================================
- Coverage 53.87% 53.86% -0.02%
==========================================
Files 765 765
Lines 50647 50648 +1
==========================================
- Hits 27288 27283 -5
- Misses 20788 20791 +3
- Partials 2571 2574 +3 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Radius functional test overviewClick here to see the test run details
Test Status⌛ Building Radius and pushing container images for functional tests... |
| if envDatamodel.Properties.Providers.Azure != nil { | ||
| scope := "/subscriptions/" + envDatamodel.Properties.Providers.Azure.SubscriptionId | ||
| if envDatamodel.Properties.Providers.Azure.ResourceGroupName != "" { | ||
| scope += "/resourceGroups/" + envDatamodel.Properties.Providers.Azure.ResourceGroupName | ||
| if envDatamodel.Properties.Providers.Azure.ResourceGroupName == "" { | ||
| return nil, fmt.Errorf("providers.azure.resourceGroupName is required when the Azure provider is configured") | ||
| } | ||
| scope := "/subscriptions/" + envDatamodel.Properties.Providers.Azure.SubscriptionId + | ||
| "/resourceGroups/" + envDatamodel.Properties.Providers.Azure.ResourceGroupName |
Functional Tests - corerp-cloud30 tests ±0 27 ✅ - 2 55m 49s ⏱️ + 34m 51s For more details on these failures, see this check. Results for commit 22242d2. ± Comparison against base commit d5258ce. |
Summary
Azure environments accepted provider configuration without
resourceGroupName, producing invalid subscription-scoped recipe contexts.providers.azure.resourceGroupNameacross TypeSpec, OpenAPI, Go, and Bicep contracts.Reason for change
Azure Bicep and Terraform recipes require a resource group. Schema-valid environments could previously omit it and fail later during recipe deployment.
How to test
Create an Azure environment without
resourceGroupNameand verify schema validation rejects it. Verify the config loader also returns:File change summary
typespec/Radius.Core/environments.tspresourceGroupNamerequired.swagger/specification/radius/resource-manager/Radius.Core/preview/2025-08-01-preview/openapi.jsonhack/bicep-types-radius/generated/radius/radius.core/2025-08-01-preview/types.jsonpkg/corerp/api/v20250801preview/zz_generated_models.gopkg/corerp/datamodel/environment_v20250801preview.gopkg/recipes/configloader/environment.gopkg/recipes/configloader/environment_test.go