230 lines
6.5 KiB
PowerShell
230 lines
6.5 KiB
PowerShell
# Memvid Installer for Windows
|
|
# v1 - System package managers only, install-if-missing
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Colors for output
|
|
function Write-Success {
|
|
Write-Host "✔ $args" -ForegroundColor Green
|
|
}
|
|
|
|
function Write-Error {
|
|
Write-Host "✖ $args" -ForegroundColor Red
|
|
}
|
|
|
|
function Write-Info {
|
|
Write-Host "→ $args" -ForegroundColor Cyan
|
|
}
|
|
|
|
function Write-Warning {
|
|
Write-Host "⚠ $args" -ForegroundColor Yellow
|
|
}
|
|
|
|
# Check if command exists
|
|
function Test-Command {
|
|
param([string]$Command)
|
|
$null -ne (Get-Command $Command -ErrorAction SilentlyContinue)
|
|
}
|
|
|
|
# Check for winget
|
|
function Test-Winget {
|
|
if (Test-Command winget) {
|
|
$wingetVersion = (winget --version)
|
|
Write-Success "winget already installed (version $wingetVersion)"
|
|
return $true
|
|
} else {
|
|
Write-Error "winget not found"
|
|
Write-Info "winget is required for v1 installer"
|
|
Write-Info "Please install winget first:"
|
|
Write-Info " https://aka.ms/getwinget"
|
|
Write-Info ""
|
|
Write-Info "Or install git and node manually, then run:"
|
|
Write-Info " npm install -g memvid-cli@latest"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Check for git
|
|
function Test-Git {
|
|
if (Test-Command git) {
|
|
$gitVersion = (git --version)
|
|
Write-Success "git already installed ($gitVersion)"
|
|
return $true
|
|
} else {
|
|
Write-Error "git not found"
|
|
return $false
|
|
}
|
|
}
|
|
|
|
# Check for node
|
|
function Test-Node {
|
|
if (Test-Command node) {
|
|
$nodeVersion = (node --version)
|
|
Write-Success "node already installed ($nodeVersion)"
|
|
|
|
if (Test-Command npm) {
|
|
$npmVersion = (npm --version)
|
|
Write-Success "npm already installed (version $npmVersion)"
|
|
return $true
|
|
} else {
|
|
Write-Error "npm not found (should come with node)"
|
|
return $false
|
|
}
|
|
} else {
|
|
Write-Error "node not found"
|
|
return $false
|
|
}
|
|
}
|
|
|
|
# Install git
|
|
function Install-Git {
|
|
Write-Info "Installing git using winget..."
|
|
|
|
try {
|
|
winget install --id Git.Git -e --silent --accept-package-agreements --accept-source-agreements
|
|
# Refresh PATH
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
|
|
|
|
if (Test-Command git) {
|
|
Write-Success "git installed successfully"
|
|
} else {
|
|
Write-Error "git installation completed but not found in PATH"
|
|
Write-Info "Please restart your terminal and run the installer again"
|
|
exit 1
|
|
}
|
|
} catch {
|
|
Write-Error "git installation failed: $_"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Install node (LTS)
|
|
function Install-Node {
|
|
Write-Info "Installing node (LTS) using winget..."
|
|
|
|
try {
|
|
winget install --id OpenJS.NodeJS.LTS -e --silent --accept-package-agreements --accept-source-agreements
|
|
# Refresh PATH
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
|
|
|
|
if (Test-Command node) {
|
|
$nodeVersion = (node --version)
|
|
$npmVersion = (npm --version)
|
|
Write-Success "node installed successfully ($nodeVersion)"
|
|
Write-Success "npm installed successfully (version $npmVersion)"
|
|
} else {
|
|
Write-Error "node installation completed but not found in PATH"
|
|
Write-Info "Please restart your terminal and run the installer again"
|
|
exit 1
|
|
}
|
|
} catch {
|
|
Write-Error "node installation failed: $_"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Check if memvid is already installed
|
|
function Test-Memvid {
|
|
if (Test-Command memvid) {
|
|
try {
|
|
$memvidVersion = memvid --version 2>$null
|
|
Write-Success "memvid already installed ($memvidVersion)"
|
|
return $true
|
|
} catch {
|
|
Write-Success "memvid already installed"
|
|
return $true
|
|
}
|
|
} else {
|
|
Write-Error "memvid not found"
|
|
return $false
|
|
}
|
|
}
|
|
|
|
# Install missing tools
|
|
function Install-Missing {
|
|
$needsGit = -not (Test-Git)
|
|
$needsNode = -not (Test-Node)
|
|
$needsMemvid = -not (Test-Memvid)
|
|
|
|
if (-not $needsGit -and -not $needsNode -and -not $needsMemvid) {
|
|
Write-Info "All dependencies are already installed"
|
|
return
|
|
}
|
|
|
|
# Show what will be installed
|
|
Write-Host ""
|
|
Write-Warning "The following tools will be installed:"
|
|
if ($needsGit) { Write-Host " - git" }
|
|
if ($needsNode) { Write-Host " - node (LTS)" }
|
|
if ($needsMemvid) { Write-Host " - memvid-cli (latest)" }
|
|
Write-Host ""
|
|
|
|
# Ask for confirmation
|
|
$response = Read-Host "Continue? [Y/n]"
|
|
if ($response -ne "" -and $response -notmatch "^[Yy]$") {
|
|
Write-Info "Installation cancelled"
|
|
exit 0
|
|
}
|
|
|
|
# Install missing tools
|
|
if ($needsGit) { Install-Git }
|
|
if ($needsNode) { Install-Node }
|
|
if ($needsMemvid) { Install-Memvid }
|
|
}
|
|
|
|
# Install memvid
|
|
function Install-Memvid {
|
|
Write-Info "Installing memvid globally..."
|
|
|
|
try {
|
|
npm install -g memvid-cli@latest
|
|
Write-Success "memvid installed successfully"
|
|
} catch {
|
|
Write-Error "memvid installation failed: $_"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Verify installation
|
|
function Verify-Installation {
|
|
Write-Info "Verifying installation..."
|
|
|
|
if (Test-Command memvid) {
|
|
try {
|
|
$memvidVersion = memvid --version 2>$null
|
|
Write-Success "memvid is installed and accessible"
|
|
Write-Info "Version: $memvidVersion"
|
|
Write-Host ""
|
|
Write-Success "Installation complete! You can now use 'memvid' command."
|
|
} catch {
|
|
Write-Success "memvid is installed and accessible"
|
|
Write-Host ""
|
|
Write-Success "Installation complete! You can now use 'memvid' command."
|
|
}
|
|
} else {
|
|
Write-Error "memvid verification failed"
|
|
Write-Info "The installation may have completed, but 'memvid' command is not in PATH"
|
|
Write-Info "Please check your npm global bin directory and add it to PATH if needed"
|
|
Write-Info "Or try: npm list -g memvid-cli"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Main execution
|
|
function Main {
|
|
Write-Host "Memvid Installer"
|
|
Write-Host "Checking system requirements…"
|
|
Write-Host ""
|
|
|
|
Test-Winget
|
|
Write-Host ""
|
|
|
|
Install-Missing
|
|
Write-Host ""
|
|
|
|
Verify-Installation
|
|
}
|
|
|
|
# Run main function
|
|
Main
|