Merge branch 'master' of https://github.com/block-hczhai/pyblock3-pre… #140
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 | |
on: | |
push: | |
branches: [ master ] | |
tags: | |
- v* | |
- p* | |
pull_request: | |
branches: [ master ] | |
workflow_dispatch: | |
permissions: | |
contents: write | |
pages: write | |
id-token: write | |
jobs: | |
build: | |
name: ${{ matrix.python }} ${{ matrix.os }} ${{ matrix.plat }} ${{ matrix.parallel }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ ubuntu-latest, macos-12 ] | |
python: [ '3.7', '3.8', '3.9', '3.10', '3.11' ] | |
manylinux: [ 2014 ] | |
plat: [ x86_64, arm64 ] | |
parallel: [ serial ] | |
exclude: | |
- os: ubuntu-latest | |
plat: arm64 | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: install requirements | |
env: | |
MKLROOT: ~/.local | |
run: | | |
export PYT=$(which python) | |
python -m pip install pip build twine pytest --upgrade | |
python -m pip install mkl==2021.4 mkl-include intel-openmp numpy psutil 'cmake>=3.19' pybind11==2.10.1 | |
- name: install requirements (linux / mpi) | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo apt-get install libopenmpi-dev | |
python -m pip install mpi4py | |
- name: fix mkl for amd cpu | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
lscpu | |
export CPUTYPE=$(lscpu | grep 'Vendor ID' | awk '{print $3}') | |
echo $CPUTYPE | |
if [ "$CPUTYPE" = "AuthenticAMD" ]; then | |
echo "int mkl_serv_intel_cpu_true() { return 1; }" > fixcpu.c | |
gcc -shared -fPIC -o libfixcpu.so fixcpu.c | |
fi | |
getconf LONG_BIT | |
- name: build test | |
env: | |
MKLROOT: ~/.local | |
run: | | |
mkdir build | |
cd build | |
cmake .. -DUSE_MKL=ON | |
make -j 4 | |
cd .. | |
echo "PYTHONPATH=./build:${PYTHONPATH}" >> $GITHUB_ENV | |
- name: run test (serial, linux) | |
if: matrix.os == 'ubuntu-latest' | |
env: | |
MKLROOT: ~/.local | |
run: | | |
export CPUTYPE=$(lscpu | grep 'Vendor ID' | awk '{print $3}') | |
if [ "$CPUTYPE" = "AuthenticAMD" ]; then | |
export LD_PRELOAD=$PWD/libfixcpu.so | |
fi | |
py.test pyblock3/algebra | |
py.test pyblock3/algorithms --ignore=pyblock3/algorithms/tests/test_soc.py | |
- name: run test (serial, macos) | |
if: matrix.os == 'macos-12' | |
env: | |
MKLROOT: ~/.local | |
run: | | |
py.test pyblock3/algebra | |
py.test pyblock3/algorithms --ignore=pyblock3/algorithms/tests/test_soc.py | |
- name: build wheels (macos-x86_64) | |
if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'macos-12' && matrix.plat == 'x86_64' | |
env: | |
TAG_STRING: ${{ github.event.ref }} | |
MACOSX_DEPLOYMENT_TARGET: '10.9' | |
run: | | |
brew update | |
brew install libomp | |
cp /usr/local/opt/libomp/include/*.h /usr/local/include/ | |
brew install gnu-sed | |
export PATH=/usr/local/opt/gnu-sed/bin:$PATH | |
echo ${TAG_STRING:11} | |
gsed -i "s/version=.*/version='${TAG_STRING:11}',/" setup.py | |
# if use mkl, will need iomp5 | |
gsed -i "/DUSE_MKL/a \ '-DOMP_LIB=OMP'," setup.py | |
gsed -i "/mkl/d" setup.py | |
gsed -i "/intel-openmp/d" setup.py | |
gsed -i "/DUSE_MKL/c \ '-DUSE_MKL=OFF'," setup.py | |
export OMPROOT=$(brew --prefix libomp) | |
echo ${OMPROOT} | |
cmake --version | |
python -m pip install wheel delocate | |
python -m pip wheel . -w ./dist --no-deps | |
export DYLD_LIBRARY_PATH=$(python -c "import site;print(':'.join(x+'/../..' for x in site.getsitepackages()))") | |
# prevent delocating libomp | |
export DELO_PY=$(cat $(which delocate-wheel) | head -1 | awk -F'!' '{print $2}') | |
export DELO_DE=$(${DELO_PY} -c "from delocate import delocating;print(delocating.__file__)") | |
gsed -i '/r_ed_base = base/a \ if "libomp" in required: needs_delocating.add(required); continue' ${DELO_DE} | |
gsed -i '/new_install_name =/a \ if "libomp" in required: new_install_name = "/usr/local/opt/libomp/lib/libomp.dylib"' ${DELO_DE} | |
delocate-wheel -k dist/*.whl | |
- name: build wheels (macos-arm64) | |
if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'macos-12' && matrix.plat == 'arm64' | |
env: | |
TAG_STRING: ${{ github.event.ref }} | |
MACOSX_DEPLOYMENT_TARGET: '11.0' | |
run: | | |
brew update | |
brew install libomp | |
cp /usr/local/opt/libomp/include/*.h /usr/local/include/ | |
brew install gnu-sed | |
export PATH=/usr/local/opt/gnu-sed/bin:$PATH | |
echo ${TAG_STRING:11} | |
gsed -i "s/version=.*/version='${TAG_STRING:11}',/" setup.py | |
gsed -i "/DUSE_MKL/a \ '-DOMP_LIB=OMP'," setup.py | |
gsed -i "/DUSE_MKL/a \ '-DARCH_ARM64=ON'," setup.py | |
gsed -i "/mkl/d" setup.py | |
gsed -i "/intel-openmp/d" setup.py | |
gsed -i "/DUSE_MKL/c \ '-DUSE_MKL=OFF'," setup.py | |
git clone https://github.com/Homebrew/brew arm-brew | |
cd arm-brew && git checkout 3.6.16 && cd .. | |
./arm-brew/bin/brew update | |
OMPGZ=$(./arm-brew/bin/brew fetch --force --bottle-tag=arm64_monterey libomp | grep "Downloaded to" | awk '{print $3}') | |
./arm-brew/bin/brew install ${OMPGZ} | |
export OMPROOT=$(./arm-brew/bin/brew --prefix libomp) | |
echo ${OMPROOT} | |
cmake --version | |
python -m pip install wheel delocate | |
export _PYTHON_HOST_PLATFORM="macosx-12.0-arm64" | |
export SDKROOT=/Applications/Xcode_13.2.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk | |
export CROSS_COMPILE=1 | |
export PLAT="arm64" | |
python -m pip wheel . -w ./dist --no-deps | |
delocate-wheel --require-archs=arm64 -k dist/*.whl | |
- name: prepare build wheels (manylinux) | |
if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'ubuntu-latest' | |
env: | |
TAG_STRING: ${{ github.event.ref }} | |
run: | | |
echo ${TAG_STRING:11} | |
sed -i "s/version=.*/version='${TAG_STRING:11}',/" setup.py | |
cp ./.github/actions/build-wheel/Dockerfile.manylinux${{ matrix.manylinux }} ./.github/actions/build-wheel/Dockerfile | |
- name: build wheels (manylinux) | |
if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'ubuntu-latest' | |
uses: ./.github/actions/build-wheel | |
with: | |
python-version: ${{ matrix.python }} | |
parallel: ${{ matrix.parallel }} | |
- name: release | |
if: startsWith(github.ref, 'refs/tags/') | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: dist/* | |
- name: upload artifacts | |
if: startsWith(github.ref, 'refs/tags/') | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist-${{ matrix.parallel }} | |
path: dist | |
retention-days: 2 | |
pypi: | |
name: pypi | |
needs: [build] | |
runs-on: ubuntu-latest | |
if: startsWith(github.ref, 'refs/tags/') | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
- name: build source dist (serial) | |
env: | |
TAG_STRING: ${{ github.event.ref }} | |
run: | | |
echo ${TAG_STRING:11} | |
sed -i "s/version=.*/version='${TAG_STRING:11}',/" setup.py | |
python -m pip install pip build twine --upgrade | |
python -m build --sdist | |
- name: release | |
if: startsWith(github.ref, 'refs/tags/') | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: dist/* | |
- name: build index | |
env: | |
REPO: ${{ github.repository }} | |
run: | | |
python .github/workflows/build_pypi.py ${REPO} ./idx-dist/pypi | |
- name: setup pages | |
uses: actions/configure-pages@v2 | |
- name: upload artifacts | |
uses: actions/upload-pages-artifact@v1 | |
with: | |
path: './idx-dist' | |
- name: deploy to gitHub pages | |
id: deployment | |
uses: actions/deploy-pages@v1 | |
publish: | |
name: publish | |
needs: build | |
runs-on: ubuntu-latest | |
if: startsWith(github.ref, 'refs/tags/v') | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
- name: build source dist (serial) | |
env: | |
TAG_STRING: ${{ github.event.ref }} | |
run: | | |
echo ${TAG_STRING:11} | |
sed -i "s/version=.*/version='${TAG_STRING:11}',/" setup.py | |
python -m pip install pip build twine --upgrade | |
python -m build --sdist | |
- name: download wheels | |
uses: actions/download-artifact@v2 | |
with: | |
name: dist-serial | |
path: dist | |
- name: publish to pypi | |
uses: pypa/gh-action-pypi-publish@v1.4.2 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} | |