86 lines
2.7 KiB
PowerShell
86 lines
2.7 KiB
PowerShell
param(
|
|
[string]$Version = "dev",
|
|
[string]$OutDir = "dist-release",
|
|
[switch]$SkipFrontend
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$Root = Resolve-Path (Join-Path $PSScriptRoot "..")
|
|
$Out = Join-Path $Root $OutDir
|
|
|
|
function Run-Step {
|
|
param(
|
|
[string]$WorkingDirectory,
|
|
[string]$FilePath,
|
|
[string[]]$Arguments
|
|
)
|
|
Push-Location $WorkingDirectory
|
|
try {
|
|
& $FilePath @Arguments
|
|
if ($LASTEXITCODE -ne 0) {
|
|
throw "$FilePath $($Arguments -join ' ') failed with exit code $LASTEXITCODE"
|
|
}
|
|
} finally {
|
|
Pop-Location
|
|
}
|
|
}
|
|
|
|
if (-not $SkipFrontend) {
|
|
foreach ($App in @("admin", "portal", "setup")) {
|
|
$WebDir = Join-Path $Root "web\$App"
|
|
if (-not (Test-Path (Join-Path $WebDir "node_modules"))) {
|
|
Run-Step $WebDir "npm" @("install")
|
|
}
|
|
Run-Step $WebDir "npm" @("run", "build")
|
|
}
|
|
}
|
|
|
|
New-Item -ItemType Directory -Force -Path $Out | Out-Null
|
|
|
|
function Copy-IfExists {
|
|
param(
|
|
[string]$Source,
|
|
[string]$Destination
|
|
)
|
|
if (Test-Path $Source) {
|
|
if (Test-Path $Destination) {
|
|
Remove-Item -Recurse -Force $Destination
|
|
}
|
|
New-Item -ItemType Directory -Force -Path (Split-Path $Destination -Parent) | Out-Null
|
|
Copy-Item -Recurse -Force $Source $Destination
|
|
}
|
|
}
|
|
|
|
$RepoRoot = Resolve-Path (Join-Path $Root "..\..")
|
|
$DataUpdatePublic = Join-Path $Out "data\update\public"
|
|
$DataUpdateNotice = Join-Path $Out "data\update-notice"
|
|
New-Item -ItemType Directory -Force -Path $DataUpdatePublic | Out-Null
|
|
Copy-IfExists (Join-Path $RepoRoot "update-notice") $DataUpdateNotice
|
|
foreach ($Name in @("update-info.json", "media-types.json", "tool-status.json", "modules.json")) {
|
|
$Source = Join-Path $RepoRoot "server\update\public\$Name"
|
|
if (Test-Path $Source) {
|
|
Copy-Item -Force $Source (Join-Path $DataUpdatePublic $Name)
|
|
}
|
|
}
|
|
Copy-IfExists (Join-Path $RepoRoot "server\update\public\downloads") (Join-Path $DataUpdatePublic "downloads")
|
|
|
|
$Targets = @(
|
|
@{ GOOS = "windows"; GOARCH = "amd64"; Name = "ymhut-unified-management-windows-amd64.exe" },
|
|
@{ GOOS = "linux"; GOARCH = "amd64"; Name = "ymhut-unified-management-linux-amd64" },
|
|
@{ GOOS = "linux"; GOARCH = "arm64"; Name = "ymhut-unified-management-linux-arm64" }
|
|
)
|
|
|
|
foreach ($Target in $Targets) {
|
|
$env:GOOS = $Target.GOOS
|
|
$env:GOARCH = $Target.GOARCH
|
|
$env:CGO_ENABLED = "0"
|
|
$Output = Join-Path $Out $Target.Name
|
|
Run-Step $Root "go" @("build", "-tags", "embed_web", "-buildvcs=false", "-trimpath", "-ldflags", "-s -w -X ymhut-box/server/unified-management/internal/config.Version=$Version", "-o", $Output, ".\cmd\unified-management")
|
|
}
|
|
|
|
Remove-Item Env:\GOOS -ErrorAction SilentlyContinue
|
|
Remove-Item Env:\GOARCH -ErrorAction SilentlyContinue
|
|
Remove-Item Env:\CGO_ENABLED -ErrorAction SilentlyContinue
|
|
|
|
Write-Host "Built release binaries in $Out"
|