mirror of
https://github.com/freedbygrace/PSOPNSenseAPI.git
synced 2026-07-26 11:58:18 +00:00
92 lines
3.1 KiB
PowerShell
92 lines
3.1 KiB
PowerShell
[CmdletBinding()]
|
|
param (
|
|
[Parameter()]
|
|
[string]
|
|
$Configuration = "Release",
|
|
|
|
[Parameter()]
|
|
[switch]
|
|
$Clean,
|
|
|
|
[Parameter()]
|
|
[switch]
|
|
$UpdateVersion
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
# Define paths
|
|
$rootDir = Split-Path -Parent $PSScriptRoot
|
|
$srcDir = Join-Path -Path $rootDir -ChildPath "src"
|
|
$outputDir = Join-Path -Path $rootDir -ChildPath "output\PSOPNSenseAPI"
|
|
$moduleDir = Join-Path -Path $rootDir -ChildPath "PSOPNSenseAPI"
|
|
|
|
# Clean output directory if requested
|
|
if ($Clean -and (Test-Path -Path $outputDir)) {
|
|
Write-Verbose "Cleaning output directory: $outputDir"
|
|
Remove-Item -Path $outputDir -Recurse -Force
|
|
}
|
|
|
|
# Create output directory if it doesn't exist
|
|
if (-not (Test-Path -Path $outputDir)) {
|
|
Write-Verbose "Creating output directory: $outputDir"
|
|
New-Item -Path $outputDir -ItemType Directory -Force | Out-Null
|
|
}
|
|
|
|
# Update version if requested
|
|
if ($UpdateVersion) {
|
|
$version = Get-Date -Format "yyyy.MM.dd.HHmm"
|
|
Write-Output "Updating version to: $version"
|
|
|
|
# Update version in project file
|
|
$projectFile = Join-Path -Path "$srcDir\PSOPNSenseAPI" -ChildPath "PSOPNSenseAPI.csproj"
|
|
if (Test-Path $projectFile) {
|
|
$projectXml = [xml](Get-Content $projectFile)
|
|
$versionNodes = $projectXml.SelectNodes("//Version")
|
|
if ($versionNodes.Count -gt 0) {
|
|
foreach ($node in $versionNodes) {
|
|
$node.InnerText = $version
|
|
}
|
|
$projectXml.Save($projectFile)
|
|
Write-Output "Updated version in project file to $version"
|
|
} else {
|
|
Write-Warning "Could not find Version node in project file"
|
|
}
|
|
} else {
|
|
Write-Warning "Project file not found at $projectFile"
|
|
}
|
|
|
|
# Update version in module manifest
|
|
$manifestFile = Join-Path -Path $moduleDir -ChildPath "PSOPNSenseAPI.psd1"
|
|
if (Test-Path $manifestFile) {
|
|
$manifestContent = Get-Content -Path $manifestFile -Raw
|
|
$newManifestContent = $manifestContent -replace "ModuleVersion\s*=\s*['`"].*['`"]", "ModuleVersion = '$version'"
|
|
Set-Content -Path $manifestFile -Value $newManifestContent
|
|
Write-Output "Updated version in module manifest to $version"
|
|
} else {
|
|
Write-Warning "Module manifest file not found at $manifestFile"
|
|
}
|
|
}
|
|
|
|
# Build the solution
|
|
Write-Output "Building solution in $Configuration configuration..."
|
|
dotnet build "$srcDir\PSOPNSenseAPI" -c $Configuration -o "$outputDir\bin"
|
|
|
|
if ($LASTEXITCODE -ne 0) {
|
|
throw "Build failed with exit code $LASTEXITCODE"
|
|
}
|
|
|
|
# Copy module files
|
|
Write-Verbose "Copying module files to output directory"
|
|
Copy-Item -Path "$moduleDir\*" -Destination $outputDir -Recurse -Force
|
|
|
|
# Create module directory in PSModulePath if it doesn't exist
|
|
$modulePath = $env:PSModulePath -split ';' | Select-Object -First 1
|
|
$installPath = Join-Path -Path $modulePath -ChildPath "PSOPNSenseAPI"
|
|
|
|
Write-Verbose "Module can be installed to: $installPath"
|
|
Write-Verbose "To install, run: Copy-Item -Path '$outputDir\*' -Destination '$installPath' -Recurse -Force"
|
|
|
|
Write-Output "Build completed successfully!"
|
|
Write-Output "Module output is available at: $outputDir"
|