name: ci
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - '**'

jobs:

  check:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v2
      with:
        node-version: lts/*
    - uses: ipfs/aegir/actions/cache-node-modules@master
    - run: npm run --if-present lint
    - run: npm run --if-present dep-check

  test-node:
    needs: check
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [windows-latest, ubuntu-latest, macos-latest]
        node: [16]
      fail-fast: true
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run --if-present test:node
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          directory: ./.nyc_output
          flags: node

  test-chrome:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run --if-present test:chrome
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          directory: ./.nyc_output
          flags: chrome

  test-chrome-webworker:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run --if-present test:chrome-webworker
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          directory: ./.nyc_output
          flags: chrome-webworker

  test-firefox:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run --if-present test:firefox
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          directory: ./.nyc_output
          flags: firefox

  test-firefox-webworker:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run --if-present test:firefox-webworker
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          directory: ./.nyc_output
          flags: firefox-webworker

  test-electron-main:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npx xvfb-maybe npm run --if-present test:electron-main
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          directory: ./.nyc_output
          flags: electron-main

  test-electron-renderer:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npx xvfb-maybe npm run --if-present test:electron-renderer
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          directory: ./.nyc_output
          flags: electron-renderer

  test-interop:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run test:interop -- --bail

  release:
    runs-on: ubuntu-latest
    needs: [test-node, test-chrome, test-chrome-webworker, test-firefox, test-firefox-webworker, test-electron-main, test-electron-renderer, test-interop]
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    steps:
      - uses: GoogleCloudPlatform/release-please-action@v2
        id: release
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          release-type: node
          bump-minor-pre-major: true
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
          registry-url: 'https://registry.npmjs.org'
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - if: ${{ steps.release.outputs.release_created }}
        name: Run release version
        run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - if: ${{ !steps.release.outputs.release_created }}
        name: Run release rc
        run: |
            npm version `node -p -e "require('./package.json').version"`-`git rev-parse --short HEAD` --no-git-tag-version
            npm publish --tag next
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
