Files
PowerCLI-Example-Scripts/Modules/VMware.vSphere.SsoAdmin/src/build.ps1
2021-03-17 18:27:34 +02:00

169 lines
4.6 KiB
PowerShell

# **************************************************************************
# Copyright 2020 VMware, Inc.
# **************************************************************************
param(
[string]
$TestVc,
[string]
$TestVcUser,
[string]
$TestVcPassword,
[switch]
$PrepareForPSGallery
)
$Configuration = "Release"
function Test-BuildToolsAreAvailable {
$dotnetSdk = Get-Command 'dotnet'
if (-not $dotnetSdk) {
throw "'dotnet' sdk is not available"
}
}
function LogInfo($message) {
$dt = (Get-Date).ToLongTimeString()
Write-Host "[$dt] INFO: $message" -ForegroundColor Green
}
function Build {
$srcRoot = Join-Path $PSScriptRoot "VMware.vSphere.SsoAdmin.Client"
Push-Location $srcRoot
dotnet build -c $Configuration
Pop-Location
}
function Publish {
param($OutputFolder)
if (Test-Path $OutputFolder) {
$netcoreLsSource = [IO.Path]::Combine(
$PSScriptRoot,
"VMware.vSphere.SsoAdmin.Client",
"VMware.vSphere.LsClient",
"bin",
$Configuration,
"netcoreapp3.1",
"VMware.vSphere.LsClient.dll")
$net45LsSource = [IO.Path]::Combine(
$PSScriptRoot,
"VMware.vSphere.SsoAdmin.Client",
"VMware.vSphere.LsClient",
"bin",
$Configuration,
"net45",
"VMware.vSphere.LsClient.dll")
$netcoreSsoAdminSource = [IO.Path]::Combine(
$PSScriptRoot,
"VMware.vSphere.SsoAdmin.Client",
"VMware.vSphere.SsoAdminClient",
"bin",
$Configuration,
"netcoreapp3.1",
"VMware.vSphere.SsoAdminClient.dll")
$net45SsoAdminSource = [IO.Path]::Combine(
$PSScriptRoot,
"VMware.vSphere.SsoAdmin.Client",
"VMware.vSphere.SsoAdminClient",
"bin",
$Configuration,
"net45",
"VMware.vSphere.SsoAdminClient.dll")
$netcoreUtilsSource = [IO.Path]::Combine(
$PSScriptRoot,
"VMware.vSphere.SsoAdmin.Client",
"VMware.vSphere.SsoAdmin.Utils",
"bin",
$Configuration,
"netcoreapp3.1",
"VMware.vSphere.SsoAdmin.Utils.dll")
$net45UtilsSource = [IO.Path]::Combine(
$PSScriptRoot,
"VMware.vSphere.SsoAdmin.Client",
"VMware.vSphere.SsoAdmin.Utils",
"bin",
$Configuration,
"net45",
"VMware.vSphere.SsoAdmin.Utils.dll")
$netcoreTarget = Join-Path $OutputFolder "netcoreapp3.1"
$net45Target = Join-Path $OutputFolder "net45"
Copy-Item -Path $netcoreLsSource -Destination $netcoreTarget -Force
Copy-Item -Path $net45LsSource -Destination $net45Target -Force
Copy-Item -Path $netcoreSsoAdminSource -Destination $netcoreTarget -Force
Copy-Item -Path $net45SsoAdminSource -Destination $net45Target -Force
Copy-Item -Path $netcoreUtilsSource -Destination $netcoreTarget -Force
Copy-Item -Path $net45UtilsSource -Destination $net45Target -Force
}
}
function Test {
if (-not [string]::IsNullOrEmpty($TestVc) -and `
-not [string]::IsNullOrEmpty($TestVcUser) -and `
-not [string]::IsNullOrEmpty($TestVcPassword)) {
# Run Tests in external process because it will load build output binaries
LogInfo "Run VC integration tests"
$usePowerShell = (Get-Process -Id $pid).ProcessName
$testLauncherScript = Join-Path (Join-Path $PSScriptRoot 'test') 'RunTests.ps1'
$arguments = "-Command $testLauncherScript -VcAddress $TestVc -User $TestVcUser -Password $TestVcPassword"
Start-Process `
-FilePath $usePowerShell `
-ArgumentList $arguments `
-PassThru `
-NoNewWindow | `
Wait-Process
}
}
function PrepareForRelease {
$targetRootDirName = 'ForPSGallery'
$releaseDir = Join-Path (Split-Path $PSScriptRoot) $targetRootDirName
if (Test-Path $releaseDir) {
Remove-Item -Path $releaseDir -Recurse
}
New-Item -Path $releaseDir -ItemType Directory | Out-Null
$releaseDir = Join-Path $releaseDir 'VMware.vSphere.SsoAdmin'
New-Item -Path $releaseDir -ItemType Directory | Out-Null
$sourceDir = Split-Path $PSScriptRoot
Get-ChildItem -Path $sourceDir -Exclude src, README.md, $targetRootDirName | `
Copy-Item -Recurse -Destination $releaseDir
}
# 1. Test Build Tools
LogInfo "Test build tools are available"
Test-BuildToolsAreAvailable
# 2. Build
LogInfo "Build"
Build
# 3. Publish
$OutputFolder = Split-Path $PSScriptRoot
LogInfo "Publish binaries to '$OutputFolder'"
Publish $OutputFolder
# 4. Test
Test
# 5. Prepare For Release
if ($PrepareForPSGallery) {
PrepareForRelease
}