param( [string]$Version = $env:VERSION ) if (-not $Version) { Write-Error "Provide -Version or set VERSION env var, e.g. VERSION=0.1.0" exit 1 } $Version = $Version.TrimStart('v') $GITEA_BASE = "https://repos.gmgauthier.com/gmgauthier/gralculator" $OS = if ($IsWindows) { "windows" } elseif ($IsMacOS) { "darwin" } else { "linux" } $ARCH = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq "X64") { "amd64" } else { "arm64" } $ASSET = "gralculator-$OS-$ARCH-v$Version.tar.gz" Write-Host "Installing gralculator $Version for $OS/$ARCH..." $tempDir = New-TemporaryFile | % { rm $_; mkdir $_ } try { Push-Location $tempDir Write-Host "Downloading $ASSET..." Invoke-WebRequest -Uri "$GITEA_BASE/releases/download/v$Version/$ASSET" -OutFile "asset.tar.gz" Write-Host "Downloading checksums.txt..." Invoke-WebRequest -Uri "$GITEA_BASE/releases/download/v$Version/checksums.txt" -OutFile "checksums.txt" # Extract (tar on Windows via tar if available, or 7z, but assume tar in modern PS) Write-Host "Extracting..." tar -xzf asset.tar.gz $binary = "gralculator-$OS-$ARCH" if ($OS -eq "windows") { $binary += ".exe" } $installDir = "$HOME\.local\bin" New-Item -ItemType Directory -Force -Path $installDir | Out-Null Move-Item -Force $binary "$installDir\gralculator.exe" -ErrorAction SilentlyContinue Move-Item -Force $binary "$installDir\gralculator" -ErrorAction SilentlyContinue Write-Host "✅ gralculator $Version installed to $installDir\gralculator" & "$installDir\gralculator" -v } finally { Pop-Location Remove-Item -Recurse -Force $tempDir -ErrorAction SilentlyContinue }