Build Release Packages #1936
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 }}"}' |