-
Notifications
You must be signed in to change notification settings - Fork 0
/
nova.ps1
110 lines (83 loc) · 3.07 KB
/
nova.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
# -----------------------------------------------------------------------------------------------------------------
# Nova
# -----------------------------------------------------------------------------------------------------------------
#Requires -Version 5.0
[CmdletBinding()]
<#
.Description
Build script.
This script is the overall control for the build.
Nova validates available tasks for the build and allows for both testing and logging.
Nova sources Nebula and its nursery, or task, files and tasks are invoked from Nebula.
Nova cannot be sourced and can only be invoked.
.Notes
Nova build system by endowdly, version 3.
This Nova was written for tuliPS.
#>
param (
# Outputs the a summary of the result.
[switch] $Summary,
# Sets the Verbose Stream to 'Continue' for visibility or redirection.
[switch] $Log,
# Does not perform altering actions; add -WhatIf where possible.
[switch] $Test)
dynamicParam {
$name = 'Task'
$type = [System.String]
# New parameter attribute
$attributeCollection = New-Object System.Collections.ObjectModel.Collection[System.Attribute]
$taskAttribute = New-Object System.Management.Automation.ParameterAttribute
$taskAttribute.Position = 0
# New validation set attribute
$nurseryPath = Join-Path $PSScriptRoot Build
$nurseryFiles = Get-ChildItem $nurseryPath -Filter *Task.ps1
$tasks = $nurseryFiles.BaseName -replace '.Task*', ''
$validationSetAttribute = New-Object System.Management.Automation.ValidateSetAttribute $tasks
# Add our custom attributes to attribute collection
$attributeCollection.Add($taskAttribute)
$attributeCollection.Add($validationSetAttribute)
# Add our paramater using collection
$paramArgs = $name, $type, $attributeCollection
$taskParam = New-Object System.Management.Automation.RuntimeDefinedParameter $paramArgs
# Expose the parameter to the runtime
$dictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
$dictionary.Add($name, $taskParam)
$dictionary
}
begin {
# Forbid Sourcing
if ($MyInvocation.InvocationName -eq '.' -or $MyInvocation.Line -eq '') {
Write-Warning 'Nova was sourced! This is verboten to prevent session pollution'
# Write-Host 'TIP: To invoke Nova, use the call operator: &' -ForegroundColor Yellow
Write-Host 'ABORT' -ForegroundColor Red
exit 1
}
Push-Location $PSScriptRoot
if ($Log) {
$VerbosePreference = 'Continue'
}
if ($Test) {
$WhatIfPreference = $true
}
$Task =
if ($PSBoundParameters.ContainsKey('Task')) {
$PSBoundParameters.Task
}
else {
'Default'
}
. $PSScriptRoot/Build/nebula.ps1 -Task $Task
}
end {
Pop-Location
if ($Result.Errors) {
# $Error[-1].ScriptStackTrace.ToString()
Write-Host 'NOVA FAIL' -ForeddgroundColor Red
exit 1
}
if ($Summary) {
$Result | Format-Table -AutoSize
}
Write-Host "$Task DONE" -ForegroundColor Green
exit 0
}