ゴール
- GithubActionsを使ってPullRequestを自動生成する
- developブランチからmainブランチに対して作成
他のGithubActionsに関する記事はこちら
https://go-tech.blog/category/githubactions/
導入手順
前提
- 何かしらのプロジェクトフォルダが作成されている
- mainブランチと他ブランチが作成されている
- 今回はdevelopブランチを事前に作成
手順
- GithubActionsのワークフローを作成
- PRの自動作成処理
- Cronによる定期実行
実装
ワークフローのファイル作成
最終的なディレクトリ構成は以下のようになります。
└── .github
└── workflows
└── create-pull-request.yml
PullRequestの自動作成
最終的には下記コードになります。
name: 'PR develop 2 main'
on:
workflow_dispatch:
jobs:
develop2main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: develop
- name: create pull request for develop 2 main
id: create-pull-request
env:
GH_TOKEN: ${{ github.token }}
run: |
PULL_REQUEST_URI=$(gh pr create --base main --head develop --title "PRDリリース" --body "必要であれば何か書く" -l "release" --reviewer user-name)
実際に行なっていることはghコマンドを使用したPullReqeustの作成になります。
そのため、渡している引数に関しての詳しい情報は公式Docを参考にしてください。
一応今回設定した引数は以下の通りです。
base:マージ先のブランチ
head:マージ元のブランチ
title:PRのタイトル
body:PRのdescriptionの内容
l(label):PRに付与するラベル
reviewer:レビュアーの指定
※workflow_dispatch:この設定を入れておくことで手動にてアクションの実行が可能となる
※付与するlabelは事前に作成しておくこと
注意点
対象リポジトリに対して下記設定を行なっていない場合は事前に設定変更してください。
※「Settings」→「Actions」→「General」内より
上記設定をしていない場合は下記エラーが発生するはずです。
● 「Read and write permissions」にチェックを入れていない場合
Run PULL_REQUEST_URI=$(.....)
error checking for existing pull request: GraphQL: Resource not accessible by integration (repository.pullRequests)
Error: Process completed with exit code 1.
● 「Allow GitHub Actions to create and approve pull requests」にチェックを入れていない場合
Run PULL_REQUEST_URI=$(.....)
pull request create failed: GraphQL: GitHub Actions is not permitted to create or approve pull requests (createPullRequest)
Error: Process completed with exit code 1.
PR自動作成の動作確認
一旦手動実行にてPRが作成されるか確認するため、develop→mainに対して適当な差分をcommitし、「Actions」から該当ワークフローを手動実行します。
実行完了後、無事にPRが作成できていることを確認できました。
Cronによる定期実行
次に定期実行するための設定を追加します。
追加するのは下記2行のみです。
name: 'PR develop 2 main'
on:
workflow_dispatch:
schedule: #追加
- cron: '0 1 * * 1' #追加
jobs:
develop2main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: develop
- name: create pull request for develop 2 main
id: create-pull-request
env:
GH_TOKEN: ${{ github.token }}
run: |
PULL_REQUEST_URI=$(gh pr create --base main --head develop --title "PRDリリース" --body "必要であれば何か書く" -l "release" --reviewer daiki510)
onの下にschduleを追加し、cronで実行日時を定義します。
詳しくは公式Docを参考にしてください。
今回は、月曜日の10時に実行されるように定義しています。
以下、公式より。
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of the month (1 - 31)
│ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
│ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
* * * * *
* | Any value | 15 * * * * runs at every minute 15 of every hour of every day. |
, | Value list separator | 2,10 4,5 * * * runs at minute 2 and 10 of the 4th and 5th hour of every day. |
– | Range of values | 30 4-6 * * * runs at minute 30 of the 4th, 5th, and 6th hour. |
/ | Step values | 20/15 * * * * runs every 15 minutes starting from minute 20 through 59 (minutes 20, 35, and 50). |
これで目的としていた実装は完了です。
補足
ちなみにgh
コマンドを使わずに既存のactionを使う方法もあります。