Skip to content

Test and publish

Test and publish #1618

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@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: '16'
check-latest: true
- name: node_modules cache
uses: actions/cache@v3
id: node_modules_cache
with:
path: ./node_modules
key: ${{ runner.os }}-16-12-9-9-6-node_modules-${{ hashFiles('yarn.lock') }}
restore-keys: |
${{ runner.os }}-16-12-9-9-6-node_modules-
${{ runner.os }}-16-12-9-9-
${{ runner.os }}-16-12-9-
${{ runner.os }}-16-12-
${{ runner.os }}-16-
- name: Yarn offline cache
if: steps.node_modules_cache.outputs.cache-hit != 'true'
uses: actions/cache@v3
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 ignore-engines true
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@v3
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: ["16", "18", "20"]
fail-fast: false
name: Test Node ${{ matrix.node }} (${{ matrix.os }})
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
check-latest: true
- name: node_modules cache
id: node_modules_cache
uses: actions/cache@v3
with:
path: ./node_modules
key: ${{ runner.os }}-${{ matrix.node }}-16-9-12-7-node_modules-${{ hashFiles('yarn.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.node }}-16-9-12-7-node_modules-
${{ runner.os }}-${{ matrix.node }}-16-9-12-
${{ runner.os }}-${{ matrix.node }}-16-9-
${{ runner.os }}-${{ matrix.node }}-16-
${{ runner.os }}-${{ matrix.node }}-
- name: Yarn offline cache
uses: actions/cache@v3
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: Download Artifacts
uses: actions/download-artifact@v3
- name: Relocate Artifacts
run: mv angularfire-${{ github.run_id }} dist
- name: Test Node
run: |
yarn build:jasmine
yarn test:node
- name: ng-build yarn install
run: |
cd ./test/ng-build
yarn --prefer-offline
- name: ng-build prerender
run: |
cd ./test/ng-build
yarn prerender
browser:
runs-on: ${{ matrix.os }}
needs: build
name: Test ${{ matrix.browser }}
strategy:
matrix:
os: [ ubuntu-latest ]
browser: [ chrome-headless, firefox-headless ]
include:
- os: macos-latest
browser: safari
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 16
check-latest: true
- name: Setup java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: node_modules cache
id: node_modules_cache
uses: actions/cache@v3
with:
path: ./node_modules
key: ${{ runner.os }}-${{ matrix.node }}-16-9-12-7-node_modules-${{ hashFiles('yarn.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.node }}-16-9-12-7-node_modules-
${{ runner.os }}-${{ matrix.node }}-16-9-12-
${{ runner.os }}-${{ matrix.node }}-16-9-
${{ runner.os }}-${{ matrix.node }}-16-
${{ runner.os }}-${{ matrix.node }}-
- name: Yarn offline cache
uses: actions/cache@v3
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: Firebase emulator cache
uses: actions/cache@v3
with:
path: ~/.cache/firebase/emulators
key: firebase_emulators
- name: Download Artifacts
uses: actions/download-artifact@v3
- name: Relocate Artifacts
run: mv angularfire-${{ github.run_id }} dist
- name: Test browser
run: yarn test:${{ matrix.browser }}
contribute:
runs-on: ${{ matrix.os }}
name: Contribute Node ${{ matrix.node }} (${{ matrix.os }})
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
node: ["16"]
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
check-latest: true
- name: node_modules cache
uses: actions/cache@v3
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@v3
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: Lint
run: yarn lint
- name: Build
run: yarn build
- name: Test Node
run: |
yarn build:jasmine
yarn test:node
- name: Firebase emulator cache
uses: actions/cache@v3
with:
path: ~/.cache/firebase/emulators
key: firebase_emulators
- name: Setup java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: Test headless
run: yarn test:chrome-headless
# Tests are flaky on Windows
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', 'browser']
steps:
- run: true
publish:
runs-on: ubuntu-latest
name: Publish (NPM)
needs: ['build', 'test', 'browser']
if: ${{ github.ref == 'refs/heads/master' || github.event_name == 'release' }}
steps:
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: '16'
registry-url: 'https://registry.npmjs.org'
check-latest: true
- name: 'Download Artifacts'
uses: actions/download-artifact@v3
- name: Publish
run: |
cd ./angularfire-${{ github.run_id }}/packages-dist
chmod +x publish.sh
./publish.sh
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}