name: Release

on:
  release:
    types: [released]

jobs:
  build:

    runs-on: ubuntu-latest-128

    steps:
      - name: Pre-process Release Name
        id: pre_process_release_name
        env:
          RELEASE_NAME: "${{ github.event.release.name }}"
        run: |
          # strip all whitespace
          RELEASE_NAME="${RELEASE_NAME//[[:space:]]/}"
          if [[ ! "$RELEASE_NAME" =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?(-.*)?$ ]]; then
            echo "Release name does not conform to a valid besu release format YY.M.v[-suffix], e.g. 24.8.0-RC1."
            exit 1
          fi
          echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV  # Store in environment variable

      - 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 -Prelease.releaseVersion=${{env.RELEASE_NAME}} -Pversion=${{env.RELEASE_NAME}} 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 -Prelease.releaseVersion=${{env.RELEASE_NAME}} -Pversion=${{env.RELEASE_NAME}} 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 -Prelease.releaseVersion=${{env.RELEASE_NAME}} -Pversion=${{env.RELEASE_NAME}} -Pdocker-platform=linux/amd64,linux/arm64 distDocker
