Skip to content

pre-commit: убрать сломанный хук ansible-lint, починить make hooks - #108

Merged
gistrec merged 2 commits into
mainfrom
fix/precommit-ansible-lint
Sep 19, 2026
Merged

gistrec merged 2 commits into
mainfrom
fix/precommit-ansible-lint

Conversation

@gistrec

@gistrec gistrec commented Sep 19, 2026

Copy link
Copy Markdown
Member

Коммит потерялся при сквоше #107 — восстановлен черри-пиком. Это блокирующее: pre-commit теперь установлен, а на main вернулась версия ansible-lint, которая падает на каждом коммите, трогающем ansible/.

Что вскрылось при установке pre-commit

Хуки из .pre-commit-config.yaml не работали никогда: бинаря в системе не было, make hooks падал с No such file or directory, а .git/hooks/pre-commit оказался рукописной заглушкой под один адрес. То есть строка в README «gitleaks runs as a pre-commit hook» была неверной всё это время.

После установки выяснилось, что ansible-lint запинен на v24.7.0 — версии, несовместимой с подтягиваемым ansible-core. Падал с ModuleNotFoundError на каждом запуске.

Свежая версия запускается, но из корня репозитория не видит ansible/ansible.cfg, где vault_password_file = .vault_pass задан относительным путём. Без него vault не расшифровывается и сыплются syntax-check. Запуск из нужного каталога это чинит — ценой обращения в 1Password, то есть Touch ID на каждый коммит в ansible/.

Линтером владеет CI, где он отрабатывает верно и без этой платы. Хук убран, причина записана в конфиге.

Сломанный хук хуже отсутствующего: он приучает к --no-verify, а тот глушит заодно gitleaks и проверку IP.

make hooks

Убрана возня с резервной копией рукописного хука. pre-commit сам переводит такой в .git/hooks/pre-commit.legacy и продолжает его запускать — аккуратнее, чем моя проверка, которая к тому же ложно срабатывала на строку «pre-commit» внутри самого хука. Осталась только проверка наличия бинаря с подсказкой, что ставить.

Проверено вживую

Хук Тест Результат
gitleaks AWS-ключ в staged-файле поймал, коммит отклонён
no-public-ips адрес чужой машины поймал
весь набор --all-files по репозиторию 8 зелёных, gitleaks чист

Этот коммит прошёл через хуки вживую.

Хуки из .pre-commit-config.yaml не работали вообще: pre-commit в системе не был
установлен, а make hooks падал с «No such file or directory». То есть gitleaks
на коммитах не гонялся никогда, вопреки разделу Security model в README.

После установки выяснилось, что ansible-lint запинен на версии, несовместимой
с подтягиваемым ansible-core, — падал с ModuleNotFoundError на каждом коммите.
Свежая версия запускается, но из корня репозитория не видит ansible/ansible.cfg
с относительным vault_password_file, поэтому сыплет syntax-check. Запуск из
нужного каталога это чинит ценой Touch ID на каждый коммит в ansible/.

Линтером владеет CI, где он отрабатывает верно и без этой платы, поэтому хук
убран, а причина записана в конфиге. Сломанный хук хуже отсутствующего: он
приучает к --no-verify, который глушит заодно gitleaks и проверку IP.

Из make hooks убрана возня с резервной копией рукописного хука: pre-commit сам
переводит такой в .legacy и продолжает его запускать — аккуратнее, чем моя
проверка, которая к тому же ложно срабатывала на строку «pre-commit» внутри
самого хука.

Проверено: pre-commit run --all-files — все хуки зелёные, gitleaks по всему
репозиторию чист.
Четырнадцать строк на «здесь линтера нет» — история отладки, которой место в
описании PR, а не в конфиге. Осталась причина.
@gistrec
gistrec merged commit e57019c into main Sep 19, 2026
3 checks passed
@gistrec
gistrec deleted the fix/precommit-ansible-lint branch September 19, 2026 11:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant