[python] start python bindings #97
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
name: "Build, test, release EUDSL" | |
on: | |
workflow_dispatch: | |
inputs: | |
force_debug_with_tmate: | |
type: boolean | |
description: 'Run the build with tmate session' | |
required: false | |
default: false | |
debug_with_tmate: | |
type: boolean | |
description: 'Run the build with a tmate session ONLY in case of failure' | |
required: false | |
default: false | |
pull_request: | |
paths: | |
- ".github/workflows/build_test_release_eudsl.yml" | |
- "projects/eudsl-tblgen" | |
- "projects/eudsl-py" | |
- "third_party/llvm-project" | |
merge_group: | |
push: | |
branches: | |
- main | |
paths: | |
- ".github/workflows/build_test_release_eudsl.yml" | |
- "projects/eudsl-tblgen" | |
- "projects/eudsl-py" | |
- "third_party/llvm-project" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.number || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
build-eudsl: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: "ubuntu_x86_64" | |
runs-on: "ubuntu-22.04" | |
os: "ubuntu" | |
- name: "windows_x86_64" | |
runs-on: "windows-2019" | |
os: "windows" | |
- name: "macos_arm64" | |
runs-on: "macos-14" | |
os: "macos" | |
- name: "macos_x86_64" | |
runs-on: "macos-13" | |
os: "macos" | |
runs-on: ${{ matrix.runs-on }} | |
name: "Build eudsl ${{ matrix.name }}" | |
defaults: | |
run: | |
shell: bash | |
permissions: | |
id-token: write | |
contents: write | |
env: | |
# either the PR number or `branch-N` where N always increments | |
cache-key: eudsl_${{ matrix.name }}_clang_${{ format('{0}-{1}', github.ref_name, github.run_number) }} | |
container: | |
image: ${{ matrix.container }} | |
steps: | |
- name: "Check out repository" | |
uses: actions/[email protected] | |
- name: "Setup base" | |
uses: ./.github/actions/setup_base | |
id: setup_base | |
with: | |
cache-key: ${{ env.cache-key }} | |
restore-key: "eudsl_${{ matrix.name }}_clang" | |
os: ${{ matrix.os }} | |
arch: ${{ matrix.arch }} | |
- name: "Download MLIR" | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
if [[ "${{ matrix.os }}" == "almalinux" ]] || [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
export RELEASE_PREFIX="mlir_manylinux_x86_64" | |
else | |
export RELEASE_PREFIX="mlir_${{ matrix.name }}" | |
fi | |
RELEASE_URL=$(gh release view latest --json assets -q '.assets |= sort_by(.createdAt) | .assets | map(select(.name | contains(env.RELEASE_PREFIX))) | .[-1] | .url') | |
curl -sLO $RELEASE_URL | |
tar xf $RELEASE_PREFIX*.tar.gz | |
if [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
echo "LLVM_DIR=/host/$PWD/llvm-install/lib/cmake/llvm" >> $GITHUB_ENV | |
echo "MLIR_DIR=/host/$PWD/llvm-install/lib/cmake/mlir" >> $GITHUB_ENV | |
else | |
echo "LLVM_DIR=$PWD/llvm-install/lib/cmake/llvm" >> $GITHUB_ENV | |
echo "MLIR_DIR=$PWD/llvm-install/lib/cmake/mlir" >> $GITHUB_ENV | |
fi | |
# these have to match the deployment targets of the LLVM build runners | |
# ld: warning: object file (libLLVMTableGen.a[3](Error.cpp.o)) was built for newer 'macOS' version (13.7) than being linked (10.13) | |
if [[ "${{ matrix.runs-on }}" == "macos-14" ]]; then | |
echo MACOSX_DEPLOYMENT_TARGET=14.0 >> $GITHUB_ENV | |
elif [[ "${{ matrix.runs-on }}" == "macos-13" ]]; then | |
echo MACOSX_DEPLOYMENT_TARGET=13.7 >> $GITHUB_ENV | |
fi | |
pip install cibuildwheel | |
- name: "Build eudsl-tblgen" | |
run: | | |
$python3_command -m cibuildwheel "$PWD/projects/eudsl-tblgen" --output-dir wheelhouse | |
- name: "Build eudsl-py" | |
run: | | |
$python3_command -m cibuildwheel "$PWD/projects/eudsl-py" --output-dir wheelhouse | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: eudsl_${{ matrix.name }}_artifact | |
path: wheelhouse/*.whl | |
if-no-files-found: warn | |
- name: "Setup tmate session" | |
if: ${{ (failure() && inputs.debug_with_tmate) || inputs.force_debug_with_tmate }} | |
uses: mxschmitt/[email protected] | |
with: | |
limit-access-to-actor: true | |
install-dependencies: ${{ startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'ubuntu') }} | |
test-eudsl: | |
needs: [build-eudsl] | |
strategy: | |
fail-fast: false | |
matrix: | |
runs-on: ["ubuntu-22.04", "macos-14", "macos-13", "windows-2019"] | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
include: [ | |
{runs-on: "ubuntu-22.04", name: "ubuntu_x86_64", os: "ubuntu"}, | |
{runs-on: "windows-2019", name: "windows_x86_64", os: "windows"}, | |
{runs-on: "macos-14", name: "macos_arm64", os: "macos"}, | |
{runs-on: "macos-13", name: "macos_x86_64", os: "macos"}, | |
] | |
runs-on: ${{ matrix.runs-on }} | |
name: "Test eudsl ${{ matrix.name }}" | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: "Check out repository" | |
uses: actions/[email protected] | |
with: | |
submodules: false | |
- name: "Install Python" | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "${{ matrix.python-version }}" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: eudsl_${{ matrix.name }}_artifact | |
path: wheelhouse | |
- name: "Install eudsl-tblgen" | |
run: | | |
python -m pip install pytest | |
python -m pip install eudsl-tblgen -f wheelhouse | |
- name: "Test eudsl-tblgen" | |
run: | | |
export TESTS_DIR="$PWD/projects/eudsl-tblgen/tests" | |
if [ ${{ matrix.os }} == 'windows' ]; then | |
python -m pytest -s -rA $TESTS_DIR | |
else | |
python -m pytest -rA --capture=tee-sys $TESTS_DIR | |
fi | |
- name: "Install eudsl-py" | |
run: | | |
python -m pip install pytest | |
python -m pip install eudsl-py -f wheelhouse | |
- name: "Test eudsl-py" | |
run: | | |
export TESTS_DIR="$PWD/projects/eudsl-py/tests" | |
if [ ${{ matrix.os }} == 'windows' ]; then | |
python -m pytest -s -rA $TESTS_DIR | |
else | |
python -m pytest -rA --capture=tee-sys $TESTS_DIR | |
fi | |
release-eudsl: | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
needs: [test-eudsl] | |
runs-on: "ubuntu-22.04" | |
name: "Release eudsl" | |
permissions: | |
id-token: write | |
contents: write | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
path: wheelhouse | |
- name: Release current commit | |
uses: ncipollo/[email protected] | |
with: | |
artifacts: "wheelhouse/eudsl_tblgen*.whl" | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
tag: "latest" | |
name: "latest" | |
removeArtifacts: false | |
allowUpdates: true | |
replacesArtifacts: true | |
makeLatest: true | |
omitBody: true |