GitHub Action
firebase-tools
This Action for firebase-tools
enables arbitrary actions with the firebase
command-line client and it provides
a node environment with with firebase-tools installed and ready to be consumed.
To use this action, make sure to refer to: joinflux/firebase-tools
We also try to release tagged versions that you can refer to:
joinflux/[email protected]
Alternatively, refer to master
to get the most up to date version. However
plese be aware that it might be unstable: joinflux/firebase-tools@master
- name: Deploy to Firebase
uses: joinflux/[email protected]
with:
args: deploy --only hosting
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
args
- Required. This is the arguments you want to use for thefirebase
cli
-
FIREBASE_TOKEN
- Required if GCP_SA_KEY is not set. The token to use for authentication. This token can be aquired through thefirebase login:ci
command. -
GCP_SA_KEY
- Required if FIREBASE_TOKEN is not set. A base64 encoded private key (json format) for a Service Account with theFirebase Admin
role in the project. If you're deploying functions, you would also need theCloud Functions Developer
role. Since the deploy service account is using the App Engine default service account in the deploy process, it also needs theService Account User
role. If you're only doing Hosting,Firebase Hosting Admin
is enough. -
PROJECT_ID
- Optional. To specify a specific project to use for all commands. Not required if you specify a project in your.firebaserc
file. -
PROJECT_PATH
- Optional. The path to the folder containingfirebase.json
if it doesn't exist at the root of your repository. e.g../my-app
To authenticate with Firebase, and deploy to Firebase Hosting:
name: Build and Deploy
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build-prod
- name: Archive Production Artifact
uses: actions/upload-artifact@master
with:
name: dist
path: dist
deploy:
name: Deploy
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Download Artifact
uses: actions/download-artifact@master
with:
name: dist
path: dist
- name: Deploy to Firebase
uses: joinflux/firebase-tools@master
with:
args: deploy --only hosting
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
Alternatively:
env:
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
If you have multiple hosting environments you can specify which one in the args line.
e.g. args: deploy --only hosting:[environment name]
If you want to add a message to a deployment (e.g. the Git commit message) you need to take extra care and escape the quotes or the YAML breaks.
with:
args: deploy --message \"${{ github.event.head_commit.message }}\"
If you'd like to run a script that depends on firebase-tools
, simply use the
relative path to the script:
// ./my-script.js
const firebase = require("firebase-tools")
// do something with firebase
- name: Run script
uses: joinflux/[email protected]
with:
args: "./my-script.sh"
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
The Dockerfile and associated scripts and documentation in this project are released under the MIT License.
If you decide to do seperate jobs for build and deployment (which is probably advisable), then make sure to clone your repo as the Firebase-cli requires the firebase repo to deploy (specifically the firebase.json
)