diff --git a/.azure/scripts/ApplySemanticVersioningToAssemblies.ps1 b/.azure/scripts/ApplySemanticVersioningToAssemblies.ps1 index 3484e091..289cb07c 100644 --- a/.azure/scripts/ApplySemanticVersioningToAssemblies.ps1 +++ b/.azure/scripts/ApplySemanticVersioningToAssemblies.ps1 @@ -2,93 +2,83 @@ Param ( [string]$applicationName, [string]$pathToSearch, [string]$buildNumber, - [regex]$pattern = "\d+\.\d+\.\d+\.\d+", - [string]$patternSplitCharacters = ".", + [regex]$pattern = '\d+\.\d+\.\d+\.\d+', + [string]$patternSplitCharacters = '.', [int]$patternExpectedVersionNumbers = 4, [int]$versionNumbersInVersion = 4, - [string]$searchFilter = "AssemblyInfo.*", + [string]$searchFilter = 'AssemblyInfo.*', [string]$debugMode = 'false' ) -# Declare functions -function Replace-Version($content, $version, $attribute) -{ - $exitFunction = $false - $content | %{ - if ($_ -match 'exclude from semantic versioning') - { - Write-Host " * Skipping $attribute due to exclude" - $exitFunction = $true - } - if ($_ -match 'include semantic versioning' -and $_ -notmatch "include semantic versioning - $applicationName") - { - Write-Host " * Skipping $attribute due to include not matching" - $exitFunction = $true - } - } +function Replace-Version($content, $version, $attribute) { + $exitFunction = $false + $content | % { + if ($_ -match 'exclude from semantic versioning') { + Write-Host " * Skipping $attribute due to exclude" + $exitFunction = $true + } + + if ($_ -match 'include semantic versioning' -and $_ -notmatch "include semantic versioning - $applicationName") { + Write-Host " * Skipping $attribute due to include not matching" + $exitFunction = $true + } + } + + if ($exitFunction) { + return $content + } + + $versionAttribute = "[assembly: $attribute(""$version"")]" + $pattern = "\[assembly: $attribute\("".*""\)\]" + $versionReplaced = $false + + $content = $content | % { + if ($_ -match $pattern) { + $versionReplaced = $true + $_ = $_ -replace [regex]::Escape($Matches[0]),$versionAttribute + Write-Host " * Replaced $($Matches[0]) with $versionAttribute" + } + $_ + } + + if (-not $versionReplaced) { + $content += [Environment]::NewLine + $versionAttribute + Write-Host " * Added $versionAttribute to end of content" + } - if ($exitFunction) - { return $content - } - - $versionAttribute = "[assembly: $attribute(""$version"")]" - $pattern = "\[assembly: $attribute\("".*""\)\]" - $versionReplaced = $false - - $content = $content | %{ - if ($_ -match $pattern) - { - $versionReplaced = $true - $_ = $_ -replace [regex]::Escape($Matches[0]),$versionAttribute - Write-Host " * Replaced $($Matches[0]) with $versionAttribute" - } - $_ - } - - if (-not $versionReplaced) - { - $content += [Environment]::NewLine + $versionAttribute - Write-Host " * Added $versionAttribute to end of content" - } - - return $content } -function Get-VersionString($numberOfVersions, $extractedBuildNumbers) -{ - return [string]::Join(".",($extractedBuildNumbers | select -First ($numberOfVersions))) +function Get-VersionString($numberOfVersions, $extractedBuildNumbers) { + return [string]::Join('.',($extractedBuildNumbers | select -First ($numberOfVersions))) } -$ErrorActionPreference = "Stop" +$ErrorActionPreference = 'Stop' -if ($debugMode -eq "true") -{ - Write-Host "##[section]Starting: DEBUG INFORMATION" +if ($debugMode -eq 'true') { + Write-Host "##[section]Starting: DEBUG INFORMATION" - Write-Host "##[debug]applicationName = $applicationName" - Write-Host "##[debug]pathToSearch = $pathToSearch" - Write-Host "##[debug]versionFile = $versionFile" - Write-Host "##[debug]pattern = $pattern" - Write-Host "##[debug]patternSplitCharacters = $patternSplitCharacters" - Write-Host "##[debug]patternExpectedVersionNumbers = $patternExpectedVersionNumbers" - Write-Host "##[debug]versionNumbersInVersion = $versionNumbersInVersion" - Write-Host "##[debug]searchFilter = $searchFilter" + Write-Host "##[debug]applicationName = $applicationName" + Write-Host "##[debug]pathToSearch = $pathToSearch" + Write-Host "##[debug]versionFile = $versionFile" + Write-Host "##[debug]pattern = $pattern" + Write-Host "##[debug]patternSplitCharacters = $patternSplitCharacters" + Write-Host "##[debug]patternExpectedVersionNumbers = $patternExpectedVersionNumbers" + Write-Host "##[debug]versionNumbersInVersion = $versionNumbersInVersion" + Write-Host "##[debug]searchFilter = $searchFilter" - Write-Host "##[section]Finishing: DEBUG INFORMATION" - Write-Host "" + Write-Host "##[section]Finishing: DEBUG INFORMATION" + Write-Host "" } -if ($buildNumber -match $pattern -ne $true) -{ +if ($buildNumber -match $pattern -ne $true) { Write-Host "Could not extract a version from [$buildNumber] using pattern [$pattern]" exit 2 } # Set version variables $extractedBuildNumbers = @($Matches[0].Split(([char[]]$patternSplitCharacters))) -if ($extractedBuildNumbers.Length -ne $patternExpectedVersionNumbers) -{ +if ($extractedBuildNumbers.Length -ne $patternExpectedVersionNumbers) { Write-Host "The extracted build number $($Matches[0]) does not contain the expected $patternExpectedVersionNumbers elements" exit 2 } @@ -98,7 +88,7 @@ $fileVersion = Get-VersionString -numberOfVersions $versionNumbersInVersion -ext Write-Host "Using version $version and file version $fileVersion" # iterate the search path (and sub directories) looking for files that match the search filter -Get-ChildItem -Path $pathToSearch -Filter $searchFilter -Recurse | %{ +Get-ChildItem -Path $pathToSearch -Filter $searchFilter -Recurse | % { Write-Host " -> Checking $($_.FullName)" # remove the read-only bit on the file @@ -112,5 +102,5 @@ Get-ChildItem -Path $pathToSearch -Filter $searchFilter -Recurse | %{ $content | Set-Content $_.FullName -Encoding UTF8 } -Write-Host "Done" +Write-Host 'Done' exit 0 diff --git a/.azure/scripts/CreateAgentCapabilitiesEnvironmentVariables.ps1 b/.azure/scripts/CreateAgentCapabilitiesEnvironmentVariables.ps1 index 8b137891..24a1e8d6 100644 --- a/.azure/scripts/CreateAgentCapabilitiesEnvironmentVariables.ps1 +++ b/.azure/scripts/CreateAgentCapabilitiesEnvironmentVariables.ps1 @@ -1 +1,94 @@ +Param ( + [string]$CollectionUri, + [int]$AgentId, + [string]$AgentName, + [string]$AccessToken, + [string]$DebugMode = 'false' +) +Function Get-AzureDevopsAgent() { + param( + [Parameter(Mandatory = $true)] [string]$baseUri, + [Parameter(Mandatory = $true)] [string]$accessToken, + [Parameter(Mandatory = $true)] [int]$agentId, + [Parameter(Mandatory = $true)] [string]$agentName + ) + + try { + [Net.ServicePointManager]::SecurityProtocol = "Tls12, Tls13" + + $headers = @{ + Authorization = "Basic $accessToken" + } + + $uri = "$($baseUri)/distributedtask/pools?api-version=6.0" + $responsePools = Invoke-RestMethod -Method Get -Uri $uri -Headers $headers -UseBasicParsing + + foreach ($pool in $responsePools.Value) { + + $uri = "$($baseUri)/distributedtask/pools/$($pool.Id)/agents?api-version=6.0&includeCapabilities=true" + $responseAgents = Invoke-RestMethod -Method Get -Uri $uri -Headers $headers -UseBasicParsing + + $agents = $responseAgents.Value.Where({$_.id -eq $agentId -and $_.name -eq $agentName}) + if (!($agents) -or $agents.Count -eq 0) { + continue + } + + if ($agents.Count -gt 1) { + throw "Multiple agents ($($agents.Count)) found with id: $agentId and name: $agentName" + } + + return $agents.Item(0) + } + + Write-Host -ForeGroundColor Yellow 'Agent NOT found' + return $null + } + catch { + + Write-Host -ForeGroundColor Red 'Unhandled exception occurred during agent fetch!' + Write-Host -ForegroundColor Red $_.Exception.Message + throw + } +} + +Function Output-AgentCapabilities() { + param( + [Parameter(Mandatory = $true)] [PSCustomObject]$capabilities, + [Parameter(Mandatory = $true)] [string]$capabilityType + ) + + [int]$count = 0 + foreach ($capability in $capabilities.PSObject.Properties) { + $envName = "AgentCapabilities.$($capabilityType).$($capability.Name)".Replace('_', '.') + [System.Environment]::SetEnvironmentVariable($envName, $($capability.Value)) + + $count = $count + 1 + } + + Write-Host -ForeGroundColor Cyan "Created $count AgentCapabilities.$capabilityType environment variables" +} + +$ErrorActionPreference = 'Stop' + +if ($debugMode -eq "true") +{ + Write-Host "##[section]Starting: DEBUG INFORMATION" + + Write-Host "##[debug]CollectionUri = $CollectionUri" + Write-Host "##[debug]AgentId = $AgentId" + Write-Host "##[debug]AgentName = $AgentName" + Write-Host "##[debug]AccessToken = $AccessToken" + + Write-Host "##[section]Finishing: DEBUG INFORMATION" + Write-Host "" +} + +$AgentData = Get-AzureDevopsAgent -baseUri "$($CollectionUri)_apis" -accessToken $AccessToken -agentId $AgentId -agentName $AgentName +if ($AgentData) { + Output-AgentCapabilities -capabilities $AgentData.systemCapabilities -capabilityType 'System' + Output-AgentCapabilities -capabilities $AgentData.userCapabilities -capabilityType 'User' +} + +Write-Host 'Done' +exit 0