Skip to content

Commit e36e2e4

Browse files
ci(all-general): fix load rules script
1 parent b916205 commit e36e2e4

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

firebase.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"database": {
3-
"rules": "packages/database/database.rules.json"
4-
},
2+
"database": [
3+
{"target": "main", "rules": "packages/database/database.rules.json"}
4+
],
55
"firestore": {
66
"rules": "packages/firestore/firestore.rules",
77
"indexes": "packages/firestore/firestore.indexes.json"

scripts/load-rules-to-rtdb-instances.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
1-
const admin = require('firebase-admin');
21
const fs = require('fs');
32
const fetch = require('node-fetch');
3+
const childProcess = require('child_process');
4+
const firebaseTools = require('firebase-tools');
45

56
const databaseRules = fs.readFileSync("./packages/database/database.rules.json");
67

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+
718
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;
1424
const databaseURL = `http://${process.env.FIREBASE_DATABASE_EMULATOR_HOST}/.settings/rules.json?ns=${process.env.GCLOUD_PROJECT}-${rtdbId}&access_token=`;
1525
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);
2026
}
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`);
2133
}
2234
}
2335

0 commit comments

Comments
 (0)