caxe 0.2.0

A modern C/C++ project manager that cuts through build system complexity. Zero config, smart dependencies, and parallel builds.
$ErrorActionPreference = "Stop"

$Repo = "dhimasardinata/caxe"
$InstallDir = "$env:USERPROFILE\.cx\bin"
$BinName = "cx.exe"

Write-Host "Installing caxe (cx)..." -ForegroundColor Cyan

# 1. Create Install Directory
if (!(Test-Path $InstallDir)) {
    New-Item -ItemType Directory -Force -Path $InstallDir | Out-Null
}

# 2. Get Latest Release Info
Write-Host "Fetching latest release..."
try {
    $ReleaseUrl = "https://api.github.com/repos/$Repo/releases/latest"
    $Latest = Invoke-RestMethod -Uri $ReleaseUrl
    $Tag = $Latest.tag_name
    Write-Host "Latest version: $Tag" -ForegroundColor Green
} catch {
    Write-Error "Failed to fetch release info. Check your internet connection."
}

# 3. Determine Download URL (Windows)
$Asset = $Latest.assets | Where-Object { $_.name -like "*.exe" } | Select-Object -First 1

if (!$Asset) {
    Write-Error "No Windows binary found in the latest release."
}

$DownloadUrl = $Asset.browser_download_url
$DestPath = "$InstallDir\$BinName"

# 4. Download
Write-Host "Downloading from $DownloadUrl..."
Invoke-WebRequest -Uri $DownloadUrl -OutFile $DestPath

# 5. Add to PATH
$UserPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($UserPath -notlike "*$InstallDir*") {
    Write-Host "Adding $InstallDir to User PATH..."
    [Environment]::SetEnvironmentVariable("Path", "$UserPath;$InstallDir", "User")
    Write-Host "Path updated. You may need to restart your terminal." -ForegroundColor Yellow
} else {
    Write-Host "$InstallDir is already in PATH."
}

Write-Host "Success! Run 'cx --version' to get started." -ForegroundColor Green