name: CI

on:
  push:
    branches:
      - zkbesu
  pull_request:
    branches:
      - zkbesu

jobs:
  build_and_test:
    runs-on: ubuntu-latest-128
    env:
      architecture: "amd64"
      GRADLE_OPTS: "-Xmx6g -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=4"

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up JDK 21
        uses: actions/setup-java@v3
        with:
          java-version: 21
          distribution: temurin

      - name: Spotless
        run: ./gradlew spotlessCheck

      - name: Test & Build
        run: ./gradlew build

      - name: Test Report
        uses: dorny/test-reporter@v1
        if: success() || failure()    # run this step even if previous step failed
        with:
          name: JUnit Tests            # Name of the check run which will be created
          path: '**/test-results/test/*.xml'    # Path to test results
          reporter: java-junit        # Format of test results
          only-summary: true
          max-annotations: 50

  publish:
    needs: build_and_test
    if: github.event_name != 'pull_request'
    runs-on: ubuntu-latest-128
    env:
      architecture: "amd64"
      GRADLE_OPTS: "-Xmx6g -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=4"

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up JDK 21
        uses: actions/setup-java@v3
        with:
          java-version: 21
          distribution: temurin

      - name: Publish Java artifacts
        run: ./gradlew publish
        env:
          CLOUDSMITH_USER: ${{ secrets.CLOUDSMITH_USER }}
          CLOUDSMITH_API_KEY: ${{ secrets.CLOUDSMITH_API_KEY }}

      - name: Publish distribution artifacts
        run: |
          sudo apt update
          sudo apt install -y python3 python3-pip python3-venv
          ./gradlew cloudsmithUpload
        env:
          CLOUDSMITH_USER: ${{ secrets.CLOUDSMITH_USER }}
          CLOUDSMITH_API_KEY: ${{ secrets.CLOUDSMITH_API_KEY }}

      - name: Set up QEMU for Docker
        uses: docker/setup-qemu-action@v3
        with:
          platforms: arm64

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          platforms: linux/amd64,linux/arm64

      - name: Check Dockerfile syntax
        run: |
          docker run --rm -i hadolint/hadolint < docker/Dockerfile

      - name: Login to Docker Hub for self hosted
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USER_RW }}
          password: ${{ secrets.DOCKER_PAT_RW }}

      - name: Build and Publish Docker Image
        run: |
          ./gradlew -Pdocker-platform=linux/amd64,linux/arm64 distDocker
