forked from RamblingCookieMonster/PSSQLite
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.ps1
More file actions
110 lines (98 loc) · 4.27 KB
/
Copy pathbuild.ps1
File metadata and controls
110 lines (98 loc) · 4.27 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
[cmdletbinding(DefaultParameterSetName = 'Task')]
param(
# Build task(s) to execute
[parameter(ParameterSetName = 'task', position = 0)]
[ArgumentCompleter( {
param($Command, $Parameter, $WordToComplete, $CommandAst, $FakeBoundParams)
$psakeFile = './psakeFile.ps1'
switch ($Parameter) {
'Task' {
if ([string]::IsNullOrEmpty($WordToComplete)) {
Get-PSakeScriptTasks -buildFile $psakeFile | Select-Object -ExpandProperty Name
}
else {
Get-PSakeScriptTasks -buildFile $psakeFile |
Where-Object { $_.Name -match $WordToComplete } |
Select-Object -ExpandProperty Name
}
}
Default {
}
}
})]
[string[]]$Task = 'default',
# Bootstrap dependencies
[switch]$Bootstrap,
# List available build tasks
[parameter(ParameterSetName = 'Help')]
[switch]$Help,
# Optional properties to pass to psake
[hashtable]$Properties,
# Optional parameters to pass to psake
[hashtable]$Parameters
)
$ErrorActionPreference = 'Stop'
# WSL appends Windows executable directories to PATH by default. PSScriptAnalyzer
# performs command discovery while evaluating rules and becomes dramatically
# slower when it traverses those mounted directories. A build launched in its
# own pwsh process only needs Linux tools, so remove Windows interop entries for
# that process without changing the caller's environment.
if ($PSVersionTable.PSEdition -eq 'Core' -and $IsLinux -and $env:WSL_DISTRO_NAME) {
$pathSeparator = [string][System.IO.Path]::PathSeparator
$env:PATH = @($env:PATH -split [regex]::Escape($pathSeparator) |
Where-Object { $_ -notmatch '^/mnt/[A-Za-z]/' }) -join $pathSeparator
}
function Initialize-ProjectModuleBuildEnvironment {
param([string]$ProjectRoot)
Set-BuildEnvironment -Force
$ProjectRoot = (Resolve-Path -LiteralPath $ProjectRoot).Path
$sourceRoot = Join-Path -Path $ProjectRoot -ChildPath 'src'
$manifestCandidates = @(
Get-ChildItem -LiteralPath $sourceRoot -Directory |
ForEach-Object {
$candidate = Join-Path -Path $_.FullName -ChildPath "$($_.Name).psd1"
if (Test-Path -LiteralPath $candidate -PathType Leaf) {
$candidate
}
}
)
if ($manifestCandidates.Count -ne 1) {
throw "Expected one module manifest beneath $sourceRoot; found $($manifestCandidates.Count)."
}
$manifestPath = $manifestCandidates[0]
$modulePath = Split-Path -Path $manifestPath -Parent
$env:BHProjectPath = $ProjectRoot
$env:BHProjectName = [System.IO.Path]::GetFileNameWithoutExtension($manifestPath)
$env:BHModulePath = $modulePath
$env:BHPSModulePath = $modulePath
$env:BHPSModuleManifest = $manifestPath
}
# Bootstrap dependencies
if ($Bootstrap.IsPresent) {
$minimumPSDependVersion = '0.4.1'
Get-PackageProvider -Name NuGet -ForceBootstrap | Out-Null
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
if ((Test-Path -Path ./requirements.psd1)) {
$psDepend = Get-Module -Name PSDepend -ListAvailable |
Where-Object Version -GE $minimumPSDependVersion |
Sort-Object Version -Descending |
Select-Object -First 1
if (-not $psDepend) {
Install-Module -Name PSDepend -MinimumVersion $minimumPSDependVersion -Repository PSGallery -Scope CurrentUser -Force
}
Import-Module -Name PSDepend -MinimumVersion $minimumPSDependVersion -Verbose:$false
Invoke-PSDepend -Path './requirements.psd1' -Install -Import -Force -WarningAction SilentlyContinue
} else {
Write-Warning 'No [requirements.psd1] found. Skipping build dependency installation.'
}
}
# Execute psake task(s)
$psakeFile = './psakeFile.ps1'
if ($PSCmdlet.ParameterSetName -eq 'Help') {
Get-PSakeScriptTasks -buildFile $psakeFile |
Format-Table -Property Name, Description, Alias, DependsOn
} else {
Initialize-ProjectModuleBuildEnvironment -ProjectRoot $PSScriptRoot
Invoke-psake -buildFile $psakeFile -taskList $Task -nologo -properties $Properties -parameters $Parameters
exit ([int](-not $psake.build_success))
}