Синхронизация и много репозиториев

Локальный CI

Цикл «push — ожидание — красный крестик — правка — push» съедает десять минут на каждый круг. С act те же воркфлоу выполняются в контейнерах Docker на вашей машине, а Gitcito ими управляет: выберите воркфлоу, нажмите «Запустить» и смотрите тот же лог, который напечатал бы CI — до того, как что-либо покинет вашу машину.

Локальный CI

Интеграция, а не встроенная среда выполнения

Gitcito намеренно не поставляет act или Docker — приложение, тянущее за собой контейнерную среду, это противоположность git-клиента. Это интеграция по желанию: включите её в Настройки → Интеграции (или прямо в диалоге), и Gitcito определит, что установлено, и проведёт вас через остальное — brew install act, запущенный демон Docker, готово. Ничего не запускается, пока не выполнены все три условия: интеграция включена, act установлен, Docker доступен.

Что он делает

  • Перечисляет каждый воркфлоу из .github/workflows по его name:.
  • Запустить выполняет воркфлоу через act на вашем рабочем дереве — вместе с незакоммиченными изменениями, и в этом весь смысл: тестируйте до коммита, а не после пуша.
  • Вывод стримится в диалог вживую; Остановить прерывает запуск. Код выхода 0 показывает Успешно, всё остальное — Сбой с кодом.

Вердикты по коммитам на графе

Вердикты Local-CI на графе

Завершённый запуск прикрепляет свой результат к протестированному коммиту: маленькая колба помечает строку в графе зелёным или красным, так что с одного взгляда видно, какие коммиты уже пережили CI локально. Вердикт хранится как git-заметка в refs/notes/gitcito-ci — локально на вашей машине, по умолчанию никогда не пушится.

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

Проверить коммит или диапазон — не покидая свою ветку

Секция Проверить коммит или диапазон в диалоге запускает воркфлоу на коммитах, на которых вы не находитесь. Каждый коммит выгружается в отсоединённом (detached) состоянии во временный worktree в системном временном каталоге, act работает там, а worktree удаляется, чем бы ни закончился запуск — ваше рабочее дерево и ваша ветка никогда не двигаются. Поскольку такой checkout по построению безупречен, вердикт всегда прикрепляется к протестированному коммиту. Правый клик по коммиту на графе сразу предлагает Запустить локальный CI на этом коммите.

Цена называется до того, как что-либо запустится, а не обнаруживается после: введите ревизию или диапазон (main..HEAD, HEAD~5.., sha), нажмите Предпросмотр, и Gitcito покажет, сколько коммитов подходит под условие и какие новейшие N — явный бюджет, ограниченный 50 — действительно будут запущены. Прогон выполняет их последовательно (act плюс Docker достаточно тяжелы, чтобы параллельные запуски дрались за машину), стримит лог каждого запуска, вживую помечает каждый коммит как успешный или сбойный, а Остановить прерывает между коммитами, убивая текущий. Рассчитывайте на реальные минуты на каждый коммит.

Ещё одно ограничение, о котором стоит знать: временный worktree содержит файлы коммита, но не выгруженные сабмодули вашего репозитория — воркфлоу, зависящий от инициализированных сабмодулей, поведёт себя как на свежем клоне без них.

Ограничения

  • act — очень хорошая имитация раннеров GitHub, но не идеальная: экшены, которым нужны сервисы на стороне GitHub, секреты или экзотические образы раннеров, могут вести себя иначе. Локальный зелёный — сильный аргумент, но не гарантия.
  • Один запуск на репозиторий за раз; старт следующего отменяет предыдущий.
  • Только запуски целых воркфлоу — выбор отдельных джобов, матриц или событий — территория act; когда нужны флаги, запустите его в терминале.
  • Первый запуск скачивает образы раннеров — один раз будет медленно.

См. также: Хостинги и пул-реквесты · Встроенный терминал

Улучшить этот перевод на GitHub