Автоматизация git bisect

TLDR

git bisect bad пометить текущий коммит как “плохой”.
git bisect good HASH пометить коммит с хешом HASH как “хороший”.
git bisect run npm run build запустить bisect, где критерий хорошести - код завершения скрипта npm run build.


Может вы знаете про команду git bisect. Она очень помогает найти коммит, который отвечает за интересуемый эффект.

Например. Вы работаете с несколькими командами, кто-то внес именение в ваш проект (коммит) и ваш проект перестал собираться (интересуемый эффект). Вы точно знаете коммит, на котором проект собирался, и точно знаете коммит, на котором проект не собирается, но не знаете на каком коммите проект перестал собираться. bisect помогает найти конкретный коммит, на котором начал проявляться эффект.

Если решать задачу поиска проблемного коммита через git bisect “влоб”, то шаги выглядят так:

  • пометил коммит как “плохой”
  • пометил коммит как “хороший”
  • запустил bisect
  • git зачекаутил коммит
  • попробовал сделать сборку
  • если не собралось, то пометил коммит как “плохой”
  • если собралось, то пометил коммит как “хороший”
  • повторять пока гит не скажет на каком коммите эффект начал проявляться

Как можно догадаться, процесс это муторный. Но есть способ его автоматизировать. Гиту можно передать скрипт, результат работы которого будет сигнализировать гиту рабочий коммит (если скрипт завершился с кодом 0).

Беря пример выше, допуская что сборка выполняется через npm run build, шаги будут выглядет как:

  • пометил коммит как “плохой”
  • пометил коммит как “хороший”
  • запустил bisect, дал ему скрипт и жди результатов git bisect run npm run build

Статья в рамках рубрики “Today I Learned

1 Симпатия

А если код покрытый тестами, то и поломку почти любой фичи так можно отследить :)

Так як в нас дуже величезний проджект, у нас біля 120 ПР у тиджень. :) .
Без автоматизації було б дуже важко.
6 білдів проджекта з ексетнднутим функціоналом у різних білдах.
Завалити в процессі розробки один з білдів достатньо легко.

Автоматизували валідацію через пайплайни , всі бренчі/ПР (на кожен бренч івент) проходять повний цикл перевірки. білди/баджети/Ютести/кавередж репорт.
ПР без успішного проходження пайплайну не заходять.
Повний цикл чека десь 30-40хв. Локально в прекоміті ранити все - не дуже ок.

С часом показує дуже гарні результати.
Завалити тепер збірку начно важче.

Таке.
Не дуже по темі, але про автоматизацію :)
Якщо буде цікаво, зможу якось детальніше розповісти.

1 Симпатия

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.