f213/education-backend

View on GitHub
.github/workflows/crossplatform.yml

Summary

Maintainability
Test Coverage
name: Crossplatform nightly

on:
  schedule:
    - cron: '30 4 * * *'
  workflow_dispatch:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4

      - name: build
        uses: ./.github/actions/build

      - name: lint
        run: make lint

  test:
    needs: lint
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:13.9-alpine
        env:
          POSTGRES_PASSWORD: secret
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432
      redis:
        image: redis:6.2.10-alpine
        ports:
          - 6379:6379

    steps:
      - name: checkout
        uses: actions/checkout@v4

      - name: build
        uses: ./.github/actions/build

      - name: install locale stuff
        run: |
          sudo apt-get update
          sudo apt-get --no-install-recommends install -y locales-all gettext

      - name: test
        env:
          DATABASE_URL: postgres://postgres:secret@localhost:5432/postgres
          REDISCLOUD_URL: redis://localhost:6379/5
        run: make test

  build-docker-image:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4

      - name: build
        uses: ./.github/actions/build

      - name: set up qemu
        uses: docker/setup-qemu-action@v2

      - name: set up buildx
        uses: docker/setup-buildx-action@v2

      - name: generate image identifier
        id: image
        uses: ASzc/change-string-case-action@v5
        with:
          string: ${{ github.repository_owner }}

      - name: login to ghcr
        uses: docker/login-action@v2
        if: ${{ github.ref == 'refs/heads/master' }}
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: build dev image
        uses: docker/build-push-action@v3
        with:
          context: .
          target: web
          push: ${{ github.ref == 'refs/heads/master' }}
          platforms: linux/amd64,linux/arm64
          tags: |
            ghcr.io/${{ steps.image.outputs.lowercase }}/dev-backend:latest
            ghcr.io/${{ steps.image.outputs.lowercase }}/dev-backend:${{ github.sha }}

          build-args: |
            PYTHON_VERSION=${{ env.python-version }}
            RELEASE=${{ github.sha }}
          cache-from: type=gha
          cache-to: type=gha,mode=max