PicoBot/scripts/build-release.ps1

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