/
Dmitry-F
/
cbt_tool
Обзор
Документация
Войти
/
Dmitry-F
/
cbt_tool
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
python-ml-service
bin/audit
219 строк
8 KB
Dmitriy-Filatov
🧹 ФИНАЛЬНАЯ ЧИСТКА И БЕЗОПАСНОСТЬ
14 мар 2026, 03:59
14 мар 2026, 03:59
3f89264
Код
Авторство
О чём код?
#!/bin/bash # ============================================ # АУДИТ ПРОЕКТА CBT TOOL (Rails 8.1 + Tailwind v4) # Проверяет соответствие "железобетонным" правилам # Включает проверку движка smer_diary # ============================================ # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}🔍 ЗАПУСК АУДИТА CBT TOOL (v.03.2026)...${NC}\n" # 1. ПРОВЕРКА TURBO + TRIX echo -n "1. Turbo на формах Trix: " FILES_WITH_TRIX=$(grep -l "rich_text_area" -r app/views/ --include="*.html.erb" 2>/dev/null) if [[ -z "$FILES_WITH_TRIX" ]]; then echo -e "${GREEN}✅ OK (Trix не используется)${NC}" else FAILED_FILES="" for file in $FILES_WITH_TRIX; do if ! grep -q "turbo: false" "$file"; then FAILED_FILES+="\n ➜ $file" fi done if [[ -z "$FAILED_FILES" ]]; then echo -e "${GREEN}✅ OK (Turbo отключен во всех Trix-формах)${NC}" else echo -e "${RED}❌ FAIL (Проверь эти файлы:)${NC}$FAILED_FILES" fi fi # 2. ПРОВЕРКА TAILWIND v4 echo -n "2. Tailwind v4: " if [ -f "tailwind.config.js" ]; then echo -e "${RED}❌ FAIL (Удали tailwind.config.js)${NC}" elif [ ! -f "app/assets/tailwind/application.css" ]; then echo -e "${RED}❌ FAIL (Нет app/assets/tailwind/application.css)${NC}" elif ! grep -q "@theme" app/assets/tailwind/application.css 2>/dev/null; then echo -e "${YELLOW}⚠️ WARNING (Нет @theme в application.css)${NC}" else echo -e "${GREEN}✅ OK${NC}" fi # 3. ПРОВЕРКА ПУЛА ПОДКЛЮЧЕНИЙ БД echo -n "3. Лимиты БД: " if ! rails runner "puts 'test'" 2>/dev/null >/dev/null; then echo -e "${YELLOW}⚠️ SKIP (Rails не отвечает)${NC}" else DB_CHECK=$(rails runner " pool = ActiveRecord::Base.connection_db_config.pool max_conn = ActiveRecord::Base.connection.execute('show max_connections').first['max_connections'].to_i puts \"Pool: #{pool}, База: #{max_conn}\" exit(pool > max_conn ? 1 : 0) " 2>/dev/null) if [ $? -eq 0 ]; then echo -e "${GREEN}✅ OK ($DB_CHECK)${NC}" else echo -e "${RED}❌ FAIL ($DB_CHECK — pool > max_connections!)${NC}" fi fi # 4. ПРОВЕРКА IMPORTMAP (чистота стека) echo -n "4. Importmap: " if [ -d "node_modules" ]; then echo -e "${RED}❌ FAIL (Есть node_modules — нарушен принцип)${NC}" else echo -e "${GREEN}✅ OK (Node.js free)${NC}" fi # 5. ПРОВЕРКА ШРИФТОВ (дизайн-система) echo -n "5. Локальные шрифты: " if [ ! -d "app/assets/fonts" ]; then echo -e "${YELLOW}⚠️ WARNING (Нет папки app/assets/fonts)${NC}" elif [ ! -f "app/assets/fonts/YellowPeas-UltraLight.woff2" ]; then echo -e "${YELLOW}⚠️ WARNING (Нет YellowPeas шрифта)${NC}" elif [ ! -f "app/assets/fonts/Entropia-Light.woff2" ]; then echo -e "${YELLOW}⚠️ WARNING (Нет Entropia шрифта)${NC}" elif [ ! -f "app/assets/stylesheets/fonts.css" ]; then echo -e "${YELLOW}⚠️ WARNING (Нет fonts.css)${NC}" elif ! grep -q "font-url" app/assets/stylesheets/fonts.css 2>/dev/null; then echo -e "${YELLOW}⚠️ WARNING (В fonts.css нет font-url)${NC}" else echo -e "${GREEN}✅ OK${NC}" fi # 6. ПРОВЕРКА CURRENT.THERAPIST (Архитектурная чистота) echo -n "6. Безопасность Current.therapist: " HAS_DEFAULT_SCOPE=$(grep -r "default_scope.*Current.therapist" app/models/ --include="*.rb" 2>/dev/null) if [[ -n "$HAS_DEFAULT_SCOPE" ]]; then echo -e "${RED}❌ КРИТИЧЕСКАЯ ОШИБКА (найден default_scope с Current! Удали это немедленно!)${NC}" echo "$HAS_DEFAULT_SCOPE" | sed 's/^/ ➜ /' else echo -e "${GREEN}✅ OK (модели чисты от скрытых фильтров)${NC}" fi # 7. ПРОВЕРКА SCHEMA.RB В GIT echo -n "7. schema.rb в git: " if git ls-files db/schema.rb --error-unmatch 2>/dev/null; then if git diff --quiet db/schema.rb 2>/dev/null; then echo -e "${GREEN}✅ OK (в git и актуален)${NC}" else echo -e "${YELLOW}⚠️ WARNING (в git, но есть изменения — закоммить!)${NC}" fi else echo -e "${RED}❌ FAIL (schema.rb не в git!)${NC}" fi # 8. ПРОВЕРКА ДВИЖКА SMER_DIARY echo -e "\n${BLUE}🔧 ПРОВЕРКА ДВИЖКА SMER_DIARY${NC}" # 8.1 Существование движка echo -n " 8.1 Движок установлен: " if [ ! -d "engines/smer_diary" ]; then echo -e "${RED}❌ FAIL (Папка engines/smer_diary не найдена)${NC}" HAS_ENGINE=false else echo -e "${GREEN}✅ OK${NC}" HAS_ENGINE=true fi # 8.2 Подключение в Gemfile echo -n " 8.2 Gemfile: " if $HAS_ENGINE && grep -q "gem.*smer_diary" Gemfile; then echo -e "${GREEN}✅ OK (движок подключен)${NC}" elif $HAS_ENGINE; then echo -e "${RED}❌ FAIL (Движок есть, но не в Gemfile)${NC}" else echo -e "${YELLOW}⚠️ SKIP${NC}" fi # 8.3 Миграции движка echo -n " 8.3 Миграции: " if $HAS_ENGINE; then MIGRATIONS_COUNT=$(ls engines/smer_diary/db/migrate/*.rb 2>/dev/null | wc -l | tr -d ' ') if [ "$MIGRATIONS_COUNT" -gt 0 ]; then echo -e "${GREEN}✅ OK ($MIGRATIONS_COUNT миграций)${NC}" else echo -e "${YELLOW}⚠️ WARNING (Нет миграций)${NC}" fi else echo -e "${YELLOW}⚠️ SKIP${NC}" fi # 8.4 Таблицы движка в БД echo -n " 8.4 Таблицы в БД: " if $HAS_ENGINE && rails runner "puts 'test'" 2>/dev/null >/dev/null; then TABLES_COUNT=$(rails runner "puts ActiveRecord::Base.connection.tables.grep(/smer_diary/).count" 2>/dev/null) if [ "$TABLES_COUNT" -gt 0 ]; then echo -e "${GREEN}✅ OK (найдено $TABLES_COUNT таблиц)${NC}" else echo -e "${RED}❌ FAIL (Таблицы не созданы — запусти rails engine_install:migrations db:migrate)${NC}" fi else echo -e "${YELLOW}⚠️ SKIP (Rails не отвечает или нет движка)${NC}" fi # 8.5 Маршруты движка echo -n " 8.5 Маршруты: " if $HAS_ENGINE && rails runner "puts 'test'" 2>/dev/null >/dev/null; then if rails routes 2>/dev/null | grep -q "smer_diary"; then echo -e "${GREEN}✅ OK (движок смонтирован)${NC}" else echo -e "${RED}❌ FAIL (Маршруты не найдены — проверь config/routes.rb)${NC}" fi else echo -e "${YELLOW}⚠️ SKIP${NC}" fi # 8.6 Модели движка echo -n " 8.6 Модели: " if $HAS_ENGINE; then MODELS_COUNT=$(find engines/smer_diary/app/models -name "*.rb" 2>/dev/null | wc -l | tr -d ' ') if [ "$MODELS_COUNT" -gt 0 ]; then echo -e "${GREEN}✅ OK ($MODELS_COUNT моделей)${NC}" else echo -e "${YELLOW}⚠️ WARNING (Нет моделей)${NC}" fi else echo -e "${YELLOW}⚠️ SKIP${NC}" fi # 8.7 Контроллеры движка echo -n " 8.7 Контроллеры: " if $HAS_ENGINE; then CONTROLLERS_COUNT=$(find engines/smer_diary/app/controllers -name "*.rb" 2>/dev/null | wc -l | tr -d ' ') if [ "$CONTROLLERS_COUNT" -gt 0 ]; then echo -e "${GREEN}✅ OK ($CONTROLLERS_COUNT контроллеров)${NC}" else echo -e "${YELLOW}⚠️ WARNING (Нет контроллеров)${NC}" fi else echo -e "${YELLOW}⚠️ SKIP${NC}" fi # 8.8 Тесты движка echo -n " 8.8 Тесты: " if $HAS_ENGINE; then if [ -d "engines/smer_diary/test" ] && [ "$(find engines/smer_diary/test -name '*_test.rb' 2>/dev/null | wc -l)" -gt 0 ]; then echo -e "${GREEN}✅ OK (тесты есть)${NC}" else echo -e "${YELLOW}⚠️ WARNING (Тесты не найдены)${NC}" fi else echo -e "${YELLOW}⚠️ SKIP${NC}" fi # ИТОГ echo -e "\n${BLUE}🏁 АУДИТ ЗАВЕРШЕН${NC}" echo -e "Запускай перед каждым коммитом: ${YELLOW}./bin/audit${NC}"