-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathpackage.ps1
90 lines (84 loc) · 2.55 KB
/
package.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
# Creates a distributable zip archive with binaries and data
Add-Type -AssemblyName System.IO.Compression -ErrorAction Stop
function main($plugin, $version) {
if(!$plugin -or !$version) {
error "Missing parameter(s). Syntax: ./package <plugin> <version>"
}
if (![IO.Directory]::Exists("$PSScriptRoot\$plugin")) {
error "Could not find directory $plugin"
}
if (![IO.File]::Exists("$PSScriptRoot\x64\Release\$plugin.dll")) {
error "Could not find binary $plugin.dll"
}
createArchive $plugin $version
Write-Host "All done"
}
function createArchive($plugin, [string] $version) {
$dir = "$PSScriptRoot\$plugin"
$zip = "$PSScriptRoot\${plugin}_v${version}.zip"
__using($fs = New-Object IO.FileStream $zip, 'Create') {
__using($ar = New-Object IO.Compression.ZipArchive $fs, 'Create') {
Write-Host "Creating archive " -NoNewLine
Write-Host $zip -ForegroundColor Yellow
$file = "$PSScriptRoot\x64\Release\$plugin.dll"
addFile $ar "$plugin\64\win.xpl" $file
$file = "$dir\mac.xpl"
if ([IO.File]::Exists($file)) {
addFile $ar "$plugin\64\mac.xpl" $file
} else {
Write-Host "Warning, no mac.xpl file found" -ForegroundColor Magenta
}
$file = "$dir\README.md"
if ([IO.File]::Exists($file)) {
addFile $ar "$plugin\Readme.txt" $file
}
$file = "$dir\settings.ini"
if ([IO.File]::Exists($file)) {
addFile $ar "$plugin\settings.ini" $file
}
$data = "$dir\data"
if ([IO.Directory]::Exists($data)) {
# Get all files in data
$files = [IO.Directory]::GetFiles($data, "*.*", 'AllDirectories')
foreach ($f in $files) {
$t = $f.Replace($PSScriptRoot, "").TrimStart('\');
addFile $ar $t $f
}
}
}
}
}
function addFile($archive, $path, $file) {
$entry = $archive.CreateEntry($path)
__using($s = $entry.Open()) {
__using($fs = New-Object IO.FileStream $file, 'Open') {
Write-Host " - Adding " -NoNewLine
Write-Host $path -ForegroundColor Green -NoNewLine
Write-Host " from " -NoNewLine
Write-Host $file -ForegroundColor Cyan
$fs.CopyTo($s)
}
}
}
function error($msg) {
Write-Host "[" -NoNewLine
Write-Host "Error" -ForegroundColor Red -NoNewLine
Write-Host "] " -NoNewLine
Write-Host $msg
exit
}
# Emulate c# 'using' statement...
function __using {
param (
[IDisposable] $disposable,
[ScriptBlock] $scriptBlock
)
try {
& $scriptBlock
} finally {
if ($disposable -ne $null) {
$disposable.Dispose()
}
}
}
main @args