- ProductName
provides the name of the product to be built within/by this psakefile.
- Info
- Clean
- Build
- Package
- Publish
- Default
- CICD
Properties `
{
### Variables
$repositoryName = Split-Path $PWD -Leaf
$productName = "{ProductName}"
$productAuthor = "{ProductAuthor}"
$productDescription = "{ProductDescription}"
$libraryDirectory = "lib"
$outputDirectory = "out"
$sourceDirectory = "src"
$sqlDirectory = "sql"
$testsDirectory = "test"
$utilDirectory = "util"
$executionTime = Get-Date
$executionTimestamp = $executionTime.ToString("yyyyMMddHHmmssfff")
### Paths
$libraryPath = Join-Path $PWD $libraryDirectory
$outputPath = Join-Path $PWD $outputDirectory
$sourcePath = Join-Path $PWD $sourceDirectory
$sqlPath = Join-Path $PWD $sqlDirectory
$testsPath = Join-Path $PWD $testsDirectory
$utilPath = Join-Path $PWD $utilDirectory
$outputExecutionPath = Join-Path $outputPath $executionTimestamp
$outputProductPath = Join-Path $outputExecutionPath $productName
$outputModuleManifestPath = Join-Path $outputProductPath "$productName.psd1"
$nuspecPath = Join-Path $utilPath "$productName.nuspec"
if(-not(Test-Path $nuspecPath))
{
$nuspecPath = Join-Path $utilPath "module.nuspec"
}
### Tools
$msbuildPath = vswhere -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe | Select-Object -first 1
$nugetPath = $ENV:NUGET_PATH
if(-not $nugetPath)
{
$nugetPath = (Get-Command nuget | Select-Object -First 1).Source
}
### Solutions
$sourceSolutionPath = Join-Path $sourcePath "$productName.sln"
$testsSolutionPath = Join-Path $testsPath "$productName - Tests.sln"
### Build Secrets
$buildSecrets = Get-Content ~\.build-secrets.json | Out-String | ConvertFrom-Json
if($buildSecrets)
{
$nugetRepositorySecrets = $buildSecrets.KYZOG.PKG.REPOSITORIES | Where-Object { $_.NAME -eq 'Powershell' }
}
$nugetApiKey = $ENV:KYZOG_PKG_REPOSITORY_NUGET_KEY
if(-not $nugetApiKey)
{
$nugetApiKey = $nugetRepositorySecrets.KEY
}
$nugetRepositoryUri = $KYZOG:KYZOG_PKG_REPOSITORY_NUGET_URI
if(-not $nugetRepositoryUri)
{
$nugetRepositoryUri = $nugetRepositorySecrets.URI
}
### Version
$currentBranch = git rev-parse --abbrev-ref HEAD
if($ENV:CI_COMMIT_BRANCH)
{
$versionSuffix = "$($ENV:CI_COMMIT_BRANCH)+$executionTimestamp"
}
elseif($currentBranch -eq "main")
{
$versionSuffix = "+$executionTimestamp"
}
else
{
$versionSuffix = "$currentBranch+$executionTimestamp"
}
$version_major = $executionTime.ToString("yyyy")
$version_minor = $executionTime.ToString("MM")
$version_build = $executionTime.ToString("dd")
$version_revision = $executionTime.ToString("HHmmssfff")
$version_assembly = "$version_major.$version_minor.$version_build.$version_revision"
$version_file = "$version_major.$version_minor.$version_build-$version_revision"
}
$exitCodeCheck = { $LASTEXITCODE -eq 0 }
task Info -action `
{
Write-Host "#####################################################"
Write-Host "###### ENVIRONMENT VARIABLES ########################"
Write-Host "#####################################################"
Get-ChildItem ENV: | ForEach-Object { Write-Host "$($_.Key) - $($_.Value)" }
Write-Host "#####################################################"
Write-Host "###### SCRIPT VARIABLES #############################"
Write-Host "#####################################################"
Get-Variable | ForEach-Object { Write-Host "$($_.Name) - $($_.Value)" }
}
task Clean -Action `
{
if(Test-Path $libraryPath)
{
Remove-Item $libraryPath -Force -Recurse
}
if(Test-Path $outputPath)
{
Remove-Item $outputPath -Force -Recurse
}
}
task RestoreSource -PostCondition $exitCodeCheck -Action `
{
dotnet restore $sourceSolutionPath --packages $libraryPath
}
task Build -PostCondition $exitCodeCheck -Action `
{
& "util\Stage-Module.ps1" -ProductName $productName -OutputPath $outputProductPath
Update-ModuleManifest -Path $outputModuleManifestPath -ModuleVersion $version_assembly
}
task Package -PostCondition $exitCodeCheck -Action `
{
$nugetOutputExecutionPath = Join-Path $outputExecutionPath "nuget.output.txt"
$nugetErrorExecutionPath = Join-Path $outputExecutionPath "nuget.error.txt"
Start-Process -FilePath $nugetPath `
-NoNewWindow `
-Wait `
-RedirectStandardError $nugetErrorExecutionPath `
-RedirectStandardOutput $nugetOutputExecutionPath `
-ArgumentList @(
"pack"
, "$nuspecPath"
, "-BasePath"
, "$outputExecutionPath"
, "-OutputDirectory"
, "$outputExecutionPath"
, "-Version"
, $version_assembly
, "-Properties"
, "ProductName=`"$ProductName`";Author=`"$ProductAuthor`";Description=`"$ProductDescription`"") | Out-Null
}
task Publish -PostCondition $exitCodeCheck -action `
{
$nugetPackage = Get-Item "$outputExecutionPath\$productName.*.nupkg"
dotnet nuget push $nugetPackage --api-key $nugetApiKey --source $nugetRepositoryUri
}
task Default -depends Info, Clean, Build, Package
task CICD -Depends Default, Publish