[eudsl] factor out eudsl-nbgen
#289
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
# Part of the LLVM Project, 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 | |
# Copyright (c) 2024. | |
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 | |
eudslpy_disable_compile_opt: | |
type: boolean | |
description: 'use -O0 to build eudsl-py' | |
required: false | |
default: true | |
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 | |
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 and configure build" | |
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 llvm --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 | |
# since linux builds execute in the cibuildwheel almalinux container | |
if [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
echo CC=clang >> $GITHUB_ENV | |
echo CXX=clang++ >> $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: | | |
if [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
export CMAKE_PREFIX_PATH=/host/$PWD/llvm-install" | |
export CCACHE_DIR=/host/$CCACHE_DIR" | |
else | |
export CMAKE_PREFIX_PATH=$PWD/llvm-install | |
fi | |
ccache -z | |
$python3_command -m cibuildwheel "$PWD/projects/eudsl-tblgen" --output-dir wheelhouse | |
ccache -s | |
- name: "Build eudsl-nbgen" | |
run: | | |
# this is not run in cibuildwheel container so its different | |
if [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
export CMAKE_PREFIX_PATH=$PWD/llvm-install" | |
export CCACHE_DIR=/host/$CCACHE_DIR" | |
else | |
export CMAKE_PREFIX_PATH=$PWD/llvm-install | |
fi | |
ccache -z | |
$python3_command -m pip wheel "$PWD/projects/eudsl-nbgen" -w wheelhouse | |
ccache -s | |
- name: "Build eudsl-py" | |
if: ${{ ! startsWith(matrix.os, 'windows') }} | |
run: | | |
if [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
export CMAKE_PREFIX_PATH=/host/$PWD/llvm-install" | |
export CCACHE_DIR=/host/$CCACHE_DIR" | |
else | |
export CMAKE_PREFIX_PATH=$PWD/llvm-install | |
fi | |
# prevent OOM on free GHA | |
export DISABLE_COMPILE_OPT="${{ inputs.debug_with_tmate }}" | |
ccache -z | |
$python3_command -m cibuildwheel "$PWD/projects/eudsl-py" --output-dir wheelhouse | |
ccache -s | |
- name: "Save cache" | |
uses: actions/cache/save@v3 | |
if: ${{ !cancelled() && github.event_name == 'push' && github.ref_name == 'main' }} | |
with: | |
path: ${{ steps.setup_base.outputs.cache-dir }} | |
key: ${{ env.cache-key }} | |
- 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-tblgen: | |
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 | |
test-eudsl-py: | |
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"}, | |
# TODO(max): enable on windows by statically linking | |
# {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-py ${{ 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-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" | |
python -m pytest -rA --capture=tee-sys $TESTS_DIR | |
release-eudsl: | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
needs: [test-eudsl-tblgen, test-eudsl-py] | |
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*.whl" | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
tag: "latest" | |
name: "latest" | |
removeArtifacts: false | |
allowUpdates: true | |
replacesArtifacts: true | |
makeLatest: true | |
omitBody: true |