Skip to content

Commit b91f358

Browse files
authored
Dusting things off (#119)
* Bump minor * Bump github actions * Bump firebase dep * Bump emulators * Refactored tests * `take(1)` where needed * clean up race conditions * drop delete app hack (except for firestore...) * retry on a flaky RTDB test
1 parent 5cfad21 commit b91f358

16 files changed

Lines changed: 3644 additions & 7141 deletions

.github/workflows/test.yml

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,23 @@ jobs:
1919
name: Build
2020
steps:
2121
- name: Checkout
22-
uses: actions/checkout@v2
22+
uses: actions/checkout@v4
2323
- name: Setup node
24-
uses: actions/setup-node@v2-beta
24+
uses: actions/setup-node@v4
2525
with:
2626
node-version: '20'
2727
- name: node_modules cache
28-
uses: actions/cache@v2
28+
uses: actions/cache@v4
2929
id: node_modules_cache
3030
with:
3131
path: ./node_modules
32-
key: ${{ runner.os }}-20-node_modules-${{ hashFiles('yarn.lock') }}
32+
key: ${{ runner.os }}-20-11-7-node_modules-${{ hashFiles('yarn.lock') }}
3333
restore-keys: |
34-
${{ runner.os }}-20-node_modules-
34+
${{ runner.os }}-20-11-7-node_modules-
35+
${{ runner.os }}-20-
3536
- name: Yarn offline cache
3637
if: steps.node_modules_cache.outputs.cache-hit != 'true'
37-
uses: actions/cache@v2
38+
uses: actions/cache@v4
3839
with:
3940
path: ~/.npm-packages-offline-cache
4041
key: yarn-offline-${{ hashFiles('**/yarn.lock') }}
@@ -49,7 +50,7 @@ jobs:
4950
id: yarn-pack-dir
5051
run: ./build.sh
5152
- name: 'Upload Artifact'
52-
uses: actions/upload-artifact@v2
53+
uses: actions/upload-artifact@v4
5354
with:
5455
name: rxfire-${{ github.run_id }}
5556
path: dist
@@ -61,38 +62,38 @@ jobs:
6162
strategy:
6263
matrix:
6364
node: ["20"]
64-
firebase: ["9", "10"]
65+
firebase: ["9", "10", "11"]
6566
rxjs: ["6", "7"]
6667
fail-fast: false
6768
name: Test firebase@${{ matrix.firebase }} rxjs@${{ matrix.rxjs }} on Node.js ${{ matrix.node }}
6869
steps:
6970
- name: Checkout
70-
uses: actions/checkout@v2
71+
uses: actions/checkout@v4
7172
- name: Setup node
72-
uses: actions/setup-node@v2-beta
73+
uses: actions/setup-node@v4
7374
with:
7475
node-version: ${{ matrix.node }}
7576
check-latest: true
7677
- name: node_modules cache
7778
id: node_modules_cache
78-
uses: actions/cache@v2
79+
uses: actions/cache@v4
7980
with:
8081
path: ./node_modules
8182
key: ${{ runner.os }}-${{ matrix.node }}-${{ matrix.firebase }}-${{ matrix.rxjs }}-node_modules-${{ hashFiles('yarn.lock') }}
8283
restore-keys: |
8384
${{ runner.os }}-${{ matrix.node }}-${{ matrix.firebase }}-${{ matrix.rxjs }}-node_modules-
84-
${{ runner.os }}-${{ matrix.node }}-node_modules-
85+
${{ runner.os }}-${{ matrix.node }}-
8586
- name: test/functions node_modules cache
8687
id: functions_node_modules_cache
87-
uses: actions/cache@v2
88+
uses: actions/cache@v4
8889
with:
8990
path: ./test/functions/node_modules
9091
key: ${{ runner.os }}-${{ matrix.node }}-functions_node_modules-${{ hashFiles('test/functions/yarn.lock') }}
9192
restore-keys: |
9293
${{ runner.os }}-${{ matrix.node }}-functions_node_modules-
9394
- name: Yarn offline cache
9495
if: steps.node_modules_cache.outputs.cache-hit != 'true' || steps.functions_node_modules_cache.outputs.cache-hit != 'true'
95-
uses: actions/cache@v2
96+
uses: actions/cache@v4
9697
with:
9798
path: ~/.npm-packages-offline-cache
9899
key: yarn-offline-${{ hashFiles('**/yarn.lock') }}
@@ -110,46 +111,40 @@ jobs:
110111
cd test/functions
111112
yarn install --frozen-lockfile --prefer-offline
112113
- name: Firebase emulator cache
113-
uses: actions/cache@v2
114+
uses: actions/cache@v4
114115
with:
115116
path: ~/.cache/firebase/emulators
116117
key: firebase_emulators
117118
- name: 'Download Artifacts'
118-
uses: actions/download-artifact@v2
119+
uses: actions/download-artifact@v4
119120
- name: Run tests
120121
run: |
121122
mv rxfire-${{ github.run_id }} dist
122123
yarn test
123124
124125
lint:
125126
runs-on: ubuntu-latest
126-
strategy:
127-
matrix:
128-
node: ["20"]
129-
firebase: ["9", "10"]
130-
rxjs: ["7"]
131-
fail-fast: false
132127
name: Lint
133128
steps:
134129
- name: Checkout
135-
uses: actions/checkout@v2
130+
uses: actions/checkout@v4
136131
- name: Setup node
137-
uses: actions/setup-node@v2-beta
132+
uses: actions/setup-node@v4
138133
with:
139-
node-version: ${{ matrix.node }}
134+
node-version: "20"
140135
check-latest: true
141136
- name: node_modules cache
142137
id: node_modules_cache
143-
uses: actions/cache@v2
138+
uses: actions/cache@v4
144139
with:
145140
path: ./node_modules
146-
key: ${{ runner.os }}-${{ matrix.node }}-${{ matrix.firebase }}-${{ matrix.rxjs }}-node_modules-${{ hashFiles('yarn.lock') }}
141+
key: ${{ runner.os }}-20-11-7-node_modules-${{ hashFiles('yarn.lock') }}
147142
restore-keys: |
148-
${{ runner.os }}-${{ matrix.node }}-${{ matrix.firebase }}-${{ matrix.rxjs }}-node_modules-
149-
${{ runner.os }}-${{ matrix.node }}-node_modules-
143+
${{ runner.os }}-20-11-7-node_modules-
144+
${{ runner.os }}-20-
150145
- name: Yarn offline cache
151146
if: steps.node_modules_cache.outputs.cache-hit != 'true' || steps.functions_node_modules_cache.outputs.cache-hit != 'true'
152-
uses: actions/cache@v2
147+
uses: actions/cache@v4
153148
with:
154149
path: ~/.npm-packages-offline-cache
155150
key: yarn-offline-${{ hashFiles('**/yarn.lock') }}
@@ -159,7 +154,6 @@ jobs:
159154
run: |
160155
yarn config set yarn-offline-mirror ~/.npm-packages-offline-cache
161156
yarn install --frozen-lockfile --prefer-offline
162-
yarn add --dev firebase@${{ matrix.firebase }} rxjs@${{ matrix.rxjs }} --prefer-offline
163157
- name: Run lint
164158
run: |
165159
yarn lint
@@ -171,12 +165,12 @@ jobs:
171165
if: ${{ github.ref == 'refs/heads/main' || github.event_name == 'release' }}
172166
steps:
173167
- name: Setup node
174-
uses: actions/setup-node@v2-beta
168+
uses: actions/setup-node@v4
175169
with:
176170
node-version: '20'
177171
registry-url: 'https://wombat-dressing-room.appspot.com'
178172
- name: 'Download Artifacts'
179-
uses: actions/download-artifact@v2
173+
uses: actions/download-artifact@v4
180174
- name: Publish
181175
run: |
182176
cd ./rxfire-${{ github.run_id }}

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
node_modules
22
dist
3-
/*.log
3+
*.log
44
/rxfire-*.tgz
5+
.firebase
6+
.yarn

.yarnrc.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
nodeLinker: node-modules

package.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rxfire",
3-
"version": "6.0.6",
3+
"version": "6.1.0",
44
"private": true,
55
"description": "Firebase JavaScript library RxJS",
66
"author": "Firebase <firebase-support@google.com> (https://firebase.google.com/)",
@@ -82,14 +82,13 @@
8282
"build:docs": "cp README.md ./dist/ && cp -r ./docs ./dist/",
8383
"dev": "rollup -c -w",
8484
"echo:chrome": "echo 'Open Chrome DevTools: \nchrome://inspect/#devices'",
85-
"test": "firebase emulators:exec \"jest --detectOpenHandles\" --project=rxfire-test-c497c",
85+
"test": "npx -y firebase-tools@latest emulators:exec \"jest --detectOpenHandles\" --project=rxfire-test-c497c",
8686
"test:debug": "yarn echo:chrome && firebase emulators:exec ./test-debug.sh --project=rxfire-test-c497c",
87-
"emulators": "firebase emulators:start --project=rxfire-test-c497c",
87+
"emulators": "npx -y firebase-tools@latest emulators:start --project=rxfire-test-c497c",
8888
"jest": "jest --detectOpenHandles"
8989
},
90-
"dependencies": {},
9190
"peerDependencies": {
92-
"firebase": "^9.0.0 || ^10.0.0",
91+
"firebase": "^9.0.0 || ^10.0.0 || ^11.0.0",
9392
"rxjs": "^6.0.0 || ^7.0.0"
9493
},
9594
"devDependencies": {
@@ -107,7 +106,6 @@
107106
"eslint": "^7.32.0",
108107
"eslint-config-google": "^0.14.0",
109108
"firebase": "^10.0.0",
110-
"firebase-tools": "^12.5.2",
111109
"glob": "^7.1.6",
112110
"jest": "^29.6.4",
113111
"jest-environment-jsdom": "^29.6.4",

test/auth.test.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
* See the License for the specific language governing permissions and
1616
* limitations under the License.
1717
*/
18-
import {default as config, authEmulatorPort} from './config';
19-
import {initializeApp, FirebaseApp, deleteApp} from 'firebase/app';
18+
import {default as config, resolvedAuthEmulatorPort} from './config';
19+
import {initializeApp, FirebaseApp} from 'firebase/app';
2020
import {getAuth, Auth, connectAuthEmulator, signInAnonymously} from 'firebase/auth';
2121
import {authState} from '../dist/auth';
2222
import {skip, take} from 'rxjs/operators';
@@ -25,14 +25,10 @@ describe('RxFire Auth', () => {
2525
let app: FirebaseApp;
2626
let auth: Auth;
2727

28-
beforeEach(() => {
28+
beforeEach(async () => {
2929
app = initializeApp(config);
3030
auth = getAuth(app);
31-
connectAuthEmulator(auth, `http://localhost:${authEmulatorPort}`, {disableWarnings: true});
32-
});
33-
34-
afterEach(() => {
35-
deleteApp(app).catch(() => undefined);
31+
connectAuthEmulator(auth, `http://localhost:${await resolvedAuthEmulatorPort}`, {disableWarnings: true});
3632
});
3733

3834
describe('Authentication state', () => {

test/config.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as firebaseConfig from '../firebase.json';
1+
import fetch from 'cross-fetch';
22

33
export default {
44
apiKey: 'AIzaSyCD1LqWoxivr0hu7YJ_xF6WyAT4_l-Aw0I',
@@ -11,8 +11,16 @@ export default {
1111
measurementId: 'G-K35MQE7EN2',
1212
};
1313

14-
export const authEmulatorPort = firebaseConfig.emulators.auth.port;
15-
export const databaseEmulatorPort = firebaseConfig.emulators.database.port;
16-
export const firestoreEmulatorPort = firebaseConfig.emulators.firestore.port;
17-
export const storageEmulatorPort = firebaseConfig.emulators.storage.port;
18-
export const functionsEmulatorPort = firebaseConfig.emulators.functions.port;
14+
const resolvedEmulatorHubResponse = (async () => {
15+
await new Promise((resolve) => setTimeout(resolve, 1_000));
16+
if (!process.env.FIREBASE_EMULATOR_HUB) throw new Error('$FIREBASE_EMULATOR_HUB not found');
17+
const response = await fetch(`http://${process.env.FIREBASE_EMULATOR_HUB}/emulators`);
18+
if (!response.ok) throw new Error('Unable to fetch emulator hub REST api.');
19+
return await response.json();
20+
})();
21+
22+
export const resolvedAuthEmulatorPort = resolvedEmulatorHubResponse.then((it) => it.auth.port);
23+
export const resolvedDatabaseEmulatorPort = resolvedEmulatorHubResponse.then((it) => it.database.port);
24+
export const resolvedFirestoreEmulatorPort = resolvedEmulatorHubResponse.then((it) => it.firestore.port);
25+
export const resolvedStorageEmulatorPort = resolvedEmulatorHubResponse.then((it) => it.storage.port);
26+
export const resolvedFunctionsEmulatorPort = resolvedEmulatorHubResponse.then((it) => it.functions.port);

0 commit comments

Comments
 (0)