株式会社ヴァージニアのエンジニアリング本部本部長兼CTOの村上です。今回は小ネタとなります。
"エンジニアのためのマネジメントキャリアパス"という本には、どのような立場になっても完全には技術から離れない方が良い、というようなことが書かれています。そんな大義名分を元に、表題の問題を隙間時間に解決したのでその紹介をしたいと思います。
背景
SMARTCRMでは現在、Gitflowを採用しています。フロントエンドのリポジトリでは、プライマリブランチの中にdevelop
とbeta
を用意しています。
develop
はStaging環境の役割です。ではbeta
が何かというとこちらも、同じStaging環境のAPIを叩きながらも、AWS Amplifyとしてはdevelop
と別アプリケーションとして構築しています。そうすることで、PRのレビューが通り次第すぐにbeta
にマージして単体テストが実行できるようになります。
しかし、このやり方の場合、develop
とbeta
それぞれをベースブランチにしたPRを作成する必要があります。これが意外に面倒なのと、ラベルなどで見分けが付くようにしておかないとややこしいという問題があります。
解決方法
上記の問題を解決するには、
- PR作成時に、当該PRの情報を元に
beta
ブランチをベースブランチにしたPRを作成する -
develop
向けのPRにラベルを付与する
の2つの作業が必要になります。
それぞれを
を使って解決しました。
以下がそのGitHub ActionsのYAMLファイルとなります。
name: create a pull request for beta
on:
pull_request:
types: [ opened ]
branches: [ develop ]
jobs:
action:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set variables
run: |
echo 'PR_BODY<<EOF' >> $GITHUB_ENV
echo "the same as #${{ github.event.pull_request.number }}" >> $GITHUB_ENV
echo "" >> $GITHUB_ENV
echo "---" >> $GITHUB_ENV
echo "" >> $GITHUB_ENV
echo "${{ github.event.pull_request.body }}" >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: pull-request
uses: repo-sync/pull-request@v2
with:
source_branch: "${{ github.event.pull_request.head.ref }}"
destination_branch: beta
github_token: ${{ secrets.GITHUB_TOKEN }}
pr_label: beta
pr_title: "${{ github.event.pull_request.title }}"
pr_body : |
${{ env.PR_BODY }}
- name: Labeling
uses: andymckay/labeler@master
with:
add-labels: "develop"
ポイントは以下となります
- トリガーとして
pull_request
のtypes: [ opened ]
を指定することで、PR作成時のみに限定する - 以下のページに書かれた、
pull_request
のpayloadを駆使して作成元のPRのうち、作成するPRに必要な情報を集める -
GITHUB_ENV
を使って、PRのdescriptionに相当する内容の入った環境変数を定義する
1については、repo-sync/pull-request
が新規にPRを作成することのみに対応しているからです。3については、公式のSetting an environment variableに書かれているので何も難しいことは無いのですが、意外に動的に環境変数をGitHub Actionsで指定することが私はこれまで無かったので、念の為ポイントとして上げさせて頂きました。
このGitHub Actionsの結果が以下となります。
ラベルがあることで、やはり見分けが付きやすくなっています。また、PRのリンクがありつつもdescriptionもコピーされていることで、内容もわかりやすくなっています。反面この設定の欠点としては、PR作成時にタイトルとdescriptionをきちんと書いておかないと中途半端な内容で複製される、というものがあります。ただ、PRのリンクは掲載しているのと最初にちゃんと書くという意識付けにもなるので、意外にもあまり困ってはいません。
本当にこれだけの記事なので恐縮ですが、同様のことをしたいと思っている方の参考になれば幸いです。
Discussion