shellcheck и дизейблить коммит если я накосорезил.Сейчас автоматизируем
ㅤ
Про
shellcheck я писал отдельный пост. Короче он у тебя должен быть установлен.Дальше создаем файл
.git/hooks/pre-commit в репозитории, в котором нужно запускать проверку и пишем в него:#!/bin/bash
bash_scripts=$(find . -name "*.sh")
for script in $bash_scripts; do
shellcheck "$script"
if [ $? -ne 0 ]; then
echo "Shellcheck failed on $script. Commit aborted."
exit 1
fi
done
exit 0
Хуй знает, работает этот код или нет, я давно им не пользовался, главное тут концепт.
Делаем это исполняемым:
chmod +x .git/hooks/pre-commit
Теперь перед каждым коммитом будет выполняться
shellcheck для всех Bash-скриптов в репозитории. Если shellcheck найдет ошибки, твой коммит не пройдет, пока не пофиксишь.По началу это напряжно, но потом понимаешь что у тебя уже вырабатывается какой-то кодстайл и ты не можешь распиздяйничать.
Если у тебя скрипты имеют другое расширение, соответственно меняешь его в переменной
bash_scripts.Помню в компании была подобная штука на проверку puppet кода, пиздец, я там орал как белуга не понимая что эта тварь от меня хочет. По итогу когда я возглавил отдел, выкосил это дермище вместе с puppet.
Бонусом адаптация под проверку ansible плейбуков:
#!/bin/bash
playbooks=$(find . -name "*.yml" -o -name "*.yaml")
for playbook in $playbooks; do
ansible-lint "$playbook"
if [ $? -ne 0 ]; then
echo "ansible-lint failed on $playbook. Commit aborted."
exit 1
fi
done
exit 0
В зависимостях — нужно установить
ansible-lint.С помощью pre-commit можешь любую хуйню замутить и усложнять себе жизнь в геометрической прогрессии, А вообще pre-commit нахуй не нужен, он помещает тебя в рамки и ты теряешь свободу в творчестве.
Пользуйтесь.
tags: #bash #git
—
🔔 @bashdays