-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathbuild-tasks.unit-test.ps1
More file actions
90 lines (73 loc) · 2.62 KB
/
build-tasks.unit-test.ps1
File metadata and controls
90 lines (73 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
param(
[Parameter(Mandatory)]
[ValidateScript({ Test-Path $_ })]
[string]
$Sources,
[Parameter(Mandatory)]
[ValidateSet('net472', 'net8.0', 'net9.0')]
[string]
$Framework
)
task . RunContainers, UpdateConfig, RunTests
Get-ChildItem -Path (Join-Path $PSScriptRoot '../scripts') -Filter *.ps1 | ForEach-Object { . $_.FullName }
$containerIds = @()
$mssqlConnectionString = ''
$pgsqlConnectionString = ''
$mysqlConnectionString = ''
Enter-Build {
$testList = Get-ChildItem -Path $Sources -Recurse -Filter *.Test.dll `
| Where-Object FullName -Match \\$Framework\\ `
| Where-Object FullName -Match \\bin\\Release\\ `
| Where-Object FullName -NotMatch \\$Framework\\ref\\ `
| ForEach-Object { $_.FullName }
if (-not $testList) {
throw 'Test list is empty.'
}
$testList
}
Exit-Build {
if ($containerIds) {
exec { docker container rm -f $containerIds } | Out-Null
}
}
task RunContainers {
$info = Start-Mssql
$script:containerIds += $info.containerId
$script:mssqlConnectionString = $info.connectionString
Write-Output $mssqlConnectionString
$info = Start-Pgsql
$script:containerIds += $info.containerId
$script:pgsqlConnectionString = $info.connectionString
Write-Output $pgsqlConnectionString
$info = Start-Mysql
$script:containerIds += $info.containerId
$script:mysqlConnectionString = $info.connectionString
Write-Output $mysqlConnectionString
Wait-Mssql $mssqlConnectionString
Wait-Pgsql $pgsqlConnectionString
Wait-Mysql $mysqlConnectionString
}
task UpdateConfig {
$configFiles = $testList | ForEach-Object { Split-Path -Path $_ -Parent } | Sort-Object | Get-Unique | Get-ChildItem -Filter *.dll.config
foreach ($configFile in $configFiles) {
[xml]$config = Get-Content $configFile
$node = $config.SelectSingleNode("configuration/connectionStrings/add[@name = 'mssql']")
if ($node) {
$node.Attributes['connectionString'].InnerText = $mssqlConnectionString
$config.Save($configFile)
}
$node = $config.SelectSingleNode("configuration/connectionStrings/add[@name = 'pgsql']")
if ($node) {
$node.Attributes['connectionString'].InnerText = $pgsqlConnectionString
$config.Save($configFile)
}
$node = $config.SelectSingleNode("configuration/connectionStrings/add[@name = 'mysql']")
if ($node) {
$node.Attributes['connectionString'].InnerText = $mysqlConnectionString
$config.Save($configFile)
}
}
}
task RunTests {
exec { dotnet vstest $testList }
}