No description
  • Vue 67.2%
  • JavaScript 21.2%
  • CSS 10.4%
  • TypeScript 1.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ilya_Work_pc c54a6e42c6 dev (#1)
Co-authored-by: ci-bot <cibot@local.host>
Reviewed-on: #1
Co-authored-by: Ilya_Work_pc <massoncheg@gmail.com>
Co-committed-by: Ilya_Work_pc <massoncheg@gmail.com>
2026-07-07 17:57:41 +00:00
.vitepress dev (#1) 2026-07-07 17:57:41 +00:00
.yarn dev (#1) 2026-07-07 17:57:41 +00:00
config dev (#1) 2026-07-07 17:57:41 +00:00
docs dev (#1) 2026-07-07 17:57:41 +00:00
notes Initial commit 2026-07-07 15:19:04 +00:00
scripts Initial commit 2026-07-07 15:19:04 +00:00
src dev (#1) 2026-07-07 17:57:41 +00:00
.gitignore Initial commit 2026-07-07 15:19:04 +00:00
.prettierignore Initial commit 2026-07-07 15:19:04 +00:00
.prettierrc Initial commit 2026-07-07 15:19:04 +00:00
.stylelint.json Initial commit 2026-07-07 15:19:04 +00:00
.yarnrc.yml dev (#1) 2026-07-07 17:57:41 +00:00
env.d.ts Initial commit 2026-07-07 15:19:04 +00:00
eslint-report.json dev (#1) 2026-07-07 17:57:41 +00:00
eslint.config.mjs dev (#1) 2026-07-07 17:57:41 +00:00
package.json dev (#1) 2026-07-07 17:57:41 +00:00
README.md dev (#1) 2026-07-07 17:57:41 +00:00
tsconfig.json Initial commit 2026-07-07 15:19:04 +00:00
yarn.lock dev (#1) 2026-07-07 17:57:41 +00:00

Текущий алгоритм CI/CD на русском Общая архитектура Система состоит из 4 этапов (jobs), которые выполняются последовательно при каждом пуше в ветку main: Git push → Check → Fix (если есть ошибки) → Deploy (если ошибки исправлены)


1 Этап Check (Проверка)

Цель: Анализировать код на наличие ошибок и вычислить метрики для принятия решений. Шаги:

  1. Checkout кода
    • Клонирует репозиторий в контейнер
    • clean: false - не удаляет файлы для ускорения
  2. Установка зависимостей
    • yarn install - устанавливает все npm пакеты
  3. Запуск ESLint
    • yarn eslint --format json > eslint-report.json
    • Генерирует детальный отчет в формате JSON со всеми ошибками
    • || true - не падает, если ошибок нет
  4. Анализ отчета (анализ-скрипт)
    • Скрипт scripts/analyze-eslint.mjs парсит JSON-отчет
    • Вычисляет:
      • has-errors - есть ли вообще ошибки (true/false)
      • fixable-error-count - сколько ошибок можно автоматически исправить
      • total-error-count - общее количество ошибок
      • import-errors - количество ошибок импорта (недостающие пакеты)
      • is-fully-fixable - все ли ошибки можно исправить автоматически
      • needs-package-install - нужно ли устанавливать пакеты
  5. Загрузка артефакта
    • Сохранный отчет eslint-report.json загружается как артефакт
    • Позволяет получить отчет в следующих этапах Результат: Output-переменные для использования в следующем job

2 Этап Fix (Исправление) - условный Цель: Автоматически исправить все найденные ошибки Условие запуска: if: needs.check.outputs.has-errors == "true"
(Запускается ТОЛЬКО если есть ошибки) Шаги:

  1. Checkout кода
    • Проверка с fetch-depth: 0 (полная история коммитов)
  2. Установка зависимостей
    • yarn install
  3. Конфигурация Git
    • Имя пользователя: runner-auto-fix
    • Email: runner@forgejo
  4. Настройка Git remote
  5. Загрузка отчета ESLint
    • Скачивает артефакт из этапа check
  6. Исправление ESLint
    • yarn eslint --fix . - применяет автозамену ко всем исправимым ошибкам
    • Создает файлы с исправленным кодом
  7. Коммит и пуш ESLint изменений
    • Проверка: Если есть изменения
    • Тегирование: git tag -a "runner-auto-fix-iteration-N" где N = номер рана workflow
    • Коммит: fix: runner-auto-fix eslint
    • Пуш: git push
  8. Установка недостающих пакетов (если нужно)
    • Условие: if: needs.check.outputs.needs-package-install == 'true'
    • Запускает scripts/eslint-auto-fix.mjs
    • Скрипт:
      • Парсит отчет ESLint
      • Находит импорты с ошибками
      • Проверяет их в config/allowed-packages.json
      • Добавляет в package.json через yarn add
    • Коммит и пуш изменений в package.json и yarn.lock
  9. Исправление Prettier
    • yarn prettier --write . - форматирование всех файлов
    • Коммит и пуш изменений
  10. Трекинг итераций (Итерация-контроллер)
    • Сравнивает локальный SHA и удаленный SHA
    • Проверяет циклическую зависимость
    • Максимум 3 итерации (из переменной окружения MAX_FIX_ITERATIONS)
    • Если превышен лимит → workflow fails
    • Результат: iteration-count передается в output
  11. Финальная проверка ESLint
    • Пересоздает eslint-final-report.json
    • Вызывает scripts/analyze-eslint.mjs
    • Определяет, остались ли ошибки
  12. Загрузка финального артефакта - eslint-final-report.json как артефакт Output:
  • final-has-errors - остались ли ошибки после всех исправлений
  • fix-count - сколько итераций было выполнено

3 Этап Deploy (Деплой) - условный Цель: Развернуть приложение на production, если код прошел все проверки Условие запуска:
if: | needs.check.outputs.has-errors == "false" || (needs.check.outputs.has-errors == "true" && needs.fix.outputs.final-has-errors == "false") Срабатывает если:

  • Ошибок не было изначально, ИЛИ
  • Ошибки были, но все исправлены в fix-этапе Шаги:
  1. Проверка итераций (если fix job успешен)
    • Сравнивает использованные итерации с лимитом
    • Если превышен → workflow fails
  2. Установка зависимостей
    • yarn install
  3. Сборка
    • yarn run build - собирает проект
  4. Деплой на Host FS
    • Создает директорию /var/srv/www/имя-репозитория
    • Копирует .vitepress/dist/* в целевую директорию Отмена:
      Если условия не выполняются → workflow фейлится, деплой не происходит

🛡️ Безопасные механизмы

  1. Защита от пустых коммитов if [ -n "$(git status --porcelain)" ]; then

только если есть изменения

fi 2. Ограничение итераций MAX_FIX_ITERATIONS: 3

  • Prevent infinite loops
  • Если > 3 итераций → workflow fails
  1. Git-тагирование
  • Каждая итерация тегируется как runner-auto-fix-iteration-N
  • Пакеты тегируются как runner-auto-fix-deps-N
  • Позволяет трекировать историю авто-фиксов
  1. Качественные коммиты
  • fix: runner-auto-fix eslint - точное описание
  • Не поверхностные "fix typo" или "update"
  1. Запись артефактов
  • Сохраняются отчеты ESLint на 1 день
  • Для отладки и анализа

🔄 Сценарии выполнения Сценарий 1: Без ошибок (чистый код) Push → Check: has-errors=false Fix job: НЕ запускается (нет ошибок) Deploy job: ← Запускается (has-errors=false) ✓ Сценарий 2: Исправимые ошибки Push → Check: has-errors=true Fix job: → ESLint fix → commit+push → Prettier fix → commit+push → Check снова: has-errors=false Deploy job: ← Запускается ✓ Сценарий 3: Ошибки импорта (нужны пакеты) Push → Check: has-errors=true, needs-package-install=true Fix job: → ESLint fix → commit+push → Install deps → commit+push → Prettier fix → commit+push → Check снова: has-errors=false Deploy job: ← Запускается ✓ Сценарий 4: Нефиксируемые ошибки Push → Check: has-errors=true, is-fully-fixable=false Fix job: → Attempts fix → Check снова: has-errors=true Deploy job: НЕ запускается ✗ Сценарий 5: Превышение лимита итераций Push → Check: has-errors=true Fix job: Iteration 1 → Check: has-errors=true Iteration 2 → Check: has-errors=true
Iteration 3 → exceeds MAX_FIX_ITERATIONS Workflow fails ✗ Deploy job: НЕ запускается


📊 Результаты и артефакты

Артефакты (хранятся 1 день):

  1. eslint-report.json - отчет о первоначальных ошибках
  2. eslint-final-report.json - отчет после авто-фиксов

Git-история:

  • Все авто-фиксы помечены тегами
  • Можно отследить историю улучшений качества кода
  • Полные hash SHA для каждого изменения

Логи workflow:

  • Каждая операция имеет понятное сообщение
  • Ошибки детально описаны
  • Счетчик итераций виден в логах

🔑 Ключевые особенности

  1. Zero-downtime development - разработчик не ждёт деплоя
  2. Quality gate - только чистый код попадает в production
  3. Safety - предотвращение бесконечных циклов
  4. Traceability - полная история всех исправлений
  5. Automation - 100% автозапуск без человеческого вмешательства
  6. Conditional - умная логика (деплоим только если готово) Эта система гарантирует, что в production попадает только качественный, оттестированный код с минимальными ошибками! 🚀 ▣ Plan · z-ai/glm-4.7-flash · 51.9s