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