name: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  lint:
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [ubuntu-latest]
        node: [14]

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
          cache: 'yarn'

      - name: Install dependencies
        run: yarn --immutable

      - name: Lint
        run: yarn lint

      - name: Lint (docs)
        run: yarn lint:docs

  test:
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node: [14]

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
          cache: 'yarn'

      - name: Install dependencies
        run: yarn --immutable

      - name: Build
        run: yarn build

      - name: Test (unit)
        run: yarn test:unit

      - name: Test (presets)
        run: yarn test:presets

  test-bridge:
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node: [14]

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
          cache: 'yarn'
          cache-dependency-path: |
            yarn.lock

      - name: Install dependencies
        run: yarn --immutable

      - name: Build
        run: yarn build

      - name: Test with webpack
        run: yarn test:bridge:webpack

      - name: Test with vite
        run: yarn test:bridge:vite

  build-release:
    needs:
      - test
      - test-bridge
      - lint
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [ubuntu-latest]
        node: [14]

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
          cache: 'yarn'

      - name: Install dependencies
        run: yarn --immutable

      - name: Build
        run: yarn build

      - name: Release Edge
        if: |
          github.event_name == 'push' &&
          !contains(github.event.head_commit.message, '[skip-release]') &&
          !contains(github.event.head_commit.message, 'chore') &&
          !contains(github.event.head_commit.message, 'docs')
        run: ./scripts/release-edge.sh
        env:
          NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}