Files
winget-pkgs/Tools/WingetVersionManager.ps1
Kaleb Luedtke 1fabed40ac Lint Community Scripts (#132425)
* Lint Community Scripts

* Fix ScriptAnalyzer warnings and properly justify suppressed items

* Bump Version

* Fix PS7 Analyzer Errors
2024-01-02 10:02:09 -08:00

75 lines
2.6 KiB
PowerShell

#Requires -Version 5
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingWriteHost', '', Justification = 'This script is not intended to have any outputs piped')]
Param
(
[switch] $Clean,
[switch] $Prerelease,
[switch] $Latest,
[Parameter(Mandatory = $false)]
[string] $Version
)
$releasesAPIResponse = Invoke-RestMethod 'https://api.github.com/repos/microsoft/winget-cli/releases?per_page=100'
if (!$Prerelease) {
$releasesAPIResponse = $releasesAPIResponse.Where({ !$_.prerelease })
}
if ($PSBoundParameters.Keys -contains 'Version') {
$releasesAPIResponse = @($releasesAPIResponse.Where({ $_.tag_name -match $('^v?' + [regex]::escape($Version)) }))
}
if ($Latest) {
$releasesAPIResponse = @($releasesAPIResponse | Select-Object -First 1)
}
if ($releasesAPIResponse.Length -lt 1) {
Write-Output 'No releases found matching criteria'
exit 1
}
$releasesAPIResponse = $releasesAPIResponse | Sort-Object -Property published_at -Descending
$assets = $releasesAPIResponse[0].assets
$shaFileUrl = $assets.Where({ $_.name -eq 'Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.txt' }).browser_download_url
$msixFileUrl = $assets.Where({ $_.name -eq 'Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle' }).browser_download_url
$releaseTag = $releasesAPIResponse[0].tag_name
Write-Host "Found $releaseTag"
if ($Clean) {
Get-AppxPackage 'Microsoft.DesktopAppInstaller' | Remove-AppxPackage
}
$shaFile = New-TemporaryFile
Invoke-WebRequest -Uri $shaFileUrl -OutFile $shaFile
$sha256 = Get-Content $shaFile -Tail 1
Remove-Item $shaFile -Force
$versionFolder = Join-Path $env:LOCALAPPDATA -ChildPath "Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\bin\$releaseTag"
if (!(Test-Path $versionFolder)) {
New-Item -ItemType Directory -Path $versionFolder -Force | Out-Null
}
$existingFiles = Get-ChildItem $versionFolder -File
$msixFile = $null
foreach ($file in $existingFiles) {
if ((Get-FileHash $file.FullName).Hash.ToLower() -eq $sha256) {
$msixFile = $file
Write-Output 'Found file in local store. Skipping download'
}
}
if (!$msixFile) {
$outputPath = Join-Path $versionFolder -ChildPath "winget_$releaseTag.msix"
Write-Output "Downloading version $releaseTag to $outputPath"
Invoke-WebRequest -Uri $msixFileUrl -OutFile $outputPath
$file = Get-Item $outputPath
if ((Get-FileHash $file).Hash.ToLower() -ne $sha256) {
Write-Output 'Download failed. Installer hashes do not match.'
exit 1
} else {
$msixFile = $file
}
}
Add-AppxPackage $msixFile.FullName -ForceUpdateFromAnyVersion
Write-Output 'Checking winget version . . .'
& winget -v