# 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"
        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"
        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"
        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"
        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 }}
          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 }}", "compiler_package_version": "${{ github.event.inputs.compiler_package_version }}", "runtime_package_version": "${{ github.event.inputs.runtime_package_version }}", "legacy_package_version": "${{ github.event.inputs.legacy_package_version }}", "build_run_id": "${{ github.run_id }}"}'
