Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions src/Bicep.Core.IntegrationTests/ScenarioTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7892,4 +7892,51 @@ param name string
("BCP065", DiagnosticLevel.Error, """Function "utcNow" is not valid at this location. It can only be used as a parameter default value."""),
]);
}

[TestMethod]
// https://github.com/azure/bicep/issues/19745
public void Test_Issue19745_EmptyArrayResourceLoopEvaluationShouldSucceed()
{
// Test that Bicep templates with empty array resource loops (copy.count = 0) can be evaluated successfully.
// Real Azure ARM accepts copy.count = 0 as a no-op (no resources deployed).
// This tests the workaround for the external Azure.Deployments.Templates package validation error.

var bicepTemplate = @"
param items array = []

resource storage 'Microsoft.Storage/storageAccounts@2023-05-01' = [for item in items: {
name: 'st${uniqueString(item)}'
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]

output deployedCount int = length(storage)
";

var compilationResult = CompilationHelper.Compile(bicepTemplate);
compilationResult.Should().NotHaveAnyCompilationBlockingDiagnostics();
compilationResult.Template.Should().NotBeNull();

// Verify the compiled template has the copy block with length expression
var template = compilationResult.Template!;
template.Should().NotBeNull();

// Evaluate the template to ensure no validation error occurs
var armTemplate = template.ToJToken();

// The TemplateEvaluator.Evaluate call should not throw an exception for copy.count = 0
var evaluatedTemplate = TemplateEvaluator.Evaluate(
armTemplate,
parametersJToken: null,
configBuilder: config => config,
features: null
);

evaluatedTemplate.Should().NotBeNull();
// Verify that resources with zero copy count were handled correctly
evaluatedTemplate.Resources.Should().HaveCount(0, because: "the storage resource has copy.count = 0 and should be excluded");
}
}
6 changes: 3 additions & 3 deletions src/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
<PackageVersion Include="Azure.Bicep.Types.Az" Version="0.2.871" />
<PackageVersion Include="Azure.Bicep.Types.K8s" Version="0.1.644" />
<PackageVersion Include="Azure.Containers.ContainerRegistry" Version="1.3.0" />
<PackageVersion Include="Azure.Deployments.Engine" Version="1.683.0" />
<PackageVersion Include="Azure.Deployments.Engine" Version="1.710.0" />
<PackageVersion Include="Azure.Deployments.Extensibility.Core" Version="0.1.67" />
<PackageVersion Include="Azure.Deployments.Internal.GenerateNotice" Version="0.1.60" />
<PackageVersion Include="Azure.Deployments.Templates" Version="1.683.0" />
<PackageVersion Include="Azure.Deployments.Templates" Version="1.710.0" />
<PackageVersion Include="Azure.Identity" Version="1.21.0" />
<PackageVersion Include="Azure.ResourceManager.ResourceGraph" Version="1.1.1" />
<PackageVersion Include="Azure.ResourceManager.Resources" Version="1.11.2" />
Expand Down Expand Up @@ -59,7 +59,7 @@
<PackageVersion Include="Microsoft.NET.Sdk.WebAssembly.Pack" Version="10.0.8" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
<PackageVersion Include="Microsoft.Net.Compilers.Toolset" Version="4.12.0" />
<PackageVersion Include="Microsoft.PowerPlatform.ResourceStack" Version="7.0.0.2080" />
<PackageVersion Include="Microsoft.PowerPlatform.ResourceStack" Version="7.0.0.2089" />
<PackageVersion Include="Microsoft.Test.Apex.VisualStudio" Version="17.11.35222.181" />
<PackageVersion Include="Microsoft.VSSDK.BuildTools" Version="17.12.2069" />
<PackageVersion Include="Microsoft.VisualStudio.Composition" Version="17.12.18" />
Expand Down
Loading