Azure / Azure/bicep

readEnvironmentVariable() without a default value causes BCP338 linter error which is not configurable

Open
#14,943 4 comments 10 reactions 1 assignee Claimed by @polatengin View on GitHub
bug story: bicep parameters
Dominant language
Bicep
Stars
3.6k
Forks
830
Avg merge
1d 21m
Merged PRs (30d)
79

Description

**Bicep version**
Bicep CLI version 0.29.47 (132ade51bc)

**Describe the bug**
As described in #13994, when using `readEnvironmentVariable()` **without** a default value in a `.bicepparams` file, the value get underlined with an error.

This is confusing to the user as when just editing a file it's *reasonable* to expect users not to have every single deployment variable set with a real value just to edit the file. To make matters worse, this error cascades wherever that parameter is used (e.g. in a string template for another parameter) which can quickly litter your file with inactionable errors and obscure other errors.

#13994 was closed because details were added on how to export variables in PowerShell, but that's besides the point - users shouldn't have to supply every variable just to edit the file. Bicep already fails if it can't read the env variable when it's called to compile a template, and that should be enough.

**To Reproduce**
Steps to reproduce the behavior:
1. Generate a bicepparams file like so:
```
param baseName = readEnvironmentVariable('BICEP_BASE_NAME', 'myapp')
param environmentName = readEnvironmentVariable('BICEP_ENVIRONMENT_NAME')
param uniqueSuffix = substring(uniqueString(readEnvironmentVariable('BICEP_RESOURCE_GROUP')), 0, 10)
// ...
param aiHubName = readEnvironmentVariable('BICEP_AI_HUB_NAME', '${baseName}-${environmentName}-aih')
param aiProjectName = readEnvironmentVariable('BICEP_AI_PROJECT_NAME', '${baseName}-${environmentName}-aip')
param appInsightsName = readEnvironmentVariable('BICEP_APP_INSIGHTS_NAME', '${baseName}-${environmentName}-appi')
// ...
```

**Additional context**
BCP338 should be a configurable linter rule (side note, why are rules referenced by name only and only some are given names? **every** lint should be able to be enabled/disabled simply by its ID).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.