name: Run Django tests for TubeSync

env:
  IMAGE_NAME: tubesync

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.7, 3.8, 3.9]
    steps:
      - uses: actions/checkout@v2
      - name: Install Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install pipenv
          pipenv install --system --skip-lock
      - name: Set up Django environment
        run: cp tubesync/tubesync/local_settings.py.example tubesync/tubesync/local_settings.py
      - name: Run Django tests
        run: cd tubesync && python3 manage.py test --verbosity=2
  containerise:
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Log into GitHub Container Registry
        run: echo "${{ secrets.REGISTRY_ACCESS_TOKEN }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
      - name: Lowercase github username for ghcr
        id: string
        uses: ASzc/change-string-case-action@v1
        with:
          string: ${{ github.actor }}
      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          platforms: linux/amd64,linux/arm64
          push: true
          tags: ghcr.io/${{ steps.string.outputs.lowercase }}/${{ env.IMAGE_NAME }}:latest
          cache-from: type=registry,ref=ghcr.io/${{ steps.string.outputs.lowercase }}/${{ env.IMAGE_NAME }}:latest
          cache-to: type=inline
          build-args: |
            IMAGE_NAME=${{ env.IMAGE_NAME }}
