11[cmdletbinding ()]
22param (
3- [Parameter (Mandatory = $true )]
4- [ValidateSet (" win" , " linux" )]
5- [string ]$Platform
3+ [switch ]$UseImageCache
64)
75
6+ function Exec ([scriptblock ]$cmd , [string ]$errorMessage = " Error executing command: " + $cmd ) {
7+ & $cmd
8+ if ($LastExitCode -ne 0 ) {
9+ throw $errorMessage
10+ }
11+ }
12+
813Set-StrictMode - Version Latest
9- $ErrorActionPreference = " Stop"
14+ $ErrorActionPreference = ' Stop'
15+
16+ if ($UseImageCache ) {
17+ $optionalDockerBuildArgs = " "
18+ }
19+ else {
20+ $optionalDockerBuildArgs = " --no-cache"
21+ }
1022
1123$dockerRepo = " microsoft/dotnet"
1224$dirSeparator = [IO.Path ]::DirectorySeparatorChar
1325$repoRoot = Split-Path - Parent $PSScriptRoot
26+ $platform = docker version -f " {{ .Server.Os }}"
1427
15- if ($Platform -eq " win " ) {
28+ if ($Platform -eq " windows " ) {
1629 $imageOs = " nanoserver"
1730 $tagSuffix = " -nanoserver"
1831 $testScriptSuffix = " ps1"
1932 $containerRoot = " C:\"
20- $sdkRunArg = " powershell "
33+ $platformDirSeparator = ' \ '
2134}
2235else {
2336 $imageOs = " debian"
2437 $tagSuffix = " "
2538 $testScriptSuffix = " sh"
2639 $containerRoot = " /"
27- $sdkRunArg = " "
40+ $platformDirSeparator = ' / '
2841}
2942
3043pushd $repoRoot
@@ -47,41 +60,82 @@ Get-ChildItem -Recurse -Filter Dockerfile |
4760 TrimEnd(" -sdk" )
4861
4962 $timeStamp = Get-Date - Format FileDateTime
50- $appName = " app$timeStamp "
51- $appDir = " $repoRoot$dirSeparator .test-assets$dirSeparator$appName "
52-
53- New-Item $appDir - type directory | Out-Null
54-
55- Write-Host " ----- Testing $fullSdkTag -----"
56- docker run - t -- rm `
57- - v " ${appDir} :${containerRoot}${appName} " `
58- - v " ${repoRoot}${dirSeparator} test:${containerRoot} test" `
59- -- name " sdk-test-$appName " `
60- $fullSdkTag $sdkRunArg " ${containerRoot} test${dirSeparator} create-run-publish-app.${testScriptSuffix} " " ${containerRoot}${appName} " $sdkTag
61- if (-NOT $? ) {
62- throw " Testing $fullSdkTag failed"
63+ $appName = " app$timeStamp " .ToLower()
64+
65+ $buildImage = " sdk-build-$appName "
66+ $dotnetNewParam = " "
67+ if ($sdkTag -like " *1.1-sdk-msbuild*" ) {
68+ $dotnetNewParam = " -t Console1.1"
6369 }
70+ $dockerFilesPath = " ${repoRoot}${dirSeparator} test${dirSeparator} "
6471
65- Write-Host " ----- Testing $baseTag -runtime$tagSuffix with $sdkTag app -----"
66- docker run - t -- rm `
67- - v " ${appDir} :${containerRoot}${appName} " `
68- -- name " runtime-test-$appName " `
69- -- entrypoint dotnet `
70- " $baseTag -runtime$tagSuffix " `
71- " ${containerRoot}${appName}${dirSeparator} publish${dirSeparator} framework-dependent${dirSeparator}${appName} .dll"
72- if (-NOT $? ) {
73- throw " Testing $baseTag -runtime$tagSuffix failed"
72+ Write-Host " ----- Testing create, restore and build with $fullSdkTag with image $buildImage -----"
73+ exec { (Get-Content ${dockerFilesPath} Dockerfile.test).Replace(" {image}" , $fullSdkTag ).Replace(" {dotnetNewParam}" , $dotnetNewParam ) `
74+ | docker build $optionalDockerBuildArgs - t $buildImage -
7475 }
7576
76- if ($Platform -eq " linux" ) {
77- Write-Host " ----- Testing $baseTag -runtime-deps$tagSuffix with $sdkTag app -----"
78- docker run - t -- rm `
79- - v " ${appDir} :${containerRoot}${appName} " `
80- -- name " runtime-deps-test-$appName " `
81- -- entrypoint " ${containerRoot}${appName}${dirSeparator} publish${dirSeparator} self-contained${dirSeparator}${appName} " `
82- " $baseTag -runtime-deps$tagSuffix "
83- if (-NOT $? ) {
84- throw " Testing $baseTag -runtime-deps$tagSuffix failed"
77+ Write-Host " ----- Running app built on $fullSdkTag -----"
78+ exec { docker run -- rm $buildImage dotnet run }
79+
80+ Try {
81+ $framworkDepVol = " framework-dep-publish-$appName "
82+ Write-Host " ----- Publishing framework-dependant app built on $fullSdkTag to volume $framworkDepVol -----"
83+ exec { docker run -- rm - v ${framworkDepVol} :" ${containerRoot} volume" $buildImage dotnet publish - o ${containerRoot} volume }
84+
85+ Write-Host " ----- Testing on $baseTag -runtime$tagSuffix with $sdkTag framework-dependent app -----"
86+ exec { docker run -- rm `
87+ - v ${framworkDepVol} " :${containerRoot} volume" `
88+ -- entrypoint dotnet `
89+ " $baseTag -runtime$tagSuffix " `
90+ " ${containerRoot} volume${platformDirSeparator} test.dll"
91+ }
92+ }
93+ Finally {
94+ docker volume rm $framworkDepVol
95+ }
96+
97+ if ($platform -eq " linux" ) {
98+ if ($sdkTag -like " *projectjson*" ) {
99+ $projectType = " projectjson"
100+ }
101+ else {
102+ $projectType = " msbuild"
103+ $publishArg = ' '
104+ }
105+
106+ $selfContainedImage = " self-contained-build-${buildImage} "
107+ Write-Host " ----- Creating publish-image for self-contained app built on $fullSdkTag -----"
108+ exec {
109+ (Get-Content ${dockerFilesPath} Dockerfile.linux.${projectType}.publish ).Replace(" {image}" , $buildImage ) `
110+ | docker build $optionalDockerBuildArgs - t $selfContainedImage -
111+ }
112+
113+ Try {
114+ $selfContainedVol = " self-contained-publish-$appName "
115+ Write-Host " ----- Publishing self-contained published app built on $fullSdkTag to volume $selfContainedVol using image $selfContainedImage -----"
116+ # REMARK: This structure seems to be required because of some PowerShell parameter passing weirdness
117+ if ($projectType -eq " projectjson" ) {
118+ exec { docker run -- rm `
119+ - v ${selfContainedVol} " :${containerRoot} volume" `
120+ -- entrypoint dotnet `
121+ $selfContainedImage `
122+ publish - o ${containerRoot} volume
123+ }
124+ }
125+ else {
126+ exec { docker run -- rm `
127+ - v ${selfContainedVol} " :${containerRoot} volume" `
128+ -- entrypoint dotnet `
129+ $selfContainedImage `
130+ publish - r debian.8 - x64 - o ${containerRoot} volume
131+ }
132+ }
133+
134+ Write-Host " ----- Testing $baseTag -runtime-deps$tagSuffix with $sdkTag self-contained app -----"
135+ exec { docker run - t -- rm - v ${selfContainedVol} " :${containerRoot} volume" ${baseTag} - runtime- deps$tagSuffix ${containerRoot} volume${platformDirSeparator} test }
136+ }
137+ Finally {
138+ docker volume rm $selfContainedVol
85139 }
86140 }
87141 }
0 commit comments