CI通ったらGitHub Actionsで自動でpull reqをdraftからready for reviewにする

以下例

on:
  pull_request:

jobs:
  他のjob1:
     # 内容省略

  他のjob2:
     # 内容省略

  適当なjob名:
    timeout-minutes: 3
    runs-on: ubuntu-latest
    needs:
    - 他のjob1
    - 他のjob2 # ここに必要なjobを全部列挙。複数のyaml全部checkしたい場合はもっと工夫が必要
    if: github.event_name == 'pull_request'
    steps:
      - uses: actions/github-script@v6
        if: ${{ contains(github.event.*.labels.*.name, 'ここに独自に作ったラベル名') }}
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const query = `
              mutation($id: ID!) {
                markPullRequestReadyForReview(input: { pullRequestId: $id }) {
                  pullRequest {
                    id
                  }
                }
              }
            `;
            const variables = {
              id: context.payload.pull_request.node_id
            }
            const result = await github.graphql(query, variables)
            console.log(result)
  • 似たようなものはあったが、完全に目的に合うようなものが、探してもなかったというか、この程度なら自作して直接yamlに書き込んだ方が管理が楽なので、いろいろ参考にしつつ作った。
  • CI通ったら は工夫すれば任意の条件に変更可能
  • 上記は「この操作をするpull reqかどうか?」を、labelで制御してるが、そこもいい感じに工夫すれば、いろいろな方法が可能なはず
  • デフォルトの権限にしてるなら工夫は必要ないが、権限絞ってる場合は少なくとも contenst: write が必要になるので注意
  • おそらくv3のRESTではダメで、graphqlのAPIではないと出来ないらしくて、そっちはあまり呼び出したことないから多少苦労したが、こういう感じで呼び出せるらしい
    • あるいはghコマンド使う方法もある。ただしあれはself hosted runnerに入ってないなどのポータビリティの問題で actions/github-script の方が良い気がする
  • 逆に CI落ちたらdraftにする みたいなのも作ったら便利か? (それもgraphqlのAPIでないと無理?)