Test and publish #1411
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test and publish | |
on: | |
push: | |
branches: | |
- master | |
paths-ignore: | |
- "**/*.md" | |
pull_request: | |
branches: | |
- "**" | |
release: | |
types: | |
- published | |
schedule: | |
- cron: 0 0 * * 1-5 | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
name: Build | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Setup node | |
uses: actions/setup-node@v2-beta | |
with: | |
node-version: '14' | |
- name: node_modules cache | |
uses: actions/cache@v2 | |
id: node_modules_cache | |
with: | |
path: ./node_modules | |
key: ${{ runner.os }}-14-12-9-9-6-node_modules-${{ hashFiles('yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-14-12-9-9-6-node_modules- | |
${{ runner.os }}-14-12-9-9- | |
${{ runner.os }}-14-12-9- | |
${{ runner.os }}-14-12- | |
${{ runner.os }}-14- | |
- name: Yarn offline cache | |
if: steps.node_modules_cache.outputs.cache-hit != 'true' | |
uses: actions/cache@v2 | |
with: | |
path: ~/.npm-packages-offline-cache | |
key: yarn-offline-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: yarn-offline | |
- name: Install deps | |
if: steps.node_modules_cache.outputs.cache-hit != 'true' | |
run: | | |
yarn config set yarn-offline-mirror ~/.npm-packages-offline-cache | |
yarn config set network-timeout 300000 | |
yarn config set yarn-offline-mirror-pruning true | |
yarn install --frozen-lockfile --prefer-offline | |
- name: Build | |
id: yarn-pack-dir | |
run: ./tools/build.sh | |
- name: 'Upload Artifact' | |
uses: actions/upload-artifact@v2 | |
with: | |
name: angularfire-${{ github.run_id }} | |
path: dist | |
retention-days: 1 | |
test: | |
runs-on: ${{ matrix.os }} | |
needs: build | |
strategy: | |
matrix: | |
os: [ ubuntu-latest, macos-latest, windows-latest ] | |
node: [ "14", "16"] | |
firebase: ["9"] | |
firebaseTools: ["11"] | |
rxjs: ["7"] | |
# TODO add ng 12 back in, we need to cut a major at this point and drop | |
ng: ["13", "14", "15"] | |
exclude: | |
# TODO investigate failures | |
# https://github.com/angular/angularfire/runs/4174069788 | |
# Can't resolve 'core-js/proposals/reflect-metadata' | |
- os: ubuntu-latest | |
node: 14 | |
ng: 13 | |
fail-fast: false | |
name: Test firebase@${{ matrix.firebase }} firebase-tools@${{ matrix.firebaseTools }} ng@${{ matrix.ng }} rxjs@${{ matrix.rxjs}} on ${{ matrix.os }} Node.js ${{ matrix.node }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Setup node | |
uses: actions/setup-node@v2-beta | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: node_modules cache | |
id: node_modules_cache | |
uses: actions/cache@v2 | |
with: | |
path: ./node_modules | |
key: ${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}-${{ matrix.firebaseTools }}-${{ matrix.rxjs }}-node_modules-${{ hashFiles('yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}-${{ matrix.firebaseTools }}-${{ matrix.rxjs }}-node_modules- | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}-${{ matrix.firebaseTools }}- | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}- | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}- | |
${{ runner.os }}-${{ matrix.node }}- | |
- name: Yarn offline cache | |
uses: actions/cache@v2 | |
with: | |
path: ~/.npm-packages-offline-cache | |
key: yarn-offline-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: yarn-offline | |
- name: Configure yarn | |
run: | | |
yarn config set yarn-offline-mirror ~/.npm-packages-offline-cache | |
yarn config set network-timeout 300000 | |
yarn config set ignore-engines true | |
- name: Yarn install | |
if: steps.node_modules_cache.outputs.cache-hit != 'true' | |
run: yarn install --frozen-lockfile --prefer-offline | |
- name: Bump deps | |
run: | | |
yarn add firebase@${{ matrix.firebase }} | |
yarn add firebase-tools@${{ matrix.firebaseTools }} | |
yarn add rxjs@${{ matrix.rxjs }} --prefer-offline | |
# Can't update more than one major at a times, take the incremental step | |
- name: Update to ng@13 | |
run: npx @angular/cli@13 update @angular/core@13 @angular/cli@13 --allow-dirty --force | |
if: matrix.ng == '14' || matrix.ng == '15' || matrix.ng == 'next' | |
continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
- name: Update to ng@14 | |
run: npx @angular/cli@14 update @angular/core@14 @angular/cli@14 --allow-dirty --force | |
if: matrix.ng == '15' || matrix.ng == 'next' | |
continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
- name: Update to ng@${{ matrix.ng }} | |
run: npx @angular/cli@${{ matrix.ng }} update @angular/core@${{ matrix.ng }} @angular/cli@${{ matrix.ng }} --allow-dirty --force | |
if: matrix.ng != '12' | |
continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
- name: Firebase emulator cache | |
uses: actions/cache@v2 | |
with: | |
path: ~/.cache/firebase/emulators | |
key: firebase_emulators | |
- name: Download Artifacts | |
uses: actions/download-artifact@v2 | |
- name: Relocate Artifacts | |
run: mv angularfire-${{ github.run_id }} dist | |
- name: Test Node (CJS) | |
run: | | |
yarn build:jasmine | |
yarn test:node | |
if: matrix.ng == '12' | |
- name: Test Node (ESM) | |
run: | | |
yarn build:jasmine | |
yarn test:node-esm | |
if: matrix.ng != '12' && matrix.rxjs == '7' | |
- name: Test browser | |
if: matrix.os == 'ubuntu-latest' && matrix.node == '14' && matrix.firebaseTools == '11' | |
run: yarn test:chrome-headless | |
- name: ng-build yarn install | |
run: | | |
cd ./test/ng-build | |
yarn --prefer-offline | |
yarn add firebase@${{ matrix.firebase }} | |
- name: Update ng-build to ng@13 | |
run: | | |
cd ./test/ng-build | |
npx @angular/cli@13 update @angular/core@13 @angular/cli@13 @nguniversal/express-engine@13 --allow-dirty --force | |
if: matrix.ng == '14' || matrix.ng == '15' || matrix.ng == 'next' | |
continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
- name: Update ng-build to ng@14 | |
run: | | |
cd ./test/ng-build | |
npx @angular/cli@14 update @angular/core@14 @angular/cli@14 @nguniversal/express-engine@14 --allow-dirty --force | |
if: matrix.ng == '15' || matrix.ng == 'next' | |
continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
- name: Update ng-build to ng@${{ matrix.ng }} | |
run: | | |
cd ./test/ng-build | |
npx @angular/cli@${{ matrix.ng }} update @angular/core@${{ matrix.ng }} @angular/cli@${{ matrix.ng }} @nguniversal/express-engine@${{ matrix.ng }} --allow-dirty --force | |
if: matrix.ng != '12' | |
continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
- name: ng-build prerender | |
run: | | |
cd ./test/ng-build | |
yarn prerender | |
# ng 13 is flaking, skip for now | |
if: matrix.ng != '13' | |
# TODO dry up | |
canary: | |
runs-on: ${{ matrix.os }} | |
# if: ${{ github.ref == 'refs/heads/master' }} | |
# needs: [ 'build', 'test' ] | |
needs: [ 'build' ] | |
strategy: | |
matrix: | |
os: [ ubuntu-latest ] | |
node: ["14"] | |
firebase: ["9", "canary", "next"] | |
firebaseTools: ["11"] | |
rxjs: ["7"] | |
# TODO add 12 back in | |
ng: ["13", "14", "15", "next"] | |
exclude: | |
# standard configurations | |
- firebase: 9 | |
ng: 12 | |
- firebase: 9 | |
ng: 13 | |
fail-fast: false | |
name: Canary firebase@${{ matrix.firebase }} firebase-tools@${{ matrix.firebaseTools }} ng@${{ matrix.ng }} rxjs@${{ matrix.rxjs}} on ${{ matrix.os }} Node.js ${{ matrix.node }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Setup node | |
uses: actions/setup-node@v2-beta | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: node_modules cache | |
id: node_modules_cache | |
uses: actions/cache@v2 | |
with: | |
path: ./node_modules | |
key: ${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}-${{ matrix.firebaseTools }}-${{ matrix.rxjs }}-node_modules-${{ hashFiles('yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}-${{ matrix.firebaseTools }}-${{ matrix.rxjs }}-node_modules- | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}-${{ matrix.firebaseTools }}- | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}-${{ matrix.firebase }}- | |
${{ runner.os }}-${{ matrix.node }}-${{ matrix.ng }}- | |
${{ runner.os }}-${{ matrix.node }}- | |
- name: Yarn offline cache | |
uses: actions/cache@v2 | |
with: | |
path: ~/.npm-packages-offline-cache | |
key: yarn-offline-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: yarn-offline | |
- name: Configure yarn | |
run: | | |
yarn config set yarn-offline-mirror ~/.npm-packages-offline-cache | |
yarn config set network-timeout 300000 | |
yarn config set ignore-engines true | |
- name: Yarn install | |
if: steps.node_modules_cache.outputs.cache-hit != 'true' | |
run: yarn install --frozen-lockfile --prefer-offline | |
- name: Bump deps | |
run: | | |
yarn add firebase@${{ matrix.firebase }} | |
yarn add firebase-tools@${{ matrix.firebaseTools }} | |
yarn add rxjs@${{ matrix.rxjs }} --prefer-offline | |
# Can't update more than one major at a times, take the incremental step | |
- name: Update to ng@13 | |
run: npx @angular/cli@13 update @angular/core@13 @angular/cli@13 --allow-dirty --force | |
if: matrix.ng == '14' || matrix.ng == '15' || matrix.ng == 'next' | |
- name: Update to ng@14 | |
run: npx @angular/cli@14 update @angular/core@14 @angular/cli@14 --allow-dirty --force | |
if: matrix.ng == '15' || matrix.ng == 'next' | |
- name: Update to ng@${{ matrix.ng }} | |
run: npx @angular/cli@${{ matrix.ng }} update @angular/core@${{ matrix.ng }} @angular/cli@${{ matrix.ng }} --allow-dirty --force | |
if: matrix.ng != '12' | |
- name: Firebase emulator cache | |
uses: actions/cache@v2 | |
with: | |
path: ~/.cache/firebase/emulators | |
key: firebase_emulators | |
- name: Download Artifacts | |
uses: actions/download-artifact@v2 | |
- name: Relocate Artifacts | |
run: mv angularfire-${{ github.run_id }} dist | |
- name: Test Node (CJS) | |
run: | | |
yarn build:jasmine | |
yarn test:node | |
if: matrix.ng == '12' | |
- name: Test Node (ESM) | |
run: | | |
yarn build:jasmine | |
yarn test:node-esm | |
if: matrix.ng != '12' | |
- name: Test browser | |
run: yarn test:chrome-headless | |
- name: ng-build yarn install | |
run: | | |
cd ./test/ng-build | |
yarn --prefer-offline | |
yarn add firebase@${{ matrix.firebase }} | |
# on @canary firebase-admin and firebase database-types conflict, skip the lib check for now | |
- name: ng-build skipLibCheck | |
run: | | |
cd ./test/ng-build | |
sed -i 's/"skipLibCheck": false,/"skipLibCheck": true,/g' tsconfig.json | |
if: matrix.firebase == 'canary' | |
- name: Update ng-build to ng@13 | |
run: | | |
cd ./test/ng-build | |
npx @angular/cli@13 update @angular/core@13 @angular/cli@13 @nguniversal/express-engine@13 --allow-dirty --force | |
if: matrix.ng == '14' || matrix.ng == '15' || matrix.ng == 'next' | |
- name: Update ng-build to ng@14 | |
run: | | |
cd ./test/ng-build | |
npx @angular/cli@14 update @angular/core@14 @angular/cli@14 @nguniversal/express-engine@14 --allow-dirty --force | |
if: matrix.ng == '15' || matrix.ng == 'next' | |
- name: Update ng-build to ng@${{ matrix.ng }} | |
run: | | |
cd ./test/ng-build | |
npx @angular/cli@${{ matrix.ng }} update @angular/core@${{ matrix.ng }} @angular/cli@${{ matrix.ng }} @nguniversal/express-engine@${{ matrix.ng }} --allow-dirty --force | |
if: matrix.ng != '12' | |
- name: ng-build prerender | |
run: | | |
cd ./test/ng-build | |
yarn prerender | |
# ng 13 is flaking, skip for now | |
if: matrix.ng != '13' | |
contribute: | |
runs-on: ${{ matrix.os }} | |
name: Contribute ${{ matrix.os }} on Node.js ${{ matrix.node }} | |
strategy: | |
matrix: | |
os: [ ubuntu-latest, macos-latest, windows-latest ] | |
node: ["14", "16"] | |
exclude: | |
# we build with this combination, safely skip | |
- os: ubuntu-latest | |
node: 14 | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Setup node | |
uses: actions/setup-node@v2-beta | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
# node 14 image doesn't have new enough java for the emulators | |
- name: Setup java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'temurin' | |
java-version: '11' | |
if: matrix.node == '14' | |
- name: node_modules cache | |
uses: actions/cache@v2 | |
id: node_modules_cache | |
with: | |
path: ./node_modules | |
key: ${{ runner.os }}-${{ matrix.node }}-12-9-9-6-node_modules-${{ hashFiles('yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-${{ matrix.node }}-12-9-9-6-node_modules- | |
${{ runner.os }}-${{ matrix.node }}-12-9-9- | |
${{ runner.os }}-${{ matrix.node }}-12-9- | |
${{ runner.os }}-${{ matrix.node }}-12- | |
${{ runner.os }}-${{ matrix.node }}- | |
- name: Yarn offline cache | |
if: steps.node_modules_cache.outputs.cache-hit != 'true' | |
uses: actions/cache@v2 | |
with: | |
path: ~/.npm-packages-offline-cache | |
key: yarn-offline-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: yarn-offline | |
- name: Install deps | |
if: steps.node_modules_cache.outputs.cache-hit != 'true' | |
run: | | |
yarn config set yarn-offline-mirror ~/.npm-packages-offline-cache | |
yarn config set network-timeout 300000 | |
yarn config set ignore-engines true | |
yarn install --frozen-lockfile --prefer-offline | |
- name: Build | |
run: yarn build | |
- name: Test Node | |
run: | | |
npm run build:jasmine | |
npm run test:node | |
- name: Test headless | |
run: yarn test:chrome-headless | |
continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
# Break the branch protection test into a seperate step, so we can manage the matrix more easily | |
test_and_contribute: | |
runs-on: ubuntu-latest | |
name: Branch protection | |
needs: ['test', 'contribute'] | |
steps: | |
- run: true | |
publish: | |
runs-on: ubuntu-latest | |
name: Publish (NPM) | |
needs: ['build', 'test'] | |
if: ${{ github.ref == 'refs/heads/master' || github.event_name == 'release' }} | |
steps: | |
- name: Setup node | |
uses: actions/setup-node@v2-beta | |
with: | |
node-version: '14' | |
registry-url: 'https://registry.npmjs.org' | |
- name: 'Download Artifacts' | |
uses: actions/download-artifact@v2 | |
- name: Publish | |
run: | | |
cd ./angularfire-${{ github.run_id }}/packages-dist | |
chmod +x publish.sh | |
./publish.sh | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
notify: | |
runs-on: ubuntu-latest | |
name: Notify | |
needs: ['build', 'test', 'contribute', 'canary'] | |
if: always() | |
steps: | |
- run: echo ${{ github.run_id }} |