Github Action : 如果 PR 已存在则停止该操作

sar*_*mar 3 github github-api github-actions

我正在通过 GitHub 操作创建自动 PR,因此每当分支上发生新推送时dev。自动创建 PR 从devmaster

我想更改:如果 PR 已存在 ( master<- dev),则无需运行此操作,那么如何检查 PR 是否已存在?

GitHub 行动

name: Pull Request Action
on:
    push:
        branches: ['dev']

jobs:
    create-pull-request:
        runs-on: ubuntu-latest
        steps:
            - name: Create Pull Request
              uses: actions/github-script@v6
              with:
                  script: |
                      const { repo, owner } = context.repo;
                      const result = await github.rest.pulls.create({
                        title: 'Master Sync : Auto Generated PR',
                        owner,
                        repo,
                        head: '${{ github.ref_name }}',
                        base: 'master',
                        body: [
                          'This PR is auto-generated by',
                          '[actions/github-script](https://github.com/actions/github-script).'
                        ].join('\n')
                      });
                      github.rest.issues.addLabels({
                        owner,
                        repo,
                        issue_number: result.data.number,
                        labels: ['feature', 'automated pr']
                      });
Run Code Online (Sandbox Code Playgroud)

Ben*_* W. 6

没有任何条件可以直接在if作业本身的步骤中使用,但您可以使用 GitHub CLI 查看是否已经存在这样的 PR,然后提前退出:

steps:
  - name: Check if PR exists
    id: check
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    run: |
      prs=$(gh pr list \
          --repo "$GITHUB_REPOSITORY" \
          --head 'dev' \
          --base 'master' \
          --json title \
          --jq 'length')
      if ((prs > 0)); then
          echo "skip=true" >> "$GITHUB_OUTPUT"
      fi

  - name: Create pull request
    if: '!steps.check.outputs.skip'
  # ...
Run Code Online (Sandbox Code Playgroud)