name: CI

on:
  push:
    branches:
      - master
  pull_request:

env:
  NODE_VERSION: '12.x'

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 1

    - uses: actions/setup-node@v2-beta
      with:
        node-version: '${{ env.NODE_VERSION }}'

    - name: Get package manager's global cache path
      id: global-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - name: Cache package manager's global cache and node_modules
      id: cache-dependencies
      uses: actions/cache@v2
      with:
        path: |
          ${{ steps.global-cache-dir-path.outputs.dir }}
          node_modules
        key: ${{ runner.os }}-${{ matrix.node-version }}-${{
          hashFiles('**/yarn.lock'
          ) }}
        restore-keys: |
          ${{ runner.os }}-${{ matrix.node-version }}-

    - name: Install Dependencies
      run: yarn install --frozen-lockfile
      if: |
        steps.cache-dependencies.outputs.cache-hit != 'true'

    - name: Lint
      run: yarn lint


  test:
    name: Tests
    runs-on: ubuntu-latest
    needs: lint

    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 1

    - uses: actions/setup-node@v2-beta
      with:
        node-version: '${{ env.NODE_VERSION }}'

    - name: Get package manager's global cache path
      id: global-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - name: Cache package manager's global cache and node_modules
      id: cache-dependencies
      uses: actions/cache@v2
      with:
        path: |
          ${{ steps.global-cache-dir-path.outputs.dir }}
          node_modules
        key: ${{ runner.os }}-${{ matrix.node-version }}-${{
          hashFiles('**/yarn.lock'
          ) }}
        restore-keys: |
          ${{ runner.os }}-${{ matrix.node-version }}-

    - name: Install Dependencies
      run: yarn install --frozen-lockfile
      if: |
        steps.cache-dependencies.outputs.cache-hit != 'true'

    - name: Test
      run: yarn test


  floating-dependencies:
    name: Floating Dependencies
    runs-on: ubuntu-latest
    needs: lint

    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 1

    - uses: actions/setup-node@v2-beta
      with:
        node-version: '${{ env.NODE_VERSION }}'

    - name: Get package manager's global cache path
      id: global-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - name: Cache package manager's global cache and node_modules
      id: cache-dependencies
      uses: actions/cache@v2
      with:
        path: |
          ${{ steps.global-cache-dir-path.outputs.dir }}
          node_modules
        key: ${{ runner.os }}-${{ matrix.node-version }}-floating-deps
        restore-keys: |
          ${{ runner.os }}-${{ matrix.node-version }}-

    - name: Install Dependencies
      run: yarn install --no-lockfile

    - name: Test
      run: yarn test


  try-scenarios:
    name: Tests - Ember CLI ${{ matrix.ember-cli }}
    runs-on: ubuntu-latest
    continue-on-error: true
    needs: test

    strategy:
      fail-fast: true
      matrix:
        ember-cli: [
          "~3.4.0",
          "~3.12.0",
          "~3.16.0",
          "~3.20.0",
          "~3.24.0",
          "latest",
          "beta",
        ]

    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 1

    - uses: actions/setup-node@v2-beta
      with:
        node-version: '${{ env.NODE_VERSION }}'

    - name: Get package manager's global cache path
      id: global-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - name: Cache package manager's global cache and node_modules
      id: cache-dependencies
      uses: actions/cache@v2
      with:
        path: |
          ${{ steps.global-cache-dir-path.outputs.dir }}
          node_modules
        key: ${{ runner.os }}-${{ matrix.node-version }}-${{
          hashFiles('**/yarn.lock'
          ) }}
        restore-keys: |
          ${{ runner.os }}-${{ matrix.node-version }}-

    - name: Install Dependencies
      run: yarn install --frozen-lockfile
      if: |
        steps.cache-dependencies.outputs.cache-hit != 'true'

    - name: Install Ember CLI
      run: |
        yarn global add ember-cli@${EMBER_CLI_VERSION}
        echo "$(yarn global bin)" >> $GITHUB_PATH
      env:
        EMBER_CLI_VERSION: ${{ matrix.ember-cli }}

    - name: Test
      run: ./node_modules/.bin/mocha node-tests/**/*-test.js
