# 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.10, 3.11)
#   * py-runtime-pkg (`iree-base-runtime` Python package)
#     * Linux, macOS, Windows
#     * All supported Python versions (e.g. 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-base-compiler package"
        required: true
      runtime_package_version:
        description: "Version of the iree-base-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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        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-base-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-base-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@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.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-24.04
            build-family: linux-x86_64
            build-package: main-dist-linux
            experimental: false
          - runs-on: ubuntu-24.04-arm
            build-family: linux-aarch64
            build-package: main-dist-linux
            experimental: true
          - runs-on: ubuntu-24.04
            build-family: linux-x86_64
            build-package: py-compiler-pkg
            experimental: false
          - runs-on: ubuntu-24.04-arm
            build-family: linux-aarch64
            build-package: py-compiler-pkg
            experimental: true
          - runs-on: ubuntu-24.04
            build-family: linux-x86_64
            build-package: py-runtime-pkg
            experimental: false
          - runs-on: ubuntu-24.04-arm
            build-family: linux-aarch64
            build-package: py-runtime-pkg
            experimental: true
          - runs-on: ubuntu-24.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
          - 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: false
          - runs-on: windows-2022
            build-family: windows
            build-package: py-runtime-pkg
            experimental: false

    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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        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@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
        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/cp310-cp310/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/cp310-cp310/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 exemplar 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/cp310-cp310/bin:$PATH; python ./c/build_tools/github_actions/build_dist.py py-tf-compiler-tools-pkg'

      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.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@fe47e06814723c7b1bea3a7e46cf93d5f020d0c3 # v3
        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-24.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 }}"}'
