2.0 KiB
2.0 KiB
NOTE: Adapted from One Word's /functions doc. Fix any errors you see!
Firestore Cloud Functions
This is code that doesn't make sense on the frontend client, e.g.
- Long-running or slow operation (database)
- Tasks that need to be run every so often (syncing email list to Mailjet)
- Anything we should't trust to clients (secrets, auth)
If you want to make and test changes, you'll have to do a bit of setup...
Installing
Adapted from https://firebase.google.com/docs/functions/get-started
$ cd functions
to switch to this folder$ yarn global add firebase-tools
to install the Firebase CLI globally$ yarn
to install JS dependencies$ firebase login
to authenticate the CLI tools to Firebase$ firebase use dev
to choose the dev project$ firebase functions:config:get > .runtimeconfig.json
to cache secrets for local dev (TODO: maybe not for Manifold)
Developing locally
$ yarn dev
to spin up the emulators The Emulator UI is at http://localhost:4000; the functions are hosted on :5001. Note: You have to kill and restart emulators when you change code; no hot reload =(- Connect to emulators by enabling
functions.useEmulator('localhost', 5001)
Debugging
- Find local logs directly in the shell that ran
$ yarn dev
- Find deployed logs here
Deploying
$ firebase use prod
to switch to prod$ yarn deploy
to push your changes live! (Future TODO: auto-deploy functions on Git push)
Secrets management
Secrets are strings that shouldn't be checked into Git (eg API keys, passwords). We store these using environment config on Firebase Functions. Some useful workflows:
- Set a secret:
$ firebase functions:config:set stripe.test_secret="THE-API-KEY"
- Preview all secrets:
$ firebase functions:config:get
- Cache for local dev:
$ firebase functions:config:get > .runtimeconfig.json