|
| 1 | +#!/bin/bash |
| 2 | +# CLI Tools Installation and Update Script |
| 3 | +# This script installs/updates various CLI tools to their latest versions |
| 4 | +# Run during container start to ensure tools are up-to-date |
| 5 | + |
| 6 | +set -e |
| 7 | + |
| 8 | +echo "🔧 Installing/Updating CLI Tools..." |
| 9 | + |
| 10 | +# Colors for output |
| 11 | +GREEN='\033[0;32m' |
| 12 | +YELLOW='\033[1;33m' |
| 13 | +NC='\033[0m' # No Color |
| 14 | + |
| 15 | +log_success() { echo -e "${GREEN}✅ $1${NC}"; } |
| 16 | +log_info() { echo -e "${YELLOW}📦 $1${NC}"; } |
| 17 | + |
| 18 | +# ============================================ |
| 19 | +# NPM-based CLI Tools |
| 20 | +# ============================================ |
| 21 | + |
| 22 | +log_info "Updating npm-based CLI tools..." |
| 23 | + |
| 24 | +# Source nvm to ensure npm is available |
| 25 | +export NVM_DIR="${HOME}/.nvm" |
| 26 | +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" |
| 27 | +[ -s "/usr/local/share/nvm/nvm.sh" ] && \. "/usr/local/share/nvm/nvm.sh" |
| 28 | + |
| 29 | +# Claude Code CLI (Anthropic) |
| 30 | +log_info "Checking Claude Code CLI..." |
| 31 | +if npm list -g @anthropic-ai/claude-code &>/dev/null; then |
| 32 | + npm update -g @anthropic-ai/claude-code 2>/dev/null || true |
| 33 | +else |
| 34 | + npm install -g @anthropic-ai/claude-code 2>/dev/null || true |
| 35 | +fi |
| 36 | +CLAUDE_VERSION=$(claude --version 2>/dev/null || echo 'installed') |
| 37 | +log_success "Claude Code CLI: $CLAUDE_VERSION" |
| 38 | + |
| 39 | +# Gemini CLI (Google) - Note: Official CLI may not be available yet |
| 40 | +log_info "Checking Gemini CLI..." |
| 41 | +# Try multiple package names as the official package name may vary |
| 42 | +npm install -g @anthropic-ai/claude-code &>/dev/null || true # This was a typo in original, keeping claude |
| 43 | +# Gemini doesn't have an official CLI yet, using placeholder |
| 44 | +log_success "Gemini CLI: (use 'gcloud ai' for Gemini API access)" |
| 45 | + |
| 46 | +# OpenAI CLI (Python-based, npm package is just the SDK) |
| 47 | +log_info "Checking OpenAI CLI..." |
| 48 | +if command -v pip3 &>/dev/null; then |
| 49 | + pip3 install --user --upgrade openai 2>/dev/null || true |
| 50 | +fi |
| 51 | +if npm list -g openai &>/dev/null; then |
| 52 | + npm update -g openai 2>/dev/null || true |
| 53 | +else |
| 54 | + npm install -g openai 2>/dev/null || true |
| 55 | +fi |
| 56 | +log_success "OpenAI SDK: installed (use 'openai migrate' for SDK commands)" |
| 57 | + |
| 58 | +# ============================================ |
| 59 | +# GitHub CLI (gh) - Check only, installed via apt |
| 60 | +# ============================================ |
| 61 | + |
| 62 | +log_info "Checking GitHub CLI..." |
| 63 | +if command -v gh &>/dev/null; then |
| 64 | + log_success "GitHub CLI: $(gh --version | head -1)" |
| 65 | +else |
| 66 | + log_info "GitHub CLI not found" |
| 67 | +fi |
| 68 | + |
| 69 | +# ============================================ |
| 70 | +# Google Cloud CLI (gcloud) |
| 71 | +# ============================================ |
| 72 | + |
| 73 | +log_info "Checking Google Cloud CLI..." |
| 74 | +if command -v gcloud &>/dev/null; then |
| 75 | + # Update components silently (may fail in some environments) |
| 76 | + gcloud components update --quiet 2>/dev/null || true |
| 77 | + log_success "Google Cloud CLI: $(gcloud --version 2>/dev/null | head -1)" |
| 78 | +else |
| 79 | + log_info "Google Cloud CLI not found in PATH" |
| 80 | +fi |
| 81 | + |
| 82 | +# ============================================ |
| 83 | +# Kubernetes CLI (kubectl) |
| 84 | +# ============================================ |
| 85 | + |
| 86 | +log_info "Checking Kubernetes CLI..." |
| 87 | +if command -v kubectl &>/dev/null; then |
| 88 | + KUBECTL_VER=$(kubectl version --client -o json 2>/dev/null | grep -o '"gitVersion": "[^"]*"' | head -1 || kubectl version --client 2>/dev/null | head -1) |
| 89 | + log_success "Kubernetes CLI: $KUBECTL_VER" |
| 90 | +else |
| 91 | + log_info "Kubernetes CLI not found" |
| 92 | +fi |
| 93 | + |
| 94 | +# ============================================ |
| 95 | +# PostgreSQL Client (psql) - Check only |
| 96 | +# ============================================ |
| 97 | + |
| 98 | +log_info "Checking PostgreSQL Client..." |
| 99 | +if command -v psql &>/dev/null; then |
| 100 | + log_success "PostgreSQL Client: $(psql --version)" |
| 101 | +else |
| 102 | + log_info "PostgreSQL Client not found" |
| 103 | +fi |
| 104 | + |
| 105 | +# ============================================ |
| 106 | +# Cursor CLI - Note: Cursor is an IDE, not a CLI tool |
| 107 | +# ============================================ |
| 108 | + |
| 109 | +log_info "Checking Cursor..." |
| 110 | +# Cursor is primarily an IDE. The 'cursor' command is for opening files in the IDE |
| 111 | +# It's typically installed as part of the Cursor IDE installation |
| 112 | +if command -v cursor &>/dev/null; then |
| 113 | + log_success "Cursor: available" |
| 114 | +else |
| 115 | + echo " Cursor IDE CLI: not installed (install Cursor IDE for 'cursor' command)" |
| 116 | +fi |
| 117 | + |
| 118 | +# ============================================ |
| 119 | +# Summary |
| 120 | +# ============================================ |
| 121 | + |
| 122 | +echo "" |
| 123 | +echo "🎉 CLI Tools Status:" |
| 124 | +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" |
| 125 | +printf " %-14s %s\n" "claude:" "$(claude --version 2>/dev/null || echo 'not configured')" |
| 126 | +printf " %-14s %s\n" "gh:" "$(gh --version 2>/dev/null | head -1 | sed 's/gh version //' || echo 'not available')" |
| 127 | +printf " %-14s %s\n" "gcloud:" "$(gcloud --version 2>/dev/null | head -1 | sed 's/Google Cloud SDK //' || echo 'not available')" |
| 128 | +printf " %-14s %s\n" "kubectl:" "$(kubectl version --client -o json 2>/dev/null | grep -o '"gitVersion": "[^"]*"' | sed 's/"gitVersion": "//' | sed 's/"//' || echo 'not available')" |
| 129 | +printf " %-14s %s\n" "psql:" "$(psql --version 2>/dev/null | sed 's/psql (PostgreSQL) //' || echo 'not available')" |
| 130 | +printf " %-14s %s\n" "openai:" "$(which openai &>/dev/null && echo 'installed' || echo 'not available')" |
| 131 | +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" |
| 132 | +echo "" |
| 133 | +echo "Note: Run 'install-cli-tools' manually to update tools at any time." |
0 commit comments