Skip to content

Test and publish

Test and publish #1400

Workflow file for this run

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 }}