Skip to content

Commit 9b0752a

Browse files
committed
FileConventions(Test),scripts: acknowledge .env
Take .env file into account in inconsistentVersionsInGitHubCI.fsx script when searching for vars referenced in Github workflow files, when .env file is present in the repository root. This is needed because workflows in pulumi-deploy now load vars from .env file.
1 parent e7f77c1 commit 9b0752a

File tree

3 files changed

+85
-35
lines changed

3 files changed

+85
-35
lines changed

scripts/inconsistentVersionsInGitHubCI.fsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,30 @@ let targetDir =
3333
|> fst
3434

3535
let inconsistentVersionsInGitHubCI =
36-
FileConventions.DetectInconsistentVersionsInGitHubCI targetDir
36+
let repositoryRootDir = targetDir.Parent.Parent
37+
38+
let globalEnv =
39+
let dotEnvFile =
40+
Path.Join(repositoryRootDir.FullName, ".env") |> FileInfo
41+
42+
if dotEnvFile.Exists then
43+
let lines = File.ReadAllLines dotEnvFile.FullName
44+
45+
lines
46+
|> Seq.filter(fun line ->
47+
not(
48+
System.String.IsNullOrWhiteSpace line || line.StartsWith '#'
49+
)
50+
)
51+
|> Seq.map(fun line ->
52+
let [| key; value |] = line.Split('=', count = 2)
53+
key.Trim(), value.Trim()
54+
)
55+
|> Map.ofSeq
56+
else
57+
Map.empty
58+
59+
FileConventions.DetectInconsistentVersionsInGitHubCI targetDir globalEnv
3760

3861
if inconsistentVersionsInGitHubCI then
3962
failwith

src/FileConventions.Test/FileConventions.Test.fs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ let DetectInconsistentVersionsInGitHubCIWorkflow1() =
289289
))
290290

291291
Assert.That(
292-
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo,
292+
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo Map.empty,
293293
Is.EqualTo false
294294
)
295295

@@ -307,7 +307,7 @@ let DetectInconsistentVersionsInGitHubCIWorkflow2() =
307307
))
308308

309309
Assert.That(
310-
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo,
310+
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo Map.empty,
311311
Is.EqualTo true
312312
)
313313

@@ -325,7 +325,7 @@ let DetectInconsistentVersionsInGitHubCIWorkflow3() =
325325
))
326326

327327
Assert.That(
328-
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo,
328+
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo Map.empty,
329329
Is.EqualTo true
330330
)
331331

@@ -343,7 +343,7 @@ let DetectInconsistentVersionsInGitHubCIWorkflow4() =
343343
))
344344

345345
Assert.That(
346-
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo,
346+
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo Map.empty,
347347
Is.EqualTo false
348348
)
349349

@@ -370,7 +370,7 @@ let DetectInconsistentVersionsInGitHubCIWorkflow5() =
370370
})
371371

372372
Assert.That(
373-
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo,
373+
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo Map.empty,
374374
Is.EqualTo true
375375
)
376376

@@ -388,7 +388,7 @@ let DetectInconsistentVersionsInGitHubCIWorkflow6() =
388388
))
389389

390390
Assert.That(
391-
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo,
391+
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo Map.empty,
392392
Is.EqualTo true
393393
)
394394

@@ -406,7 +406,7 @@ let DetectInconsistentVersionsInGitHubCIWorkflow7() =
406406
))
407407

408408
Assert.That(
409-
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo,
409+
DetectInconsistentVersionsInGitHubCIWorkflow fileInfo Map.empty,
410410
Is.EqualTo true
411411
)
412412

@@ -418,7 +418,10 @@ let DetectInconsistentVersionsInGitHubCI1() =
418418
Path.Combine(dummyFilesDirectory.FullName, "DummyWorkflows")
419419
)
420420

421-
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo, Is.EqualTo true)
421+
Assert.That(
422+
DetectInconsistentVersionsInGitHubCI fileInfo Map.empty,
423+
Is.EqualTo true
424+
)
422425

423426
[<Test>]
424427
let DetectInconsistentVersionsInGitHubCI2() =
@@ -427,7 +430,10 @@ let DetectInconsistentVersionsInGitHubCI2() =
427430
Path.Combine(dummyFilesDirectory.FullName, "DummyWorkflowsWithEnv")
428431
)
429432

430-
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo, Is.EqualTo true)
433+
Assert.That(
434+
DetectInconsistentVersionsInGitHubCI fileInfo Map.empty,
435+
Is.EqualTo true
436+
)
431437

432438
[<Test>]
433439
let DetectInconsistentVersionsInGitHubCI3() =
@@ -439,7 +445,10 @@ let DetectInconsistentVersionsInGitHubCI3() =
439445
)
440446
)
441447

442-
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo, Is.EqualTo true)
448+
Assert.That(
449+
DetectInconsistentVersionsInGitHubCI fileInfo Map.empty,
450+
Is.EqualTo true
451+
)
443452

444453
[<Test>]
445454
let DetectInconsistentVersionsInNugetRefsInFSharpScripts1() =

src/FileConventions/Library.fs

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ let private GetVersionsMapFromFiles
362362
let private DetectInconsistentVersionsInYamlFiles
363363
(fileInfos: seq<FileInfo>)
364364
(extractVersionsFunction: YamlNode -> seq<string * string>)
365+
(globalEnv: Map<string, string>)
365366
=
366367
let envVarRegex =
367368
Regex(@"\s*\$\{\{\s*([^\s\}]+)\s*\}\}\s*", RegexOptions.Compiled)
@@ -382,33 +383,44 @@ let private DetectInconsistentVersionsInYamlFiles
382383
let matches =
383384
Seq.collect extractVersionsFunction yamlDoc.AllNodes
384385

386+
let yamlDict = yamlDoc :?> YamlMappingNode
387+
388+
let localEnv =
389+
match yamlDict.Children.TryGetValue "env" with
390+
| true, (:? YamlMappingNode as node) -> node
391+
| _ -> YamlMappingNode()
392+
393+
let envDict =
394+
localEnv.Children
395+
|> Seq.fold
396+
(fun acc pair ->
397+
acc
398+
|> Map.add
399+
(pair.Key :?> YamlScalarNode).Value
400+
(pair.Value :?> YamlScalarNode).Value
401+
)
402+
globalEnv
403+
385404
matches
386405
|> Seq.fold
387406
(fun acc (key, value) ->
388407
let actualValue =
389408
let variableRegexMatch = envVarRegex.Match value
390409

391410
if variableRegexMatch.Success then
392-
let yamlDict = yamlDoc :?> YamlMappingNode
393-
394-
match yamlDict.Children.TryGetValue "env" with
395-
| true, (:? YamlMappingNode as envDict) ->
396-
let referenceString =
397-
variableRegexMatch.Groups.[1].Value
398-
399-
let envVarName =
400-
if referenceString.StartsWith "env." then
401-
referenceString.[4..]
402-
else
403-
referenceString
404-
405-
match
406-
envDict.Children.TryGetValue envVarName
407-
with
408-
| true, envVarValue ->
409-
(envVarValue :?> YamlScalarNode).Value
410-
| false, _ -> value
411-
| _ -> value
411+
let referenceString =
412+
variableRegexMatch.Groups.[1].Value
413+
414+
let envVarName =
415+
if referenceString.StartsWith "env." then
416+
referenceString.[4..]
417+
else
418+
referenceString
419+
420+
match envDict.TryGetValue envVarName with
421+
| true, envVarValue -> envVarValue
422+
| false, _ ->
423+
failwithf "env. var %s not found" envVarName
412424
else
413425
value
414426

@@ -426,7 +438,10 @@ let private DetectInconsistentVersionsInYamlFiles
426438
|> Seq.map(fun item -> Seq.length item.Value > 1)
427439
|> Seq.contains true
428440

429-
let DetectInconsistentVersionsInGitHubCIWorkflow(fileInfos: seq<FileInfo>) =
441+
let DetectInconsistentVersionsInGitHubCIWorkflow
442+
(fileInfos: seq<FileInfo>)
443+
(globalEnv: Map<string, string>)
444+
=
430445
fileInfos
431446
|> Seq.iter(fun fileInfo -> assert (fileInfo.FullName.EndsWith ".yml"))
432447

@@ -462,15 +477,18 @@ let DetectInconsistentVersionsInGitHubCIWorkflow(fileInfos: seq<FileInfo>) =
462477
)
463478
| _ -> Seq.empty
464479

465-
DetectInconsistentVersionsInYamlFiles fileInfos extractVersions
480+
DetectInconsistentVersionsInYamlFiles fileInfos extractVersions globalEnv
466481

467-
let DetectInconsistentVersionsInGitHubCI(dir: DirectoryInfo) =
482+
let DetectInconsistentVersionsInGitHubCI
483+
(dir: DirectoryInfo)
484+
(globalEnv: Map<string, string>)
485+
=
468486
let ymlFiles = dir.GetFiles("*.yml", SearchOption.AllDirectories)
469487

470488
if Seq.isEmpty ymlFiles then
471489
false
472490
else
473-
DetectInconsistentVersionsInGitHubCIWorkflow ymlFiles
491+
DetectInconsistentVersionsInGitHubCIWorkflow ymlFiles globalEnv
474492

475493
let GetVersionsMapForNugetRefsInFSharpScripts(fileInfos: seq<FileInfo>) =
476494
fileInfos

0 commit comments

Comments
 (0)