Test and publish #1608
Workflow file for this run
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@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 }} |