repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
topgrade/update-wezterm-nightly.ps1
Raw[CmdletBinding()]
param()
$ErrorActionPreference = 'Stop'
$assetName = 'WezTerm-nightly-setup.exe'
$releaseApi = 'https://api.github.com/repos/wez/wezterm/releases/tags/nightly'
$stampPath = Join-Path $env:LOCALAPPDATA 'topgrade\wezterm-nightly.sha256'
if (Get-Process -Name 'wezterm-gui' -ErrorAction SilentlyContinue) {
Write-Output 'Skipping WezTerm update because WezTerm is running.'
exit 0
}
$wezterm = Get-Command wezterm.exe -CommandType Application -ErrorAction Stop
$release = Invoke-RestMethod -Uri $releaseApi -Headers @{ 'User-Agent' = 'dotfiles-topgrade' }
$asset = @($release.assets | Where-Object Name -eq $assetName) | Select-Object -First 1
if ($null -eq $asset -or $asset.digest -notmatch '^sha256:[0-9a-fA-F]{64}$') {
throw "GitHub nightly release does not contain a verified $assetName asset."
}
if ($asset.browser_download_url -ne "https://github.com/wez/wezterm/releases/download/nightly/$assetName") {
throw "Unexpected WezTerm download URL: $($asset.browser_download_url)"
}
$digest = $asset.digest.ToLowerInvariant()
$knownDigest = if (Test-Path -LiteralPath $stampPath -PathType Leaf) {
(Get-Content -LiteralPath $stampPath -Raw).Trim().ToLowerInvariant()
}
if ($knownDigest -eq $digest) {
$version = & $wezterm.Source --version
if ($LASTEXITCODE -ne 0) {
throw "Installed WezTerm failed version check with exit code $LASTEXITCODE."
}
Write-Output "WezTerm nightly already current: $version"
exit 0
}
$tempPath = Join-Path ([IO.Path]::GetTempPath()) "WezTerm-nightly-setup-$PID.exe"
try {
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile $tempPath
$actualHash = (Get-FileHash -LiteralPath $tempPath -Algorithm SHA256).Hash.ToLowerInvariant()
if ("sha256:$actualHash" -ne $digest) {
throw "WezTerm installer checksum mismatch: expected $digest, got sha256:$actualHash"
}
$installer = Start-Process -FilePath $tempPath -ArgumentList @(
'/VERYSILENT',
'/SUPPRESSMSGBOXES',
'/NORESTART'
) -Wait -PassThru
if ($installer.ExitCode -ne 0) {
throw "WezTerm installer failed with exit code $($installer.ExitCode)."
}
$version = & $wezterm.Source --version
if ($LASTEXITCODE -ne 0) {
throw "Updated WezTerm failed version check with exit code $LASTEXITCODE."
}
New-Item -ItemType Directory -Path (Split-Path -Parent $stampPath) -Force | Out-Null
Set-Content -LiteralPath $stampPath -Value $digest -NoNewline
Write-Output "Updated WezTerm nightly: $version"
}
finally {
Remove-Item -LiteralPath $tempPath -Force -ErrorAction SilentlyContinue
}