name: Django CI

on:
  push:
    branches:
      - master
      - dev
    paths-ignore:
      - '**/*.md'
      - '**/*.css'
      - '**/*.js'
      - '**/*.yml'
  pull_request:
    branches:
      - master
      - dev
    paths-ignore:
      - '**/*.md'
      - '**/*.css'
      - '**/*.js'
      - '**/*.yml'

jobs:
  build-normal:
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [ 3.6, 3.7, 3.8, 3.9 ]

    steps:
      - name: Start MySQL
        uses: samin/mysql-action@v1.3
        with:
          host port: 3306
          container port: 3306
          character set server: utf8mb4
          collation server: utf8mb4_general_ci
          mysql version: latest
          mysql root password: root
          mysql database: djangoblog
          mysql user: root
          mysql password: root

      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v1
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - name: Run Tests
        env:
          DJANGO_MYSQL_PASSWORD: root
          DJANGO_MYSQL_HOST: 127.0.0.1
        run: |
          python manage.py makemigrations
          python manage.py migrate
          python manage.py test

  build-with-es:
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [ 3.6, 3.7, 3.8, 3.9 ]

    steps:
      - name: Start MySQL
        uses: samin/mysql-action@v1.3
        with:
          host port: 3306
          container port: 3306
          character set server: utf8mb4
          collation server: utf8mb4_general_ci
          mysql version: latest
          mysql root password: root
          mysql database: djangoblog
          mysql user: root
          mysql password: root

      - name: Configure sysctl limits
        run: |
          sudo swapoff -a
          sudo sysctl -w vm.swappiness=1
          sudo sysctl -w fs.file-max=262144
          sudo sysctl -w vm.max_map_count=262144

      - uses: miyataka/elasticsearch-github-actions@1
        with:
          stack-version: '7.12.1'
          plugins: 'https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip'

      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v1
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - name: Run Tests
        env:
          DJANGO_MYSQL_PASSWORD: root
          DJANGO_MYSQL_HOST: 127.0.0.1
          DJANGO_ELASTICSEARCH_HOST: 127.0.0.1:9200
        run: |
          python manage.py makemigrations
          python manage.py migrate
          coverage run manage.py test
          coverage xml

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v1
