GitHub Actionsの汎用的なアクションを紹介

GitHub Actionsを試してみて、汎用的に使えるなって思ったアクションを紹介します！


GitHub Actionsを利用するにあたり下記の公式ドキュメントを見ておけば、何ができるか想像できるかと思います。

- [GitHub Actionsのワークフロー構文](https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions)
    - 構文をチェック
- [ワークフローをトリガーするイベント](https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)
    - イベントのチェック
- [GitHubホストランナーにインストールされるソフトウェア](https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/software-installed-on-github-hosted-runners)
    - 仮想環境のチェック

# 紹介するアクションたち
- [Labeler](https://github.com/actions/labeler)
    - PRの修正ファイルに基づいて、ラベルを自動付与
- [GitHub Labeler](https://github.com/crazy-max/ghaction-github-labeler)
    - ラベル管理
- [Release Drafter](https://github.com/release-drafter/release-drafter)
    - リリースを自動で作成

# [Labeler](https://github.com/actions/labeler)
PRの修正ファイルパスに基づいて、設定したラベルを自動付与してくれるアクションです。
導入することで、「このモジュール修正したら、対象のラベルつけてね！」っていう運用を自動化することができます。

設定ファイルに下記を設定しておくと、、、

```yaml
test:
  - tests/**/*

model:
  - model/**/*
```

- `tests`ディレクトリに変更が入れば、`test`ラベル
- `model`ディレクトリに変更が入れば、`model`ラベル
を自動で付与してくれます。

## 導入方法
[参考PR](https://github.com/deresmos/actions-sample/pull/1)


定義ファイル

```yaml:.github/labeler.yml
workflow:
  - .github/*.yml
  - .github/workflows/**/*
```

workflowファイル

```yaml:.github/workflows/labeler.yml
name: Labeler

on:
  - pull_request

jobs:
  triage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/labeler@v2
        with:
          repo-token: '${{ secrets.GITHUB_TOKEN }}'
          configuration-path: '.github/labeler.yml'
```
### 結果
こんな感じで、`workflow`ラベルが自動で付与されます。（存在しないタグ付与の場合、グレー色で作成してくれます）
![Screenshot_2019-12-16 Add labeler by deresmos · Pull Request #1 · deresmos actions-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243612/ff0e4d4d-169f-4081-6912-7654bc4d12b8.png)


# [GitHub Labeler](https://github.com/crazy-max/ghaction-github-labeler)
ラベル設定ファイルをもとに、ラベル作成・変更・削除を行うアクションです。
ラベル管理を楽にすることができます。

下記のように設定すれば、自動的に`bug`ラベルを作ってくれます。

```yaml
- name: bug
  color: d73a4a
  description: "Something isn't working"
```

## 導入方法

[参考PR](https://github.com/deresmos/actions-sample/pull/2)

定義ファイル

```yaml:.github/labels.yml
- name: ready-for-merge
  color: 00ff00

- name: experimental
  color: ffff00
- name: WIP
  color: ffff00

# あといろいろ...
```

workflowファイル

```yaml:.github/workflows/sync_labels.yml
name: Sync labels

on:
  push:
    # masterに修正反映。かつ、関連ファイルに修正があった場合のみ実行する
    branches:
      - master
    paths:
      - '.github/labels.yml'
      - '.github/workflows/label_sync.yml'

jobs:
  labeler:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: crazy-max/ghaction-github-labeler@v1.1.1
        with:
          yaml_file: '.github/labels.yml'
          skip_delete: true # 定義ファイルに記載の無いラベルの削除を行わない
          dry_run: false # 実際に反映する。trueの場合は、結果のみ表示で反映しない。
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

### 結果
![Screenshot_2019-12-17 deresmos actions-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243612/58b48980-3287-551d-f45e-616de9c76e9d.png)


# [Release Drafter](https://github.com/release-drafter/release-drafter)
自動でリリースノートを作成してくれるアクションです。
割とリリース書くのめんどかったりするので、非常におすすめなアクションです。


下記のような設定をしていれば、PRに`bugfix`ラベルが付与されている場合は、Bug Fixesセクションに。
それ以外は、Changesセクションに。自動的に割り振ってくれます。

```yaml
categories:
  - title: 'Bug Fixes'
    labels:
      - 'fix'
      - 'bugfix'
      - 'bug'
```

下記画像のように自動作成してくれます。
下書き状態で作ってくれるので、編集して投稿すれば、完成です。
![Screenshot_2019-12-16 deresmos actions-sample(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243612/4e9f566c-71a4-1464-4d2a-7800f3abe428.png)

## 導入方法
[参考PR](https://github.com/deresmos/actions-sample/pull/3)
※typoしていたので、[Fix typo PR](https://github.com/deresmos/actions-sample/pull/5)で修正しました。

[Release Drafter App](https://github.com/apps/release-drafter)を、導入し、全てのレポジトリ、もしくは指定レポジトリのみ権限を与えるようにしてください。

```yaml:.github/release-drafter.yml
name-template: 'v$NEXT_PATCH_VERSION' # 次バージョンのタグ名をタイトルに設定
tag-template: 'v$NEXT_PATCH_VERSION' # 次バージョンのタグ名を設定
exclude-labels: # 対象のラベルが付与されてるPRは、リリース内容に乗せない
  - 'release'
categories: # 対象ラベルに一致したら、セクション分けてくれる
  - title: 'Features'
    labels:
      - 'feature'
      - 'enhancement'
  - title: 'Bug Fixes'
    labels:
      - 'fix'
      - 'bug'
      - 'bugfix'
  - title: 'Maintenance'
    labels:
      - 'chore'
change-template: '- $TITLE (#$NUMBER) @$AUTHOR' # PR情報のテンプレート
template: | # リリースの内容テンプレート
  ## Changes
  $CHANGES
```

```yaml:.github/workflows/release_drafter.yml
name: Release Draft

on:
  push:
    branches:
      - master

jobs:
  update_release_draft:
    runs-on: ubuntu-latest
    steps:
      - uses: release-drafter/release-drafter@v5.3.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

# まとめ
公式版リリースや、[自己ホストランナー](https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners)も発表されて、ますます勢いが加速してます。
Actionsを利用して楽したり、効率化したり、面白いことしたり色々できそうでワクワクしますね！