-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.ps1
More file actions
122 lines (106 loc) · 3.01 KB
/
build.ps1
File metadata and controls
122 lines (106 loc) · 3.01 KB
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
#!/usr/bin/env pwsh
# Build script for Blaze cross-platform package manager
# Builds binaries for Windows and Linux (amd64 and arm64)
param(
[string]$OutputDir = "dist",
[switch]$Clean,
[switch]$Verbose
)
# Color output
function Write-Success { Write-Host $args -ForegroundColor Green }
function Write-Error-Custom { Write-Host $args -ForegroundColor Red }
function Write-Info { Write-Host $args -ForegroundColor Cyan }
# Clean previous builds
if ($Clean -or !(Test-Path $OutputDir)) {
Write-Info "Cleaning output directory..."
if (Test-Path $OutputDir) {
Remove-Item -Recurse -Force $OutputDir
}
New-Item -ItemType Directory -Path $OutputDir | Out-Null
}
Write-Info "Building Blaze binaries..."
Write-Info "Output directory: $OutputDir"
# Build targets
$targets = @(
@{
OS = "windows"
Arch = "amd64"
Output = "blaze-windows-amd64.exe"
}
@{
OS = "linux"
Arch = "amd64"
Output = "blaze-linux-amd64"
}
@{
OS = "linux"
Arch = "arm64"
Output = "blaze-linux-arm64"
}
@{
OS = "windows"
Arch = "arm64"
Output = "blaze-windows-arm64.exe"
}
@{
OS = "darwin"
Arch = "amd64"
Output = "blaze-darwin-amd64"
}
@{
OS = "darwin"
Arch = "arm64"
Output = "blaze-darwin-arm64"
}
)
$successful = 0
$failed = 0
foreach ($target in $targets) {
$outputFile = "$OutputDir/blaze-$($target.OS)-$($target.Arch)/$($target.Output)"
$outputFolder = Split-Path -Parent $outputFile
Write-Info "Building for $($target.OS)/$($target.Arch)..."
# Create output directory
if (!(Test-Path $outputFolder)) {
New-Item -ItemType Directory -Path $outputFolder -Force | Out-Null
}
# Set environment variables
$env:GOOS = $target.OS
$env:GOARCH = $target.Arch
# Build
$buildArgs = @("-o", $outputFile, "./src")
if ($Verbose) {
Write-Info " Command: go build $($buildArgs -join ' ')"
}
$output = go build $buildArgs 2>&1
if ($LASTEXITCODE -eq 0) {
$fileInfo = Get-Item $outputFile
$fileSize = [math]::Round($fileInfo.Length / 1MB, 2)
Write-Success " OK - $(Split-Path -Leaf $outputFile) ($fileSize MB)"
$successful++
} else {
Write-Error-Custom " FAILED - $output"
$failed++
}
# Clear environment variables
$env:GOOS = ""
$env:GOARCH = ""
}
Write-Info ""
Write-Info "Build Summary:"
Write-Success " Successful: $successful"
if ($failed -gt 0) {
Write-Error-Custom " Failed: $failed"
} else {
Write-Success " Failed: $failed"
}
if ($failed -eq 0) {
Write-Success ""
Write-Success "All builds completed successfully!"
Write-Info "Binaries available in: $OutputDir"
Write-Info ""
Write-Info "Next steps:"
Write-Info " - Test: ./dist/blaze-windows-amd64/blaze.exe list"
Write-Info " - Package and distribute binaries"
} else {
exit 1
}