Использование крючков Git для запуска ваших тестов и/или Linter

Оригинальная статья: https://www.ethancarlsson.dev/blog/githooks

Если вы хотите настроить простой способ запуска
код перед каждым коммитом в pre-commit хуке для
проекта Javascript, то вот как я это сделал.

Настройка

На самом деле хуки не зависят ни от чего, кроме git, но
В этом проекте я использую vite и yarn.
Это будет работать одинаково с любым инструментом сборки,
а если вы используете npm, просто замените yarn [command] на npm run [command].

Чтобы хук сработал, вам нужно написать этот код в разделе

Итак, для начала работы введите в терминал один из следующих кодов
терминале из корня вашего проекта:

Для vim: vim .git/hooks/pre-commit.

Для nano: nano .git/hooks/pre-commit

Для VS Code: code .git/hooks/pre-commit.

Или создайте и отредактируйте файл любым другим способом, который вам нравится.

Код

#!/bin/bash

yarn lint
linting_result=$?

if [[ $linting_result -ne 0 ]]
then
  echo "LINT FAILED!"
  echo 'Please fix linting problems before committing.'
  exit 1
fi

yarn test
test_result=$?

if [[ $test_result -ne 0 ]]
then
  echo "TESTS FAILED!"
  echo 'Please make sure tests pass before committing.'
  exit 1
fi
Вход в полноэкранный режим Выйти из полноэкранного режима

Команды yarn test и yarn lint работают точно так же, как и
когда они вызываются из командной строки в корне моего проекта.

Я получаю код выхода и проверяю, равен ли он нулю:

linting_result=$?

if [[ $linting_result -ne 0 ]]
Войти в полноэкранный режим Выйти из полноэкранного режима

Если он не равен 0 (-ne 0), я выдаю эхом сообщение
и выхожу из кода bash с другим ненулевым кодом выхода,

then
  echo "LINT FAILED!"
  echo 'Please fix linting problems before committing.'
  exit 1
fi
Вход в полноэкранный режим Выход из полноэкранного режима

Если либо тесты, либо линтер не работают, они выходят
с кодом 1. Но если он завершается с другим кодом.
Я хотел бы знать почему, поэтому я выхожу с любым ненулевым кодом и не
позволяю коммиту идти дальше.

Следующие шаги

Все, что вам теперь нужно сделать, это запустить chmod +x .git/hooks/pre-commit, чтобы сделать код исполняемым,
и код будет выполняться при каждом коммите.

Ознакомьтесь с документацией и добавьте
любые другие хуки, которые вам нравятся. Я запускаю тот же код и при push, используя
крючок pre-push, например

Оцените статью
devanswers.ru
Добавить комментарий