NestJSを使ったプロジェクトで、認証だけFirebase Authenticationを使う。 そのためローカルのエミュレータ環境とそれを使った簡単なテストを作った。
ローカルで動かすとUIはこんなので超便利↓ CIではもちろんいらないので無効化してる
でもCircleCI上でそのテストを実行させようと思ったら、ちょうどいいDockerイメージが見つからなかったので作った。
Authしか動かないけどfirebase-toolsとOpen JDKがでかすぎるのでイメージサイズはでかい。
Introduction to Firebase Local Emulator Suite | Firebase Documentation
シンプルなのでDockerイメージはすぐに作れたけど、CircleCIから呼び出すためにDockerレポジトリが必要。
認証も面倒なのでPublicで、更にできれば無料いい。
最初はDocker Hubを使ったけど懐かしのダイヤルアップ接続並みにアップロードが遅く断念。
GitHubのPublicレポジトリならコンテナレジストリも無料で使えそう?なので、ひとまず個人レポジトリでGithub Actionsを使ってアップロードまでしてみた。
使い方
Firebaseのプロジェクト名をcommandで渡すだけ デフォルトポート9099で起動します
.circleci/config.yml
version: 2.1 jobs: test-server: resource_class: medium docker: - image: ghcr.io/uyamazak/firebase-auth-emulator:latest command: --project your-project-name
CircleCIでfirebase emulators:exec {テストコマンド}
でテストを実行するって方法もあったけど、エミュレータに必要なfirebase-toolsでかすぎるし、こっちの方がいろいろ分離されて良さそう。
Run functions locally | Firebase Documentation
ひとまずローカルで動いてたテストが通ったのでここまで。 GitHub Actions + コンテナレジストリのテンプレみたいのできたので活用していきたい。