TabbycatDebate/tabbycat

View on GitHub
.github/workflows/django.yml

Summary

Maintainability
Test Coverage
name: Django CI

on:
  push:
    branches:
    - 'develop'
    - 'master'
  pull_request:
    branches:
    - '**'
    - '!l10n_develop'

jobs:
  build-ubuntu:

    runs-on: ubuntu-latest

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

    env:
      ## Environment variable
      GITHUB_CI: true # Just 'CI' clashes with Render

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python
      # The actions/cache step below uses this id to get the exact python version
      id: setup-python
      uses: actions/setup-python@v4
      with:
        python-version-file: '.python-version' # Read python version from a file .python-version
    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version-file: '.nvmrc'
    - name: Cache node modules
      uses: actions/cache@v3
      env:
        cache-name: cache-node-modules
      with:
        # npm cache files are stored in `~/.npm` on Linux/macOS
        path: ~/.npm
        key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-build-${{ env.cache-name }}-
          ${{ runner.os }}-build-
          ${{ runner.os }}-
    - name: Cache pipenv modules
      uses: actions/cache@v3
      with:
        path: ~/.local/share/virtualenvs
        key: ${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        python -m pip install pipenv
        pipenv install --system --dev --deploy
        npm ci
    - name: Run linting
      run: npm run lint
    - name: Run build and collect
      run: |
        npm run build
        python ./tabbycat/manage.py collectstatic --noinput -v 0
    - name: Run migrations
      run: python ./tabbycat/manage.py migrate
    - name: Run tests
      run: python tabbycat/manage.py test -v 2 --exclude-tag=selenium

  build-docker-dev:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 1
      - name: Build Docker image (dev)
        run: docker-compose -f docker-compose.yml build

  build-docker-prod:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 1
      - name: Build Docker image (prod)
        run: docker-compose -f docker-compose.yml -f docker-compose.prod.yml build