Files
ParkingRobot/build-and-package.ps1

94 lines
3.7 KiB
PowerShell

param(
[ValidateSet("Debug", "Release")]
[string]$Configuration = "Debug"
)
$ErrorActionPreference = "Stop"
$projectRoot = $PSScriptRoot
$commonUsageProject = Join-Path $projectRoot "CommonUsage-MultiVehicleSync\commonusage\CommonUsage.csproj"
$medullaProject = Join-Path $projectRoot "MedullaAdapter\MedullaAdapter.csproj"
$multiWheelProject = Join-Path $projectRoot "MultiWheelC\MultiWheelC.csproj"
$commonUsageBuildDirectory = Join-Path $projectRoot "CommonUsage-MultiVehicleSync\commonusage\bin\$Configuration\netstandard2.0"
$commonUsageBuildDll = Join-Path $commonUsageBuildDirectory "CommonUsage.dll"
$commonUsageReferenceDll = Join-Path $projectRoot "ref\CommonUsage.dll"
$medullaBuildDirectory = Join-Path $projectRoot "MedullaAdapter\build\Medulla\plugins"
$multiWheelBuildDirectory = Join-Path $projectRoot "MultiWheelC\build\Clumsy"
$mOutputDirectory = Join-Path $projectRoot "output\M"
$cOutputDirectory = Join-Path $projectRoot "output\C"
function Invoke-ProjectBuild {
param(
[Parameter(Mandatory = $true)]
[string]$ProjectPath
)
Write-Host "Building: $ProjectPath" -ForegroundColor Cyan
& dotnet build $ProjectPath --configuration $Configuration --no-restore
if ($LASTEXITCODE -ne 0) {
throw "Build failed: $ProjectPath (dotnet exit code: $LASTEXITCODE)"
}
}
function Assert-BuildFile {
param(
[Parameter(Mandatory = $true)]
[string]$Path
)
if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) {
throw "Expected build file was not found: $Path"
}
}
function Copy-BuildFile {
param(
[Parameter(Mandatory = $true)]
[string]$Source,
[Parameter(Mandatory = $true)]
[string]$DestinationDirectory
)
Assert-BuildFile -Path $Source
Copy-Item -LiteralPath $Source -Destination $DestinationDirectory -Force
Write-Host "Copied: $Source -> $DestinationDirectory" -ForegroundColor DarkGray
}
Write-Host "Building and packaging MyParking. Configuration: $Configuration" -ForegroundColor Green
# CommonUsage must be built first and copied to ref for downstream projects.
Invoke-ProjectBuild -ProjectPath $commonUsageProject
Assert-BuildFile -Path $commonUsageBuildDll
$referenceDirectory = Split-Path -Parent $commonUsageReferenceDll
New-Item -ItemType Directory -Path $referenceDirectory -Force | Out-Null
Copy-Item -LiteralPath $commonUsageBuildDll -Destination $commonUsageReferenceDll -Force
Write-Host "Updated CommonUsage reference: $commonUsageReferenceDll" -ForegroundColor Green
# Build the M and C projects against the updated ref/CommonUsage.dll.
Invoke-ProjectBuild -ProjectPath $medullaProject
Invoke-ProjectBuild -ProjectPath $multiWheelProject
New-Item -ItemType Directory -Path $mOutputDirectory -Force | Out-Null
New-Item -ItemType Directory -Path $cOutputDirectory -Force | Out-Null
# Package the M-layer files.
Copy-BuildFile -Source (Join-Path $medullaBuildDirectory "MedullaAdapter.dll") -DestinationDirectory $mOutputDirectory
Copy-BuildFile -Source (Join-Path $medullaBuildDirectory "MedullaAdapter.pdb") -DestinationDirectory $mOutputDirectory
Copy-BuildFile -Source (Join-Path $medullaBuildDirectory "CommonUsage.dll") -DestinationDirectory $mOutputDirectory
# Package the C-layer files.
Copy-BuildFile -Source (Join-Path $multiWheelBuildDirectory "MultiWheelC.dll") -DestinationDirectory $cOutputDirectory
Copy-BuildFile -Source (Join-Path $multiWheelBuildDirectory "MultiWheelC.pdb") -DestinationDirectory $cOutputDirectory
Copy-BuildFile -Source (Join-Path $multiWheelBuildDirectory "CommonUsage.dll") -DestinationDirectory $cOutputDirectory
Write-Host ""
Write-Host "Build and packaging completed." -ForegroundColor Green
Write-Host "M output: $mOutputDirectory"
Write-Host "C output: $cOutputDirectory"