GitHubActionsのworkflow_dispatchを触ってみた（ついでにGithub Container Registryも）

## はじめに
ようやくGitHub Actionsで[workflow単位の手動実行ができるようになった](https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/)そうなので、workflow_dispatchを試してみました。
ついでに[GitHub Container Registryがベータで出た](https://github.blog/2020-09-01-introducing-github-container-registry/)そうなのでこちらも試してみました。

今回作成したレポジトリはhttps://github.com/yohei-yamazaki/workflow_dispatch_test

## GitHub Container Registryの利用準備
[GitHub Package RegistryからGitHub Container Registryへの移行](https://docs.github.com/en/packages/getting-started-with-github-container-registry/migrating-to-github-container-registry-for-docker-images#updating-your-github-actions-workflow)より
> Add your new container registry authentication personal access token (PAT) as a GitHub ACtions secret. GitHub Container Registry does not support using GITHUB_TOKEN for your PAT so you must use a different custom variable, such as CR_PAT. For more information, see "Creating and storing encrypted secrets."

GitHub Container Registryでは`GITHUB_TOKEN`をサポートしていないのでパーソナルアクセストークンを作成する必要がある。必要な権限は`read:packages`,`write:packages`,`delete:packages`の3つである。

作成したトークンを対象のリポジトリのSettingsタブのSecretsに登録する。今回は`CR_PAT`として登録した。

## 今回のworkflow内容
今回のworkflowは以下で手動実行でGitHub Container Registryにpushするworkflowである。また、workflow内でinputの値を参照できるので、手動実行時にtag名を変更するとImageのtagを変更できる仕様を追加してみた。

```yaml

name: manual trigger for push to GitHub Container Registry
on:
  workflow_dispatch:
    inputs:
      tag:
        description: Image tag
        default: master

env:
  DOMAIN: ghcr.io

jobs:
  push-dhcr:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Login GitHub Container Registry
        run: docker login ${DOMAIN} -u ${GITHUB_ACTOR} -p ${{ secrets.CR_PAT }}
      - name: Build image
        run: docker build -f Dockerfile -t ${DOMAIN}/${{ github.repository_owner }}/centos:${{ github.event.inputs.tag }} .
      - name: Push image to GitHub Container Registry
        run: docker push ${DOMAIN}/${{ github.repository_owner }}/centos:${{ github.event.inputs.tag }}
```

## workflow_dispatchを使用する
Actionsタブのworkflow_dispatchを使用したworkflowを選択する。今回は`manual trigger for push to GitHub Container Registry`を選択し、`Run workflow`をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592411/dc265025-8ab9-c85b-054b-761f23268855.png)

workflowを実行するブランチとinputsで設定した値を指定できる部分とworkflowを実行するボタンが出てくるので、確認した上でworkflowを実行してみると、画面がリフレッシュされて少し後に手動実行したworkflowの実行途中のresultが表示された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592411/fe200262-dc13-e696-0eca-35f607676385.png)

## GitHub Container Registryにpushされているか確認
Github Container Registryの方を確認してみると、無事pushできていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592411/bc31e3c3-3a23-e4e0-40b6-8ba4282e523f.png)
余談だが、GitHub Container Registryはレポジトリに依存しないので所有者の方のpackagesタブにしか表示されない。

## 感想
workflow_dispatchに関しては、workflow単位と任意のブランチ、変数を指定できて欲しかった機能だったので良さそうだが、inputのdefaultに`github.sha`のように変数を使用したかったがそのまま埋め込まれてしまったので、回りくどい方法をする必要がありそうだなと感じた。

GitHub Container Registryに関しては、GitHub Package RegistryからDocker部分を切り出したという感じだと思うのでそんなないが、トークンに関して`GITHUB_TOKEN`が万能？だったのはあるが、パーソナルアクセストークンはチームでの運用は大変そうなので`GITHUB_TOKEN`使用したいと思った。

## 参考文献
* https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/
* https://github.blog/2020-09-01-introducing-github-container-registry/
* https://docs.github.com/en/packages/getting-started-with-github-container-registry/migrating-to-github-container-registry-for-docker-images#updating-your-github-actions-workflow