|
1 |
| -const admin = require('firebase-admin'); |
2 | 1 | const fs = require('fs');
|
3 | 2 | const fetch = require('node-fetch');
|
| 3 | +const childProcess = require('child_process'); |
| 4 | +const firebaseTools = require('firebase-tools'); |
4 | 5 |
|
5 | 6 | const databaseRules = fs.readFileSync("./packages/database/database.rules.json");
|
6 | 7 |
|
| 8 | +function run(cmd) { |
| 9 | + return new Promise((resolve, reject) => { |
| 10 | + childProcess.exec(cmd, (error, stdout, stderr) => { |
| 11 | + if (error) return reject(error) |
| 12 | + if (stderr) return reject(stderr) |
| 13 | + resolve(stdout) |
| 14 | + }) |
| 15 | + }) |
| 16 | +} |
| 17 | + |
7 | 18 | async function loadRulesToRTDBInstances(app) {
|
8 |
| - const firestore = app.firestore(); |
9 |
| - const rtdbInstancesCollectionQuery = await firestore.collection('rtdbInstances').get(); |
10 |
| - for (const rtdbDoc of rtdbInstancesCollectionQuery.docs) { |
11 |
| - const rtdbId = rtdbDoc.id; |
12 |
| - const rtdbData = rtdbDoc.data(); |
13 |
| - if (process.env.FIREBASE_DATABASE_EMULATOR_HOST) { |
| 19 | + if (process.env.FIREBASE_DATABASE_EMULATOR_HOST) { |
| 20 | + const firestore = app.firestore(); |
| 21 | + const rtdbInstancesCollectionQuery = await firestore.collection('rtdbInstances').get(); |
| 22 | + for (const rtdbDoc of rtdbInstancesCollectionQuery.docs) { |
| 23 | + const rtdbId = rtdbDoc.id; |
14 | 24 | const databaseURL = `http://${process.env.FIREBASE_DATABASE_EMULATOR_HOST}/.settings/rules.json?ns=${process.env.GCLOUD_PROJECT}-${rtdbId}&access_token=`;
|
15 | 25 | await fetch(databaseURL, {method: 'PUT', body: databaseRules})
|
16 |
| - } else { |
17 |
| - const databaseURL = `http://${process.env.GCLOUD_PROJECT}-${rtdbId}.${rtdbData.region}`; |
18 |
| - const rtdbInstance = admin.app().database(databaseURL); |
19 |
| - await rtdbInstance.setRules(databaseRules); |
20 | 26 | }
|
| 27 | + } else { |
| 28 | + const listDatabases = firebaseTools.database.instances.list |
| 29 | + const databases = await listDatabases(); |
| 30 | + await run(`firebase target:clear database main`); |
| 31 | + await run(`firebase target:apply database main ${databases.map(d => d.instance).join(' ')}`); |
| 32 | + await run(`firebase deploy --only database`); |
21 | 33 | }
|
22 | 34 | }
|
23 | 35 |
|
|
0 commit comments