15
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

git-pr-release with GitHub Actions

基本

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
15
Help us understand the problem. What are the problem?