# Copyright 2023 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

name: PkgCI Build Packages
on:
  workflow_call:
    inputs:
      package_version:
        type: string
        required: true

jobs:
  linux_x86_64_release_packages:
    name: Linux Release (x86_64)
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ github.event_name == 'pull_request' && 'presubmit' || 'postsubmit' }}
      - environment=prod
      - cpu
      - os-family=Linux
    strategy:
      fail-fast: false
    env:
      CACHE_DIR: ${{ github.workspace }}/.iree-container-cache
      MANYLINUX_DOCKER_IMAGE: ghcr.io/nod-ai/manylinux_x86_64:main
      PACKAGE_SUFFIX: ""
    steps:
      - name: Prefetch Docker
        run: |
          docker pull "$MANYLINUX_DOCKER_IMAGE" &
      - name: Checking out repository
        uses: actions/checkout@v4.1.7
        with:
          submodules: true
      - name: Write version info
        shell: bash
        run: |
          cat << EOF > version_info.json
          {
            "package-suffix": "${PACKAGE_SUFFIX}",
            "package-version": "${{ inputs.package_version }}",
            "iree-revision": "$(cd ../iree && git rev-parse HEAD)"
          }
          EOF
          realpath version_info.json
          cat version_info.json
      - name: Enable cache
        uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
        with:
          path: ${{ env.CACHE_DIR }}
          key: iree-pkgci-linux-release-x86_64-v1-${{ github.sha }}
          restore-keys: |
            iree-pkgci-linux-release-x86_64-v1-
      - name: Wait for docker pull
        run: |
          wait
      - name: Build
        run: |
          export cache_dir="${{ env.CACHE_DIR }}"
          export output_dir="${{ github.workspace }}/wheelhouse"
          export toolchain_suffix=release
          export manylinux_docker_image="$MANYLINUX_DOCKER_IMAGE"
          export package_suffix="$PACKAGE_SUFFIX"
          # If just iterating locally, uncomment this to build a cheap wheel.
          # export packages="iree-runtime"
          ./build_tools/pkgci/build_linux_packages.sh
          # Some things put stuff in cache with weird, root read-only
          # permissions. Take them back.
          sudo chown -R "$(whoami)" "${cache_dir}"
      - name: Upload wheel artifacts
        uses: actions/upload-artifact@v4.3.3
        with:
          name: linux_x86_64_release_packages
          path: |
            ${{ github.workspace }}/wheelhouse/iree*.whl
          if-no-files-found: error
# TODO: Debug low ccache hit rate and re-enable.
# linux_x86_64_release_asserts_packages:
#   name: Linux Release Asserts (x86_64)
#   runs-on:
#     - self-hosted # must come first
#     - runner-group=${{ github.event_name == 'pull_request' && 'presubmit' || 'postsubmit' }}
#     - environment=prod
#     - cpu
#     - os-family=Linux
#   strategy:
#     fail-fast: false
#   env:
#     CACHE_DIR: ${{ github.workspace }}/.iree-container-cache
#     MANYLINUX_DOCKER_IMAGE: ghcr.io/nod-ai/manylinux_x86_64:main
#     PACKAGE_SUFFIX: "-asserts"
#   steps:
#     - name: Prefetch Docker
#       run: |
#         docker pull "$MANYLINUX_DOCKER_IMAGE" &
#     - name: "Checking out repository"
#       uses: actions/checkout@v4.1.7
#       with:
#         submodules: true
#     - name: Write version info
#       shell: bash
#       run: |
#         cat << EOF > version_info.json
#         {
#           "package-suffix": "${PACKAGE_SUFFIX}",
#           "package-version": "${{ inputs.package_version }}",
#           "iree-revision": "$(cd ../iree && git rev-parse HEAD)"
#         }
#         EOF
#         realpath version_info.json
#         cat version_info.json
#     - name: Enable cache
#       uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8  # v3.3.1
#       with:
#         path: ${{ env.CACHE_DIR }}
#         key: iree-pkgci-linux-release-asserts-x86_64-v1-${{ github.sha }}
#         restore-keys: |
#           iree-pkgci-linux-release-asserts-x86_64-v1-
#     - name: Wait for docker pull
#       run: |
#         wait
#     - name: Build
#       run: |
#         export cache_dir="${{ env.CACHE_DIR }}"
#         export output_dir="${{ github.workspace }}/wheelhouse"
#         export toolchain_suffix=release_asserts
#         export manylinux_docker_image="$MANYLINUX_DOCKER_IMAGE"
#         export package_suffix="$PACKAGE_SUFFIX"
#         # If just iterating locally, uncomment this to build a cheap wheel.
#         # export packages="iree-runtime"
#         ./build_tools/pkgci/build_linux_packages.sh
#         # Some things put stuff in cache with weird, root read-only
#         # permissions. Take them back.
#         sudo chown -R "$(whoami)" "${cache_dir}"
#     - name: Upload wheel artifacts
#       uses: actions/upload-artifact@v4.3.3
#       with:
#         name: linux_x86_64_release_asserts_packages
#         path: |
#           ${{ github.workspace }}/wheelhouse/iree*.whl
#         if-no-files-found: error
