From 927010e4bf9440c12bda50603edc63ea3372de92 Mon Sep 17 00:00:00 2001 From: Aleksey Shakhmatov Date: Thu, 16 Jul 2026 11:00:47 +0300 Subject: [PATCH] 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) --- install.sh | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 install.sh diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..e1f6d9b --- /dev/null +++ b/install.sh @@ -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 < /feature <тикет> + /review [фокус] /rfc <тема> /kit-config + Проверка: /kit-config — покажет действующие корпоративные значения + + Внутренний курс по Pi: ${INTERNAL_COURSE_URL} +──────────────────────────────────────────────────────── +EOF