Чистим код перед push: как избежать позора в гите

 Публичный пост для комнаты «Тех»
26 сентября 2024  184

пост из разряда "... а что, так можно было?"

Один дебаг — и ты сразу герой чатиков, но не по той причине, по которой хотелось бы.

Если б мне давали монетку каждый раз, когда я случайно пушила console.log("hui") в прод, у меня было бы две монетки. В другой раз, сюрприз вылез прямо на демке, как значение фильтра (name = hui). Короче, дебажим на полную, коммитим на фейспалм.

В принципе, обьем пережитого кринжа достаточно для того, чтоб задуматься над срочной автоматизацией: всё-таки звучит слишком дружелюбно для продакшена.

я/мы?
я/мы?

Шаги:

1. Создаем файл Git Hook:

Создаем папку .git/hooks (если её нет), и внутри неё файл с именем pre-commit.

touch .git/hooks/pre-commit

2. Пишем проверку:

Открываем файл pre-commit и добавляес в него следующий код:

#!/bin/sh

FORBIDDEN_WORD="hui"
FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(js|ts|jsx|tsx|py|html|css|md)$')

if [ -n "$FILES" ]; then
  FORBIDDEN_COUNT=$(grep -inr "$FORBIDDEN_WORD" $FILES | wc -l)
  if [ "$FORBIDDEN_COUNT" -gt 0 ]; then
    echo "🚨 Ошибка: Обнаружено запрещенное слово '$FORBIDDEN_WORD' в коммитах:"
    grep -inr "$FORBIDDEN_WORD" $FILES
    exit 1
  fi
fi

exit 0

3. Не забудь сделать файл исполняемым:

chmod +x .git/hooks/pre-commit

4. Как это работает:

Этот скрипт проверяет только файлы, которые изменены и добавлены в коммит (git diff --cached).

Он ищет слово "hui" (или любое другое) в файлах с расширениями .js, .ts, .jsx, .tsx, .py, .html, .css, и .md. Если слово найдено, коммита не произойдёт, и вы получите в консоль ошибку.

Помни: если это вызвало у тебя улыбку, в продакшн это не должно пойти

10 комментариев 👇
Настя Кудрявцева Фронтенд разрабочица автор 26 сентября в 13:14

Прочитал? Поделись своей кринжовой историей с работы

Давайте придумаем проблему, а потом её героически решим 😃
Как насчёт того, чтобы не раскладывать хуи по коду?

  Развернуть 1 комментарий

@Spaider, так не интересно :D

к тому-же автопороверка применима не только к хуям, можно и //TODO: чекать, и много разного

  Развернуть 1 комментарий

@leider-doch, https://pre-commit.com
Можно всё. И не надо самому писать, всё давно написано.

  Развернуть 1 комментарий

Уже минимум 10 лет что бы я не делал, на какой бы 100500 раз тестовой среде изолированной от продакшена десятью заборами, я всегда использую для тестовых данных что-то что если попадёт в прод то будет не стыдно.

Особенно это касается каналов где нельзя быстро "закатить" что-то назад - пуши, смс, e-mail. Пуш не воробей, вылетит не поймаешь. Но я крайне рекомендую применять эту практику везде.

Во всех таких случаях я использую что-то вроде "Прогноз погоды на завтра +сколькото градусов". Если я вдруг когда-нибудь облажаюсь и пользователи получат прогноз погоды от, условно, банка, то они удивятся, но больше думаю ничего страшного не произойдёт. Если они получат hui то скорее всего потом я очень пожалею и буду вынужден переоценить свои подходы к разработке. Поэтому я сделал это заранее.

  Развернуть 1 комментарий

@Yavanosta, офигенная идея!
Если еще заморочиться и генерацию + вставку по хоткею написать этого прогноза

  Развернуть 1 комментарий

После того, как у нас фронтендер дебажил админку (почему-то на проде) и ушел массовый пуш «тест тест тест», я решил хуями больше не пользоваться, а потом и консоль логом
С тех пор я давно уже не работаю в компаниях с таким разделением доступов, но хорошая привычка осталась

  Развернуть 1 комментарий

@averyanovs, надо и мне вырабатывать такую привычку, по-хорошему.
но всё-таки очень это слово удобно набирается: все буквы удобно в районе правой руки, рядом прям расположены.. :c

  Развернуть 1 комментарий

@leider-doch, а еще у нас было выражение «за console.log плоти налог»
Можно тоже в хуки добавить) С подсчетом суммы налогов

  Развернуть 1 комментарий

@averyanovs, ахахах, такую идею и украсть можно)

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб