Deploying Firebase from GitHub Actions
(Last updated on 9 Feb 2025)
Authenticating with a token is not supported anymore from CI/CD pipelines.
Hence, we use GOOGLE_APPLICATION_CREDENTIALS in this guide.
Authenticating with
--tokenis deprecated and will be removed in a future major version offirebase-tools. Instead, use a service account key withGOOGLE_APPLICATION_CREDENTIALS.
Here’s a step-by-step guide on how to deploy your Firebase project with GitHub Actions.
You’ll need to:
- Create a service account
- Create a service account key
- Create a GitHub secret
- Adapt GitHub Actions workflow
Create service account
In order to create a service account key, we need to create a new SA in GCP’s IAM.
Firebase Develop Admin alone doesn’t seem to suffice, so we need these 4 roles roles:
- Firebase Develop Admin
- Cloud Functions Admin
- Artifact Registry Administrator
- Cloud Scheduler Admin
- Eventarc Admin
After this, we need to go to the AppEngine default service account (<project_id>@appspot.gserviceaccount.com), then Permissions and the click on Grant Access.
Add the newly created service account as principal, with the role Service Account User.
Create service account key
To create a key for the service account we just created, select the service account under IAM, then go to KEYS. Click on ADD KEY and select json.
The key will be saved in a .json file. We’ll use it in the next step.
Create a GitHub secret
Now we want to create a secret in GitHub which stores the service account key that will be used in the GH Action.
Go to (repository) Settings, then Secrets and variables -> Actions. Create a new secret and paste the content of the json above in it. Save.
Adapt the GitHub Actions workflow
Now we need to add GOOGLE_APPLICATION_CREDENTIALS to the workflow:
# [...]
- name: Install firebase tools
run: sudo npm i -g firebase-tools
- name: Write GCP Service Account from env vars to file
env: GH_ACTIONS_SERVICE_ACCOUNT_MASTER: ${{ secrets.GH_ACTIONS_SERVICE_ACCOUNT_MASTER }}
run: echo $GH_ACTIONS_SERVICE_ACCOUNT_MASTER > $HOME/serviceAccount.json
- name: Install Dependencies
run: cd functions && npm i
- name: Lint, Build & Deploy
run: |
export GOOGLE_APPLICATION_CREDENTIALS=$HOME/serviceAccount.json
cd functions
npm run deploy-master --json
# [...]