-
Notifications
You must be signed in to change notification settings - Fork 0
/
build-clojure-msi.ps1
122 lines (104 loc) · 3.93 KB
/
build-clojure-msi.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
param([string] $WixDirectory = 'wix_bin', [string] $DownloadDirectory = 'files', [string] $WorkDirectory = 'work', [switch] $OnlyBuild)
$InformationPreference = 'Continue'
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
function Get-LauncherVersion() {
$params = @{
Uri = 'https://raw.github.com/borkdude/deps.clj/master/resources/DEPS_CLJ_RELEASED_VERSION'
Method = 'Get'
}
return $(Invoke-RestMethod @params).Trim()
}
function Get-RuntimeVersion() {
$params = @{
Uri = 'https://download.clojure.org/install/stable.properties'
Method = 'Get'
}
$(Invoke-RestMethod @params).Split()[0]
}
function Expand-WebArchive {
param(
[string] $Uri,
[string] $Destination,
[switch] $Overwrite
)
Write-Verbose "Extracting $Uri to $Destination"
[System.IO.Compression.ZipFileExtensions]::ExtractToDirectory(
[System.IO.Compression.ZipArchive]::new(
[System.IO.MemoryStream]::new(
([System.Net.WebClient]::new()).DownloadData($Uri)
)),
$Destination,
$true
)
}
function Copy-Launcher {
param(
[string] $Version = $(Get-LauncherVersion),
[string] $Destination = $(Get-Location -PSProvider FileSystem).ProviderPath
)
$params = @{
Uri = "https://github.com/borkdude/deps.clj/releases/download/v$Version/deps.clj-$Version-windows-amd64.zip"
Destination = $Destination
Overwrite = $true
}
Write-Information "Downloading deps.exe version $Version"
Expand-WebArchive @params
}
function Copy-Runtime {
param(
[string] $Version = $(Get-RuntimeVersion),
[string] $Destination = $(Get-Location -PSProvider FileSystem).ProviderPath
)
$params = @{
Uri = "https://download.clojure.org/install/clojure-tools-$Version.zip"
Destination = $Destination
Overwrite = $true
}
Write-Information "Downloading runtime version $Version"
Expand-WebArchive @params
Move-Item -Path "$Destination\ClojureTools\*" -Destination $Destination -Force
Remove-Item -Path "$Destination\ClojureTools"
}
function Copy-WixBinaries {
param(
[string] $Destination = $(Get-Location -PSProvider FileSystem).ProviderPath
)
$params = @{
Uri = 'https://api.github.com/repos/wixtoolset/wix3/releases'
Method = 'Get'
}
$params = @{
Uri = $(Invoke-RestMethod @params). `
Where({ $PSItem.tag_name.EndsWith('rtm') }, 'First', 1). `
assets. `
Where({ $PSItem.name.EndsWith('binaries.zip') }). `
browser_download_url
Destination = $Destination
Overwrite = $true
}
Write-Information "Downloading WiX binaries"
Expand-WebArchive @params
}
$launcherVersion = Get-LauncherVersion
$runtimeVersion = Get-RuntimeVersion
$packageVersion = $runtimeVersion.Substring(2)
if (-not $OnlyBuild) {
Remove-Item -Path $DownloadDirectory -Force -Recurse -ErrorAction SilentlyContinue
$params = @{
Version = $launcherVersion
Destination = $DownloadDirectory
}
Copy-Launcher @params
$params = @{
Version = $runtimeVersion
Destination = $DownloadDirectory
}
Copy-Runtime @params
if (-not $(Test-Path -Path $WixDirectory)) {
Copy-WixBinaries -Destination $WixDirectory
}
}
Write-Information "Creating new MSI at $(Join-Path -Path $(Get-Location -PSProvider FileSystem).ProviderPath -ChildPath "clojure-$packageVersion.msi")"
.\wix_bin\candle.exe .\installers\combined-permachine.wxs -o "$WorkDirectory\clojure.wixobj" -nologo
.\wix_bin\light.exe -b files -b resources -ext WixUIExtension "-cultures:en-us" "-dRuntimeVersion=$runtimeVersion" "-dPackageVersion=$packageVersion" "$WorkDirectory\clojure.wixobj" -o "clojure-$runtimeVersion.msi" -spdb -dcl:high -nologo
Write-Information "Done"