130 lines
4.2 KiB
PowerShell
130 lines
4.2 KiB
PowerShell
# Build all components: .NET backend + 2 React frontends
|
|
# Usage:
|
|
# .\scripts\build-all.ps1 # Build all
|
|
# .\scripts\build-all.ps1 -Clean # Clean + Build
|
|
# .\scripts\build-all.ps1 -Backend # Backend only
|
|
# .\scripts\build-all.ps1 -Frontend # Frontends only
|
|
# .\scripts\build-all.ps1 -Restore # Just restore deps
|
|
[CmdletBinding()]
|
|
param(
|
|
[switch]$Clean,
|
|
[switch]$Backend,
|
|
[switch]$Frontend,
|
|
[switch]$Restore,
|
|
[switch]$NoNpmInstall,
|
|
[string]$Configuration = 'Release'
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$root = Split-Path -Parent $PSScriptRoot
|
|
Set-Location $root
|
|
|
|
$All = -not ($Backend -or $Frontend -or $Restore)
|
|
|
|
function Write-Step {
|
|
param([string]$Message)
|
|
Write-Host ""
|
|
Write-Host "==========================================" -ForegroundColor Cyan
|
|
Write-Host " $Message" -ForegroundColor Cyan
|
|
Write-Host "==========================================" -ForegroundColor Cyan
|
|
}
|
|
|
|
function Test-CommandExists {
|
|
param([string]$Command)
|
|
return ($null -ne (Get-Command $Command -ErrorAction SilentlyContinue))
|
|
}
|
|
|
|
function Invoke-Step {
|
|
param([string]$Description, [scriptblock]$Block)
|
|
Write-Host "-> $Description" -ForegroundColor Yellow
|
|
& $Block
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "[FAIL] $Description" -ForegroundColor Red
|
|
exit $LASTEXITCODE
|
|
}
|
|
}
|
|
|
|
# Pre-flight checks
|
|
Write-Step "Pre-flight checks"
|
|
if (-not (Test-CommandExists 'dotnet')) {
|
|
Write-Host "[ERROR] dotnet not found" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
$dotnetVersion = (dotnet --version)
|
|
Write-Host "[OK] .NET SDK: $dotnetVersion" -ForegroundColor Green
|
|
|
|
if (Test-CommandExists 'node') {
|
|
Write-Host "[OK] Node.js: $(node --version)" -ForegroundColor Green
|
|
}
|
|
if (Test-CommandExists 'npm') {
|
|
Write-Host "[OK] npm: $(npm --version)" -ForegroundColor Green
|
|
}
|
|
|
|
# Backend
|
|
if ($All -or $Backend -or $Restore -or $Clean) {
|
|
if ($Clean) {
|
|
Write-Step "Clean .NET solution"
|
|
Invoke-Step "dotnet clean" { dotnet clean DH_Y_DUOC.slnx -c $Configuration -v minimal }
|
|
}
|
|
|
|
Write-Step ".NET: Restore packages"
|
|
Invoke-Step "dotnet restore" { dotnet restore DH_Y_DUOC.slnx }
|
|
|
|
if (-not $Restore) {
|
|
Write-Step ".NET: Build solution ($Configuration)"
|
|
Invoke-Step "dotnet build" { dotnet build DH_Y_DUOC.slnx -c $Configuration --no-restore -v minimal }
|
|
}
|
|
}
|
|
|
|
# Frontends
|
|
if ($All -or $Frontend) {
|
|
if (-not (Test-CommandExists 'npm')) {
|
|
Write-Host "[WARN] Skip frontends (npm not installed)" -ForegroundColor Yellow
|
|
}
|
|
else {
|
|
$frontends = @('fe0', 'fe-admin')
|
|
foreach ($fe in $frontends) {
|
|
$feDir = Join-Path $root $fe
|
|
if (-not (Test-Path $feDir)) {
|
|
Write-Host "[SKIP] $fe directory not found" -ForegroundColor Yellow
|
|
continue
|
|
}
|
|
Write-Step "Frontend $fe : Build"
|
|
Push-Location $feDir
|
|
try {
|
|
$needInstall = (-not $NoNpmInstall) -and ((-not (Test-Path 'node_modules')) -or $Clean)
|
|
if ($needInstall) {
|
|
if ($Clean -and (Test-Path 'node_modules')) {
|
|
Write-Host "-> Clean: remove node_modules" -ForegroundColor Yellow
|
|
Remove-Item -Recurse -Force node_modules
|
|
}
|
|
Invoke-Step "npm install" { npm install }
|
|
}
|
|
else {
|
|
Write-Host "[OK] node_modules exists (skip npm install)" -ForegroundColor Green
|
|
}
|
|
|
|
if (-not $Restore) {
|
|
Invoke-Step "npm run build" { npm run build }
|
|
}
|
|
}
|
|
finally {
|
|
Pop-Location
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Summary
|
|
Write-Step "BUILD COMPLETED"
|
|
Write-Host " - .NET output: src/Backend/DYD.Api/bin/$Configuration/net10.0/"
|
|
Write-Host " - fe0 output: fe0/dist/"
|
|
Write-Host " - fe-admin output: fe-admin/dist/"
|
|
Write-Host ""
|
|
Write-Host "To run dev:" -ForegroundColor Cyan
|
|
Write-Host " Backend: dotnet run --project src/Backend/DYD.Api (or F5 in VS)"
|
|
Write-Host " Frontends: .\scripts\start-frontends.cmd"
|
|
Write-Host " AI: docker compose up -d qdrant aiservice"
|
|
Write-Host ""
|