name: Coverage

on:
  pull_request:
    types: [opened, synchronize, reopened]
  push:
    branches:
      - master
      - db-abstract

jobs:
  build_and_test:
    strategy:
      fail-fast: false
      matrix:
        version:
          - stable
            #- 1.51.0

    name: ${{ matrix.version }} - x86_64-unknown-linux-gnu
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres
        env:
          POSTGRES_PASSWORD: password
          POSTGRES_USER: postgres
          POSTGRES_DB: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432
      mcaptcha-redis:
        image: mcaptcha/cache
        ports:
          - 6379:6379

    steps:
      - uses: actions/checkout@v2
      - name: ⚡ Cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            node_modules
            ./docs/openapi/node_modules
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}


      - name: load env
        run: |
          source .env_sample \
            && echo "POSTGRES_DATABASE_URL=$POSTGRES_DATABASE_URL" >> $GITHUB_ENV 

      - uses: actions/setup-node@v2
        with:
          node-version: "16.x"

      - name: start smtp server
        run: docker run -d -p 1080:1080 -p 10025:1025  maildev/maildev --incoming-user admin --incoming-pass password

      - name: Install ${{ matrix.version }}
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.version }}-x86_64-unknown-linux-gnu
          profile: minimal
          override: true

      - name: Build frontend
        run: make frontend

      - name: Run the frontend tests
        run: make frontend-test

      - name: Run migrations
        run: make migrate
        env:
          POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}"

      - name: build frontend
        run: make frontend

      - name: Generate coverage file
        if: github.event_name == 'pull_request'
        #if: (github.ref == 'refs/heads/master' || github.event_name == 'pull_request')
        uses: actions-rs/tarpaulin@v0.1
        with:
          args: "-t 1200"
        env:
          POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}"
          # GIT_HASH is dummy value. I guess build.rs is skipped in tarpaulin
          # execution so this value is required for preventing meta tests from
          # panicking
          GIT_HASH: 8e77345f1597e40c2e266cb4e6dee74888918a61
          CACHE_BUSTER_FILE_MAP: '{"map":{"./static/bundle/main.js":"./prod/bundle/main.1417115E59909BE0A01040A45A398ADB09D928DF89CCF038FA44B14850442096.js"},"base_dir":"./prod"}'
          COMPILED_DATE: "2021-07-21"

      - name: Upload to Codecov
        if: github.event_name == 'pull_request'
        uses: codecov/codecov-action@v2
