name: ChangeDetection.io Container Build Test

# Triggers the workflow on push or pull request events

# This line doesnt work, even tho it is the documented one
#on: [push, pull_request]

on:
  push:
    paths:
      - requirements.txt
      - Dockerfile
      - .github/workflows/*
      - .github/test/Dockerfile*

  pull_request:
    paths:
      - requirements.txt
      - Dockerfile
      - .github/workflows/*
      - .github/test/Dockerfile*

  # Changes to requirements.txt packages and Dockerfile may or may not always be compatible with arm etc, so worth testing
  # @todo: some kind of path filter for requirements.txt and Dockerfile
jobs:
  builder:
    name: Build ${{ matrix.platform }} (${{ matrix.dockerfile == './Dockerfile' && 'main' || 'alpine' }})
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          # Main Dockerfile platforms
          - platform: linux/amd64
            dockerfile: ./Dockerfile
          - platform: linux/arm64
            dockerfile: ./Dockerfile
          - platform: linux/arm/v7
            dockerfile: ./Dockerfile
          - platform: linux/arm/v8
            dockerfile: ./Dockerfile
          # Alpine Dockerfile platforms (musl via alpine check)
          - platform: linux/amd64
            dockerfile: ./.github/test/Dockerfile-alpine
          - platform: linux/arm64
            dockerfile: ./.github/test/Dockerfile-alpine
    steps:
        - uses: actions/checkout@v5
        - name: Set up Python 3.11
          uses: actions/setup-python@v6
          with:
            python-version: 3.11

        # Just test that the build works, some libraries won't compile on ARM/rPi etc
        - name: Set up QEMU
          uses: docker/setup-qemu-action@v3
          with:
            image: tonistiigi/binfmt:latest
            platforms: all

        - name: Set up Docker Buildx
          id: buildx
          uses: docker/setup-buildx-action@v3
          with:
            install: true
            version: latest
            driver-opts: image=moby/buildkit:master

        - name: Test that the docker containers can build (${{ matrix.platform }} - ${{ matrix.dockerfile }})
          id: docker_build
          uses: docker/build-push-action@v6
          # https://github.com/docker/build-push-action#customizing
          with:
            context: ./
            file: ${{ matrix.dockerfile }}
            platforms: ${{ matrix.platform }}
            cache-from: type=gha
            cache-to: type=gha,mode=min

