feat: add idempotent install.sh bootstrap script

- checks Node >= 20, installs Pi if missing, runs pi install with PI_KIT_REPO (single source of the repo address, no version ref)
- verifies API key env var (Anthropic/proxy TODO), prints where to get it
- prints cheat sheet: run, update, commands, internal course link (TODO)
This commit is contained in:
dev
2026-07-16 11:00:47 +03:00
parent 75e9bf85ba
commit 927010e4bf
Executable
+91
View File
@@ -0,0 +1,91 @@
#!/usr/bin/env bash
#
# pi-kit bootstrap — one-shot setup for new engineers. Idempotent: safe to re-run.
#
# Usage:
# curl -fsSL https://git.codelab.vc/ai/pi-kit/-/raw/main/install.sh | bash
# # or, from a checkout:
# ./install.sh
#
set -euo pipefail
# ---------------------------------------------------------------------------
# The ONLY place the repository address appears. No version ref on purpose, so
# `pi update --extensions` always pulls the latest main.
# ---------------------------------------------------------------------------
PI_KIT_REPO="git:git.codelab.vc/ai/pi-kit"
MIN_NODE_MAJOR=20
INTERNAL_COURSE_URL="TODO: ссылка на внутренний курс по Pi"
info() { printf '\033[1;34m==>\033[0m %s\n' "$*"; }
warn() { printf '\033[1;33m[!]\033[0m %s\n' "$*"; }
err() { printf '\033[1;31m[x]\033[0m %s\n' "$*" >&2; }
# --- 1. Node.js -------------------------------------------------------------
if ! command -v node >/dev/null 2>&1; then
err "Node.js не найден. Установи Node.js >= ${MIN_NODE_MAJOR} (https://nodejs.org) и запусти скрипт снова."
exit 1
fi
NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]')"
if [ "$NODE_MAJOR" -lt "$MIN_NODE_MAJOR" ]; then
err "Нужен Node.js >= ${MIN_NODE_MAJOR}, а установлен $(node -v). Обнови Node.js и запусти скрипт снова."
exit 1
fi
info "Node.js $(node -v) — ок."
# --- 2. Pi ------------------------------------------------------------------
if command -v pi >/dev/null 2>&1; then
info "Pi уже установлен ($(pi --version 2>/dev/null || echo 'версия неизвестна'))."
else
info "Ставлю Pi..."
curl -fsSL https://pi.dev/install.sh | sh
# Make pi available in the current shell if the installer added a new PATH dir.
if ! command -v pi >/dev/null 2>&1; then
export PATH="$HOME/.local/bin:$PATH"
fi
if ! command -v pi >/dev/null 2>&1; then
err "Pi установлен, но не найден в PATH. Открой новый терминал (или поправь PATH) и запусти скрипт снова."
exit 1
fi
fi
# --- 3. Install the corporate package --------------------------------------
info "Устанавливаю корпоративный пакет: ${PI_KIT_REPO}"
pi install "$PI_KIT_REPO"
info "Пакет установлен. Обновляться потом: pi update --extensions"
# --- 4. API keys ------------------------------------------------------------
# TODO: если используется корпоративный прокси-провайдер вместо прямого Anthropic —
# заменить проверку ниже на нужную переменную (напр. PI_PROXY_TOKEN) и адрес.
if [ -n "${ANTHROPIC_API_KEY:-}" ]; then
info "ANTHROPIC_API_KEY найден в окружении — ок."
else
warn "Не найден ANTHROPIC_API_KEY (или ключ корпоративного прокси-провайдера)."
cat <<'EOF'
Где взять ключ:
TODO: инструкция компании — портал доступов / прокси-провайдер.
Затем добавь в свой ~/.zshrc или ~/.bashrc, например:
export ANTHROPIC_API_KEY="..."
Также для скилла работы с трекером понадобятся:
export TRACKER_URL="..." # адрес трекера (или возьмётся из корп. контекста)
export JIRA_TOKEN="..." # personal access token трекера
EOF
fi
# --- 5. Cheat sheet ---------------------------------------------------------
cat <<EOF
────────────────────────────────────────────────────────
Готово! Памятка:
Запуск: pi
Обновление: pi update --extensions
Команды: /bugfix <тикет> /feature <тикет>
/review [фокус] /rfc <тема> /kit-config
Проверка: /kit-config — покажет действующие корпоративные значения
Внутренний курс по Pi: ${INTERNAL_COURSE_URL}
────────────────────────────────────────────────────────
EOF