<# .SYNOPSIS Builds the nasmon binary (linux/amd64, static) and packs it into a .deb and .rpm with nfpm. Output: dist\nasmon__amd64.deb and dist\nasmon-..rpm One-time setup: winget install GoLang.Go go install github.com/goreleaser/nfpm/v2/cmd/nfpm@latest .EXAMPLE .\build.ps1 # version from git tag, or 0.1.0+ .\build.ps1 -Version 0.2.0 .\build.ps1 -Test # run go vet + go test first #> [CmdletBinding()] param( [string]$Version, [switch]$Test ) $ErrorActionPreference = "Stop" $root = $PSScriptRoot $src = $root $dist = Join-Path $root "dist" # tools: go and nfpm may live outside PATH in a fresh shell $env:Path = "$env:Path;C:\Program Files\Go\bin;$env:USERPROFILE\go\bin" foreach ($tool in "go", "nfpm") { if (-not (Get-Command $tool -ErrorAction SilentlyContinue)) { throw "$tool not found - see the setup notes at the top of build.ps1" } } if (-not $Version) { $Version = $null if (Get-Command git -ErrorAction SilentlyContinue) { Push-Location $root try { $tag = git describe --tags --always --dirty 2>$null } catch { $tag = $null } Pop-Location if ($tag -and $tag -match '^v?(\d+\.\d+\.\d+)(-(\d+)-g([0-9a-f]+))?(-dirty)?$') { $Version = $Matches[1] if ($Matches[3]) { $Version += "+git$($Matches[3]).$($Matches[4])" } if ($Matches[5]) { $Version += ".dirty" } } } if (-not $Version) { $Version = "0.1.0+" + (Get-Date -Format "yyyyMMdd.HHmm") } } New-Item -ItemType Directory -Force $dist | Out-Null if ($Test) { Write-Host "==> go vet / go test" -ForegroundColor Green Push-Location $src try { go vet ./...; if ($LASTEXITCODE -ne 0) { throw "go vet failed" } go test ./...; if ($LASTEXITCODE -ne 0) { throw "go test failed" } } finally { Pop-Location } } Write-Host "==> Building nasmon $Version (linux/amd64)" -ForegroundColor Green $env:GOOS = "linux"; $env:GOARCH = "amd64"; $env:CGO_ENABLED = "0" Push-Location $src try { go build -trimpath -ldflags "-s -w -X main.version=$Version" -o (Join-Path $dist "nasmon") ./cmd/nasmon if ($LASTEXITCODE -ne 0) { throw "go build failed" } } finally { Pop-Location Remove-Item Env:GOOS, Env:GOARCH, Env:CGO_ENABLED -ErrorAction SilentlyContinue } Write-Host "==> Packaging .deb" -ForegroundColor Green Get-ChildItem $dist -Filter "nasmon_*.deb" | Remove-Item -Force $env:NASMON_VERSION = $Version Push-Location (Join-Path $root "packaging") try { nfpm package -f nfpm.yaml -p deb -t $dist if ($LASTEXITCODE -ne 0) { throw "nfpm deb failed" } Write-Host "==> Packaging .rpm" -ForegroundColor Green Get-ChildItem $dist -Filter "nasmon-*.rpm" | Remove-Item -Force nfpm package -f nfpm.yaml -p rpm -t $dist if ($LASTEXITCODE -ne 0) { throw "nfpm rpm failed" } } finally { Pop-Location } foreach ($pkg in (Get-ChildItem $dist -Filter "nasmon*" -Include "*.deb", "*.rpm")) { Write-Host "==> $($pkg.FullName) ($([math]::Round($pkg.Length / 1MB, 1)) MB)" -ForegroundColor Green }