GitHub actions で PR が無ければ作る、あれば更新する

こんな感じでできた。gh pr list で標準で jq 使えることが今回の発見。かっこいい。

env:
  TARGET_BRANCH: 'target-branch'
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
  create-or-update-pr:
    runs-on: ubuntu-latest
    steps:
      - name: search pr number and set to env
        # この場合は head が 'target-branch' かつマージされてないブランチを探している
        run: echo "PR_NUMBER=$(gh pr list --search "head:${{ env.TARGET_BRANCH }} is:unmerged" --json number --jq ".[].number")" >> $GITHUB_ENV
      - name: create pull request
        # 空なら 0 が入る ref. https://docs.github.com/ja/actions/learn-github-actions/expressions#operators
        if: ${{ env.PR_NUMBER == 0 }}
        run: gh pr create --base main --head ${{ env.TARGET_BRANCH }} --title "タイトル" --body "本文"
      - name: update pull request
        if: ${{ env.PR_NUMBER != 0 }}
        run: gh pr edit ${{ env.PR_NUMBER }} --title "更新後のタイトル" --body "更新後の本文"