Как я могу получить последние данные о PR, в частности, основные этапы при выполнении заданий YAML?

#github #github-actions

Вопрос:

Мне нужно создать задание YAML, которое проверяет, установлена ли веха в PR, и не выполняет автоматическую проверку, если веха не установлена.

Это та работа, которая у меня есть в .файл yml:

 jobs:
  milestone:
    name: Check if milestone is set
    runs-on: ubuntu-latest
    steps:
      - name: Check milestone
        uses: actions/github-script@v5
        with:
          script: |
            const pr = context.payload.pull_request;
            if (pr.milestone) {
              core.info(`This pull request has a milestone set: ${pr.milestone.title}`);
            } else {
              core.setFailed(`A maintainer needs to set the milestone for this pull request. Milestone is ${pr.milestone}`);
            }
 

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

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

  • У меня есть пиар без вехи
  • Я нажимаю на новое обязательство по связям с общественностью
  • Работа завершается неудачей, как и ожидалось
  • Я установил веху в пиаре
  • Я повторно запускаю задания
  • Работа все еще терпит неудачу, но я бы ожидал, что она пройдет

Я использовал это как вдохновение для своего сценария https://github.com/pllim/action-check_milestone_exists . Единственное, что я изменил, — это версия скрипта GitHub с 3 на 5. Результат тот же при использовании версии 3.

Я также взглянул на это https://github.community/t/feature-request-add-milestone-changes-as-activity-type-to-pull-request/16778/12 . Означает ли это, что это невозможно, или это что-то другое?

Ответ №1:

Вы можете использовать вызов API Github в действии github-скрипта, используя github.request следующее:

 github.request("GET /repos/{owner}/{repo}/pulls/{pr}", {
    owner: context.repo.owner,
    repo: context.repo.repo,
    pr: context.payload.pull_request.number
});
 

Он использует формат запроса octokit

Следующее проверит, существует ли веха для текущего PR:

 on: [pull_request]
name: build
jobs:
  milestone:
    name: Check if milestone is set
    runs-on: ubuntu-latest
    steps:
      - name: Check milestone
        uses: actions/github-script@v5
        with:
          script: |
            const { data } = await github.request("GET /repos/{owner}/{repo}/pulls/{pr}", {
              owner: context.repo.owner,
              repo: context.repo.repo,
              pr: context.payload.pull_request.number
            });
            if (data.milestone) {
              core.info(`This pull request has a milestone set: ${data.milestone.title}`);
            } else {
              core.setFailed(`A maintainer needs to set the milestone for this pull request.`);
            }
 

Комментарии:

1. сработало как заклинание. большое спасибо!!!