| |
| |
| |
| |
| |
| |
|
|
| if (-not $Version) { $Version = "" } |
| if (-not $DryRun) { $DryRun = $false } |
|
|
| $ErrorActionPreference = "Continue" |
|
|
| $Repo = "lbjlaq/Antigravity-Manager" |
| $AppName = "Antigravity Tools" |
| $GithubApi = "https://api.github.com/repos/$Repo/releases" |
| $script:ReleaseVersion = "" |
| $script:DownloadUrl = "" |
| $script:Filename = "" |
| $script:HasError = $false |
|
|
| |
| function Write-ColorOutput { |
| param([string]$ForegroundColor, [string]$Message) |
| Write-Host $Message -ForegroundColor $ForegroundColor |
| } |
|
|
| function Info { Write-ColorOutput "Cyan" "[INFO] $args" } |
| function Success { Write-ColorOutput "Green" "[OK] $args" } |
| function Warn { Write-ColorOutput "Yellow" "[WARN] $args" } |
| function Script-Error { |
| Write-ColorOutput "Red" "[ERROR] $args" |
| $script:HasError = $true |
| } |
|
|
| function Wait-AndExit { |
| param([int]$ExitCode = 0) |
| Write-Host "" |
| Write-Host "Press any key to exit..." -ForegroundColor Gray |
| $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") |
| exit $ExitCode |
| } |
|
|
| function Get-ReleaseVersion { |
| if ($Version) { |
| $script:ReleaseVersion = $Version |
| Info "Using specified version: v$($script:ReleaseVersion)" |
| return $true |
| } |
|
|
| Info "Fetching latest version..." |
|
|
| |
| try { |
| $release = Invoke-RestMethod -Uri "$GithubApi/latest" -Headers @{ |
| "User-Agent" = "Antigravity-Installer" |
| "Accept" = "application/vnd.github.v3+json" |
| } -TimeoutSec 10 |
| $script:ReleaseVersion = $release.tag_name -replace "^v", "" |
| Info "Latest version: v$($script:ReleaseVersion)" |
| return $true |
| } catch { |
| Warn "GitHub API failed (rate limit?), trying fallback..." |
| } |
|
|
| |
| try { |
| $updaterJson = Invoke-RestMethod -Uri "https://github.com/$Repo/releases/latest/download/updater.json" -TimeoutSec 10 |
| $script:ReleaseVersion = $updaterJson.version -replace "^v", "" |
| Info "Latest version (from updater.json): v$($script:ReleaseVersion)" |
| return $true |
| } catch { |
| Warn "Fallback failed, trying redirect method..." |
| } |
|
|
| |
| try { |
| Invoke-WebRequest -Uri "https://github.com/$Repo/releases/latest" -MaximumRedirection 0 -ErrorAction SilentlyContinue -UseBasicParsing |
| } catch { |
| $redirectUrl = $_.Exception.Response.Headers.Location |
| if ($redirectUrl -and $redirectUrl -match "/tag/v?(.+)$") { |
| $script:ReleaseVersion = $Matches[1] |
| Info "Latest version (from redirect): v$($script:ReleaseVersion)" |
| return $true |
| } |
| } |
|
|
| Script-Error "Failed to determine latest version. Try specifying version manually:" |
| Write-Host ' $Version = "4.1.32"; irm https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/install.ps1 | iex' -ForegroundColor Yellow |
| return $false |
| } |
|
|
| function Get-DownloadUrl { |
| |
| $script:DownloadUrl = "https://github.com/$Repo/releases/download/v$($script:ReleaseVersion)/Antigravity.Tools_$($script:ReleaseVersion)_x64-setup.exe" |
| $script:Filename = "Antigravity.Tools_$($script:ReleaseVersion)_x64-setup.exe" |
|
|
| Info "Download URL: $($script:DownloadUrl)" |
| } |
|
|
| function Install-App { |
| $tempDir = [System.IO.Path]::GetTempPath() |
| $downloadPath = Join-Path $tempDir $script:Filename |
|
|
| Info "Downloading $AppName v$($script:ReleaseVersion)..." |
|
|
| if ($DryRun) { |
| Write-ColorOutput "Yellow" "[DRY-RUN] Invoke-WebRequest -Uri $($script:DownloadUrl) -OutFile $downloadPath" |
| } else { |
| try { |
| $ProgressPreference = 'Continue' |
| Invoke-WebRequest -Uri $script:DownloadUrl -OutFile $downloadPath -UseBasicParsing |
| } catch { |
| Script-Error "Download failed: $_" |
| Script-Error "URL: $($script:DownloadUrl)" |
| return $false |
| } |
| } |
|
|
| |
| if (-not $DryRun -and -not (Test-Path $downloadPath)) { |
| Script-Error "Downloaded file not found at $downloadPath" |
| return $false |
| } |
|
|
| Success "Downloaded to $downloadPath" |
|
|
| Info "Running installer..." |
|
|
| if ($DryRun) { |
| Write-ColorOutput "Yellow" "[DRY-RUN] Start-Process -FilePath $downloadPath -Wait" |
| } else { |
| try { |
| Start-Process -FilePath $downloadPath -Wait |
| } catch { |
| Script-Error "Installation failed: $_" |
| return $false |
| } |
| } |
|
|
| |
| if (-not $DryRun -and (Test-Path $downloadPath)) { |
| Remove-Item $downloadPath -Force |
| Info "Cleaned up installer file" |
| } |
|
|
| return $true |
| } |
|
|
| |
| Write-Host "" |
| Write-ColorOutput "Cyan" "========================================" |
| Write-ColorOutput "Cyan" " $AppName Installer" |
| Write-ColorOutput "Cyan" "========================================" |
| Write-Host "" |
|
|
| |
| if (-not (Get-ReleaseVersion)) { |
| Wait-AndExit 1 |
| } |
|
|
| |
| Get-DownloadUrl |
|
|
| |
| if (-not (Install-App)) { |
| Wait-AndExit 1 |
| } |
|
|
| if ($script:HasError) { |
| Wait-AndExit 1 |
| } |
|
|
| Write-Host "" |
| Success "Installation complete!" |
| Write-Host "" |
| Info "Launch '$AppName' from the Start Menu or desktop shortcut." |
| Write-Host "" |
|
|
| |
| if ($Host.Name -eq "ConsoleHost") { |
| Wait-AndExit 0 |
| } |
|
|