| # 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-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@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-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@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 }}"}' |