Обновить

Комментарии 8

Хороший цикл статей, и эта мне понравилась более, чем предыдущая: акцент сделан действительно на том, на что не обращают внимания вообще, или обращают крайне мало.

Спасибо. Рад, что вам понравилась данная статья.

Спасибо за статью!

Ещё есть vale.sh для обычного текста.

Я с vale.sh не работал. Ознакомлюсь!

Несколько замечаний при беглом просмотре ваших скриптов.

  1. Несколько скриптов проверки форматов суть один скрипт - просто сравнитеcheck_{css,html,markdown,yaml}lint.sh

  2. Логичнее вначале проверить существование файла, затем соответствие каким-то требованиям (например, расширение)

  3. Разнородные проверки одного и того же (конкретно: соответствие расширению). В одном месте [[ ! "$file" =~ .md$ ]] , в другом - [[ "${FILE##*.}" != "sh" ]].

  4. В случае ошибок показать список "неправильных" файлов было бы хорошей подсказкой для последующего исправления

  5. Привязка к докеру, как будто без него работать не будет

Спасибо, что подсветили!

  • Несколько скриптов, потому что я на разных проектах использую разные наборы скриптов + в CI используются разные задачи.

  • Хорошее замечание! Я просто отталкивался от идеи, что проверка на существования файла написаны до запуска скрипта.

  • "Разнородные проверки одного и того же..." это я поправлю и приведу к единообразию!

  • "В случае ошибок показать список "неправильных" файлов..." это я пробовал, по итогу получается мусорный лог! Я отказался от такой практики, но вы всегда можете сделать форк и доработать скрипты.

  • Есть часть скриптов, которые работают только через Docker, они имеют указание суффикса docker в название.

scripts/check_shellcheck.sh
shell/check_shellcheck.sh

В первом shellcheck хорошо живет без докера, а во втором зачем-то понадобился. Значит можно объединить в один и вызывать с аргументами командной строки.

*.sh
*_in_docker.sh

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

Я бы все это богатство завернул в один скрипт с поддержкой аргументов, который с помощью getopts перебирал бы параметры, потом подготавливал скрипт к основной работе, а там уже выполнял бы всю основную работу.

При необходомости проверки с другой логикой - в отдельные вспомогательные скрипты. И добавить обвязку вокруг этого скрипта как основного.

Да, я вас понимаю, но на одном из проектов, мне нужна была реализация именно через Docker. Для коробочного решения, в котором был заложен Shellcheck без дополнительной необходимости устанавливать его на сервер.

Вы должны понимать, что prog-time/git-hooks я создал изначально для себя, для хранения часто используемых скриптов. Чтобы было полезно для других разработчиков я дополнительно сделал универсальные версии скриптов.

Скорее всего после вашего комментария, я пересмотрю свой подход и вырежу лишние версии скриптов, оставив только универсальные.

Буду очень благодарен, если вы поддержите проект звёздочкой или участием в разработке и предложите PR!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации