LoginSignup
29
16

More than 3 years have passed since last update.

git-pr-release with GitHub Actions

Last updated at Posted at 2019-10-30

基本

develop ブランチにPRがマージされたら、masterへのリリースPRを作成する。
すでにある場合は内容を更新する。
PR には release というラベルをつける。

Configuring a workflow

  • develop に push されたら動かす。
  • チェックアウト。
    • checkout@v2は fetch-depth: 0 と指定し、全てのhistoryを取らないと差分PRを列挙できない。
  • rubyのセットアップ。
  • 認証は環境変数に設定される GITHUB_TOKEN を使う。
  • git-pr-release をインストールして実行。
$ vim .github/workflows/create-release-pr.yml
name: Create a release pull request

on:
  push:
    branches:
      - develop

jobs:
  create-release-pr:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0

    - name: Set up Ruby 2.6
      uses: actions/setup-ruby@v1
      with:
        ruby-version: 2.6.x

    - name: Create a release pull request
      env:
        GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        GIT_PR_RELEASE_BRANCH_PRODUCTION: master
        GIT_PR_RELEASE_BRANCH_STAGING: develop
        GIT_PR_RELEASE_LABELS: release
      run: |
        gem install -N git-pr-release -v "1.2.0"
        git-pr-release --no-fetch

:tada:

temp.png

GITHUB_TOKENが用意されるのが助かります、GitHub Actions。

応用

release/** hotfix/** というブランチがpushされたら、masterへ向けたPRを作成する。
すでにある場合は内容を更新する。
PR には release や hotfix といったブランチ名の最初のセクションをラベルとして設定する。

Configuring a workflow (practical version)

  • .git-pr-release-template というファイルに、PRの本文テンプレートを書いておく。(erb)
  • release/** hotfix/** に push されたら動かす。
    • **/ を含んでいてもマッチする。
  • チェックアウト。
  • rubyのセットアップ。
  • 環境変数 GITHUB_REF をパースして、ブランチ名と、ブランチ名の先頭セクションを取得する。
    • ::set-outputで後続のステップに値を渡す。
  • git-pr-release をインストールして実行。
$ vim .git-pr-release-template
<%= ENV['GIT_PR_RELEASE_TITLE'] %>
<% pull_requests.each do |pr| -%>
<%=  pr.to_checklist_item %>
<% end -%>
$ vim .github/workflows/create-release-pr.yml
name: RELEASE - Creates a release pull request

on:
  push:
    branches:
      - release/**
      - hotfix/**

jobs:
  create-release-pr:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0

    - name: Set up Ruby 2.6
      uses: actions/setup-ruby@v1
      with:
        ruby-version: 2.6.x

    - name: Setup vars
      id: vars
      run: |
        echo "::set-output name=branch_name::${GITHUB_REF#refs/heads/}"
        echo "::set-output name=branch_prefix::$(echo ${GITHUB_REF} | cut -d '/' -f 3)"

    - name: Creates a release pull request
      env:
        GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        GIT_PR_RELEASE_BRANCH_PRODUCTION: master
        GIT_PR_RELEASE_BRANCH_STAGING: ${{ steps.vars.outputs.branch_name }}
        GIT_PR_RELEASE_LABELS: ${{ steps.vars.outputs.branch_prefix }}
        GIT_PR_RELEASE_TITLE: "[ReleasePR] ${{ steps.vars.outputs.branch_name }}"
        GIT_PR_RELEASE_TEMPLATE: .git-pr-release-template
      run: |
        gem install -N git-pr-release -v "1.2.0"
        git-pr-release --no-fetch

:confetti_ball:

_ReleasePR.png

参照

git-pr-release
https://github.com/motemen/git-pr-release

Workflow syntax for GitHub Actions
https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions

GitHub Actions: Default environment variables
https://help.github.com/en/github/automating-your-workflow-with-github-actions/virtual-environments-for-github-actions#default-environment-variables

29
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
16