name: Docker image release on: workflow_dispatch: push: branches: - main 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@v4 - 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"