# Builds release packages on supported platforms:
#   * main-dist-linux (CMake 'install')
#   * py-compiler-pkg (`iree-base-compiler` Python package)
#     * Linux, macOS, Windows
#     * All supported Python versions (e.g. 3.9, 3.10, 3.11)
#   * py-runtime-pkg (`iree-base-runtime` Python package)
#     * Linux, macOS, Windows
#     * All supported Python versions (e.g. 3.9, 3.10, 3.11)
#   * py-tf-compiler-tools-pkg (`iree-tools-[tf, tflite]`, pure Python packages)

name: Build Release Packages

# Note: this workflow is typically invoked by schedule_candidate_release.yml.
on:
  workflow_dispatch:
    inputs:
      package_suffix:
        description: "Suffix to append to package names"
        required: false
        default: ""
      legacy_package_version:
        description: "Version of the package"
        required: true
        default: "0.1a1"
      package_version:
        description: "Version of the package"
        required: true
      compiler_package_version:
        description: "Version of the iree-compiler package"
        required: true
      runtime_package_version:
        description: "Version of the iree-runtime package"
        required: true
      release_id:
        description: "Release id to upload artifacts to"
        default: ""
      commit:
        description: "Commit to check out"
        default: ""

jobs:
  # Note: For cross platform builds, it's useful to just generate the
  # metadata on Linux and pass that to later jobs using artifacts. The
  # metadata generation could also happen in a separate workflow and
  # might be moved.
  setup_metadata:
    runs-on: ubuntu-24.04
    steps:
      - name: Checkout repository
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
        with:
          path: "c" # Windows can hit path length limits, so use a short path.
          submodules: false
          ref: ${{ github.event.inputs.commit }}

      - name: Write version info (release)
        id: version_local
        shell: bash
        run: |
          # Note: `version_info.json` holds the CalVer version and is still used
          # for iree-tools-tf and iree-tools-tflite.
          cat << EOF > ./c/version_info.json
          {
            "package-suffix": "${{ github.event.inputs.package_suffix }}",
            "package-version": "${{ github.event.inputs.legacy_package_version }}",
            "iree-revision": "$(cd ./c && git rev-parse HEAD)"
          }
          EOF
          cat ./c/version_info.json

          echo "iree-dist"
          cat << EOF > ./c/version_local.json
          {
            "package-suffix": "${{ github.event.inputs.package_suffix }}",
            "package-version": "${{ github.event.inputs.package_version }}",
            "iree-revision": "$(cd ./c && git rev-parse HEAD)"
          }
          EOF
          cat ./c/version_local.json

          echo "iree-compiler"
          cat << EOF > ./c/compiler/version_local.json
          {
            "package-suffix": "${{ github.event.inputs.package_suffix }}",
            "package-version": "${{ github.event.inputs.compiler_package_version }}",
            "iree-revision": "$(cd ./c && git rev-parse HEAD)"
          }
          EOF
          cat ./c/compiler/version_local.json

          echo "iree-runtime"
          cat << EOF > ./c/runtime/version_local.json
          {
            "package-suffix": "${{ github.event.inputs.package_suffix }}",
            "package-version": "${{ github.event.inputs.runtime_package_version }}",
            "iree-revision": "$(cd ./c && git rev-parse HEAD)"
          }
          EOF
          cat ./c/runtime/version_local.json

      - name: Upload version_local.json
        uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
        with:
          name: version_local
          path: |
            ./c/version_info.json
            ./c/version_local.json
            ./c/compiler/version_local.json
            ./c/runtime/version_local.json

  build_packages:
    name: "${{ matrix.build-family }} :: Build ${{ matrix.build-package }} Package"
    needs: setup_metadata
    runs-on: ${{ matrix.runs-on }}
    continue-on-error: ${{ matrix.experimental }}
    strategy:
      fail-fast: false
      matrix:
        include:
          # Ubuntu packages.
          - runs-on: ubuntu-20.04
            build-family: linux-x86_64
            build-package: main-dist-linux
            experimental: false
          - runs-on: ah-ubuntu_22_04-c7g_4x-50
            build-family: linux-aarch64
            build-package: main-dist-linux
            experimental: true
          - runs-on: ubuntu-20.04
            build-family: linux-x86_64
            build-package: py-compiler-pkg
            experimental: false
          - runs-on: ah-ubuntu_22_04-c7g_4x-50
            build-family: linux-aarch64
            build-package: py-compiler-pkg
            experimental: true
          - runs-on: ubuntu-20.04
            build-family: linux-x86_64
            build-package: py-runtime-pkg
            experimental: false
          - runs-on: ah-ubuntu_22_04-c7g_4x-50
            build-family: linux-aarch64
            build-package: py-runtime-pkg
            experimental: true
          - runs-on: ubuntu-20.04
            build-family: linux-x86_64
            build-package: py-tf-compiler-tools-pkg
            experimental: false

          # MacOS packages.
          # TODO(scotttodd): build on larger runner when available (self-hosted or GitHub)
          # - runs-on:
          #     - ${{ github.repository == 'iree-org/iree' && 'self-hosted' || 'macos-14' }}
          #     - os-family=macOS
          #     - runner-group=postsubmit
          - runs-on: macos-14
            build-family: macos
            build-package: py-compiler-pkg
            experimental: true
          - runs-on: macos-14
            build-family: macos
            build-package: py-runtime-pkg
            experimental: true

          # Windows packages.
          # TODO(scotttodd): build on larger runner when available (self-hosted or GitHub)
          # - runs-on:
          #     - ${{ github.repository == 'iree-org/iree' && 'windows-2022-64core' || 'windows-2022'}}
          - runs-on: windows-2022
            build-family: windows
            build-package: py-compiler-pkg
            experimental: true
          - runs-on: windows-2022
            build-family: windows
            build-package: py-runtime-pkg
            experimental: true

    env:
      # These are also set in: build_tools/python_deploy/build_linux_packages.sh
      MANYLINUX_X86_64_IMAGE: ghcr.io/iree-org/manylinux_x86_64@sha256:2e0246137819cf10ed84240a971f9dd75cc3eb62dc6907dfd2080ee966b3c9f4
      MANYLINUX_AARCH64_IMAGE: quay.io/pypa/manylinux_2_28_aarch64

    steps:
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
        with:
          path: "c" # Windows can hit path length limits, so use a short path.
          submodules: true
          ref: ${{ github.event.inputs.commit }}

      ##########################################################################
      # OS specific setup
      ##########################################################################

      - name: Install dependencies (Windows)
        if: "matrix.build-family == 'windows'"
        shell: powershell
        run: ./c/build_tools/python_deploy/install_windows_deps.ps1
      - name: "Configure MSVC (Windows)"
        if: "matrix.build-family == 'windows'"
        uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
      - name: Install dependencies (macOS)
        if: "matrix.build-family == 'macos'"
        run: sudo ./c/build_tools/python_deploy/install_macos_deps.sh

      ##########################################################################
      # Download version_info.json
      # Various tools will read this in order to embed release information.
      ##########################################################################

      - name: Download version_local.json
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: version_local
          path: ./c/
          merge-multiple: true

      ##########################################################################
      # Build the main distribution tarball.
      # The main distribution consists of the project being built, installed
      # and archived. We have to split it per operating system, and Linux
      # is special because we build under a manylinux container which gives
      # broad compatibility. We use the Python based manylinux containers
      # since they come packaged with all dev tools we need. Note that the
      # manylinux containers have a default python 2.x with all supported
      # python versions under /opt/python (need to add one to the path). It
      # is not enough to just invoke it directly because then pip managed
      # console scripts (like cmake, ninja) will not be on the path.
      ##########################################################################
      - name: Main distribution (Linux for x86_64)
        if: "matrix.build-package == 'main-dist-linux' && matrix.build-family == 'linux-x86_64'"
        shell: bash
        run: |
          docker run --rm -w=/work \
            -v $PWD:/work \
            "${MANYLINUX_X86_64_IMAGE}" \
            bash -c 'export PATH=/opt/python/cp39-cp39/bin:$PATH; python ./c/build_tools/github_actions/build_dist.py main-dist'

      - name: Main distribution (Linux for Arm64)
        if: "matrix.build-package == 'main-dist-linux' && matrix.build-family == 'linux-aarch64'"
        shell: bash
        run: |
          docker run --rm -w=/work \
            -v $PWD:/work \
            "${MANYLINUX_AARCH64_IMAGE}" \
            bash -c 'export PATH=/opt/python/cp39-cp39/bin:$PATH; python ./c/build_tools/github_actions/build_dist.py main-dist'

      ##########################################################################
      # py-runtime-pkg
      # Builds the iree-base-runtime wheels.
      # One step per OS.
      ##########################################################################

      - name: Build runtime wheels (Linux, x86_64 and Arm64)
        if: "matrix.build-package == 'py-runtime-pkg' && contains(matrix.build-family, 'linux')"
        shell: bash
        env:
          package_suffix: ${{ github.event.inputs.package_suffix }}
          packages: "iree-base-runtime"
          output_dir: "${{ github.workspace }}/bindist"
        run: |
          [ -e ./bindist/* ] && rm ./bindist/*
          ./c/build_tools/python_deploy/build_linux_packages.sh

      - name: Build runtime wheels (MacOS)
        if: "matrix.build-package == 'py-runtime-pkg' && matrix.build-family == 'macos'"
        shell: bash
        env:
          package_suffix: ${{ github.event.inputs.package_suffix }}
          packages: "iree-base-runtime"
          output_dir: "${{ github.workspace }}/bindist"
          override_python_versions: "3.11 3.12 3.13"
        run: |
          [ -e ./bindist/* ] && rm ./bindist/*
          ./c/build_tools/python_deploy/build_macos_packages.sh

      - name: Build runtime wheels (Windows)
        if: "matrix.build-package == 'py-runtime-pkg' && matrix.build-family == 'windows'"
        shell: powershell
        env:
          package_suffix: ${{ github.event.inputs.package_suffix }}
          packages: "iree-base-runtime"
          output_dir: "${{ github.workspace }}/bindist"
          override_python_versions: "3.11 3.12 3.13"
        run: |
          if (Test-Path -Path "${{ github.workspace }}/bindist") {
            Remove-Item -Path "${{ github.workspace }}/bindist" -Recurse -Force
          }
          ./c/build_tools/python_deploy/build_windows_packages.ps1

      ##########################################################################
      # py-compiler-pkg
      # Builds the iree-base-compiler wheel.
      # One step per OS.
      ##########################################################################
      - name: Build compiler wheels (Linux, x86_64 and Arm64)
        if: "matrix.build-package == 'py-compiler-pkg' && contains(matrix.build-family, 'linux')"
        shell: bash
        env:
          package_suffix: ${{ github.event.inputs.package_suffix }}
          packages: "iree-base-compiler"
          output_dir: "${{ github.workspace }}/bindist"
        run: |
          [ -e ./bindist/* ] && rm ./bindist/*
          ./c/build_tools/python_deploy/build_linux_packages.sh

      - name: Build compiler wheels (MacOS)
        if: "matrix.build-package == 'py-compiler-pkg' && matrix.build-family == 'macos'"
        shell: bash
        env:
          package_suffix: ${{ github.event.inputs.package_suffix }}
          packages: "iree-base-compiler"
          output_dir: "${{ github.workspace }}/bindist"
          override_python_versions: "3.11 3.12 3.13"
        run: |
          [ -e ./bindist/* ] && rm ./bindist/*
          ./c/build_tools/python_deploy/build_macos_packages.sh

      - name: Build compiler wheels (Windows)
        if: "matrix.build-package == 'py-compiler-pkg' && matrix.build-family == 'windows'"
        shell: powershell
        env:
          package_suffix: ${{ github.event.inputs.package_suffix }}
          packages: "iree-base-compiler"
          output_dir: "${{ github.workspace }}/bindist"
          override_python_versions: "3.11 3.12 3.13"
        run: |
          if (Test-Path -Path "${{ github.workspace }}/bindist") {
            Remove-Item -Path "${{ github.workspace }}/bindist" -Recurse -Force
          }
          ./c/build_tools/python_deploy/build_windows_packages.ps1

      ##########################################################################
      # TF Compiler Tools
      # These wheels are not Python version specific and include only Python
      # code (no C/C++), so just build for one examplar python version on Linux.
      ##########################################################################

      - name: Build TF Compiler Tools wheels
        if: "matrix.build-package == 'py-tf-compiler-tools-pkg'"
        shell: bash
        run: |
          docker run --rm -w=/work \
            -v $PWD:/work \
            "${MANYLINUX_X86_64_IMAGE}" \
            bash -c 'export PATH=/opt/python/cp39-cp39/bin:$PATH; python ./c/build_tools/github_actions/build_dist.py py-tf-compiler-tools-pkg'

      - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
        with:
          name: wheels-${{ matrix.build-family }}-${{ matrix.build-package }}
          # We upload all wheels (which includes deps so that subsequent
          # steps can run without further fetching).
          path: ./bindist/*
          retention-days: 5

      # TODO: Upload the tar.bz2 files too when ready
      - name: Upload Release Assets
        if: github.event.inputs.release_id != ''
        id: upload-release-assets
        uses: dwenegar/upload-release-assets@5bc3024cf83521df8ebfadf00ad0c4614fd59148 # v1
        env:
          GITHUB_TOKEN: ${{ secrets.WRITE_ACCESS_TOKEN }}
        with:
          release_id: ${{ github.event.inputs.release_id }}
          # Only upload iree artifacts.
          assets_path: ./bindist/iree*.*

  validate_and_publish:
    name: "Trigger validate and publish release"
    needs: build_packages
    if: github.event.inputs.release_id != ''
    runs-on: ubuntu-20.04
    steps:
      - name: "Invoke workflow :: Validate and Publish Release"
        uses: benc-uk/workflow-dispatch@e2e5e9a103e331dad343f381a29e654aea3cf8fc # v1.2.4
        with:
          workflow: Validate and Publish Release
          token: ${{ secrets.WRITE_ACCESS_TOKEN }}
          ref: "${{ env.tag_name }}"
          inputs: '{"release_id": "${{ github.event.inputs.release_id }}", "package_version": "${{ github.event.inputs.package_version }}", "build_run_id": "${{ github.run_id }}"}'
