Files
OpenQode/scripts/download-opencode.ps1
2025-12-14 00:40:14 +04:00

110 lines
3.9 KiB
PowerShell

# OpenCode Binary Download Script
# Downloads the required opencode.exe binary for OpenQode
param(
[string]$BinaryUrl = "https://github.com/sst/opencode/releases/latest/download/opencode-windows-x64.exe",
[string]$BinaryPath = "",
[switch]$Force = $false,
[switch]$NonInteractive = $false
)
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$OpenQodeDir = Split-Path -Parent $ScriptDir
if (-not $BinaryPath) {
$BinaryPath = Join-Path $OpenQodeDir "bin\\opencode.exe"
}
# Back-compat variable names used below
$binaryUrl = $BinaryUrl
$binaryPath = $BinaryPath
Write-Host "OpenQode - Downloading OpenCode Binary" -ForegroundColor Cyan
Write-Host "======================================" -ForegroundColor Cyan
Write-Host ""
# Create bin directory if it doesn't exist
$BinDir = Split-Path -Parent $BinaryPath
if (-not (Test-Path $BinDir)) {
Write-Host "Creating bin directory..." -ForegroundColor Yellow
New-Item -ItemType Directory -Path $BinDir -Force | Out-Null
}
# Check if binary already exists
if (Test-Path $BinaryPath) {
if (-not $Force) {
Write-Host "opencode.exe already exists at: $BinaryPath" -ForegroundColor Yellow
Write-Host "Skipping download." -ForegroundColor Gray
return
}
if (-not $NonInteractive) {
$overwrite = Read-Host "opencode.exe already exists. Overwrite? (y/N)"
if ($overwrite -ne "y" -and $overwrite -ne "Y") {
Write-Host "Download cancelled." -ForegroundColor Yellow
return
}
} else {
Write-Host "Overwriting existing opencode.exe..." -ForegroundColor Yellow
}
}
Write-Host "Downloading OpenCode binary..." -ForegroundColor Green
Write-Host "URL: $binaryUrl" -ForegroundColor Gray
try {
# Download the file
Invoke-WebRequest -Uri $BinaryUrl -OutFile $BinaryPath -UseBasicParsing
if (-not (Test-Path $BinaryPath)) {
throw "Binary not found after download"
}
$fileSize = (Get-Item $BinaryPath).Length / 1MB
Write-Host "Download completed successfully!" -ForegroundColor Green
Write-Host "File size: $([math]::Round($fileSize, 2)) MB" -ForegroundColor White
Write-Host "Location: $BinaryPath" -ForegroundColor White
Write-Host ""
Write-Host "You can now run OpenQode using:" -ForegroundColor Cyan
Write-Host " .\\OpenQode.bat" -ForegroundColor White
Write-Host " .\\OpenQode.ps1" -ForegroundColor White
if (-not $NonInteractive) {
Write-Host ""
Write-Host "Press any key to exit..." -ForegroundColor Cyan
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
return
if (Test-Path $binaryPath) {
$fileSize = (Get-Item $binaryPath).Length / 1MB
Write-Host "✅ Download completed successfully!" -ForegroundColor Green
Write-Host "File size: $([math]::Round($fileSize, 2)) MB" -ForegroundColor White
Write-Host "Location: $binaryPath" -ForegroundColor White
Write-Host ""
Write-Host "You can now run OpenQode using:" -ForegroundColor Cyan
Write-Host " .\OpenQode.bat" -ForegroundColor White
Write-Host " .\OpenQode.ps1" -ForegroundColor White
} else {
Write-Host "❌ Download failed - file not found after download" -ForegroundColor Red
exit 1
}
} catch {
Write-Host "❌ Download failed:" -ForegroundColor Red
Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red
Write-Host ""
Write-Host "Alternative: Download manually from:" -ForegroundColor Yellow
Write-Host "https://github.com/sst/opencode/releases" -ForegroundColor White
if (-not $NonInteractive) {
Write-Host ""
Write-Host "Press any key to exit..." -ForegroundColor Cyan
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
exit 1
}
throw
}
Write-Host ""
Write-Host "Press any key to exit..." -ForegroundColor Cyan
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")