DX: Cloud Functions tooling
This commit is contained in:
parent
7d7286b1c1
commit
6e92e3fba1
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"functions": {
|
"functions": {
|
||||||
"predeploy": "npm --prefix \"$RESOURCE_DIR\" run build"
|
"predeploy": "npm --prefix \"$RESOURCE_DIR\" run build",
|
||||||
|
"runtime": "nodejs12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
48
functions/README.md
Normal file
48
functions/README.md
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
**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
|
||||||
|
|
||||||
|
0. `$ cd functions` to switch to this folder
|
||||||
|
1. `$ yarn global add firebase-tools` to install the Firebase CLI globally
|
||||||
|
2. `$ yarn` to install JS dependencies
|
||||||
|
3. `$ firebase functions:config:get > .runtimeconfig.json` to cache secrets for local dev (TODO: maybe not for Manifold)
|
||||||
|
4. `$ firebase use dev` to choose the dev project
|
||||||
|
|
||||||
|
## Developing locally
|
||||||
|
|
||||||
|
1. `$ firebase login` if you aren't logged into Firebase via commandline yet.
|
||||||
|
2. `$ 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 =(
|
||||||
|
3. 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](https://console.firebase.google.com/project/mantic-markets/functions/logs?search=&&severity=DEBUG)
|
||||||
|
|
||||||
|
## Deploying
|
||||||
|
|
||||||
|
0. `$ firebase use prod` to switch to prod
|
||||||
|
1. `$ 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](https://firebase.google.com/docs/functions/config-env). 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`
|
|
@ -9,9 +9,6 @@
|
||||||
"deploy": "firebase deploy --only functions",
|
"deploy": "firebase deploy --only functions",
|
||||||
"logs": "firebase functions:log"
|
"logs": "firebase functions:log"
|
||||||
},
|
},
|
||||||
"engines": {
|
|
||||||
"node": "14"
|
|
||||||
},
|
|
||||||
"main": "lib/functions/src/index.js",
|
"main": "lib/functions/src/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fetch": "1.1.0",
|
"fetch": "1.1.0",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user