name: docker
on:
  release:
    types:
      - prereleased
env:
  registry: docker.io

jobs:
  hadolint:
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout Repo
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
      - name: Set up Java
        uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
        with:
          distribution: temurin
          java-version: 17
      - name: setup gradle
        uses: gradle/actions/setup-gradle@9e899d11ad247ec76be7a60bc1cf9d3abbb9e7f1
        with:
          cache-disabled: true
      - name: hadoLint_openj9-jdk_17
        run: docker run --rm -i hadolint/hadolint < docker/openj9-jdk-17/Dockerfile
      - name: hadoLint_openjdk_17
        run: docker run --rm -i hadolint/hadolint < docker/openjdk-17/Dockerfile
      - name: hadoLint_openjdk_17_debug
        run: docker run --rm -i hadolint/hadolint < docker/openjdk-17-debug/Dockerfile
      - name: hadoLint_openjdk_latest
        run: docker run --rm -i hadolint/hadolint < docker/openjdk-latest/Dockerfile
      - name: hadoLint_graalvm
        run: docker run --rm -i hadolint/hadolint < docker/graalvm/Dockerfile
  buildDocker:
    needs: hadolint
    permissions:
      contents: read
      packages: write

    strategy:
      fail-fast: false
      matrix:
        platform:
          - ubuntu-22.04
          - [self-hosted, ARM64]
    runs-on: ${{ matrix.platform }}
    steps:
      - name: Prepare
        id: prep
        run: |
            platform=${{ matrix.platform }}
            if [ "$platform" = 'ubuntu-22.04' ]; then 
              echo "PLATFORM_PAIR=linux-amd64" >> $GITHUB_OUTPUT
              echo "ARCH=amd64" >> $GITHUB_OUTPUT
            else
              echo "PLATFORM_PAIR=linux-arm64" >> $GITHUB_OUTPUT
              echo "ARCH=arm64" >> $GITHUB_OUTPUT
            fi
      - name: Checkout Repo
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
      - name: short sha
        id: shortSha
        run: echo "sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
      - name: Set up Java
        uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
        with:
          distribution: temurin
          java-version: 17
      - name: setup gradle
        uses: gradle/actions/setup-gradle@9e899d11ad247ec76be7a60bc1cf9d3abbb9e7f1
        with:
          cache-disabled: true
      - name: install goss
        run: |
          mkdir -p docker/reports
          curl -L https://github.com/aelsabbahy/goss/releases/download/v0.4.4/goss-${{ steps.prep.outputs.PLATFORM_PAIR }} -o ./docker/tests/goss-${{ steps.prep.outputs.PLATFORM_PAIR }}
      - name: login to ${{ env.registry }}
        uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d
        with:
          registry: ${{ env.registry }}
          username: ${{ secrets.DOCKER_USER_RW }}
          password: ${{ secrets.DOCKER_PASSWORD_RW }}
      - name: build and test docker
        uses: gradle/actions/setup-gradle@9e899d11ad247ec76be7a60bc1cf9d3abbb9e7f1
        env:
          architecture: ${{ steps.prep.outputs.ARCH }}
        with:
          cache-disabled: true
          arguments: testDocker -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{github.ref_name}} -Prelease.releaseVersion=${{ github.ref_name }}
      - name: publish
        env:
          architecture: ${{ steps.prep.outputs.ARCH }}
        run: ./gradlew --no-daemon dockerUpload -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{github.ref_name}} -Prelease.releaseVersion=${{ github.ref_name }}
  multiArch:
    needs: buildDocker
    runs-on: ubuntu-22.04
    permissions:
      contents: read
      packages: write
    steps:
      - name: Checkout Repo
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
      - name: Set up Java
        uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
        with:
          distribution: temurin
          java-version: 17
      - name: setup gradle
        uses: gradle/actions/setup-gradle@9e899d11ad247ec76be7a60bc1cf9d3abbb9e7f1
        with:
          cache-disabled: true
      - name: login to ${{ env.registry }}
        uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d
        with:
          registry: ${{ env.registry }}
          username: ${{ secrets.DOCKER_USER_RW }}
          password: ${{ secrets.DOCKER_PASSWORD_RW }}
      - name: multi-arch docker
        run: ./gradlew manifestDocker -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{github.ref_name}} -Prelease.releaseVersion=${{ github.ref_name }}
  amendNotes:
    needs: multiArch
    runs-on: ubuntu-22.04
    permissions:
      contents: write
    steps:
      - name: add pull command to release notes
        uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844
        with:
          append_body: true
          body: |
            `docker pull ${{env.registry}}/${{secrets.DOCKER_ORG}}/besu:${{github.ref_name}}`
