name: Build Tomcat JSS

on: [push, pull_request]

jobs:
  init:
    name: Initialization
    uses: ./.github/workflows/init.yml
    secrets: inherit

  build:
    name: Building Tomcat JSS
    needs: init
    runs-on: ubuntu-latest
    steps:
      - name: Clone repository
        uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Cache Docker layers
        id: cache-buildx
        uses: actions/cache@v3
        with:
          key: buildx-${{ hashFiles('tomcatjss.spec') }}
          path: /tmp/.buildx-cache

      - name: Build tomcatjss-deps image
        uses: docker/build-push-action@v3
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ needs.init.outputs.base-image }}
            COPR_REPO=${{ needs.init.outputs.repo }}
          tags: tomcatjss-deps
          target: tomcatjss-deps
          cache-to: type=local,dest=/tmp/.buildx-cache
        if: steps.cache-buildx.outputs.cache-hit != 'true'

      - name: Build tomcatjss-builder-deps image
        uses: docker/build-push-action@v3
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ needs.init.outputs.base-image }}
            COPR_REPO=${{ needs.init.outputs.repo }}
          tags: tomcatjss-builder-deps
          target: tomcatjss-builder-deps
          cache-to: type=local,dest=/tmp/.buildx-cache
        if: steps.cache-buildx.outputs.cache-hit != 'true'

      - name: Build tomcatjss-builder image
        uses: docker/build-push-action@v3
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ needs.init.outputs.base-image }}
            COPR_REPO=${{ needs.init.outputs.repo }}
          tags: tomcatjss-builder
          target: tomcatjss-builder
          cache-from: type=local,src=/tmp/.buildx-cache
          outputs: type=docker,dest=tomcatjss-builder.tar

      - name: Store tomcatjss-builder image
        uses: actions/cache@v3
        with:
          key: tomcatjss-builder-${{ github.sha }}
          path: tomcatjss-builder.tar

      - name: Build tomcatjss-dist image
        uses: docker/build-push-action@v3
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ needs.init.outputs.base-image }}
            COPR_REPO=${{ needs.init.outputs.repo }}
          tags: tomcatjss-dist
          target: tomcatjss-dist
          cache-from: type=local,src=/tmp/.buildx-cache
          outputs: type=docker,dest=tomcatjss-dist.tar

      - name: Store tomcatjss-dist image
        uses: actions/cache@v3
        with:
          key: tomcatjss-dist-${{ github.sha }}
          path: tomcatjss-dist.tar

      - name: Build tomcatjss-runner image
        uses: docker/build-push-action@v3
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ needs.init.outputs.base-image }}
            COPR_REPO=${{ needs.init.outputs.repo }}
          tags: tomcatjss-runner
          target: tomcatjss-runner
          cache-from: type=local,src=/tmp/.buildx-cache
          outputs: type=docker,dest=tomcatjss-runner.tar

      - name: Store tomcatjss-runner image
        uses: actions/cache@v3
        with:
          key: tomcatjss-runner-${{ github.sha }}
          path: tomcatjss-runner.tar