name: Test and publish on: push: branches: - "**" paths-ignore: - "**/*.md" pull_request: branches: - "**" release: types: - published 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-8-node_modules-${{ hashFiles('yarn.lock') }} restore-keys: | ${{ runner.os }}-14-8-node_modules- ${{ runner.os }}-14-node_modules- - 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 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: ubuntu-latest needs: build strategy: matrix: node: ["12", "14", "16"] firebase: ["7", "8"] fail-fast: false name: Test Firebase v${{ matrix.firebase }} on 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.firebase }}-node_modules-${{ hashFiles('yarn.lock') }} restore-keys: | ${{ runner.os }}-${{ matrix.node }}-${{ matrix.firebase }}-node_modules- ${{ runner.os }}-${{ matrix.node }}-node_modules- - 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 install --frozen-lockfile --prefer-offline --ignore-engines yarn add firebase@^${{ matrix.firebase }}.0 --prefer-offline --ignore-engines - 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: Run tests run: | mv angularfire-${{ github.run_id }} dist yarn test:node headless: runs-on: ubuntu-latest needs: build name: Test Firebase v${{ matrix.firebase }} on Headless Chrome strategy: matrix: firebase: ["7", "8"] fail-fast: false steps: - name: Checkout uses: actions/checkout@v2 - name: Setup node uses: actions/setup-node@v2-beta with: node-version: '14' check-latest: true - name: node_modules cache id: node_modules_cache uses: actions/cache@v2 with: path: ./node_modules key: ${{ runner.os }}-14-${{ matrix.firebase }}-node_modules-${{ hashFiles('yarn.lock') }} restore-keys: | ${{ runner.os }}-14-${{ matrix.firebase }}-node_modules- ${{ runner.os }}-14-node_modules- - 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 install --frozen-lockfile --prefer-offline yarn add firebase@^${{ matrix.firebase }}.0 --prefer-offline - 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: Run tests run: | mv angularfire-${{ github.run_id }} dist yarn test:chrome-headless publish: runs-on: ubuntu-latest name: Publish (NPM) needs: ['test', 'headless'] 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 }}