You've already forked winget-pkgs
mirror of
https://github.com/TermoraDev/winget-pkgs.git
synced 2026-04-22 15:31:19 -07:00
1fabed40ac
* Lint Community Scripts * Fix ScriptAnalyzer warnings and properly justify suppressed items * Bump Version * Fix PS7 Analyzer Errors
75 lines
2.6 KiB
PowerShell
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
|