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

### ブランチ名によるラベル付与
https://github.com/TimonVS/pr-labeler-action

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

### 変更されたファイルによるラベル付与
https://github.com/actions/labeler

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

### カンバンのカード移動によるラベル付与
https://github.com/technote-space/auto-card-labeler

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

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

### プロジェクトへの追加
https://github.com/technote-space/create-project-card-action

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

### Assignees 設定
https://github.com/technote-space/assign-author

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

## ここまでの設定の結果

![sidebar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264159/babe78cc-d04e-31ae-87a4-60d88dc7ba90.png)

![history.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264159/2f3daa18-a021-72db-c50b-2ea0a5f3dd9e.png)

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



### 目次の自動生成
https://github.com/technote-space/toc-generator

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

![スクリーンショット 2020-02-23 2.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264159/ee8a25f7-880f-3a12-3def-49acc6117c35.png)

### 変更履歴の生成
https://github.com/technote-space/pr-commit-body-action

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

![pr-body.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264159/fad2f51b-27cd-881e-3b00-56a48289df28.png)

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

## リリース作業

### タグ付与

リリース用のブランチ(e.g. `release/v1.2.3`)を作成
↓
デフォルトブランチにマージ
↓
タグ付与
↓
リリース用アクションがタグ付与で起動

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

https://github.com/actions/github-script

```yaml: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/github-script@0.4.0
        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` を簡単に使用できるため、これがあればなんでもできる気がします。

### パッケージのバージョンチェック
https://github.com/technote-space/package-version-check-action

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

### GitHub Actions のリリース自動化
https://github.com/technote-space/release-github-actions

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

### GitHub Releases の自動作成
https://github.com/technote-space/release-drafter

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

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


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