Pull request’ы GitVerse в Keepr, а время — комментарием
Что делает интеграция
Одна интеграция связывает репозиторий GitVerse с одним проектом Keepr. Входящее направление: GitVerse сообщает Keepr о своих pull request’ах — новый pull request становится задачей в проекте Keepr, смена его заголовка переименовывает задачу, закрытие или слияние архивирует её, повторное открытие восстанавливает.
Исходящее направление: Keepr возвращает отслеженное время. В GitVerse нет поля учёта времени, поэтому каждая запись времени на задаче pull request’а становится одним комментарием в нём: он правится при изменении записи и удаляется вместе с ней. Отправляется только время из проекта Keepr этой интеграции — с точностью до секунды, без округления.
Чего интеграция не делает: у трекера задач GitVerse — задач по адресу — нет публичного API и вебхуков. Keepr не может создавать, закрывать или переименовывать задачи по нему и не может отправлять туда время. Как всё же учитывать по ним время — в разделе «Задачи трекера» ниже.
Перед началом
В Keepr нужно быть владельцем или администратором организации либо менеджером рабочего пространства, в котором лежит проект. Интеграции есть на всех тарифах: на Free одновременно работает одна, на Team — три, на Ultimate, включая пробный период, — сколько нужно.
В GitVerse нужно право менять настройки репозитория, чтобы добавить вебхук. У GitVerse один адрес, , поэтому вводить его не нужно.
1. Создайте интеграцию в Keepr
Откройте «Настройки организации» → «Интеграции» и нажмите «Новая интеграция». Выберите GitVerse, проект Keepr, в который пойдут задачи, и имя, от которого интеграция действует: в Keepr её действия выглядят, например, как «Архивировано: GitVerse · Сайт».
После этого Keepr один раз покажет секрет вебхука. Скопируйте его, прежде чем закрыть окно: потом видны только первые символы. Если секрет потерян, смените его на странице интеграции и вставьте новый в GitVerse.
2. Добавьте вебхук в GitVerse
В репозитории откройте «Настройки» → «Вебхуки» и добавьте вебхук со своим URL — не из готовых вариантов Telegram, MAX или Discord. Вставьте адрес из раздела «Входящие вебхуки» интеграции.
GitVerse ничего не подписывает, поэтому Keepr проверяет заголовок Authorization. В поле «Заголовок Authorization» впишите , пробел и секрет вебхука. Доставка без него или со старым секретом отклоняется.
В событиях выберите «по выбору» и отметьте события pull request’ов — или выберите «все»: остальные Keepr записывает и оставляет без действия. Сохраните вебхук.
3. Решите, от чьего имени уходит время
GitVerse показывает автором каждого комментария владельца токена, которым пользуется Keepr. В комментарии назван участник Keepr, отследивший время, но автором записей всех участников будет этот аккаунт.
У токена GitVerse нет ограничений по правам: он может всё, что может его аккаунт. Поэтому заведите для Keepr отдельный аккаунт, дайте ему право записи только в репозитории интеграции, войдите под ним и создайте токен в «Настройки» → «Токены». GitVerse показывает токен один раз — скопируйте его.
Ваш собственный токен работает так же, но тогда каждый комментарий будет показан как ваш, а у Keepr окажется ключ ко всему, что доступно вам.
4. Укажите в Keepr токен
На странице интеграции откройте «Ключи доступа» и нажмите «Задать…» рядом с ключом доступа GitVerse. Адрес уже задан — ; вставьте токен и сохраните.
Keepr хранит токен в зашифрованном виде и потом показывает только его первые символы. Он нужен для отправки времени и чтобы прочитать ветку и описание pull request’а и связать его с задачей трекера, — больше ни для чего. Без него pull request’ы по-прежнему приходят, но ни один не связывается, а в последних доставках видно «Не удалось узнать его задачи».
Связь pull request’ов с задачами трекера
Pull request привязывается к задаче трекера — его время попадает в задачу Keepr с ключом этой задачи, а не в отдельную, — если его ветка названа по Conventional Branch и описание в ней начинается с ключа, например . Учитываются префиксы feature, feat, bugfix, fix, hotfix, chore, ai, claude, codex, copilot и cursor; ветки release — нет.
Иначе Keepr ищет в описании pull request’а строку-футер Conventional Commits с ключом, например , где бы она ни стояла, — заключительная строка после неё не мешает. Подходят и Closes, Fixes, Resolves — с или после слова.
Ключ должен называть задачу трекера, которую Keepr уже знает: ту, на которой вы запускали таймер с её страницы в браузерном расширении, в проекте интеграции. Из pull request’а Keepr задачу трекера не создаёт, поэтому ветка вроде её не выдумает. Известный ключ из ветки главнее; иначе привязывает ровно один известный ключ из футеров. Если таких нет или их несколько, pull request становится собственной задачей, которая уходит в архив при слиянии или закрытии, и перех одит в задачу трекера при следующем событии, как только Keepr её узнает. Ветки и описания, не следующие ни одному из соглашений, не связываются. Время в задаче с ключом трекера никуда в GitVerse не отправляется — у трекера нет API — и остаётся в Keepr.
Что отправляет Keepr
Запись отправляется, когда она завершена — идущий таймер ничего не отправляет, пока не остановится, — и только если её задача лежит в проекте интеграции и ссылается на pull request этого репозитория. Так связаны задачи, созданные интеграцией.
Каждая запись получает один комментарий в pull request’е с участником, длительностью и днём. Изменение переписывает этот комментарий, а не добавляет новый, а удаление записи удаляет его. Комментарий, удалённый вручную, появится снова при следующем изменении записи.
Импортированное время — это история, и оно не отправляется. Список «Недавно отправлено» на странице интеграции показывает последние записи: pull request, участника, сколько времени держит GitVerse и удалась ли последняя отправка; у неудачной строки написано, почему и что делать.
Задачи трекера
Трекер задач GitVerse ничего не сообщает Keepr, поэтому его задачи сами задачами Keepr не становятся. Учитывайте по ним время в браузерном расширении Keepr: откройте страницу задачи — расширение возьмёт с неё ключ и название и запустит таймер на подходящей задаче Keepr, той же, к которой привязываются связанные pull request’ы. Расширение — на странице «Приложения».
Это время остаётся в Keepr, в его отчётах и счетах; в задачу трекера ничего не пишется.
Пауза, смена секрета и отзыв
Переключатель на странице интеграции выключает её, ничего не теряя. Пока она выключена, доставки записываются, но не выполняются, и время не отправляется: запись, сохранённая во время паузы, уйдёт при следующем изменении. Повторное включение снова занимает место в лимите тарифа.
«Заменить…» в разделе «Ключи доступа» сразу заменяет секрет вебхука, без льготного периода: доставки не проходят, пока и новый секрет не окажутся в заголовке Authorization вебхука. «Удалить» рядом с ключом доступа GitVerse останавливает отправку времени и не трогает входящее направление.
Отзыв окончателен. Keepr уничтожает оба секрета и больше ничего не выполняет; интеграция остаётся в списке как история, а её действия — за ней в журнале аудита и на архивных задачах. Удалите токен и в GitVerse.
Если что-то пошло не так
Каждая доставка появляется в последних доставках интеграции вместе с тем, что она сделала. Если GitVerse показывает отказ с кодом 401, в доставке не было заголовка Authorization или в нём другой секрет: проверьте, что там , пробел и текущий секрет. «Без действия» — событие не о pull request’е, например push. «Задача уже есть» значит, что задача для pull request’а уже существовала, и ничего не задвоилось.
В «Недавно отправлено» «Не заданы адрес или ключ доступа» значит, что у интеграции ещё нет токена. «Ключ доступа отклонён» — токен удалён или его аккаунт потерял доступ к репозиторию. «Задача не найдена» — pull request удалён или аккаунт токена его не видит. «Сервис отказал» — любой другой отказ GitVerse; «Сервис недоступен, повторим» проходит сам, как только GitVerse ответит.
Отправка, которая окончательно не удалась, повторяется при следующем изменении записи.