Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failure to build ARM template with "optionalModuleNames" experimental feature enabled #15394

Open
asilverman opened this issue Oct 23, 2024 · 0 comments

Comments

@asilverman
Copy link
Contributor

Bicep version
Image

Describe the bug
When I try to compile the following template with a module that has no module name Bicep throws an exception

template.bicep

targetScope = 'managementGroup'

param previousPolicyAssignmentId string
param policyAssignmentRegionsSelected array
param subscriptionId string
param resourceGroupName string
param timestamp string = utcNow()
var checkOldAssignmentName = 'checkOldAssignment_${timestamp}'

resource oldPolicyAssignment 'Microsoft.Authorization/policyAssignments@2023-04-01' existing = {
  name: previousPolicyAssignmentId
}

module checkOldAssignment './checkOldAssignmentModule.bicep' = {
  // name: checkOldAssignmentName
  scope: resourceGroup(subscriptionId, resourceGroupName)
  params: {
    oldPolicyAssignment: oldPolicyAssignment
    scriptName: checkOldAssignmentName
    newLocations: policyAssignmentRegionsSelected
  }
}

resource updatedOldAssigment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
  name: oldPolicyAssignment.name
  properties: {
    displayName: oldPolicyAssignment.properties.displayName
    enforcementMode: oldPolicyAssignment.properties.enforcementMode
    policyDefinitionId: oldPolicyAssignment.properties.policyDefinitionId
    parameters: oldPolicyAssignment.properties.parameters
    resourceSelectors: checkOldAssignment.outputs.updatedResourceSelectors
  }
}

checkOldAssignmentModule.bicep

param oldPolicyAssignment object
param scriptName string
param newLocations array

var scriptContent = loadTextContent('./checkOldAssignmentScript.ps1', 'utf-8')

resource script 'Microsoft.Resources/deploymentScripts@2023-08-01' = if (!empty(oldPolicyAssignment)) {
  kind: 'AzurePowerShell'
  name: scriptName
  location: resourceGroup().location
  properties: {
    azPowerShellVersion: '6.4'
    environmentVariables: [
      {
        name: 'oldResourceSelectors'
        value: string(oldPolicyAssignment.properties.?resourceSelectors ?? [])
      }
      {
        name: 'newLocations'
        value: string(newLocations)
      }
    ]
    scriptContent: scriptContent
    cleanupPreference: 'Always'
    retentionInterval: 'PT1H'
  }
}

output oldAssignment object = oldPolicyAssignment
output updatedResourceSelectors array = json(script.properties.outputs.text)

bicepconfig.json

{
    "experimentalFeaturesEnabled": {
        "resourceDerivedTypes": true,
        "symbolicNameCodegen": true,
        "optionalModuleNames": true
    }
}

Error:

Error - 4:22:01 PM] Bicep build failed
Internal Error - System.ArgumentException: Expected module syntax body to contain property 'name'
   at Bicep.Core.Intermediate.ExpressionBuilder.GetModuleNameSyntax(ModuleSymbol moduleSymbol) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1285
   at Bicep.Core.Intermediate.ExpressionBuilder.TryGetReplacementContext(ModuleSymbol module, SyntaxBase indexExpression, SyntaxBase newContext) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1239
   at Bicep.Core.Intermediate.ExpressionBuilder.ToDependencyExpression(ResourceDependency dependency, SyntaxBase newContext) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1340
   at Bicep.Core.Intermediate.ExpressionBuilder.<>c__DisplayClass30_0.<ConvertResource>b__4(ResourceDependency x) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 731
   at System.Linq.Enumerable.SelectIPartitionIterator`2.LazyToArray()
   at System.Linq.Enumerable.SelectIPartitionIterator`2.ToArray()
   at System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items)
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertResource(ResourceDeclarationSyntax syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 728
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertWithoutLowering(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 214
   at Bicep.Core.Intermediate.ExpressionBuilder.<ConvertProgram>b__26_8(DeclaredResourceMetadata x) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 480
   at System.Linq.Enumerable.SelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items)
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertProgram(ProgramSyntax syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 479
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertWithoutLowering(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 237
   at Bicep.Core.Intermediate.ExpressionBuilder.Convert(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 62
   at Bicep.Core.Emit.TemplateWriter.GenerateTemplateWithoutHash(PositionTrackingJsonTextWriter jsonWriter) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 99
   at Bicep.Core.Emit.TemplateWriter.Write(SourceAwareJsonTextWriter writer) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 79
   at Bicep.Core.Emit.TemplateEmitter.<>c__DisplayClass8_0.<Emit>b__0() in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 117
   at Bicep.Core.Emit.TemplateEmitter.EmitOrFail(Func`1 write) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 138
   at Bicep.Core.Emit.TemplateEmitter.Emit(TextWriter textWriter) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 103
   at Bicep.Core.Emit.TemplateEmitter.Emit(Stream stream) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 96
   at Bicep.LanguageServer.Handlers.BicepBuildCommandHandler.GenerateCompiledFileAndReturnBuildOutputMessageAsync(String bicepFilePath, DocumentUri documentUri) in C:\__w\1\s\bicep\src\Bicep.LangServer\Handlers\BicepBuildCommandHandler.cs:line 71
   at Bicep.LanguageServer.Handlers.BicepBuildCommandHandler.Handle(String bicepFilePath, CancellationToken cancellationToken) in C:\__w\1\s\bicep\src\Bicep.LangServer\Handlers\BicepBuildCommandHandler.cs:line 42
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.SemanticTokensDeltaPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.ResolveCommandPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.<RouteRequest>g__InnerRoute|7_0(IServiceScopeFactory serviceScopeFactory, Request request, TDescriptor descriptor, Object params, CancellationToken token, ILogger logger)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.RouteRequest(IRequestDescriptor`1 descriptors, Request request, CancellationToken token)
   at OmniSharp.Extensions.JsonRpc.DefaultRequestInvoker.<>c__DisplayClass10_0.<<RouteRequest>b__5>d.MoveNext()
[Error - 4:22:56 PM] Bicep build failed
Internal Error - System.ArgumentException: Expected module syntax body to contain property 'name'
   at Bicep.Core.Intermediate.ExpressionBuilder.GetModuleNameSyntax(ModuleSymbol moduleSymbol) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1285
   at Bicep.Core.Intermediate.ExpressionBuilder.TryGetReplacementContext(ModuleSymbol module, SyntaxBase indexExpression, SyntaxBase newContext) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1239
   at Bicep.Core.Intermediate.ExpressionBuilder.ToDependencyExpression(ResourceDependency dependency, SyntaxBase newContext) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1340
   at Bicep.Core.Intermediate.ExpressionBuilder.<>c__DisplayClass30_0.<ConvertResource>b__4(ResourceDependency x) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 731
   at System.Linq.Enumerable.SelectIPartitionIterator`2.LazyToArray()
   at System.Linq.Enumerable.SelectIPartitionIterator`2.ToArray()
   at System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items)
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertResource(ResourceDeclarationSyntax syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 728
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertWithoutLowering(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 214
   at Bicep.Core.Intermediate.ExpressionBuilder.<ConvertProgram>b__26_8(DeclaredResourceMetadata x) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 480
   at System.Linq.Enumerable.SelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items)
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertProgram(ProgramSyntax syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 479
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertWithoutLowering(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 237
   at Bicep.Core.Intermediate.ExpressionBuilder.Convert(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 62
   at Bicep.Core.Emit.TemplateWriter.GenerateTemplateWithoutHash(PositionTrackingJsonTextWriter jsonWriter) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 99
   at Bicep.Core.Emit.TemplateWriter.Write(SourceAwareJsonTextWriter writer) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 79
   at Bicep.Core.Emit.TemplateEmitter.<>c__DisplayClass8_0.<Emit>b__0() in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 117
   at Bicep.Core.Emit.TemplateEmitter.EmitOrFail(Func`1 write) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 138
   at Bicep.Core.Emit.TemplateEmitter.Emit(TextWriter textWriter) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 103
   at Bicep.Core.Emit.TemplateEmitter.Emit(Stream stream) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 96
   at Bicep.LanguageServer.Handlers.BicepBuildCommandHandler.GenerateCompiledFileAndReturnBuildOutputMessageAsync(String bicepFilePath, DocumentUri documentUri) in C:\__w\1\s\bicep\src\Bicep.LangServer\Handlers\BicepBuildCommandHandler.cs:line 71
   at Bicep.LanguageServer.Handlers.BicepBuildCommandHandler.Handle(String bicepFilePath, CancellationToken cancellationToken) in C:\__w\1\s\bicep\src\Bicep.LangServer\Handlers\BicepBuildCommandHandler.cs:line 42
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.SemanticTokensDeltaPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.ResolveCommandPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.<RouteRequest>g__InnerRoute|7_0(IServiceScopeFactory serviceScopeFactory, Request request, TDescriptor descriptor, Object params, CancellationToken token, ILogger logger)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.RouteRequest(IRequestDescriptor`1 descriptors, Request request, CancellationToken token)
   at OmniSharp.Extensions.JsonRpc.DefaultRequestInvoker.<>c__DisplayClass10_0.<<RouteRequest>b__5>d.MoveNext()
[Error - 4:28:32 PM] Bicep build failed
Internal Error - System.ArgumentException: Expected module syntax body to contain property 'name'
   at Bicep.Core.Intermediate.ExpressionBuilder.GetModuleNameSyntax(ModuleSymbol moduleSymbol) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1285
   at Bicep.Core.Intermediate.ExpressionBuilder.TryGetReplacementContext(ModuleSymbol module, SyntaxBase indexExpression, SyntaxBase newContext) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1239
   at Bicep.Core.Intermediate.ExpressionBuilder.ToDependencyExpression(ResourceDependency dependency, SyntaxBase newContext) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 1340
   at Bicep.Core.Intermediate.ExpressionBuilder.<>c__DisplayClass30_0.<ConvertResource>b__4(ResourceDependency x) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 731
   at System.Linq.Enumerable.SelectIPartitionIterator`2.LazyToArray()
   at System.Linq.Enumerable.SelectIPartitionIterator`2.ToArray()
   at System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items)
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertResource(ResourceDeclarationSyntax syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 728
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertWithoutLowering(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 214
   at Bicep.Core.Intermediate.ExpressionBuilder.<ConvertProgram>b__26_8(DeclaredResourceMetadata x) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 480
   at System.Linq.Enumerable.SelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items)
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertProgram(ProgramSyntax syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 479
   at Bicep.Core.Intermediate.ExpressionBuilder.ConvertWithoutLowering(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 237
   at Bicep.Core.Intermediate.ExpressionBuilder.Convert(SyntaxBase syntax) in C:\__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 62
   at Bicep.Core.Emit.TemplateWriter.GenerateTemplateWithoutHash(PositionTrackingJsonTextWriter jsonWriter) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 99
   at Bicep.Core.Emit.TemplateWriter.Write(SourceAwareJsonTextWriter writer) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 79
   at Bicep.Core.Emit.TemplateEmitter.<>c__DisplayClass8_0.<Emit>b__0() in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 117
   at Bicep.Core.Emit.TemplateEmitter.EmitOrFail(Func`1 write) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 138
   at Bicep.Core.Emit.TemplateEmitter.Emit(TextWriter textWriter) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 103
   at Bicep.Core.Emit.TemplateEmitter.Emit(Stream stream) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 96
   at Bicep.LanguageServer.Handlers.BicepBuildCommandHandler.GenerateCompiledFileAndReturnBuildOutputMessageAsync(String bicepFilePath, DocumentUri documentUri) in C:\__w\1\s\bicep\src\Bicep.LangServer\Handlers\BicepBuildCommandHandler.cs:line 71
   at Bicep.LanguageServer.Handlers.BicepBuildCommandHandler.Handle(String bicepFilePath, CancellationToken cancellationToken) in C:\__w\1\s\bicep\src\Bicep.LangServer\Handlers\BicepBuildCommandHandler.cs:line 42
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.SemanticTokensDeltaPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.ResolveCommandPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.<RouteRequest>g__InnerRoute|7_0(IServiceScopeFactory serviceScopeFactory, Request request, TDescriptor descriptor, Object params, CancellationToken token, ILogger logger)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.RouteRequest(IRequestDescriptor`1 descriptors, Request request, CancellationToken token)
   at OmniSharp.Extensions.JsonRpc.DefaultRequestInvoker.<>c__DisplayClass10_0.<<RouteRequest>b__5>d.MoveNext()

To Reproduce
Copy paste the modules, right click Build ARM template
Additional context
The bicep template builds fine when I uncomment the module name.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Todo
Development

No branches or pull requests

1 participant