58 lines
1.8 KiB
PowerShell
58 lines
1.8 KiB
PowerShell
# PicoBot build & package script
|
|
# Usage: .\scripts\build-release.ps1
|
|
# Output: dist\picobot-vX.X.X.zip
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$Root = Split-Path -Parent $ScriptDir
|
|
|
|
# Read version
|
|
$CargoToml = Get-Content "$Root\Cargo.toml" -Raw
|
|
$Version = if ($CargoToml -match 'version\s*=\s*"([^"]+)"') { $Matches[1] } else { "0.1.0" }
|
|
$PackageName = "picobot-v$Version-windows-x86_64"
|
|
$DistDir = "$Root\dist\$PackageName"
|
|
|
|
Write-Host "=== PicoBot v$Version Build ===" -ForegroundColor Cyan
|
|
|
|
# Step 1: build frontend
|
|
Write-Host "[1/4] Building web frontend..." -ForegroundColor Yellow
|
|
Push-Location "$Root\web"
|
|
try {
|
|
npm run build
|
|
if ($LASTEXITCODE -ne 0) { throw "web build failed" }
|
|
} finally {
|
|
Pop-Location
|
|
}
|
|
|
|
# Step 2: build Rust backend
|
|
Write-Host "[2/4] Building Rust release..." -ForegroundColor Yellow
|
|
Push-Location $Root
|
|
try {
|
|
cargo build --release
|
|
if ($LASTEXITCODE -ne 0) { throw "rust build failed" }
|
|
} finally {
|
|
Pop-Location
|
|
}
|
|
|
|
# Step 3: assemble dist directory
|
|
Write-Host "[3/4] Assembling package..." -ForegroundColor Yellow
|
|
New-Item -ItemType Directory -Force -Path $DistDir | Out-Null
|
|
|
|
# exe + package contents
|
|
Copy-Item "$Root\target\release\picobot.exe" $DistDir
|
|
Copy-Item "$Root\package\*" $DistDir
|
|
|
|
# Step 4: zip
|
|
Write-Host "[4/4] Creating zip..." -ForegroundColor Yellow
|
|
$ZipPath = "$Root\dist\$PackageName.zip"
|
|
if (Test-Path $ZipPath) { Remove-Item $ZipPath }
|
|
Compress-Archive -Path $DistDir -DestinationPath $ZipPath
|
|
|
|
# Cleanup
|
|
Remove-Item -Recurse -Force $DistDir
|
|
|
|
Write-Host ""
|
|
Write-Host "=== Done ===" -ForegroundColor Green
|
|
Write-Host "Package: dist\$PackageName.zip" -ForegroundColor Green
|
|
Write-Host "Size: $([math]::Round((Get-Item $ZipPath).Length/1MB, 1)) MB" -ForegroundColor Gray
|