name: CI

on:
  pull_request:
  push:
    branches:
      - main
      - master
  schedule:
    - cron: "0 3 * * 0" # every Sunday at 3am

env:
  CI: true

jobs:
  type_checking:
    if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')"
    name: Check Types
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: volta-cli/action@v1

      - run: yarn install --frozen-lockfile
      - run: yarn prepack


  tests:
    if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')"
    name: Base Tests
    timeout-minutes: 5
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node:
          - "16"
          - "18"
    steps:
      - uses: actions/checkout@v3
      - uses: volta-cli/action@v1
        with:
          node-version: ${{ matrix.node }}

      - run: yarn install --frozen-lockfile

      - name: Test with ${{ matrix.node }}
        run: yarn ember test

  floating-dependencies:
    if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')"
    name: Floating Dependencies
    timeout-minutes: 5
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node:
          - "16"
          - "18"

    steps:
      - uses: actions/checkout@v3
      - uses: volta-cli/action@v1
        with:
          node-version: ${{ matrix.node }}

      - run: yarn install --no-lockfile

      - name: Test with Node ${{ matrix.node }}
        run: yarn ember test

  try-scenarios:
    if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')"
    name: "Compatibility"
    timeout-minutes: 7
    runs-on: ubuntu-latest
    needs: [ tests, type_checking ]

    strategy:
      fail-fast: true
      matrix:
        ember-try-scenario:
          - ember-4.4
          - ember-4.8
          - ember-release
          - ember-beta
          - ember-canary
          - embroider
    steps:
      - uses: actions/checkout@v3
      - uses: volta-cli/action@v1
        with:
          node-version: 16.x
      - name: install dependencies
        run: yarn install --frozen-lockfile
      - name: test
        run: node_modules/.bin/ember try:one ${{ matrix.ember-try-scenario }} --skip-cleanup

  ember-cli-update:
    if: github.event_name == 'pull_request' && github.event.pusher.name == 'renovate-bot'
    runs-on: ubuntu-latest
    needs: [tests, try-scenarios, floating-dependencies]

    steps:
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.head_ref }}
          token: ${{ secrets.GitHubToken }}
      - uses: actions/setup-node@v3
      - uses: kellyselden/ember-cli-update-action@v3
        with:
          autofix_command: yarn lint:fix
          ignore_to: true

  publish:
    name: Release
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
    needs: [tests, try-scenarios, floating-dependencies]

    steps:
      - uses: actions/checkout@v3
        with:
          persist-credentials: false
      - uses: volta-cli/action@v1
      - run: yarn install

      - name: Release
        run: yarn semantic-release
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
