Files
Thinh Lam 688fac73e9
CI/CD / backend (push) Failing after 2m8s
CI/CD / frontend (push) Failing after 1m40s
CI/CD / deploy (push) Has been skipped
sciagent code + Gitea Actions CI/CD
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 09:38:30 +07:00

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 ""