210 lines
7.5 KiB
PowerShell
210 lines
7.5 KiB
PowerShell
# Build script for GestoreTrimestrale
|
|
param(
|
|
[string]$LocalWorkspace = "C:\TFS Fideuram\TP_SEI_Project\root",
|
|
[switch]$SkipTests,
|
|
[switch]$RunApp
|
|
)
|
|
|
|
# Start logging to file
|
|
$logFile = Join-Path $PSScriptRoot "arm_build.log"
|
|
Start-Transcript -Path $logFile -Force
|
|
|
|
# Function to handle errors
|
|
function Write-ErrorAndExit {
|
|
param([string]$ErrorMessage)
|
|
Write-Error $ErrorMessage
|
|
Stop-Transcript
|
|
exit 1
|
|
}
|
|
|
|
# Validate paths
|
|
$AppConfigTest = Join-Path $LocalWorkspace "ContrattoSEI\GestoreTrimestrale.Test\app.config"
|
|
$AppConfigApp = Join-Path $LocalWorkspace "ContrattoSEI\GestoreTrimestrale\app.config"
|
|
$Solution = Join-Path $LocalWorkspace "ContrattoSEI\GestoreTrimestrale\GestoreTrimestrale.sln"
|
|
$TestDll = Join-Path $LocalWorkspace "ContrattoSEI\GestoreTrimestrale.Test\bin\Debug\GestoreTrimestrale.Test.dll"
|
|
$ProjectExe = Join-Path $LocalWorkspace "ContrattoSEI\GestoreTrimestrale\bin\Debug\GestoreTrimestrale.exe"
|
|
|
|
# Check .NET Framework versions and SDK
|
|
function Test-NetFramework {
|
|
param([string]$Version)
|
|
|
|
# Check for .NET Framework 4.x installations
|
|
$netKey = "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
|
|
if (-not (Test-Path $netKey)) {
|
|
Write-Warning ".NET Framework 4.x runtime not found. Please install from: https://dotnet.microsoft.com/download/dotnet-framework"
|
|
return $false
|
|
}
|
|
|
|
# Check for Developer Pack/SDK
|
|
$sdkPaths = @(
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.1 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.5.1 Tools",
|
|
"${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.5 Tools"
|
|
)
|
|
|
|
$sdkFound = $false
|
|
foreach ($path in $sdkPaths) {
|
|
if (Test-Path $path) {
|
|
Write-Host "Found .NET Framework SDK at: $path" -ForegroundColor Green
|
|
$sdkFound = $true
|
|
break
|
|
}
|
|
}
|
|
|
|
if (-not $sdkFound) {
|
|
Write-Warning ".NET Framework Developer Pack/SDK not found. Please install from: https://dotnet.microsoft.com/download/visual-studio-sdks"
|
|
return $false
|
|
}
|
|
|
|
return $true
|
|
}
|
|
|
|
$requiredVersions = @("4.0", "4.5")
|
|
foreach ($version in $requiredVersions) {
|
|
if (-not (Test-NetFramework $version)) {
|
|
Write-ErrorAndExit ".NET Framework $version or later is required but not installed. Please install from: https://dotnet.microsoft.com/download/dotnet-framework"
|
|
}
|
|
}
|
|
|
|
# Validate Visual Studio 2022 installation
|
|
$vsPath = 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise'
|
|
if (-not (Test-Path $vsPath)) {
|
|
$vsPath = 'C:\Program Files\Microsoft Visual Studio\2022\Professional'
|
|
if (-not (Test-Path $vsPath)) {
|
|
$vsPath = 'C:\Program Files\Microsoft Visual Studio\2022\Community'
|
|
if (-not (Test-Path $vsPath)) {
|
|
Write-ErrorAndExit "Visual Studio 2022 not found in any standard installation paths"
|
|
}
|
|
}
|
|
}
|
|
|
|
Write-Host "Setting up Visual Studio environment..." -ForegroundColor Yellow
|
|
try {
|
|
# Find development tools
|
|
$devEnvPath = Join-Path $vsPath 'Common7\IDE\devenv.com'
|
|
$msBuildPath = Join-Path $vsPath 'MSBuild\Current\Bin\MSBuild.exe'
|
|
|
|
if (-not (Test-Path $msBuildPath)) {
|
|
$msBuildPath = Join-Path $vsPath 'MSBuild\Current\Bin\amd64\MSBuild.exe'
|
|
if (-not (Test-Path $msBuildPath)) {
|
|
Write-ErrorAndExit "MSBuild not found in expected paths"
|
|
}
|
|
}
|
|
|
|
# Clean solution first
|
|
if (Test-Path $devEnvPath) {
|
|
Write-Host "Cleaning solution..." -ForegroundColor Yellow
|
|
& $devEnvPath $Solution /Clean
|
|
}
|
|
|
|
# Set up environment
|
|
$vcvarsPath = Join-Path $vsPath 'VC\Auxiliary\Build\vcvars64.bat'
|
|
$tempFile = [System.IO.Path]::GetTempFileName()
|
|
cmd /c "\"$vcvarsPath\" && set > \"$tempFile\""
|
|
Get-Content $tempFile | ForEach-Object {
|
|
if ($_ -match "=") {
|
|
$v = $_.split("=")
|
|
Set-Item -Force -Path "ENV:\$($v[0])" -value "$($v[1])"
|
|
}
|
|
}
|
|
Remove-Item $tempFile -ErrorAction SilentlyContinue
|
|
} catch {
|
|
Write-ErrorAndExit "Failed to set up Visual Studio environment: $_"
|
|
}
|
|
|
|
# Check for Azure DevOps/TFS module
|
|
$tfModule = Get-Module -Name "Microsoft.TeamFoundation.PowerShell" -ListAvailable -ErrorAction SilentlyContinue
|
|
if ($tfModule) {
|
|
try {
|
|
Import-Module "Microsoft.TeamFoundation.PowerShell" -ErrorAction Stop
|
|
# Update TFS workspace
|
|
Write-Host "Updating TFS workspace..." -ForegroundColor Yellow
|
|
Update-TfsWorkspace -Force -Recurse $LocalWorkspace
|
|
} catch {
|
|
Write-Warning "TFS operations will be skipped: $_"
|
|
}
|
|
} else {
|
|
Write-Warning "TFS/Azure DevOps PowerShell module not found. TFS operations will be skipped."
|
|
}
|
|
|
|
# Update configuration files
|
|
Write-Host "Updating configuration files..." -ForegroundColor Yellow
|
|
try {
|
|
if (Test-Path $AppConfigTest) {
|
|
(Get-Content $AppConfigTest).replace('c:\', 'c:\') | Set-Content $AppConfigTest
|
|
}
|
|
if (Test-Path $AppConfigApp) {
|
|
(Get-Content $AppConfigApp).replace('c:\', 'c:\') | Set-Content $AppConfigApp
|
|
}
|
|
} catch {
|
|
Write-ErrorAndExit "Failed to update configuration files: $_"
|
|
}
|
|
|
|
# Build solution
|
|
Write-Host "Building solution..." -ForegroundColor Yellow
|
|
|
|
# Download latest NuGet if not found
|
|
Write-Host "Setting up NuGet..." -ForegroundColor Yellow
|
|
$nugetPath = "$env:LOCALAPPDATA\NuGet\nuget.exe"
|
|
if (-not (Test-Path $nugetPath)) {
|
|
$nugetFolder = Split-Path $nugetPath -Parent
|
|
if (-not (Test-Path $nugetFolder)) {
|
|
New-Item -ItemType Directory -Path $nugetFolder | Out-Null
|
|
}
|
|
Invoke-WebRequest -Uri "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile $nugetPath
|
|
}
|
|
|
|
# Restore and Build
|
|
Write-Host "Restoring NuGet packages..." -ForegroundColor Yellow
|
|
& $nugetPath restore $Solution
|
|
|
|
Write-Host "Building solution..." -ForegroundColor Yellow
|
|
|
|
# Build with original framework versions
|
|
$buildOutput = & $msBuildPath $Solution /p:Configuration=Debug /nologo /p:Platform="Any CPU" /t:Clean,Rebuild /m /verbosity:detailed 2>&1
|
|
$buildOutput | ForEach-Object { Write-Host $_ }
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-ErrorAndExit "Build failed with exit code: $LASTEXITCODE"
|
|
}
|
|
|
|
# Run tests if not skipped
|
|
if (-not $SkipTests) {
|
|
Write-Host "Running tests..." -ForegroundColor Yellow
|
|
$tests = @(
|
|
"FlushFilesWaitingForZIP",
|
|
"SetUpZipCases_DoNotUse",
|
|
"ProcessCanComplete",
|
|
"ZipIntegrity",
|
|
"NumberOfPackedPDFIsOK"
|
|
)
|
|
|
|
foreach ($test in $tests) {
|
|
Write-Host "Running test: $test" -ForegroundColor Cyan
|
|
vstest.console.exe $TestDll /Tests:$test
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-ErrorAndExit "Test '$test' failed with exit code: $LASTEXITCODE"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Run application if requested
|
|
if ($RunApp) {
|
|
Write-Host "Launching application..." -ForegroundColor Yellow
|
|
try {
|
|
Start-Process -FilePath $ProjectExe -Wait
|
|
} catch {
|
|
Write-ErrorAndExit "Failed to launch application: $_"
|
|
}
|
|
}
|
|
|
|
# Stop logging
|
|
Stop-Transcript
|
|
|
|
Write-Host "Build process completed successfully!" -ForegroundColor Green
|