name: Build JSS

on: [push, pull_request]

env:
  BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
  BASE_IMAGE: ${{ vars.BASE_IMAGE }}
  COPR_REPO: ${{ vars.COPR_REPO }}

jobs:
  build:
    name: Building JSS
    runs-on: ubuntu-latest
    steps:
      - name: Clone repository
        uses: actions/checkout@v4

      - name: Initialization
        run: tests/bin/test-init.sh

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

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

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

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

      - name: Build jss-builder image
        uses: docker/build-push-action@v5
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ env.BASE_IMAGE }}
            COPR_REPO=${{ env.COPR_REPO }}
          tags: jss-builder
          target: jss-builder
          cache-from: type=local,src=/tmp/.buildx-cache
          outputs: type=docker

      - name: Build jss-dist image
        uses: docker/build-push-action@v5
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ env.BASE_IMAGE }}
            COPR_REPO=${{ env.COPR_REPO }}
          tags: jss-dist
          target: jss-dist
          cache-from: type=local,src=/tmp/.buildx-cache
          outputs: type=docker

      - name: Build jss-runner image
        uses: docker/build-push-action@v5
        with:
          context: .
          build-args: |
            BASE_IMAGE=${{ env.BASE_IMAGE }}
            COPR_REPO=${{ env.COPR_REPO }}
          tags: jss-runner
          target: jss-runner
          cache-from: type=local,src=/tmp/.buildx-cache
          outputs: type=docker

      - name: Save JSS images
        run: |
          docker images
          docker save -o jss-images.tar jss-builder jss-dist jss-runner

      - name: Store JSS images
        uses: actions/cache@v4
        with:
          key: jss-images-${{ github.sha }}
          path: jss-images.tar
