GitHub Actions による作業自動化 実例集


はじめに

GitHub Actions を使用した CI/CD の記事は結構多くなってきました。
しかし GitHub Actions ができることは Travis CI や CircleCI でも可能なテストの実行やデプロイの自動化だけではありません。
GitHub上で普段行うような作業の自動化も容易に実現可能です。
ここではいくつかの例を紹介します。

リポジトリ

今回の記事で紹介する作業自動化を実際に行っているリポジトリの例
https://github.com/technote-space/release-github-actions

ワークフロー
https://github.com/technote-space/release-github-actions/tree/master/.github/workflows

Actions
https://github.com/technote-space/release-github-actions/actions

ブランチ名によるラベル付与

release/v1.2.3feature/xyz のようなブランチ名をもとにラベルを付与します。

変更されたファイルによるラベル付与

プルリクエストに含まれる変更されたファイルのパターンをもとにラベルを付与します。

カンバンのカード移動によるラベル付与

GitHub Projest のカード移動をもとにIssueやプルリクのラベルのつけ外しをします。
検索で 例えば 「In Progress」 に移動したIssueやプルリクの一覧を見ることができるようになります。

is:open archived:false label:"Status: In Progress" assignee:自分のユーザ名

プロジェクトへの追加

作成されたIssueやプルリクを指定されたProjectの指定されたColumnに追加します。

Assignees 設定

作成されたIssueやプルリクのAssigneesに作成者を自動で追加します。

ここまでの設定の結果

GitHub Actions で用意される GITHUB_TOKEN は連続するイベントを作成する権限がありません。
他のアクションを起動するには personal access token を使用する必要がありますが、その場合は上記画像のように自分が動作させたように表示されます。
画像の例では 「プロジェクトへの追加」 → 「カンバンのカード移動によるラベル付与」 を連携させるために personal access token を使用しています。

目次の自動生成

目次の作成を自動化します。
変更を直接プッシュ または プルリクエストを作成します。

変更履歴の生成

マージされたプルリクエストやコミットから変更履歴を生成します。

緑がマージされたプルリク、青がコミット履歴です。
どちらかだけ表示させることもできます。

リリース作業

タグ付与

リリース用のブランチ(e.g. release/v1.2.3)を作成

デフォルトブランチにマージ

タグ付与

リリース用アクションがタグ付与で起動

という手順をとっていたので、タグ付与は github-script アクションで自動化しています。

add-version-tag.yml
on:
  pull_request:
    branches:
      - master
    types: [closed]

name: Add version tag

jobs:
  tag:
    name: Add version tag
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/')
    steps:
      - name: Get version
        run: echo "TAG_NAME=${HEAD_REF#release/}" >> $GITHUB_ENV
        env:
          HEAD_REF: ${{ github.event.pull_request.head.ref }}
      - uses: actions/[email protected]
        with:
          github-token: ${{ secrets.ACCESS_TOKEN }}
          script: |
            github.git.createRef({
              owner: context.repo.owner,
              repo: context.repo.repo,
              ref: `refs/tags/${process.env.TAG_NAME}`,
              sha: context.sha
            })

タグ付与でリリース用のアクションを起動するため、GITHUB_TOKEN ではなく personal access token を使用しています。

github-script アクションは GitHub API を簡単に使用できるため、これがあればなんでもできる気がします。

パッケージのバージョンチェック

package.json のバージョン更新を自動化します。

GitHub Actions のリリース自動化

GitHub Actions のリリースは 実行用にビルドしたり node_modulesも含めてコミットしたり メジャー、マイナー、パッチを考慮してタグを張り替えたりする必要があり、割と面倒です。
このアクションはそれらを自動化します。

GitHub Releases の自動作成

フォーク元は下書き作成用
https://github.com/release-drafter/release-drafter

下書きを確認するのも面倒になったので、リリースのフローに入れて確認なしに公開させています。

まとめ

開発のチームによってGitHubの運用方法は異なりますが、GitHub Actions によっていろいろな手順が簡単に自動化できるようになったと思います。
とくに前半部分で紹介したようなラベルの付与などは Workflow ファイル(と設定ファイル)を置くだけで動作するので、CI/CDを導入するよりも簡単だと思います。
個人のプロジェクトでもプルリクの見た目が華やかになると気分も上がるような気がしますので、気軽に試してみてはいかがでしょうか