name: Build docker CI images
on:
  - workflow_dispatch

# Environment variables
env:
  DOCKER_REPO: ${{ secrets.DOCKER_REPO }}
  REPO_OWNER: ${{ github.repository_owner }}

jobs:
  change_detect:
    name: "Detect code changes"
    runs-on: ubuntu-18.04
    outputs:
      docker_repo: ${{ steps.changes.outputs.docker_repo }}
    steps:
      - name: Check for source code changes
        id: changes
        run: |
            if [[ -n "${DOCKER_REPO}" ]]; then
              echo "name=docker_repo::$REPO_OWNER"
              echo "::set-output name=docker_repo::$REPO_OWNER"
            else
              echo "name=docker_repo::lnis-uofu"
              echo "::set-output name=docker_repo::lnis-uofu"
            fi

  base_images:
    name: Push Docker images
    needs: [change_detect]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ needs.change_detect.outputs.docker_repo }}
          password: ${{ secrets.CR_PAT }}
      - name: Build base
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./docker/Dockerfile.base
          push: ${{ (env.DOCKER_REPO) && (github.ref == 'refs/heads/master')}}
          tags: ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-build-base:latest
      - name: Build environment image
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./docker/Dockerfile.env
          push: ${{ (env.DOCKER_REPO) && (github.ref == 'refs/heads/master')}}
          tags: ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-env:latest

  compiler_images:
    name: Build ${{ matrix.compiler }} compiler image
    needs: [base_images, change_detect]
    runs-on: ubuntu-latest
    strategy:
      matrix:
        compiler:
          - gcc-5
          - gcc-6
          - gcc-7
          - gcc-8
          - gcc-9
          - clang-6.0
          - clang-8
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ needs.change_detect.outputs.docker_repo }}
          password: ${{ secrets.CR_PAT }}
      - name: Build ${{ matrix.compiler }} image
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./docker/Dockerfile.${{ matrix.compiler }}
          push: ${{ (env.DOCKER_REPO) && (github.ref == 'refs/heads/master')}}
          tags: ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-build-${{ matrix.compiler }}:latest