-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[libshortfin] Add workflow to build nightly packages. #238
Changes from all commits
1fd7ba1
1809c03
9223811
a1361f4
138ed10
cb23bff
d503f95
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
# Copyright 2024 Advanced Micro Devices, Inc. | ||
# | ||
# Licensed under the Apache License v2.0 with LLVM Exceptions. | ||
# See https://llvm.org/LICENSE.txt for license information. | ||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
|
||
name: Build packages | ||
|
||
on: | ||
workflow_dispatch: | ||
schedule: | ||
# Runs at 11:00 AM UTC, which is 3:00 AM PST (UTC-8) | ||
- cron: '0 11 * * *' | ||
|
||
jobs: | ||
# Note: metadata generation could happen in a separate trigger/schedule | ||
# workflow. For cross platform builds, it's useful to just generate the | ||
# metadata on Linux and pass that to later jobs using artifacts. | ||
setup_metadata: | ||
runs-on: ubuntu-24.04 | ||
outputs: | ||
shark_package_version: ${{ steps.version.outputs.shark_package_version }} | ||
steps: | ||
# For now the version is just a calendar date + an automatically | ||
# incrementing value. We may want different versions for nightly/dev | ||
# builds and stable releases published to official places like pypi. | ||
- name: Compute version | ||
id: version | ||
run: | | ||
shark_package_version="$(printf '%(%Y%m%d)T.${{ github.run_number }}')" | ||
echo "shark_package_version=${shark_package_version}" >> $GITHUB_OUTPUT | ||
cat << EOF > ./version_info.json | ||
{ | ||
"package-version": "${shark_package_version}" | ||
} | ||
EOF | ||
cat ./version_info.json | ||
- name: Upload version_info.json | ||
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | ||
with: | ||
name: version_info | ||
path: version_info.json | ||
|
||
build_packages: | ||
name: "${{ matrix.package }} :: ${{ matrix.platform }} :: ${{ matrix.python-version }}" | ||
runs-on: ${{ matrix.runs-on }} | ||
needs: [setup_metadata] | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
# Ubuntu packages. | ||
- runs-on: ubuntu-24.04 | ||
platform: linux-x86_64 | ||
package: shortfin | ||
python-version: cp312-cp312 | ||
- runs-on: ubuntu-24.04 | ||
platform: linux-x86_64 | ||
package: shortfin | ||
python-version: cp313-cp313 | ||
- runs-on: ubuntu-24.04 | ||
platform: linux-x86_64 | ||
package: shortfin | ||
python-version: cp313-cp313t | ||
|
||
# TODO(#130): macOS platform | ||
# TODO(#130): Windows platform | ||
# TODO(#130): sharktank packages | ||
|
||
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 | ||
|
||
- name: Download version_info.json | ||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | ||
with: | ||
name: version_info | ||
path: ./c/shortfin/ | ||
merge-multiple: true | ||
|
||
- name: Build shortfin (Linux x86_64, ${{ matrix.python-version }}) | ||
if: "matrix.package == 'shortfin' && matrix.platform == 'linux-x86_64'" | ||
env: | ||
OUTPUT_DIR: "${{ github.workspace }}/bindist" | ||
OVERRIDE_PYTHON_VERSIONS: "${{ matrix.python-version }}" | ||
run: | | ||
[ -e ./bindist/* ] && rm ./bindist/* | ||
./c/shortfin/build_tools/build_linux_package.sh | ||
|
||
- name: Upload python wheels | ||
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | ||
with: | ||
if-no-files-found: error | ||
name: snapshot-${{ matrix.package }}-${{ matrix.platform }}-${{ matrix.python-version }} | ||
path: bindist | ||
|
||
- name: Release python wheels | ||
uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # v1.14.0 | ||
with: | ||
artifacts: bindist/*.whl | ||
token: "${{ secrets.GITHUB_TOKEN }}" | ||
tag: "dev-wheels" | ||
name: "dev-wheels" | ||
body: "Automatic snapshot release of SHARK-Platform python wheels." | ||
removeArtifacts: false | ||
allowUpdates: true | ||
replacesArtifacts: true | ||
makeLatest: false |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# Local-only config options | ||
version_info.json |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,16 +4,17 @@ | |
# See https://llvm.org/LICENSE.txt for license information. | ||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
|
||
from distutils.core import setup, Extension | ||
import sys | ||
import json | ||
import os | ||
import shutil | ||
import subprocess | ||
import os | ||
from pathlib import Path | ||
import sys | ||
from distutils.command.build import build as _build | ||
from distutils.core import setup, Extension | ||
from pathlib import Path | ||
from setuptools import find_namespace_packages | ||
from setuptools.command.build_ext import build_ext as _build_ext | ||
from setuptools.command.build_py import build_py as _build_py | ||
from setuptools.command.build_ext import build_ext as _build_ext | ||
|
||
|
||
def get_env_boolean(name: str, default_value: bool = False) -> bool: | ||
|
@@ -133,6 +134,40 @@ def copy_extensions_to_source(self, *args, **kwargs): | |
... | ||
|
||
|
||
# Setup and get version information. | ||
VERSION_INFO_FILE = os.path.join(SOURCE_DIR, "version_info.json") | ||
|
||
|
||
def load_version_info(): | ||
with open(VERSION_INFO_FILE, "rt") as f: | ||
return json.load(f) | ||
|
||
|
||
def find_git_version(): | ||
try: | ||
return ( | ||
subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=SOURCE_DIR) | ||
.decode("utf-8") | ||
.strip() | ||
) | ||
except subprocess.SubprocessError as e: | ||
print(f"ERROR: Could not get git revision: {e}", file=sys.stderr) | ||
return None | ||
|
||
|
||
try: | ||
version_info = load_version_info() | ||
except FileNotFoundError: | ||
print("version_info.json not found. Using defaults", file=sys.stderr) | ||
version_info = {} | ||
git_version = find_git_version() | ||
|
||
PACKAGE_VERSION = version_info.get("package-version") | ||
if not PACKAGE_VERSION: | ||
PACKAGE_VERSION = f"0.dev0+{git_version or '0'}" | ||
print(f"Using PACKAGE_VERSION: '{PACKAGE_VERSION}'") | ||
|
||
|
||
def maybe_nuke_cmake_cache(cmake_build_dir): | ||
# From run to run under pip, we can end up with different paths to ninja, | ||
# which isn't great and will confuse cmake. Detect if the location of | ||
|
@@ -324,7 +359,7 @@ def populate_built_package(abs_dir): | |
|
||
setup( | ||
name="shortfin", | ||
version="0.9", | ||
version=f"{PACKAGE_VERSION}", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It makes sense to not set this to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah more work will be needed to fully plumb versions (including stable, nightly, and dev) through each part of the projects. I tried to focus on the minimal changes needed to get a nightly release going here. In IREE we have some CMake options: https://github.com/iree-org/iree/blob/6c47f631855ced5f48d4897df11784f81ae24386/CMakeLists.txt#L84-L88 that get set through |
||
description="Shortfin native library implementation", | ||
author="SHARK Authors", | ||
packages=packages, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want to pre-build with a non-free-threaded 3.13 at all?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably? @stellaraccident , opinions? I think we'll want to publish for both flavors of python 3.13, but I'm not sure how pip handles that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reading through https://py-free-threading.github.io/.
cp313-cp313t
(note thet
) seems to work, even with manylinux2014.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested. Free threaded seems to work fine.