140 lines
4.4 KiB
PowerShell
140 lines
4.4 KiB
PowerShell
#Requires -Version 5.1
|
|
<#
|
|
.SYNOPSIS
|
|
Claude Code - rychla instalace a nastaveni prostredi
|
|
.USAGE
|
|
# Windows PS:
|
|
.\Setup-ClaudeCode.ps1 -ApiKey "sk-ant-..." -RepoUrl "https://github.com/org/repo"
|
|
|
|
# S volitelnym cilove adresarem:
|
|
.\Setup-ClaudeCode.ps1 -ApiKey "sk-ant-..." -RepoUrl "https://github.com/org/repo" -WorkDir "C:\Projects"
|
|
#>
|
|
|
|
param(
|
|
[Parameter(Mandatory)]
|
|
[string] $ApiKey,
|
|
|
|
[Parameter(Mandatory)]
|
|
[string] $RepoUrl,
|
|
|
|
[string] $WorkDir = "$HOME\Projects"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
function Write-Step { param([string]$Msg) Write-Host "`n[SETUP] $Msg" -ForegroundColor Cyan }
|
|
function Write-OK { param([string]$Msg) Write-Host " OK: $Msg" -ForegroundColor Green }
|
|
function Write-Fail { param([string]$Msg) Write-Host " ERR: $Msg" -ForegroundColor Red; exit 1 }
|
|
|
|
# ------------------------------------------------------------
|
|
# 1. NODE.JS
|
|
# ------------------------------------------------------------
|
|
Write-Step "Checking Node.js..."
|
|
|
|
$nodeOk = $false
|
|
try {
|
|
$nodeVer = node --version 2>$null
|
|
if ($nodeVer -match 'v(\d+)' -and [int]$Matches[1] -ge 18) {
|
|
Write-OK "Node.js $nodeVer already installed"
|
|
$nodeOk = $true
|
|
}
|
|
} catch {}
|
|
|
|
if (-not $nodeOk) {
|
|
Write-Step "Installing Node.js via winget..."
|
|
try {
|
|
winget install OpenJS.NodeJS.LTS --accept-package-agreements --accept-source-agreements --silent
|
|
# Reload PATH
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" +
|
|
[System.Environment]::GetEnvironmentVariable("Path","User")
|
|
Write-OK "Node.js installed"
|
|
} catch {
|
|
Write-Fail "Node.js install failed: $_. Install manually from https://nodejs.org"
|
|
}
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# 2. CLAUDE CODE
|
|
# ------------------------------------------------------------
|
|
Write-Step "Checking Claude Code..."
|
|
|
|
$ccOk = $false
|
|
try {
|
|
$ccVer = claude --version 2>$null
|
|
Write-OK "Claude Code $ccVer already installed"
|
|
$ccOk = $true
|
|
} catch {}
|
|
|
|
if (-not $ccOk) {
|
|
Write-Step "Installing Claude Code..."
|
|
try {
|
|
npm install -g @anthropic-ai/claude-code
|
|
Write-OK "Claude Code installed"
|
|
} catch {
|
|
Write-Fail "Claude Code install failed: $_"
|
|
}
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# 3. API KEY
|
|
# ------------------------------------------------------------
|
|
Write-Step "Setting ANTHROPIC_API_KEY..."
|
|
|
|
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", $ApiKey, "User")
|
|
$env:ANTHROPIC_API_KEY = $ApiKey
|
|
Write-OK "API key set (User environment variable)"
|
|
|
|
# ------------------------------------------------------------
|
|
# 4. GIT
|
|
# ------------------------------------------------------------
|
|
Write-Step "Checking Git..."
|
|
|
|
try {
|
|
git --version | Out-Null
|
|
Write-OK "Git available"
|
|
} catch {
|
|
Write-Step "Installing Git via winget..."
|
|
try {
|
|
winget install Git.Git --accept-package-agreements --accept-source-agreements --silent
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" +
|
|
[System.Environment]::GetEnvironmentVariable("Path","User")
|
|
Write-OK "Git installed"
|
|
} catch {
|
|
Write-Fail "Git install failed: $_. Install manually from https://git-scm.com"
|
|
}
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# 5. CLONE REPO
|
|
# ------------------------------------------------------------
|
|
Write-Step "Cloning repository..."
|
|
|
|
New-Item -ItemType Directory -Path $WorkDir -Force | Out-Null
|
|
|
|
$repoName = ($RepoUrl -split '/')[-1] -replace '\.git$', ''
|
|
$targetPath = Join-Path $WorkDir $repoName
|
|
|
|
if (Test-Path $targetPath) {
|
|
Write-OK "Repo already exists at $targetPath — pulling latest..."
|
|
Push-Location $targetPath
|
|
git pull
|
|
Pop-Location
|
|
} else {
|
|
git clone $RepoUrl $targetPath
|
|
Write-OK "Cloned to $targetPath"
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# 6. LAUNCH
|
|
# ------------------------------------------------------------
|
|
Write-Host "`n========================================" -ForegroundColor Green
|
|
Write-Host " Setup complete!" -ForegroundColor Green
|
|
Write-Host " Repo: $targetPath" -ForegroundColor White
|
|
Write-Host " Run: cd '$targetPath' && claude" -ForegroundColor White
|
|
Write-Host "========================================`n" -ForegroundColor Green
|
|
|
|
$launch = Read-Host "Launch Claude Code now? (Y/n)"
|
|
if ($launch -ne 'n') {
|
|
Set-Location $targetPath
|
|
claude
|
|
}
|