43
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actions でデフォルトブランチにないワークフローの動作確認をする

Last updated at Posted at 2021-10-30

GitHub Actionsは非常に便利ですが、何かと歯がゆい部分もいくつかあります。

個人的にかなり困ったのが、ワークフローの動作確認がしづらいこと。

ワークフローのトリガーとなるイベントの一覧が こちら に掲載されていますが、その多くに「このイベントは、ワークフローのファイルがデフォルトブランチに配置されていないとワークフローをトリガーしない」という旨の注意書きがしてあります。
Issueやラベル、workflow_dispatchなんかがこれに該当します。

つまり、これらのイベントをトリガーとするワークフローに関しては、事前に動作確認をすることができないわけですね。
とはいえ、動くかどうかわからないワークフローをデフォルトブランチに混ぜ込むのはそれなりに抵抗があるものです...

GitHub Actionsをローカルで実行できる act もすばらしい選択肢のひとつですが、ちょいちょい GitHub Actionsと異なる挙動をすることがあることと、リポジトリのSecretやGitHub Environmentsの恩恵を受けようとすると設定が面倒だったり、残念ポイントも少なからずあります。


そこで、やや強引ではありますが、GitHub Actionsの「workflow_dispatchをトリガーとするワークフローのファイルがデフォルトブランチにある場合、別ブランチにある同じファイル名のworkflow_dispatchをトリガーとするワークフローも実行することができる」という仕様を利用して、デフォルトブランチ以外に置かれているワークフローの動作確認をする方法をまとめておきます。


この方法では、対象のワークフローのトリガーをworkflow_dispatchに書き換える必要があるため、トリガー部分の動作確認をすることはできません。
あくまでジョブ部分の動作確認のみになります。

ざっくりとした解説

やることは、

  1. デフォルトブランチに workflow_dispatchをトリガーとするダミーのワークフローファイル を配置する
  2. 別ブランチのダミーのワークフローファイルを編集し、動作確認したいワークフローの内容に書き換える
  3. 書き換えたダミーのワークフローを手動で実行する

という流れ。

ただ、2.において以下の2点に気をつける必要があります:

  • ワークフローの nameを変えない こと
  • トリガーを workflow_dispatchにする こと

    (ジョブの中でトリガーイベントの値を使用する場合は、workflow_dispatchのinputsで手動で入力するようにする)

(実はファイル名さえ同じであればnameは合わせなくても動かせます。
ただ、GitHub Actionsの仕様上、面倒なことになるので合わせておいた方が吉です)


具体例

下記のワークフロー (参考元) の動作確認をする例を書いてみます。
任意のIssueに help-wanted というラベルが貼られるとコメントをするワークフローです:

add-comment.yaml
name: Add comment

on:
  issues:
    types: [ labeled ]

jobs:
  add-comment:
    if: github.event.label.name == 'help-wanted'
    runs-on: ubuntu-latest
    steps:
      - name: Add comment
        uses: peter-evans/create-or-update-comment@v1
        with:
          issue-number: ${{ github.event.issue.number }}
          body: |
            This issue is available for anyone to work on. **Make sure to reference this issue in your pull request.** :sparkles: Thank you for your contribution! :sparkles:

1. デフォルトブランチにworkflow_dispatchをトリガーとするダミーのワークフローファイルを配置する

下記の dummy.yamlをデフォルトブランチに配置します:

dummy.yaml
name: Dummy for test

on:
  workflow_dispatch:

jobs:
  dummy:
    if: ${{ false }}
    runs-on: ubuntu-latest
    steps:
      - run: ""

if: ${{ false }} なのでジョブはかならずスキップされます。もし実行してしまっても一切お財布に影響を与えないはず。

2. 別ブランチのダミーのワークフローファイルを編集し、動作確認したいワークフローの内容に書き換える

別ブランチのdummy.yamlを編集し、以下のとおりに書き換えます:

dummy.yaml
name: Dummy for test  # ここはダミーのままにしておく

on:
  workflow_dispatch:
    inputs:           # イベントの値を手入力するようにする
      issue-number:
        description: issue number
        required: true
      label-name:
        description: label name
        required: true

jobs:
  add-comment:
    if: github.event.inputs.label-name == 'help-wanted'          # 変数名を変える
    runs-on: ubuntu-latest
    steps:
      - name: Add comment
        uses: peter-evans/create-or-update-comment@v1
        with:
          issue-number: ${{ github.event.inputs.issue-number }}  # 変数名を変える
          body: |
            This issue is available for anyone to work on. **Make sure to reference this issue in your pull request.** :sparkles: Thank you for your contribution! :sparkles:

本来 github.event.issue.number とかで取得したい値を、代わりにworkflow_dispatchを経由して入力するようにします。
このやり方であればいろいろなパターンを気軽に試せるので、動作確認にもってこい。

3. 書き換えたダミーのワークフローを手動で実行する

あとは、Dummy for test ワークフローを ブランチを切り替えて手動実行するだけ!

上記の状態で実行すれば、Issue #10にコメントが作成されます🎉
label-nameを help-wanted 以外にしてみると ちゃんとジョブがスキップされることも確認できるはずです。


このように、トリガー部分のロジック (ブランチ名のマッチングとか) を除けば ほぼ実環境に近い状態で動作確認したりできるので、結構おすすめです。使ってみてね。

おわり

43
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?