name: Cargo

on: [push, pull_request]
#on:
#  push:
#    # Ignore commits created by bors
#    branches-ignore:
#      - 'staging'
#      - 'trying'
#  pull_request:
#    branches-ignore:
#      - 'staging'
#      - 'trying'

env:
  CARGO_INCREMENTAL: 0

jobs:
  fmt:
    name: fmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install rustfmt
        run: rustup component add rustfmt
      - name: Run cargo fmt
        run: cargo fmt --all -- --check

  check-all:
    name: Compilability
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      # Ensure that all components all compilable.
      - name: Run cargo check for all targets
        run: cargo check --color always --all --all-targets

  test:
    name: test
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        crate:
          - ast_node
          - enum_kind
          - from_variant
          - jsdoc
          - spack
          - string_enum
          - swc
          - swc_atoms
          - swc_bundler
          - swc_common
          - swc_ecma_ast
          - swc_ecma_codegen
          - swc_ecma_codegen_macros
          - swc_ecma_dep_graph
          - swc_ecma_ext_transforms
          - swc_ecma_parser
          - swc_ecma_preset_env
          - swc_ecma_transforms
          - swc_ecma_transforms_base
          - swc_ecma_transforms_compat
          - swc_ecma_transforms_macros
          - swc_ecma_transforms_module
          - swc_ecma_transforms_optimization
          - swc_ecma_transforms_proposal
          - swc_ecma_transforms_react
          - swc_ecma_transforms_testing
          - swc_ecma_transforms_typescript
          - swc_ecma_utils
          - swc_ecma_visit
          - swc_ecmascript
          - swc_eq_ignore_macros
          - swc_macros_common
          - swc_visit
          - swc_visit_macros
          - testing
          - testing_macros

    steps:
      - uses: actions/checkout@v2

      - uses: actions/setup-node@v2
        with:
          node-version: 14

      - name: Checkout submodules
        shell: bash
        run: |
          auth_header="$(git config --local --get http.https://github.com/.extraheader)"
          git submodule sync --recursive
          git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1

      - name: Install node dependencies
        run: |
          npm config set prefix ~/npm
          npm i browserslist regenerator-runtime sourcemap-validator progress
          npm i -g jest

      - name: Cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/
          key: ${{ runner.os }}-cargo-test-${{ matrix.crate }}

      - name: Run cargo test
        run: |
          export PATH="$PATH:$HOME/npm/bin"
          cargo test --color always -p ${{ matrix.crate }}
  #
  deploy-docs:
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/master'
    needs:
      - test
    steps:
      - uses: actions/checkout@v2
      - name: Create rustdoc
        run: cargo doc
