-
Notifications
You must be signed in to change notification settings - Fork 0
/
HugoBuild.psm1
105 lines (96 loc) · 3.24 KB
/
HugoBuild.psm1
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
$HugoDir = $MyInvocation.MyCommand.Path -replace '\\[^\\]+$'
Set-Location -Path $HugoDir
Hugo completion powershell | Out-String | Invoke-Expression
Set-Location -
Function New-Site {
Param (
$Name
)
Set-Location -Path $Script:HugoDir
Hugo new site $Name --format=toml | Out-Null && $(
New-Item -Path ".\sites\$Name" -ItemType Directory
$ConfigDir = "$Name\config"
Move-Item -Path ".\$ConfigDir.toml" -Destination (New-Item -Path ".\$ConfigDir\_default" -ItemType Directory).FullName
Get-ChildItem -Path config |
ForEach-Object {
New-Item -ItemType Junction -Path ".\$ConfigDir\$($_.Name)" -Target $_.FullName
}
Remove-Item -Path ".\$Name\themes" -Force
Set-Location -Path ".\$Name"
Add-Content -Path .\.gitignore -Value "public`n.hugo_build.lock"
Git init --initial-branch=main .
Git add .
Git commit -m "$($Name): site creation"
Set-Location -
) | Out-Null
Set-Location -
}
Function Connect-Site {
Param (
[Parameter(Mandatory=$true)] $Name,
$Port = 1313,
$Environment = 'development'
)
Set-Location -Path "${Script:HugoDir}\$Name"
Hugo server --themesDir=..\themes --destination=.\public --environment=$Environment --port=$Port --cleanDestinationDir
}
Function Deploy-Site {
Param (
[Parameter(Mandatory=$true)] $Name,
$CommitText = "Generate site: $(Get-Date)"
)
Set-Location -Path "${Script:HugoDir}\$Name"
Hugo --themesDir=..\themes --destination=..\sites\$Name --environment=production --minify --cleanDestinationDir
Git add .
Git commit -m "$CommitText"
Set-Location -
}
Function New-Theme {
Param (
$Name
)
Set-Location -Path $Script:HugoDir
Hugo new theme $Name | Out-Null && $(
Set-Location -Path ".\themes\$Name"
Git init --initial-branch=main .
Git add .
Git commit -m "$($Name): theme creation"
Set-Location -
) | Out-Null
Set-Location -
}
{
Param(
$commandName,
$parameterName,
$wordToComplete,
$commandAst,
$fakeBoundParameters
)
(Get-ChildItem -Path "${Script:HugoDir}\sites" -Attributes Directory).Name |
Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { $_ }
} | ForEach-Object {
Register-ArgumentCompleter -CommandName Connect-Site -ParameterName Name -ScriptBlock $_
Register-ArgumentCompleter -CommandName Deploy-Site -ParameterName Name -ScriptBlock $_
Register-ArgumentCompleter -CommandName Select-Site -ParameterName Name -ScriptBlock $_
}
Register-ArgumentCompleter -CommandName Connect-Site -ParameterName Environment -ScriptBlock {
Param(
$commandName,
$parameterName,
$wordToComplete,
$commandAst,
$fakeBoundParameters
)
If ($fakeBoundParameters.ContainsKey('Name')) {
(Get-ChildItem -Path "${Script:HugoDir}\$($fakeBoundParameters.Type)\config" -Attributes Directory -Exclude _default).Name |
Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { $_ }
}
}
Function Select-Site {
Param (
$Name
)
Set-Location -Path "${Script:HugoDir}\$Name"
}
Export-ModuleMember -Function '*-Site','*-Theme'