Как узнать, одобрен или отклонен запрос на извлечение с помощью API в github?

Я хотел бы знать, есть ли в Github API функция, которая возвращает статус запроса на вытягивание, независимо от того, принят он или отклонен. Существует ли такая функция?


person Gowtham    schedule 24.05.2017    source источник


Ответы (6)


Вы можете получить один PR и проверить это свойства state и merged. Если он объединен, он принят. Если он закрыт и не объединен, он может быть отклонен.

На самом деле он может быть не отклонен, а закрыт создателем. Я не уверен, можно ли проверить, был ли он закрыт другим пользователем (отклонено) или его создателем (отклонено).

person Kolyunya    schedule 24.05.2017
comment
Он предлагает state, однако это может быть только open или closed. Не принято, не отклонено или что-то среднее между ними. /e: только что увидел ваше редактирование, это был бы хороший способ узнать, было ли оно принято или отклонено. - person nbokmans; 24.05.2017
comment
@nbokmans Я обновил ответ. Спасибо, что указали на это! - person Kolyunya; 24.05.2017
comment
@nbokmans - Спасибо за быстрый вклад. Можно ли это сказать по отзывам? Ссылка help.github.com/articles/ показывает, что, используя обзоры, рецензент может запросить изменения, что указывает на то, что PR отклонен для изменений. Можно ли получить это в API? - person Gowtham; 24.05.2017
comment
@Gowtham да, для обзоров тоже есть API. developer.github.com/v3/pulls/reviews - person Kolyunya; 24.05.2017

Я тоже был в тупике от этой проблемы. Мне было трудно найти соответствующую информацию в документах.

Вариант А

Тактика, которую я выбрал, заключается в использовании выдает конечную точку поиска с квалификатором review в параметре q.

Итак, в моем случае, когда я хочу увидеть все назначенные мне PR, которые еще не были проверены, я бы нажал эту конечную точку: https://github.com/api/v3/search/issues?q=is:open+is:pr+review-requested:jordan-bonitatis+review:none

Другие квалификаторы review включают approved и changes_requested, как описано здесь: https://docs.github.com/en/github/searching-for-information-on-github/searching-issues-and-pull-requests#поиск-по-пулл-запросу-обзор-статус-и-рецензент

Вариант Б

Если вы хотите увидеть статус обзора для данного PR, вместо того, чтобы получать список, отфильтрованный по статусу, как в моем примере выше, вы можете нажать конечная точка проверки запросов на вытягивание: /repos/:owner/:repo/pulls/:number/reviews

Это вернет список обзоров для PR, каждый из которых имеет ключ state.

Обратите внимание, что у данного PR может быть несколько обзоров с конфликтующими состояниями. Например, если teamMemberA одобрил это, но teamMemberB запросил изменения. Вам придется пройтись по всему списку и решить, как вы хотите его обрабатывать, основываясь на всех состояниях.

person Jordan Bonitatis    schedule 23.01.2019

У меня было похожее требование - знать, одобрен ли PR или нет, прежде чем слить его в мастер. Я добавил правило в репозиторий, чтобы гарантировать, что каждый PR должен быть одобрен до слияния. Затем при использовании API для получения подробной информации о ветке было одно поле, в котором указывалось, была ли ветвь чистой для слияния или заблокированной. Я использовал это как способ управлять вещами в своем приложении.

 mergeable_state
person xan_z    schedule 23.01.2019

Теперь это возможно с помощью GraphQL.

В частности, если перечисление mergeStateStatus равно BLOCKED, то запрос на включение не был одобрен и для любого другого статуса это было бы одобрено.

Это перечисление присутствует в объекте PullRequest. Обратите внимание, что на момент публикации это функция предварительного просмотра и поэтому должен иметь соответствующий заголовок для работы. Он также не будет работать с GraphQL Explorer, пока он находится в предварительный просмотр.

person Molten Ice    schedule 28.11.2019

В зависимости от конфигурации репо вы можете получить ответ так или иначе. В приведенных ниже примерах используется GraphQL API.

Случай 1: Перед слиянием требуются PR-обзоры

Вы можете запросить reviewDecision в поле pullRequest для данного репозитория.

reviewDecision имеет тип PullRequestReviewDecision, перечисление со значениями APPROVED, CHANGES_REQUESTED и REVIEW_REQUIRED.

Пример запроса:

{
  repository(name: "gatsby", owner: "gatsbyjs") {
    pullRequest(number: 30371) {
      title
      reviewDecision
      url
    }
  }
}

Ответ:

{
  "data": {
    "repository": {
      "pullRequest": {
        "title": "chore(gatsby): don't terminate dev server if graphql wasn't imported from gatsby",
        "reviewDecision": "APPROVED",
        "url": "https://github.com/gatsbyjs/gatsby/pull/30371"
      }
    }
  }
}

Случай 2. Перед слиянием не требуется PR-проверка

Если в настройках репозитория не указано, что проверки необходимы, reviewDecision будет равно null независимо от утверждений.

В этом случае вы можете перебирать отзывы и проверять состояния. state имеет тип PullRequestReviewState, перечисление со значениями APPROVED, CHANGES_REQUESTED , COMMENTED, DISMISSED и PENDING.

Пример запроса:

{
  repository(name: "create-react-app", owner: "facebook") {
    pullRequest(number: 10003) {
      title
      reviewDecision
      url
      reviews(first: 100) {
        nodes {
          state
          author {
            login
          }
        }
      }
    }
  }
}

Ответ:

{
  "data": {
    "repository": {
      "pullRequest": {
        "title": "Update postcss packages",
        "reviewDecision": null,
        "url": "https://github.com/facebook/create-react-app/pull/10003",
        "reviews": {
          "nodes": [
            {
              "state": "APPROVED",
              "author": {
                "login": "jasonwilliams"
              }
            }
          ]
        }
      }
    }
  }
}

Возможна фильтрация отзывов для одобрения: reviews(first: 100, states: APPROVED).

Обратите внимание, что два отзыва будут возвращены, если рецензент даст свое согласие и впоследствии запросит изменения.

Проверка PR state (типа PullRequestState) может ввести в заблуждение: пользователь с правами администратора мог обойти обязательный процесс проверки для объединения изменений.

person Jelefra    schedule 23.03.2021

В официальной документации Github API указано, что есть запрос GET, который вы можете сделать, поле merged_at, если оно уже было объединено. Изменить: есть также объединенное поле.

Фрагмент: ... "merge_commit_sha": "e5bd3914e2e596debea16f433f57875b5b90bcd6", "merged": false, "mergeable": true, "merged_by": { "login": "octocat", "id": 1, "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false },

person Zee    schedule 24.05.2017