name: Docker image release

on:
  workflow_dispatch:
  push:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
      - 'docs-website/**'
    tags:
      - "v2.[0-9]+.[0-9]+*"

env:
  DOCKER_REPO_NAME: deepset/haystack

jobs:
  build-and-push:
    name: Build base image
    runs-on: ubuntu-latest
    if: github.repository_owner == 'deepset-ai'

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

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

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

      - name: Login to DockerHub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USER }}
          password: ${{ secrets.DOCKER_HUB_TOKEN }}

      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: $DOCKER_REPO_NAME

      - name: Build base images
        uses: docker/bake-action@v5
        env:
          IMAGE_TAG_SUFFIX: ${{ steps.meta.outputs.version }}
          HAYSTACK_VERSION: ${{ steps.meta.outputs.version }}
        with:
          workdir: docker
          targets: base
          push: true

      - name: Test base image
        run: |
          EXPECTED_VERSION=$(cat VERSION.txt)
          if [[ $EXPECTED_VERSION == *"-"* ]]; then
            EXPECTED_VERSION=$(cut -d '-' -f 1 < VERSION.txt)$(cut -d '-' -f 2 < VERSION.txt)
          fi
          TAG="base-${{ steps.meta.outputs.version }}"

          PLATFORM="linux/amd64"
          VERSION=$(docker run --platform "$PLATFORM" --rm "deepset/haystack:$TAG" python -c"from haystack.version import __version__; print(__version__)")
          [[ "$VERSION" = "$EXPECTED_VERSION" ]] || echo "::error 'Haystack version in deepset/haystack:$TAG image for $PLATFORM is different from expected'"

          PLATFORM="linux/arm64"
          VERSION=$(docker run --platform "$PLATFORM" --rm "deepset/haystack:$TAG" python -c"from haystack.version import __version__; print(__version__)")
          [[ "$VERSION" = "$EXPECTED_VERSION" ]] || echo "::error 'Haystack version in deepset/haystack:$TAG image for $PLATFORM is different from expected'"

          # Remove image after test to avoid filling the GitHub runner and prevent its failure
          docker rmi "deepset/haystack:$TAG"
