forked from PowerShell/SecretManagement
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdoBuild.ps1
138 lines (115 loc) · 6.56 KB
/
doBuild.ps1
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
<#
.DESCRIPTION
Implement build and packaging of the package and place the output $OutDirectory/$ModuleName
#>
function DoBuild
{
Write-Verbose -Verbose -Message "Starting DoBuild with configuration: $BuildConfiguration, framework: $BuildFramework"
# Module build out path
$BuildOutPath = "${OutDirectory}/${ModuleName}"
Write-Verbose -Verbose -Message "Module output file path: '$BuildOutPath'"
# Module build source path
$BuildSrcPath = "bin/${BuildConfiguration}/${BuildFramework}/publish"
Write-Verbose -Verbose -Message "Module build source path: '$BuildSrcPath'"
# Reference assembly source path
$RefSrcPath = "bin/${BuildConfiguration}/${BuildFramework}/ref"
# Copy psd1 file
Write-Verbose -Verbose "Copy-Item ${SrcPath}/${ModuleName}.psd1 to $BuildOutPath"
Copy-Item "${SrcPath}/${ModuleName}.psd1" "$BuildOutPath"
# Copy format files here
Write-Verbose -Verbose "Copy-Item ${SrcPath}/${ModuleName}.format.ps1xml to $BuildOutPath"
Copy-Item "${SrcPath}/${ModuleName}.format.ps1xml" "$BuildOutPath"
# Copy help
Write-Verbose -Verbose -Message "Copying help files to '$BuildOutPath'"
Copy-Item -Recurse "${HelpPath}/${Culture}" "$BuildOutPath"
# Copy license
Write-Verbose -Verbose -Message "Copying LICENSE file to '$BuildOutPath'"
Copy-Item -Path "./LICENSE" -Dest "$BuildOutPath"
# Copy notice
Write-Verbose -Verbose -Message "Copying ThirdPartyNotices.txt to '$BuildOutPath'"
Copy-Item -Path "./ThirdPartyNotices.txt" -Dest "$BuildOutPath"
if ( Test-Path "${SrcPath}/code" ) {
Write-Verbose -Verbose -Message "Building assembly and copying to '$BuildOutPath'"
# build code and place it in the staging location
Push-Location "${SrcPath}/code"
try {
# Get dotnet.exe command path.
$dotnetCommand = Get-Command -Name 'dotnet' -ErrorAction Ignore
# Check for dotnet for Windows (we only build on Windows platforms).
if ($null -eq $dotnetCommand) {
Write-Verbose -Verbose -Message "dotnet.exe cannot be found in current path. Looking in ProgramFiles path."
$dotnetCommandPath = Join-Path -Path $env:ProgramFiles -ChildPath "dotnet\dotnet.exe"
$dotnetCommand = Get-Command -Name $dotnetCommandPath -ErrorAction Ignore
if ($null -eq $dotnetCommand) {
throw "Dotnet.exe cannot be found: $dotnetCommandPath is unavailable for build."
}
}
Write-Verbose -Verbose -Message "dotnet.exe command found in path: $($dotnetCommand.Path)"
# Check dotnet version
Write-Verbose -Verbose -Message "DotNet version: $(& ($dotnetCommand) --version)"
# Build source
Write-Verbose -Verbose -Message "Building location: PSScriptRoot: $PSScriptRoot, PWD: $pwd"
$buildCommand = "$($dotnetCommand.Name) publish --configuration $BuildConfiguration --framework $BuildFramework --output $BuildSrcPath"
Write-Verbose -Verbose -Message "Starting dotnet build command: $buildCommand"
Invoke-Expression -Command $buildCommand
# Dump build source output directory
# $outResultsPath = (Resolve-Path -Path ".").ProviderPath
# Write-Verbose -Verbose -Message "Dumping expected results output path: $outResultsPath"
# $outResults = Get-ChildItem -Path $outResultsPath -Recurse | Out-String
# Write-Verbose -Verbose -Message $outResults
# Place build results
if (! (Test-Path -Path "$BuildSrcPath/${ModuleName}.dll"))
{
throw "Expected binary was not created: $BuildSrcPath/${ModuleName}.dll"
}
Write-Verbose -Verbose -Message "Copying implementation assembly $BuildSrcPath/${ModuleName}.dll to $BuildOutPath"
Copy-Item "$BuildSrcPath/${ModuleName}.dll" -Dest "$BuildOutPath"
if (Test-Path -Path "$BuildSrcPath/${ModuleName}.pdb")
{
Write-Verbose -Verbose -Message "Copying implementation pdb $BuildSrcPath/${ModuleName}.pdb to $BuildOutPath"
Copy-Item -Path "$BuildSrcPath/${ModuleName}.pdb" -Dest "$BuildOutPath"
}
Write-Verbose -Verbose "$BuildSrcPath/System.Runtime.InteropServices.RuntimeInformation.dll to $BuildOutPath"
Copy-Item -Path "$BuildSrcPath/System.Runtime.InteropServices.RuntimeInformation.dll" -Dest "$BuildOutPath"
if (! (Test-Path -Path "$RefSrcPath/${ModuleName}.dll"))
{
# throw "Expected ref binary was not created: $RefSrcPath/${ModuleName}.dll"
Write-Verbose -Verbose -Message "Cannot find reference assembly $RefSrcPath/${ModuleName}.dll"
Write-Verbose -Verbose -Message "Copying implementation assembly as reference assembly $RefSrcPath/${ModuleName}.dll to $script:OutReferencePath"
Copy-Item -Path "$BuildSrcPath/${ModuleName}.dll" -Dest $script:OutReferencePath
}
else
{
Write-Verbose -Verbose -Message "Copying reference assembly $RefSrcPath/${ModuleName}.dll to $script:OutReferencePath"
Copy-Item -Path "$RefSrcPath/${ModuleName}.dll" -Dest $script:OutReferencePath
}
# Create nuget package for reference assembly based on Microsoft.PowerShell.SecretManagement.Library.nuspec file.
& ($dotnetCommand) pack --no-build --configuration $BuildConfiguration --no-restore
# Copy ref assembly nuget package to out.
$NuGetSrcPath = "bin/${BuildConfiguration}/Microsoft.PowerShell.SecretManagement.Library*.nupkg"
if (!(Test-Path -Path $NuGetSrcPath))
{
Write-Verbose -Verbose -Message "Expected Nuget package was not created: $NuGetSrcPath"
}
else
{
Write-Verbose -Verbose -Message "Copying reference nuget package $NuGetSrcPath to $OutDirectory"
Copy-Item -Path $NuGetSrcPath -Dest $OutDirectory
}
}
catch {
Write-Verbose -Verbose -Message "dotnet build failed with error: $_"
Write-Error "dotnet build failed with error: $_"
}
finally {
Pop-Location
}
}
else {
Write-Verbose -Verbose -Message "No code to build in '${SrcPath}/code'"
}
## Add build and packaging here
Write-Verbose -Verbose -Message "Ending DoBuild"
}