kawabatas技術ブログ

試してみたことを書いていきます

Github Actions で Firebase ファンクションをデプロイする際の注意点

概要

PR をマージしたときに、

Github Actions で Firebase ファンクションをデプロイするようにしたとき、

Github Actions が2回走り、その内1回のデプロイでエラーになりました。

それを解決した時のメモです。

エラー

ログの一部抜粋です。

※Firebase ファンクションに2つ関数があり、Firebase Hosting にもデプロイしています。

1つは成功し、1つはこけている。

f:id:kawabatas:20190422174839p:plain

ファンクションのデプロイ成功。

f:id:kawabatas:20190422174916p:plain

ファンクションのデプロイ失敗。

f:id:kawabatas:20190422175041p:plain

.github/main.workflow (雰囲気です)

workflow "Deploy workflow" {
  on = "push"
  resolves = ["Deploy"]
}

action "BranchCheck" {
  uses = "actions/bin/filter@master"
  args = "branch develop"
}

action "Deploy" {
  uses = "actions/npm@master"
  runs = "sh -c"
  args = ["npx firebase deploy --project xxx"]
  secrets = ["FIREBASE_TOKEN"]
  needs = ["BranchCheck"]
}

原因

ブランチ削除のとき、Github Actions の環境変数GITHUB_REF には、デフォルトのブランチ(このリポジトリの場合は develop)が指定される。

よって、PRをマージする際、ブランチを削除するにチェックしていた場合、 develop ブランチかどうかのチェックに通り、デプロイが2回実行されてしまい、その内1回がこけていた。

修正

ブランチ削除の場合のフィルタを入れる。

github.com

https://github.com/actions/bin/pull/51 でマージされているのだが、真偽が逆になっているので、やめた。

修正後(雰囲気)

workflow "Deploy workflow" {
  on = "push"
  resolves = ["Deploy"]
}

action "BranchCheck" {
  uses = "actions/bin/filter@master"
  args = "branch develop"
}

action "Filter deleted branches" {
  uses = "UltCombo/action-filter-deleted-branches@master"
  needs = ["BranchCheck"]
}

action "Deploy" {
  uses = "actions/npm@master"
  runs = "sh -c"
  args = ["npx firebase deploy --project xxx"]
  secrets = ["FIREBASE_TOKEN"]
  needs = ["Filter deleted branches"]
}