こんにちは、コネヒトでiOSエンジニアをやっていますyanamuraです。
iOSやAndroidアプリの開発だとgit-flowを使って開発することも割と多いのではないかと思います。 git-flowの場合releaseブランチをマージする場合はdevelopとmain/masterにマージする必要があるのでちょっと手間がかかります。 また、main/masterにマージ後にタグをつけてpushし、さらにリリースノートを書いたりすると結構面倒です。
これをGitHub Actionsで自動化しました。
想定しているフロー
以下の手順は手作業で行います
release-x.x.x
という命名ルールでreleaseブランチをつくる- 1のreleaseブランチでPull Requestを作成する。
- 2のPull Requestのbodyにリリースノートに書く内容を記載する
- releaseブランチをマージしたいときは、Pull Requestに
shipit
ラベルをつける
こうすると自動でマージが行われ、vx.x.x
というタグがつけられ、Pull Requestのbodyに書いた内容がリリースノートに反映されます。
GitHub Actionsの作成
.github/workflows
というフォルダを作成し、その中にymlファイルを作成し、以下の内容をコピペするだけです。
name: automerge on: pull_request: types: [labeled] jobs: automerge: if: github.event.label.name == 'shipit' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Extract branch name uses: mdecoleman/pr-branch-name@1.0.0 id: extract_branch with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Extract tag name shell: bash run: | branch=${{ steps.extract_branch.outputs.branch }} echo "##[set-output name=tag;]$(echo ${branch#release-})" id: extract_tag - name: Merge if: startsWith(steps.extract_branch.outputs.branch, 'release') uses: yanamura/git-flow-merge-action@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: ${{ steps.extract_branch.outputs.branch }} tag: v${{ steps.extract_tag.outputs.tag }} - name: Get body from PullRequest id: pr-body uses: actions/github-script@v2 with: github-token: ${{secrets.GITHUB_TOKEN}} result-encoding: string script: | const result = await github.pulls.get({ owner: context.repo.owner, repo: context.repo.repo, pull_number: context.issue.number }) return result.data.body - name: Create ReleaseNote if: startsWith(steps.extract_branch.outputs.branch, 'release') uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ steps.extract_tag.outputs.tag }} release_name: Release ${{ steps.extract_tag.outputs.tag }} body: | ${{ steps.pr-body.outputs.result }} draft: false prerelease: false
マージする際のトリガーとなるラベル名やリリースブランチの命名、タグの命名など変えたい場合はカスタマイズしてみてください。(masterではなくmainブランチの場合は、こちらを見てmainを指定してください)
かんたんにできると思いますので、ぜひお試しください!
今回ご紹介したところ以外にもGitHub Actionsを活用して自動化を行っているのでまた別の機会にご紹介できたらなと思います。
最後に
コネヒトではエンジニアを募集しています。少しでもご興味のあるかたはぜひ一度話を聞きに来てください! hrmos.co