-
Couldn't load subscription status.
- Fork 2.2k
Test and publish #2430
This file contains hidden or 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:
- main
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: '20'
check-latest: false
- name: angular build cache
uses: actions/cache@v3
with:
path: ./.angular
key: angular-cache
- name: node_modules cache
uses: actions/cache@v3
id: node_modules_cache
with:
path: ./node_modules
key: ${{ runner.os }}-20-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-20-
- name: Install deps
if: steps.node_modules_cache.outputs.cache-hit != 'true'
run: |
npm ci
- name: Build
run: ./tools/build.sh
- name: 'Upload Artifact'
uses: actions/upload-artifact@v4
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: ["18", "20", "22"]
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 }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-${{ matrix.node }}-
- name: Install deps
if: steps.node_modules_cache.outputs.cache-hit != 'true'
run: npm ci
- name: Download Artifacts
uses: actions/download-artifact@v4
- name: Relocate Artifacts
run: mv angularfire-${{ github.run_id }} dist
- name: Test Node
run: |
npm run build:jasmine
npm run test:node
browser:
runs-on: ${{ matrix.os }}
needs: build
name: Test ${{ matrix.browser }}
strategy:
matrix:
os: [ ubuntu-latest ]
browser: [ chrome-headless, firefox-headless ]
# TODO(davideast): Figure out why Safari tests timeout only on CI
# include:
# - os: macos-latest
# browser: safari
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 20
check-latest: false
- 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 }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-${{ matrix.node }}-
- name: Install deps
if: steps.node_modules_cache.outputs.cache-hit != 'true'
run: npm ci
- name: Firebase emulator cache
uses: actions/cache@v3
with:
path: ~/.cache/firebase/emulators
key: firebase_emulators
- name: Download Artifacts
uses: actions/download-artifact@v4
- name: Relocate Artifacts
run: mv angularfire-${{ github.run_id }} dist
- name: Test browser
run: npm run 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: ["20"]
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 }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-${{ matrix.node }}-
- name: Install deps
if: steps.node_modules_cache.outputs.cache-hit != 'true'
run: npm ci
#- name: Lint
# run: npm run lint
- name: Build
run: npm run build
- name: Test Node
run: |
npm run build:jasmine
npm run 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: npm run 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/main' || github.event_name == 'release' }}
steps:
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
check-latest: false
- name: 'Download Artifacts'
uses: actions/download-artifact@v4
- name: Publish
run: |
cd ./angularfire-${{ github.run_id }}/packages-dist
chmod +x publish.sh
./publish.sh
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}