У нас проект на С++ для Windows. Пишем на VC++, тикеты в trac, репозиторий svn.
Процесс сейчас поставлен таким образом.
В trac создается тикет, на каждый тикет создается ветка.
Когда разработчик считает, что все в ветке сделал, я делаю код ревью, если все выглядит хорошо, то мерджу в trunk и вручную прогоняю функциональные тесты.
Если все ок, то делаю коммит в trunk. Таким образом, trunk всегда стабилен.
Решил улучшить процесс, чтобы большая часть работы выполнялась автоматически, заодно перейти на git (в котором пока не профи).
Итак, будет ветка development и ветка production. Ветка production всегда содержит только тот код, который прошел тесты, из production можно делать релизы. Ветка development — для текущей разработки.
Вижу процесс таким образом: создается тикет, далее создается ветка (от development), в которой работает разработчик. Он пишет код и добавляет тесты для проверки новой функциональности.
Когда он считает, что разработка завершена, то выставляет в тикете статус "Ready to test". Это отслеживает специальный скрипт, который по выставлению статуса мерджит ветку в development (но не коммитит — тут вопрос, об этом ниже).
Если произошел конфликт при мердже, то тикет опять переходит в статус "Open".
Если все смерджилось, то код собирается, потом прогоняются тесты. Если тесты не прошли, то тикет опять переходит в статус "Open".
Если тесты прошли, то — если бы тут был svn, то было бы сделано svn commit в development, не знаю как в git, а тикет закрывается.
Меня пугает такой сценарий: пока прогоняются тесты (они у нас долго исполняются, и, кроме того, они будут запускаться на куче виртуалок, потому что продукт чувствителен к разным версиям Windows) development может измениться, и нету гарантии, что после коммита в development, development останется стабильным (т.е. тесты проходят). Ведь мы брали старую ревизию development-а.
Что же, в таком случае надо делать мердж бранча и коммитить его в development, а уже потом прогонять тесты?
Но тогда мы имеем последнюю ревизию, которая может быть нестабильной, тесты-то пока прогоняются. А если в этот момент будет создан новый тикет, то бранч будет нестабильным.
Можно было бы тесты прогонять в git hook, но они прогоняются довольно долго. Не получится ли так, что нельзя будет делать новые коммиты пока хук не отработал свое? Ну а как еще гарантировать, что каждая ревизия development стабилльна...
Как лучше всего организовать процесс? У кого какая практика?