name: Elixir CI

on:
  push:
    branches: [master, stable]
  pull_request:
    branches: [master, stable]

jobs:
  build:
    name: Build and test
    runs-on: buildjet-4vcpu-ubuntu-2004

    strategy:
      matrix:
        postgres_version: [12,13,14]

    services:
      postgres:
        image: postgres:${{ matrix.postgres_version }}
        ports:
          - 5432:5432
        env:
          POSTGRES_PASSWORD: postgres
          options: >-
            --health-cmd pg_isready
            --health-interval 10s
            --health-timeout 5s
            --health-retries 5

      clickhouse:
        image: yandex/clickhouse-server:21.11
        ports:
          - 8123:8123
        env:
          options: >-
            --health-cmd nc -zw3 localhost 8124
            --health-interval 10s
            --health-timeout 5s
            --health-retries 5

    steps:
      - uses: actions/checkout@v2
      - name: Read .tool-versions
        uses: marocchino/tool-versions-action@v1
        id: versions
      - name: Set up Elixir
        uses: erlef/setup-beam@v1
        with:
          elixir-version: ${{steps.versions.outputs.elixir}}
          otp-version: ${{ steps.versions.outputs.erlang}}
      - name: Restore dependencies cache
        uses: actions/cache@v2
        with:
          path: |
            deps
            _build
            priv/plts
          key: ${{ runner.os }}-mix-v2-${{ hashFiles('**/mix.lock') }}
          restore-keys: ${{ runner.os }}-mix-v2-
      - name: Install dependencies
        run: mix deps.get && npm install --prefix ./tracker
      - name: Check Formatting
        run: mix format --check-formatted
      - name: Check Compile Warnings
        run: mix compile --warnings-as-errors --all-warnings
      - name: Generate tracker files
        run: npm run deploy --prefix ./tracker
      - name: Run tests
        run: mix test
      #- name: Check Dialyzer
      #  run: mix dialyzer <-- false negatives
      - name: Check Credo Warnings
        run: mix credo --strict --only warning --ignore Consistency
env:
  MIX_ENV: test
