try fix macos-12 build #125
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: 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) | |
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/[email protected] | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} | |