tasks/building.tasks.ps1
# Control flags $CleanBuild = $false # Options $FoldersToClean = @("bin", "obj", "TestResults", "_codeCoverage", "_packages") # Synopsis: Clean .NET solution task CleanSolution -If {$CleanBuild -and $SolutionToBuild} { exec { dotnet clean $SolutionToBuild ` --configuration $Configuration ` --verbosity $LogLevel } # Delete output folders Write-Build White "Deleting output folders..." $FoldersToClean | ForEach-Object { Get-ChildItem -Path (Split-Path -Parent $SolutionToBuild) ` -Filter $_ ` -Recurse ` | Where-Object { $_.PSIsContainer } } | Remove-Item -Recurse -Force } # Synopsis: Build .NET solution task BuildSolution -If {$SolutionToBuild} GitVersion,CleanSolution,RestorePackages,{ exec { dotnet build $SolutionToBuild ` --no-restore ` --configuration $Configuration ` /p:Version="$(($script:GitVersion).SemVer)" ` /p:EndjinRepositoryUrl="$BuildRepositoryUri" ` --verbosity $LogLevel } } # Synopsis: Restore .NET Solution Packages task RestorePackages -If {$SolutionToBuild} CleanSolution,{ exec { dotnet restore $SolutionToBuild ` --verbosity $LogLevel } } # Synopsis: Build .NET solution packages task BuildSolutionPackages -If {!$SkipSolutionPackages -and $SolutionToBuild} GitVersion,{ exec { dotnet pack $SolutionToBuild ` --configuration $Configuration ` --no-build ` --no-restore ` --output $PackagesDir ` /p:EndjinRepositoryUrl="$BuildRepositoryUri" ` /p:PackageVersion="$(($script:GitVersion).SemVer)" ` --verbosity $LogLevel } } # Synopsis: Build Container Images task BuildContainerImages -If {!$SkipContainerImages -and $ContainersToBuild} GitVersion,{ # ContainersToBuild must be an array of hashtables of the following structure: # @( # @{ # Dockerfile = "<path-to-dockerfile>" # ImageName = "<container-image-name-without-tag>" # ContextDir = "<path-to-docker-build-context-dir>" # } # ) foreach ($buildInfo in $ContainersToBuild) { $contextDir = $buildInfo.ContainsKey("ContextDir") ? $buildInfo.ContextDir : (Split-Path -Parent $buildInfo.Dockerfile) exec { docker build ` -t ("{0}:{1}" -f $buildInfo.ImageName, ($script:GitVersion).SemVer) ` -f $buildInfo.Dockerfile ` $contextDir } } } # Synopsis: Lints Bicep files and builds the ARM template task BuildBicepFiles { if (!$BicepOutputDir) { $BicepOutputDir = "./buildOutputs/ARM" } if (!(Test-Path $bicepOutputDir)) { New-Item -ItemType Directory -Path $bicepOutputDir | Out-Null } $bicepFilesToBuild = Get-ChildItem -Recurse -Filter *.bicep -Path $BicepModulesDir $failBuild = $false foreach ($bicepFile in $bicepFilesToBuild) { Write-Build White "Building $bicepFile..." & az bicep build -f $bicepFile --outdir $BicepOutputDir if ($LASTEXITCODE -ne 0) { $failBuild = $true } } if ($failBuild) { throw "Bicep build error(s) - check preceeding log messages" } else { Write-Build Green "Bicep files OK" } } |