diff --git a/install.ps1 b/install.ps1 deleted file mode 100644 index cb1e73f4..00000000 --- a/install.ps1 +++ /dev/null @@ -1,122 +0,0 @@ -# game-ci CLI installer for Windows -# Usage: irm https://raw.githubusercontent.com/game-ci/unity-builder/main/install.ps1 | iex -# -# Environment variables: -# GAME_CI_VERSION - Install a specific version (e.g., v2.0.0). Defaults to latest. -# GAME_CI_INSTALL - Installation directory. Defaults to $HOME\.game-ci\bin. - -$ErrorActionPreference = 'Stop' - -$Repo = "game-ci/unity-builder" -$InstallDir = if ($env:GAME_CI_INSTALL) { $env:GAME_CI_INSTALL } else { Join-Path $env:USERPROFILE ".game-ci\bin" } -$AssetName = "game-ci-windows-x64.exe" -$BinaryName = "game-ci.exe" - -function Write-Info($Message) { - Write-Host "info: " -ForegroundColor Green -NoNewline - Write-Host $Message -} - -function Write-Warn($Message) { - Write-Host "warn: " -ForegroundColor Yellow -NoNewline - Write-Host $Message -} - -# Determine version -if ($env:GAME_CI_VERSION) { - $Version = $env:GAME_CI_VERSION - Write-Info "Using specified version: $Version" -} else { - Write-Info "Fetching latest release..." - try { - $Release = Invoke-RestMethod "https://api.github.com/repos/$Repo/releases/latest" - $Version = $Release.tag_name - } catch { - Write-Host "error: Could not determine latest version. Check https://github.com/$Repo/releases" -ForegroundColor Red - exit 1 - } -} - -$DownloadUrl = "https://github.com/$Repo/releases/download/$Version/$AssetName" -$ChecksumUrl = "https://github.com/$Repo/releases/download/$Version/checksums.txt" -$BinaryPath = Join-Path $InstallDir $BinaryName - -Write-Host "" -Write-Info "Installing game-ci $Version (windows-x64)" -Write-Info " from: $DownloadUrl" -Write-Info " to: $BinaryPath" -Write-Host "" - -# Create install directory -if (-not (Test-Path $InstallDir)) { - New-Item -ItemType Directory -Force -Path $InstallDir | Out-Null -} - -# Download binary -try { - Invoke-WebRequest -Uri $DownloadUrl -OutFile $BinaryPath -UseBasicParsing -} catch { - if ($_.Exception.Response.StatusCode -eq 404) { - Write-Host "error: Release asset not found: $AssetName ($Version)" -ForegroundColor Red - Write-Host " Check available assets at https://github.com/$Repo/releases/tag/$Version" -ForegroundColor Red - } else { - Write-Host "error: Download failed: $_" -ForegroundColor Red - } - exit 1 -} - -# Verify checksum -try { - $Checksums = Invoke-WebRequest -Uri $ChecksumUrl -UseBasicParsing | Select-Object -ExpandProperty Content - $ExpectedLine = $Checksums -split "`n" | Where-Object { $_ -match $AssetName } | Select-Object -First 1 - if ($ExpectedLine) { - $ExpectedHash = ($ExpectedLine -split '\s+')[0] - $ActualHash = (Get-FileHash -Path $BinaryPath -Algorithm SHA256).Hash.ToLower() - if ($ExpectedHash -eq $ActualHash) { - Write-Info "Checksum verified (SHA256)" - } else { - Write-Host "error: Checksum verification failed!" -ForegroundColor Red - Write-Host " Expected: $ExpectedHash" -ForegroundColor Red - Write-Host " Got: $ActualHash" -ForegroundColor Red - Remove-Item $BinaryPath -Force - exit 1 - } - } -} catch { - # Checksums not available for this release; continue without verification -} - -# Verify the binary works -try { - $VersionOutput = & $BinaryPath version 2>&1 - Write-Info "Verified: $($VersionOutput | Select-Object -First 1)" -} catch { - Write-Warn "Binary downloaded but could not verify. It may still work." -} - -Write-Host "" -Write-Host "game-ci installed successfully!" -ForegroundColor Green -BackgroundColor Black -Write-Host "" - -# Check PATH and offer to add -$UserPath = [Environment]::GetEnvironmentVariable('PATH', 'User') -if ($UserPath -notlike "*$InstallDir*") { - Write-Warn "game-ci is not in your PATH." - Write-Host "" - Write-Host "To add it permanently, run:" -ForegroundColor Yellow - Write-Host "" - Write-Host " [Environment]::SetEnvironmentVariable('PATH', ""$InstallDir;"" + [Environment]::GetEnvironmentVariable('PATH', 'User'), 'User')" - Write-Host "" - Write-Info "Then restart your terminal." - - # Offer to add automatically - Write-Host "" - $AddToPath = Read-Host "Add to PATH now? (Y/n)" - if ($AddToPath -ne 'n' -and $AddToPath -ne 'N') { - [Environment]::SetEnvironmentVariable('PATH', "$InstallDir;$UserPath", 'User') - $env:PATH = "$InstallDir;$env:PATH" - Write-Info "Added to PATH. You can now run: game-ci --help" - } -} else { - Write-Info "game-ci is already in your PATH. Run: game-ci --help" -} diff --git a/install.sh b/install.sh deleted file mode 100644 index 68c4cfed..00000000 --- a/install.sh +++ /dev/null @@ -1,196 +0,0 @@ -#!/bin/sh -# game-ci CLI installer -# Usage: curl -fsSL https://raw.githubusercontent.com/game-ci/unity-builder/main/install.sh | sh -# -# Environment variables: -# GAME_CI_VERSION - Install a specific version (e.g., v2.0.0). Defaults to latest. -# GAME_CI_INSTALL - Installation directory. Defaults to ~/.game-ci/bin. - -set -e - -REPO="game-ci/unity-builder" -INSTALL_DIR="${GAME_CI_INSTALL:-$HOME/.game-ci/bin}" -BINARY_NAME="game-ci" - -# Colors (disabled if not a terminal) -if [ -t 1 ]; then - BOLD='\033[1m' - GREEN='\033[0;32m' - YELLOW='\033[0;33m' - RED='\033[0;31m' - RESET='\033[0m' -else - BOLD='' - GREEN='' - YELLOW='' - RED='' - RESET='' -fi - -info() { - printf "${GREEN}info${RESET}: %s\n" "$1" -} - -warn() { - printf "${YELLOW}warn${RESET}: %s\n" "$1" -} - -error() { - printf "${RED}error${RESET}: %s\n" "$1" >&2 - exit 1 -} - -# Detect OS and architecture -detect_platform() { - OS="$(uname -s)" - ARCH="$(uname -m)" - - case "$OS" in - Linux*) PLATFORM="linux" ;; - Darwin*) PLATFORM="macos" ;; - MINGW*|MSYS*|CYGWIN*) - PLATFORM="windows" - warn "For Windows, consider using install.ps1 instead:" - warn " irm https://raw.githubusercontent.com/game-ci/unity-builder/main/install.ps1 | iex" - ;; - *) error "Unsupported operating system: $OS" ;; - esac - - case "$ARCH" in - x86_64|amd64) ARCH="x64" ;; - aarch64|arm64) ARCH="arm64" ;; - *) error "Unsupported architecture: $ARCH" ;; - esac - - ASSET_NAME="game-ci-${PLATFORM}-${ARCH}" - if [ "$PLATFORM" = "windows" ]; then - ASSET_NAME="${ASSET_NAME}.exe" - BINARY_NAME="game-ci.exe" - fi -} - -# Get latest release tag from GitHub API -get_latest_version() { - if [ -n "$GAME_CI_VERSION" ]; then - VERSION="$GAME_CI_VERSION" - info "Using specified version: $VERSION" - return - fi - - info "Fetching latest release..." - - if command -v curl > /dev/null 2>&1; then - VERSION=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/') - elif command -v wget > /dev/null 2>&1; then - VERSION=$(wget -qO- "https://api.github.com/repos/${REPO}/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/') - else - error "Neither curl nor wget found. Please install one of them." - fi - - if [ -z "$VERSION" ]; then - error "Could not determine latest version. Check https://github.com/${REPO}/releases" - fi -} - -# Download and install the binary -install() { - DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${VERSION}/${ASSET_NAME}" - - printf "\n" - info "Installing game-ci ${VERSION} (${PLATFORM}-${ARCH})" - info " from: ${DOWNLOAD_URL}" - info " to: ${INSTALL_DIR}/${BINARY_NAME}" - printf "\n" - - mkdir -p "$INSTALL_DIR" - - # Download with progress - if command -v curl > /dev/null 2>&1; then - HTTP_CODE=$(curl -fSL "$DOWNLOAD_URL" -o "${INSTALL_DIR}/${BINARY_NAME}" -w "%{http_code}" 2>/dev/null) || true - if [ "$HTTP_CODE" = "404" ]; then - error "Release asset not found: ${ASSET_NAME} (${VERSION}). Check available assets at https://github.com/${REPO}/releases/tag/${VERSION}" - elif [ ! -f "${INSTALL_DIR}/${BINARY_NAME}" ]; then - error "Download failed. URL: ${DOWNLOAD_URL}" - fi - elif command -v wget > /dev/null 2>&1; then - wget -q "$DOWNLOAD_URL" -O "${INSTALL_DIR}/${BINARY_NAME}" || error "Download failed. URL: ${DOWNLOAD_URL}" - fi - - chmod +x "${INSTALL_DIR}/${BINARY_NAME}" - - # Verify the binary works - if "${INSTALL_DIR}/${BINARY_NAME}" version > /dev/null 2>&1; then - INSTALLED_VERSION=$("${INSTALL_DIR}/${BINARY_NAME}" version 2>&1 | head -1) - info "Verified: ${INSTALLED_VERSION}" - else - warn "Binary downloaded but could not verify. It may still work." - fi - - printf "\n" - printf "${BOLD}game-ci installed successfully!${RESET}\n" - printf "\n" - - # Check if install dir is in PATH - case ":$PATH:" in - *":${INSTALL_DIR}:"*) - info "game-ci is already in your PATH. Run: game-ci --help" - ;; - *) - SHELL_NAME=$(basename "$SHELL" 2>/dev/null || echo "sh") - case "$SHELL_NAME" in - zsh) PROFILE="~/.zshrc" ;; - bash) PROFILE="~/.bashrc" ;; - fish) PROFILE="~/.config/fish/config.fish" ;; - *) PROFILE="~/.profile" ;; - esac - - printf "${YELLOW}Add game-ci to your PATH by adding this to ${PROFILE}:${RESET}\n" - printf "\n" - if [ "$SHELL_NAME" = "fish" ]; then - printf " set -gx PATH \"%s\" \$PATH\n" "$INSTALL_DIR" - else - printf " export PATH=\"%s:\$PATH\"\n" "$INSTALL_DIR" - fi - printf "\n" - info "Then restart your shell or run: source ${PROFILE}" - ;; - esac -} - -# Verify checksum if checksums.txt is available -verify_checksum() { - if ! command -v sha256sum > /dev/null 2>&1; then - return 0 - fi - - CHECKSUM_URL="https://github.com/${REPO}/releases/download/${VERSION}/checksums.txt" - - CHECKSUMS="" - if command -v curl > /dev/null 2>&1; then - CHECKSUMS=$(curl -fsSL "$CHECKSUM_URL" 2>/dev/null) || return 0 - elif command -v wget > /dev/null 2>&1; then - CHECKSUMS=$(wget -qO- "$CHECKSUM_URL" 2>/dev/null) || return 0 - fi - - if [ -z "$CHECKSUMS" ]; then - return 0 - fi - - EXPECTED=$(echo "$CHECKSUMS" | grep "$ASSET_NAME" | awk '{print $1}') - if [ -z "$EXPECTED" ]; then - return 0 - fi - - ACTUAL=$(sha256sum "${INSTALL_DIR}/${BINARY_NAME}" | awk '{print $1}') - if [ "$EXPECTED" != "$ACTUAL" ]; then - error "Checksum verification failed!\n Expected: ${EXPECTED}\n Got: ${ACTUAL}" - fi - - info "Checksum verified (SHA256)" -} - -# Main -detect_platform -get_latest_version -install -verify_checksum