SSG - Единый стандарт для Git

SSG - Единый стандарт для Git

48

2 мин.

Определения

Стандарт SSG определяет требования к семантике, доступности и логике работы Git.

Conventional Commits - структура коммитов

Сообщение коммита должно быть структурировано следующим образом:

<тип>([область действия]): <краткое описание>

[Тело коммита]

[Нижний колонтитул(ы)]

Заголовок - обязательная часть

Тип - классификация коммита:

ТипНазначение
featНовая функциональность
fixИсправление ошибки
docsИзменения в документации
styleИзменения стиля без логики
refactorРефакторинг без новой функциональности
perfУлучшение производительности
test (spec)Тесты
choreВспомогательные задачи
buildИзменения сборки / зависимостей
ciCI/CD скрипты
revertОткат предыдущего коммита

Область действия опционально, указывает на затронутую часть проекта (например, ui, api, auth):

feat(api): добавлена новая конечная точка для пользователей

Описание описывает изменения, желательно повелительным наклонением, не более 50 символов.

Тело и нижний колонтитул, опциональные части

Тело поясняет, что и почему изменено.

Нижний колонтитул используется для Breaking Changes, несовместимые изменения указываются через BREAKING CHANGE: или feat!, например feat!: удалены устаревшие api-методы, а также для ссылок на задачи, например, Closes #123.

Настройка пайплайна для безопасного процесса коммитов

Пайплайн обеспечивает форматирование, проверку коммитов и безопасное слияние веток.

Необходимые зависимости

npm i -D \
  husky \
  lint-staged \
  @commitlint/cli \
  @commitlint/config-conventional \
  @commitlint/types \
  conventional-changelog-conventionalcommits \
  @archoleat/commitlint-define-config

Конфигурация lint-staged

Lint-staged проверяет только проиндексированные изменения:

export default {
  '*': 'prettier --write',
  'src/**/*.{tsx,ts}': 'eslint --fix',
  'src/**/*.scss': 'stylelint --fix',
};

Конфигурация Commitlint

Commitlint проверяет формат коммитов и разрешенные типы:

import { defineConfig } from '@archoleat/commitlint-define-config';

export default defineConfig({
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'build',
        'chore',
        'ci',
        'docs',
        'feat',
        'fix',
        'perf',
        'refactor',
        'revert',
        'spec',
        'style',
      ],
    ],
  },
});

Плагин для defineConfig можно посмотреть здесь

Настройка Git-хуков (Husky)

ХукКомандаНазначение
pre-commitnpm run lint-stagedФорматирование и исправление кода перед коммитом
commit-msgnpm run commitlint --editПроверка соответствия Conventional Commits

В Husky есть баг при котором если коммит не проходит проверку, иногда изменения могут потеряться!

Итоговый процесс коммита

  • Индексация изменений:

    git add .
    
  • Создание коммита:

    git commit -m "feat(header): добавлена кнопка переключения темы"
    
  • pre-commit:

    Запускается lint-staged, Prettier, ESLint и Stylelint исправляют ошибки в проиндексированных файлах, затем исправленные файлы повторно добавляются в индекс.

  • commit-msg:

    commitlint проверяет соответствие заголовка коммита правилам Conventional Commits.

  • Результат:

    Коммит успешно завершен, если все проверки пройдены, иначе коммит отклоняется с сообщением об ошибке.

Похожие статьи

  • Анатомия React компонента

    Моё видение того, как должен выглядеть React компонент

    104

    7 мин.

  • SSF-U - Единый стандарт для фуллскрина

    Стандарт SSF-U определяет требования к семантике, доступности и логике работы фуллскрина

    34

    2 мин.

  • SSA - Единый стандарт для аккордеона

    Стандарт SSA определяет требования к семантике, доступности и логике работы аккордеона

    51

    2 мин.

  • Bad Practices для сайтов

    Разбор критических ошибок веб-дизайна. Почему слайдеры, автоплей и тяжёлые страницы снижают конверсию и позиции в Google и Yandex

    46

    1 мин.

  • SSP - Единый стандарт для пагинации

    Стандарт SSP определяет требования к семантике, доступности и логике работы пагинации

    57

    1 мин.

  • SSPS - Единый стандарт для структуры проекта

    Стандарт SSPS определяет требования к структуре и наименованию файлов и папок в проекте

    166

    2 мин.

  • Все статьи

Свяжитесь со мной