Привет, Хабр!

С вами команда YouTrack из JetBrains. У нас отличные новости — начиная с YouTrack 2020.3 в задачах отображаются не только коммиты, связанные с задачами, но и пул-реквесты. В сегодняшнем посте мы расскажем, что это, зачем это, и как это поможет сделать процесс разработки более эффективным и понятным, а еще покажем остальные нововведения последней версии YouTrack.

image

За подробностями добро пожаловать в пост.

Что такое пул-реквест?


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

Грубо говоря, пул-реквест — это способ рассказать владельцу репозитория или своей команде, что вы сделали в проекте, и предложить включить ваши изменения в одну из общих веток разработки. Владелец репозитория (или человек, который будет делать вам код-ревью) может как принять изменения (смержить пул-реквест), так и отклонить — например если изменения противоречат видению автора проекта или в процессе код-ревью решили, что код нужно доработать.

В проектах с открытым исходным кодом нередко существуют требования к пул-реквестам, без соответствия которым пул-реквест не будет принят: например, наши коллеги из команды Kotlin просят разработчиков убедиться, что в описании пул-реквеста указана ссылка на соответствующую задачу в YouTrack, что изменения в пул-реквесте относятся только к указанным задачам, и что новый код запускается, корректно выполняется и покрыт тестами.

Зачем пул-реквесты в трекере?


Создание и принятие/отклонение пул-реквестов — это такие же важные шаги в жизненном цикле задачи, как и смена статуса или привязка соответствующего коммита. Все эти шаги показывают ход работы над задачей всем заинтересованным наблюдателям – например, комьюнити проекта с открытым исходным кодом или проектному менеджеру команды. Например, если задача не была закрыта из-за отклонения определенного пул-реквеста, эта информация должна быть обязательно отражена в истории задачи — в том числе и в ретроспективных целях, когда вам понадобится понять, почему задача столько времени провисела в открытом состоянии. Такой механизм делает процесс разработки более прозрачным и позволяет вам отслеживать жизненный цикл задачи шаг за шагом, не пропуская важных событий.

Просмотр пул-реквестов в задачах


Вернемся к YouTrack: начиная с YouTrack 2020.3, разработчики смогут видеть пул-реквесты из GitHub, GitLab, BitBucket, Gogs и Gitea в задачах рядом с коммитами. Чтобы пул-реквест вместе с его описанием, числом обновленных файлов и информацией об авторе отобразился в задаче, нужно упомянуть соответствующую задачу в названии пул-реквеста (все точно так же, как и с коммитами).

Далее, после принятия или отклонения пул-реквеста, YouTrack включит это событие в поток активности задачи вместе с автором события и статусом пул-реквеста. Получается, лента изменений задачи будет отображать весь жизненный цикл пул-реквеста — его создание и финальное решение (отклонение либо включение в кодовую базу).

image

Автоматизируй это


Мы очень любим и активно используем автоматизацию, поэтому не могли пройти мимо возможности использовать события из системы контроля версий в скриптах автоматизации. Теперь вы можете инициировать запуск рабочего процесса (workflow) YouTrack при добавлении пул-реквеста или коммита. Кроме того, в рабочих процессах появился доступ к свойствам коммитов и пул-реквестов, таким как имя автора, описание или примечание.

Что это значит? Например, вы можете автоматически менять статус задачи в зависимости от статуса пул-реквеста или отправлять запрос на код-ревью коллеге при создании пул-реквеста.

Вот такой несложный скрипт автоматически переведет задачу в статус Fixed при мерже пул-реквеста и затем назначит ее на QA-лида с сообщением о том, что задача готова к тестированию:

var entities = require('@jetbrains/youtrack-scripting-api/entities');
var QA_LEAD = 'qa_superman';

exports.rule = entities.Issue.onChange({
  title: 'Set_to_fixed_when_pull_request_is_merged_and_notify',
  guard: function(ctx) {
    return ctx.issue.pullRequests.isNotEmpty() && 
      ctx.issue.pullRequests.last().previousState && 
      ctx.issue.pullRequests.last().state.name !== ctx.issue.pullRequests.last().previousState.name &&
      ctx.issue.pullRequests.last().state.name === "MERGED";
  },
  action: function(ctx) {
    var issue = ctx.issue;
    issue.State = ctx.State.Fixed;
    issue.Assignee = entities.User.findByLogin(QA_LEAD);
    issue.addComment("The issue is ready to be tested");
  },
  requirements: {
    State: {
      type: entities.State.fieldType,
      Fixed: {
        name: "Fixed"
      }
    },
  }
});

Как и раньше, скрипты могут запускаться по расписанию или при определенном событии в зависимости от вашего процесса. Подробности о рабочих процессах и о том, как их писать, можно найти здесь.

Что еще интересного?


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

image

Для удобной работы со списком задач мы добавили возможность отображать только незавершенные задачи в один клик и сортировать задачи по количеству комментариев. Базе знаний досталась подсветка синтаксиса для блоков кода с автоматическим определением языка программирования, а для любителей Markdown мы сделали возможность менять размер вложенных изображений, видео и других медиа-файлов в задачах и статьях.

Есть новости и для тех, кто использует LDAP-сервер для управления учетными данными пользователей. YouTrack и раньше позволял аутентифицироваться с помощью учетных данных из LDAP-сервера, а теперь к этому добавилась синхронизация групп и атрибутов пользователей с LDAP-сервером по расписанию. Это позволит поддерживать учетные данные и информацию о принадлежности к LDAP-группам в максимально актуальном состоянии — например, поможет избежать несанкционированного доступа к данным в трекере, если пользователь уже не является членом группы на вашем LDAP-сервере, но все еще получает соответствующий доступ в трекере из-за задержки в синхронизации между LDAP-сервером и YouTrack.

Подробности обо всех изменениях можно найти на нашем сайте.

А если вы еще не знакомы с YouTrack или только начинаете работу с ним — добро пожаловать на нашу бесплатную демонстрацию основ YouTrack.