hexlet-codebattle/codebattle

View on GitHub
.github/workflows/pr.yml

Summary

Maintainability
Test Coverage
name: Build PR

on:
  pull_request:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest

    services:
      db:
        image: postgres:12-alpine
        ports: ['5432:5432']
        env:
          POSTGRES_PASSWORD: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
      - uses: actions/checkout@v3
      - name: Setup Elixir
        uses: erlef/setup-beam@v1
        with:
          otp-version: '26'
          elixir-version: '1.16'
      - name: Restore mix build cache
        uses: actions/cache@v3
        with:
          path: |
            deps
            _build
            ~/.mix
          key: mix:1-${{ hashFiles('**/mix.lock') }}
          restore-keys: mix:1-

      - name: Get deps
        run: mix deps.get
        working-directory: ./services/app

      - name: Mix deps.compile
        run: mix compile
        working-directory: ./services/app
        env:
          MIX_ENV: test

      - name: Mix format
        run: mix format --check-formatted
        working-directory: ./services/app
        env:
          MIX_ENV: test

      - name: Mix credo
        run: mix credo
        working-directory: ./services/app
        env:
          MIX_ENV: test

      - name: Get yarn cache
        id: yarn-cache
        run: echo "::set-output name=dir::$(yarn cache dir)"

      - uses: actions/cache@v3
        with:
          path: ${{ steps.yarn-cache.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: Install yarn dependencies
        run: yarn install --froze-lockfile
        working-directory: ./services/app/apps/codebattle

      - name: Eslint
        run: yarn lint
        working-directory: ./services/app/apps/codebattle

      - name: Run jest
        run: yarn test
        working-directory: ./services/app/apps/codebattle

      - name: Setup db
        run: mix ecto.create && mix ecto.migrate
        working-directory: ./services/app
        env:
          MIX_ENV: test

      - run: make test

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: ./services/app/assp/codebattle/cover/excoveralls.json
          fail_ci_if_error: false