Skip to content

Commit dd5cb66

Browse files
committed
FileComventions(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 01eacf8 commit dd5cb66

File tree

3 files changed

+45
-24
lines changed

3 files changed

+45
-24
lines changed

scripts/inconsistentVersionsInGitHubCI.fsx

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

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

3853
if inconsistentVersionsInGitHubCI then
3954
failwith

src/FileConventions.Test/FileConventions.Test.fs

Lines changed: 10 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,7 @@ let DetectInconsistentVersionsInGitHubCI1() =
418418
Path.Combine(dummyFilesDirectory.FullName, "DummyWorkflows")
419419
)
420420

421-
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo, Is.EqualTo true)
421+
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo Map.empty, Is.EqualTo true)
422422

423423
[<Test>]
424424
let DetectInconsistentVersionsInGitHubCI2() =
@@ -427,7 +427,7 @@ let DetectInconsistentVersionsInGitHubCI2() =
427427
Path.Combine(dummyFilesDirectory.FullName, "DummyWorkflowsWithEnv")
428428
)
429429

430-
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo, Is.EqualTo true)
430+
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo Map.empty, Is.EqualTo true)
431431

432432
[<Test>]
433433
let DetectInconsistentVersionsInGitHubCI3() =
@@ -439,7 +439,7 @@ let DetectInconsistentVersionsInGitHubCI3() =
439439
)
440440
)
441441

442-
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo, Is.EqualTo true)
442+
Assert.That(DetectInconsistentVersionsInGitHubCI fileInfo Map.empty, Is.EqualTo true)
443443

444444
[<Test>]
445445
let DetectInconsistentVersionsInNugetRefsInFSharpScripts1() =

src/FileConventions/Library.fs

Lines changed: 19 additions & 13 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,19 +383,25 @@ let private DetectInconsistentVersionsInYamlFiles
382383
let matches =
383384
Seq.collect extractVersionsFunction yamlDoc.AllNodes
384385

386+
let yamlDict = yamlDoc :?> YamlMappingNode
387+
let localEnv =
388+
match yamlDict.Children.TryGetValue "env" with
389+
| true, (:? YamlMappingNode as node) -> node
390+
| _ -> YamlMappingNode()
391+
392+
let envDict =
393+
localEnv.Children
394+
|> Seq.fold
395+
(fun acc pair -> acc |> Map.add (pair.Key :?> YamlScalarNode).Value (pair.Value:?> YamlScalarNode).Value)
396+
globalEnv
397+
385398
matches
386399
|> Seq.fold
387400
(fun acc (key, value) ->
388401
let actualValue =
389402
let variableRegexMatch = envVarRegex.Match value
390403

391404
if variableRegexMatch.Success then
392-
let yamlDict = yamlDoc :?> YamlMappingNode
393-
394-
let envDict =
395-
yamlDict.Children.["env"]
396-
:?> YamlMappingNode
397-
398405
let referenceString =
399406
variableRegexMatch.Groups.[1].Value
400407

@@ -404,10 +411,9 @@ let private DetectInconsistentVersionsInYamlFiles
404411
else
405412
referenceString
406413

407-
match envDict.Children.TryGetValue envVarName
408-
with
414+
match envDict.TryGetValue envVarName with
409415
| true, envVarValue ->
410-
(envVarValue :?> YamlScalarNode).Value
416+
envVarValue
411417
| false, _ ->
412418
failwithf "env. var %s not found" envVarName
413419
else
@@ -427,7 +433,7 @@ let private DetectInconsistentVersionsInYamlFiles
427433
|> Seq.map(fun item -> Seq.length item.Value > 1)
428434
|> Seq.contains true
429435

430-
let DetectInconsistentVersionsInGitHubCIWorkflow(fileInfos: seq<FileInfo>) =
436+
let DetectInconsistentVersionsInGitHubCIWorkflow (fileInfos: seq<FileInfo>) (globalEnv: Map<string, string>) =
431437
fileInfos
432438
|> Seq.iter(fun fileInfo -> assert (fileInfo.FullName.EndsWith ".yml"))
433439

@@ -463,15 +469,15 @@ let DetectInconsistentVersionsInGitHubCIWorkflow(fileInfos: seq<FileInfo>) =
463469
)
464470
| _ -> Seq.empty
465471

466-
DetectInconsistentVersionsInYamlFiles fileInfos extractVersions
472+
DetectInconsistentVersionsInYamlFiles fileInfos extractVersions globalEnv
467473

468-
let DetectInconsistentVersionsInGitHubCI(dir: DirectoryInfo) =
474+
let DetectInconsistentVersionsInGitHubCI (dir: DirectoryInfo) (globalEnv: Map<string, string>) =
469475
let ymlFiles = dir.GetFiles("*.yml", SearchOption.AllDirectories)
470476

471477
if Seq.isEmpty ymlFiles then
472478
false
473479
else
474-
DetectInconsistentVersionsInGitHubCIWorkflow ymlFiles
480+
DetectInconsistentVersionsInGitHubCIWorkflow ymlFiles globalEnv
475481

476482
let GetVersionsMapForNugetRefsInFSharpScripts(fileInfos: seq<FileInfo>) =
477483
fileInfos

0 commit comments

Comments
 (0)