hexlet-codebattle/codebattle

View on GitHub
.github/workflows/master.yml

Summary

Maintainability
Test Coverage
name: Build master

on:
  push:
    branches:
      - master
jobs:
  build:
    if: github.repository == 'hexlet-codebattle/codebattle'
    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: Compile
        run: mix compile
        working-directory: ./services/app
        env:
          MIX_ENV: test

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

      - name: Mix tests
        run: make test
        env:
          MIX_ENV: 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

      - name: Login to Docker Hub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin

      - name: Build docker image for codebattle
        run: make GIT_HASH=${{ github.sha }} docker-build-codebattle
      - name: Push docker image for codebattle
        run: make docker-push-codebattle
      - name: Build docker image for runner
        run: make docker-build-runner
      - name: Push docker image for runner
        run: make docker-push-runner

      # stop integratoin tests on CI becaues of https://github.com/hexlet-codebattle/codebattle/runs/580337561?check_suite_focus=true
      # - name: Pull dockers
      #   run: mix dockers.pull
      #   working-directory: ./services/app
      #   env:
      #     MIX_ENV: test

      # - name: Run code checkers tests
      #   run: make test-code-checkers
      #   env:
      #     MIX_ENV: test