/
Watashicuvu
/
agentic-tools
Обзор
Документация
Войти
/
Watashicuvu
/
agentic-tools
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/init-project.sh
283 строки
7 KB
Якуб
mts update
12 апр 2026, 21:19
12 апр 2026, 21:19
bff6dcd
Код
Авторство
О чём код?
#!/usr/bin/env bash # ============================================================================= # init-project.sh — Инициализация нового проекта # ============================================================================= # Назначение: # - Создаёт директорию проекта # - Git init # - Создаёт .env файл # - Создаёт конфиги по языку (pyproject.toml, .luacheckrc, package.json и т.д.) # # Переменные окружения: # PROJECT_DIR — путь к проекту (обязательно) # PROJECT_LANG — язык (python|typescript|lua|mixed|auto) # PROJECT_NAME — имя проекта (UUID по умолчанию) # OPENAI_BASE_URL — URL LLM API # OPENAI_API_KEY — API ключ # MCP_PORT — порт MCP сервера # # Использование: # scripts/init-project.sh /projects/auto/abc123 python # scripts/init-project.sh /projects/auto/xyz789 # ============================================================================= set -e # Цвета RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # ============================================================================= # Аргументы # ============================================================================= if [[ $# -lt 1 ]]; then echo "" echo -e "${RED}❌ Usage: $0 <project-dir> [project-lang]${NC}" echo "" exit 1 fi PROJECT_DIR="$1" PROJECT_LANG="${2:-auto}" # UUID для имени проекта PROJECT_UUID=$(head -c 6 /dev/urandom | xxd -p 2>/dev/null || head -c 6 /dev/urandom | od -An -tx1 | tr -d ' \n') PROJECT_NAME="${PROJECT_NAME:-project_${PROJECT_UUID}}" echo "" echo -e "${BLUE}📁 Creating new project: ${PROJECT_NAME}${NC}" echo -e " Path: ${YELLOW}${PROJECT_DIR}${NC}" echo -e " Language: ${YELLOW}${PROJECT_LANG}${NC}" echo "" # ============================================================================= # Создаём директорию # ============================================================================= mkdir -p "$PROJECT_DIR" echo -e " ${GREEN}✓${NC} Directory created" # ============================================================================= # Git init # ============================================================================= cd "$PROJECT_DIR" git init -q echo -e " ${GREEN}✓${NC} Git initialized" # ============================================================================= # .env файл # ============================================================================= cat > .env << ENVEOF # .env — ${PROJECT_NAME} # Auto-generated by init-project.sh # LLM Backend LLM_BACKEND=llama_cpp OPENAI_BASE_URL=${OPENAI_BASE_URL:-http://llama-cpp:9191/v1} OPENAI_API_KEY=${OPENAI_API_KEY:-not-needed} # MCP Server MCP_PORT=8000 MCP_INDEX_ON_START=true MCP_INDEX_FORCE=false MCP_INDEX_SEMANTIC=true # Language PROJECT_LANG=${PROJECT_LANG:-auto} ENVEOF echo -e " ${GREEN}✓${NC} .env created" # ============================================================================= # Конфиги по языку # ============================================================================= create_python_config() { cat > pyproject.toml << PYEOF [project] name = "${PROJECT_NAME}" version = "0.1.0" description = "Auto-generated project" requires-python = ">=3.10" dependencies = [] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.pytest.ini_options] testpaths = ["tests"] PYEOF echo -e " ${GREEN}✓${NC} pyproject.toml created" mkdir -p src tests touch src/__init__.py tests/__init__.py echo -e " ${GREEN}✓${NC} src/ and tests/ created" } create_typescript_config() { cat > package.json << JSONEOF { "name": "${PROJECT_NAME}", "version": "0.1.0", "description": "Auto-generated project", "main": "src/index.js", "scripts": { "test": "jest", "lint": "eslint src/" }, "dependencies": {}, "devDependencies": {} } JSONEOF echo -e " ${GREEN}✓${NC} package.json created" cat > tsconfig.json << TSEOF { "compilerOptions": { "target": "ES2020", "module": "commonjs", "strict": true, "outDir": "./dist", "rootDir": "./src" }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] } TSEOF echo -e " ${GREEN}✓${NC} tsconfig.json created" mkdir -p src tests echo -e " ${GREEN}✓${NC} src/ and tests/ created" } create_lua_config() { cat > .luacheckrc << LUAEOF -- .luacheckrc — ${PROJECT_NAME} -- Auto-generated by init-project.sh files = {"src", "tests"} exclude_files = {"vendor"} max_line_length = 120 max_code_line_length = 120 max_string_line_length = 120 max_comment_line_length = 120 std = "min" globals = { -- Add your global variables here } LUAEOF echo -e " ${GREEN}✓${NC} .luacheckrc created" # Rockspec ROCKSPEC_NAME="${PROJECT_NAME}-0.1.0-1.rockspec" cat > "$ROCKSPEC_NAME" << RSEOF package = "${PROJECT_NAME}" version = "0.1.0-1" source = { url = "git+https://github.com/user/${PROJECT_NAME}.git" } description = { summary = "Auto-generated project", } dependencies = { "lua >= 5.1" } build = { type = "builtin", modules = {}, copy_directories = {} } RSEOF echo -e " ${GREEN}✓${NC} ${ROCKSPEC_NAME} created" mkdir -p src tests echo -e " ${GREEN}✓${NC} src/ and tests/ created" } case "$PROJECT_LANG" in python) create_python_config ;; typescript) create_typescript_config ;; lua) create_lua_config ;; mixed) create_python_config echo "" create_typescript_config echo "" create_lua_config ;; auto|unknown|"") # По умолчанию — python echo -e " ${YELLOW}⚠️ Language not specified, defaulting to python${NC}" create_python_config ;; *) echo -e " ${YELLOW}⚠️ Unknown language: ${PROJECT_LANG}, creating empty project${NC}" ;; esac # ============================================================================= # .gitignore # ============================================================================= cat > .gitignore << GIEOF # Python __pycache__/ *.py[cod] *.egg-info/ dist/ .venv/ venv/ # Node node_modules/ dist/ # Lua *.luac # IDE .vscode/ .idea/ # OS .DS_Store Thumbs.db # Env .env.local .env.*.local GIEOF echo -e " ${GREEN}✓${NC} .gitignore created" # ============================================================================= # Итог # ============================================================================= echo "" echo -e "${GREEN}✅ Project initialized: ${PROJECT_NAME}${NC}" echo "" echo " Structure:" find . -maxdepth 2 -not -path '*/.git/*' | head -20 | while read -r line; do echo " $line" done echo "" echo " Next steps:" echo " cd ${PROJECT_DIR}" echo " # Add your code" echo " git add ." echo " git commit -m 'Initial commit'" echo "" exit 0