コネヒト開発者ブログ

コネヒト開発者ブログ

コピペでできるGitHub Actionsでreleaseブランチのマージ、リリースノートの作成の自動化【git-flow用】

こんにちは、コネヒトでiOSエンジニアをやっていますyanamuraです。

iOSやAndroidアプリの開発だとgit-flowを使って開発することも割と多いのではないかと思います。 git-flowの場合releaseブランチをマージする場合はdevelopとmain/masterにマージする必要があるのでちょっと手間がかかります。 また、main/masterにマージ後にタグをつけてpushし、さらにリリースノートを書いたりすると結構面倒です。

これをGitHub Actionsで自動化しました。

想定しているフロー

以下の手順は手作業で行います

  1. release-x.x.x という命名ルールでreleaseブランチをつくる
  2. 1のreleaseブランチでPull Requestを作成する。
  3. 2のPull Requestのbodyにリリースノートに書く内容を記載する
  4. 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

hrmos.co