| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #!/usr/bin/env pwsh -c
- <#
- .PARAMETER BuildXml
- The URL or file path to a build.xml file that defines package versions to be used
- #>
- [CmdletBinding()]
- param(
- [Parameter(Mandatory = $true)]
- $BuildXml,
- [string[]]$ConfigVars = @()
- )
- $ErrorActionPreference = 'Stop'
- Import-Module -Scope Local -Force "$PSScriptRoot/common.psm1"
- Set-StrictMode -Version 1
- $depsPath = Resolve-Path "$PSScriptRoot/../build/dependencies.props"
- [xml] $dependencies = LoadXml $depsPath
- if ($BuildXml -like 'http*') {
- $url = $BuildXml
- New-Item -Type Directory "$PSScriptRoot/../obj/" -ErrorAction Ignore
- $localXml = "$PSScriptRoot/../obj/build.xml"
- Write-Verbose "Downloading from $url to $BuildXml"
- Invoke-WebRequest -OutFile $localXml $url
- }
- [xml] $remoteDeps = LoadXml $localXml
- $count = 0
- $variables = @{}
- foreach ($package in $remoteDeps.SelectNodes('//Package')) {
- $packageId = $package.Id
- $packageVersion = $package.Version
- $varName = PackageIdVarName $packageId
- Write-Verbose "Found {id: $packageId, version: $packageVersion, varName: $varName }"
- if ($variables[$varName]) {
- if ($variables[$varName].Where( {$_ -eq $packageVersion}, 'First').Count -eq 0) {
- $variables[$varName] += $packageVersion
- }
- }
- else {
- $variables[$varName] = @($packageVersion)
- }
- }
- $updatedVars = @{}
- foreach ($varName in ($variables.Keys | sort)) {
- $packageVersions = $variables[$varName]
- if ($packageVersions.Length -gt 1) {
- Write-Warning "Skipped $varName. Multiple version found. { $($packageVersions -join ', ') }."
- continue
- }
- $packageVersion = $packageVersions | Select-Object -First 1
- $depVarNode = $dependencies.SelectSingleNode("//PropertyGroup[`@Label=`"Package Versions: Auto`"]/$varName")
- if ($depVarNode -and $depVarNode.InnerText -ne $packageVersion) {
- $depVarNode.InnerText = $packageVersion
- $count++
- Write-Host -f DarkGray " Updating $varName to $packageVersion"
- $updatedVars[$varName] = $packageVersion
- }
- }
- if ($count -gt 0) {
- Write-Host -f Cyan "Updating $count version variables in $depsPath"
- SaveXml $dependencies $depsPath
- # Ensure dotnet is installed
- & "$PSScriptRoot\..\run.ps1" install-tools
- $ProjectPath = "$PSScriptRoot\update-dependencies\update-dependencies.csproj"
- $ConfigVars += "--BuildXml"
- $ConfigVars += $BuildXml
- $ConfigVars += "--UpdatedVersions"
- $varString = ""
- foreach ($updatedVar in $updatedVars.GetEnumerator()) {
- $varString += "$($updatedVar.Name)=$($updatedVar.Value);"
- }
- $ConfigVars += $varString
- # Restore and run the app
- Write-Host "Invoking App $ProjectPath..."
- Invoke-Expression "dotnet run -p `"$ProjectPath`" @ConfigVars"
- if ($LASTEXITCODE -ne 0) { throw "Build failed" }
- }
- else {
- Write-Host -f Green "No changes found"
- }
|