Skip to content

Build Release Packages #1930

Build Release Packages

Build Release Packages #1930

Workflow file for this run

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