36b3af2e3d
PR Check / Tests: Unit (macos-latest) (push) Waiting to run
PR Check / Tests: Unit (ubuntu-24.04) (push) Waiting to run
PR Check / Tests: Unit (ubuntu-24.04-arm) (push) Waiting to run
PR Check / Tests: Unit (windows-latest) (push) Waiting to run
PR Check / Code Quality: Format (push) Failing after 1s
PR Check / Code Quality: Lint (darwin) (push) Failing after 0s
PR Check / Code Quality: Lint (freebsd) (push) Failing after 1s
PR Check / Code Quality: Lint (windows) (push) Failing after 1s
PR Check / Code Quality: Lint (linux) (push) Failing after 1s
PR Check / Security: Vulnerability Scan (push) Failing after 0s
Update Documentation / update-docs (push) Failing after 2s
PR Check / Code Quality: Vendor (push) Failing after 1s
PR Check / Code Quality: Coverage (push) Failing after 0s
84 lines
2.8 KiB
PowerShell
84 lines
2.8 KiB
PowerShell
$ErrorActionPreference = "Stop"
|
|
|
|
$Repo = "pranshuparmar/witr"
|
|
$InstallDir = Join-Path $env:LOCALAPPDATA "witr\bin"
|
|
$UserPath = [Environment]::GetEnvironmentVariable("Path", "User")
|
|
|
|
Write-Host "Installing witr..."
|
|
|
|
# 1. Get Latest Tag
|
|
Write-Host "Fetching latest version..."
|
|
$LatestUrl = "https://api.github.com/repos/$Repo/releases/latest"
|
|
try {
|
|
$LatestJson = Invoke-RestMethod -Uri $LatestUrl
|
|
$LatestTag = $LatestJson.tag_name
|
|
} catch {
|
|
Write-Error "Failed to fetch latest release version. check internet connection."
|
|
exit 1
|
|
}
|
|
Write-Host "Detected latest version: $LatestTag"
|
|
|
|
# 2. Setup Paths
|
|
if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") {
|
|
$ZipName = "witr-windows-amd64.zip"
|
|
} elseif ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") {
|
|
$ZipName = "witr-windows-arm64.zip"
|
|
} else {
|
|
Write-Error "Unsupported architecture: $($env:PROCESSOR_ARCHITECTURE)"
|
|
exit 1
|
|
}
|
|
Write-Host "Detected Architecture: $($env:PROCESSOR_ARCHITECTURE)"
|
|
$DownloadUrl = "https://github.com/$Repo/releases/download/$LatestTag/$ZipName"
|
|
$ChecksumUrl = "https://github.com/$Repo/releases/download/$LatestTag/SHA256SUMS"
|
|
$TempDir = [System.IO.Path]::GetTempPath()
|
|
$ZipPath = Join-Path $TempDir $ZipName
|
|
$ChecksumPath = Join-Path $TempDir "SHA256SUMS"
|
|
|
|
# 3. Download
|
|
Write-Host "Downloading $DownloadUrl..."
|
|
Invoke-WebRequest -Uri $DownloadUrl -OutFile $ZipPath
|
|
Invoke-WebRequest -Uri $ChecksumUrl -OutFile $ChecksumPath
|
|
|
|
# 4. Verify Checksum
|
|
Write-Host "Verifying checksum..."
|
|
$Hash = Get-FileHash -Algorithm SHA256 $ZipPath
|
|
$ExpectedLine = Select-String -Path $ChecksumPath -Pattern $ZipName
|
|
if (-not $ExpectedLine) {
|
|
Write-Error "Checksum verification failed: could not find $ZipName in SHA256SUMS"
|
|
Remove-Item $ZipPath, $ChecksumPath -ErrorAction SilentlyContinue
|
|
exit 1
|
|
}
|
|
$ExpectedHash = $ExpectedLine.Line.Split(' ')[0].Trim()
|
|
|
|
if ($Hash.Hash.ToLower() -ne $ExpectedHash.ToLower()) {
|
|
Write-Error "Checksum mismatch!`nExpected: $ExpectedHash`nActual: $($Hash.Hash)"
|
|
Remove-Item $ZipPath, $ChecksumPath -ErrorAction SilentlyContinue
|
|
exit 1
|
|
}
|
|
Write-Host "Checksum verified."
|
|
|
|
# 5. Extract/Install
|
|
if (-not (Test-Path $InstallDir)) {
|
|
New-Item -ItemType Directory -Path $InstallDir -Force | Out-Null
|
|
}
|
|
|
|
Write-Host "Extracting to $InstallDir..."
|
|
Expand-Archive -Path $ZipPath -DestinationPath $InstallDir -Force
|
|
|
|
# Cleanup downloads
|
|
Remove-Item $ZipPath, $ChecksumPath -ErrorAction SilentlyContinue
|
|
|
|
# 6. Update PATH
|
|
if ($UserPath -notlike "*$InstallDir*") {
|
|
Write-Host "Adding $InstallDir to User Path..."
|
|
$NewPath = "$UserPath;$InstallDir"
|
|
[Environment]::SetEnvironmentVariable("Path", $NewPath, "User")
|
|
$env:Path += ";$InstallDir"
|
|
Write-Host "Path updated. You may need to restart your shell."
|
|
} else {
|
|
Write-Host "Install directory already in Path."
|
|
}
|
|
|
|
Write-Host "`nwitr ($LatestTag) installed successfully!"
|
|
Write-Host "Try running: witr --help"
|