基本
develop ブランチにPRがマージされたら、masterへのリリースPRを作成する。
すでにある場合は内容を更新する。
PR には release
というラベルをつける。
Configuring a workflow
- develop に push されたら動かす。
- チェックアウト。
- checkout@v2は
fetch-depth: 0
と指定し、全てのhistoryを取らないと差分PRを列挙できない。
- checkout@v2は
- 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
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
参照
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