added pytest wanings 2 #241
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: deploy-conda | |
on: | |
push: | |
branches: | |
- main | |
release: | |
types: | |
- published | |
jobs: | |
build_wheels: | |
name: Build wheels, ${{ matrix.os }}, ${{ matrix.python-version }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
python-version: ['cp39', 'cp310', 'cp311', 'cp312'] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.12' | |
- name: Install OpenMP for mac | |
if: runner.os == 'macos' | |
run: | | |
# Starting from libomp>=15.0, the libomp installation in homebrew is "keg-only", | |
# meaning that libomp is only installed in homebrew's directory, but not moved | |
# to /usr/local to avoid other OpenMP installations (such as with gcc's version | |
# of OpenMP). To use the homebrew's version of OpenMP,the following symbolic | |
# links are created. Without these, the installation will fail with the error | |
# of "fatal error: omp.h file found" | |
brew install libomp | |
libomp_dir=$(brew --prefix libomp) | |
ln -sf ${libomp_dir}/include/omp-tools.h /usr/local/include/omp-tools.h | |
ln -sf ${libomp_dir}/include/omp.h /usr/local/include/omp.h | |
ln -sf ${libomp_dir}/include/ompt.h /usr/local/include/ompt.h | |
ln -sf ${libomp_dir}/lib/libomp.a /usr/local/lib/libomp.a | |
ln -sf ${libomp_dir}/lib/libomp.dylib /usr/local/lib/libomp.dylib | |
# Without this, installing cuda give error: no much space left on device | |
- name: Clear Cache | |
if: matrix.os != 'windows-latest' | |
run: rm -rf /opt/hostedtoolcache | |
# To install CUDA in windows, uncomment the following lines. Note | |
# that the Jimver@cuda-toolkit action (below) can only install cuda | |
# on linux and windows, but not macos. Also, for linux, we should | |
# not install cuda here, rather it should be installed inside the | |
# manylinux docker image. Thus, the following Jimver action can | |
# only apply to windows, not linux and macos. To install cuda in | |
# linux, see the second next actions below "Build wheel with cuda | |
# support". | |
- name: Install CUDA | |
if: matrix.os == 'windows-latest' | |
uses: Jimver/[email protected] | |
id: cuda-toolkit | |
with: | |
cuda: '12.1.0' | |
# Build wheel for windows with CUDA enabled. Note that cibuildwheel | |
# does not need manylinux docker, thuns, CUDA can be installed in | |
# the github action's virtual machine using the Jimver's action | |
# in the previous action (see above). | |
- name: Build wheels in windows with CUDA (X86_64) Python ${{ matrix.python-version }} | |
if: matrix.os == 'windows-latest' | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS_WINDOWS: "AMD64 x86" | |
CIBW_BUILD: "${{ matrix.python-version }}-win_amd64" | |
CIBW_SKIP: "pp* cp36-* cp37-* cp38-*" | |
CIBW_BUILD_VERBOSITY: 3 | |
CIBW_ENVIRONMENT: "USE_LONG_INT=0 USE_UNSIGNED_LONG_INT=0 USE_CBLAS=0 USE_CUDA=1 CUDA_DYNAMIC_LOADING=1" | |
CIBW_BEFORE_BUILD_WINDOWS: "pip install delvewheel" | |
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: "delvewheel repair -w {dest_dir} {wheel}" | |
with: | |
output-dir: wheelhouse | |
# Do not enable compiling with CUDA for macos since NIVDIA no longer supports CUDA in the macos. | |
# Build wheel for macos X86_64. | |
# Note that wheels for macos ARM64 will be built on cirrus ci (see /tools/ci) | |
- name: Build wheels in mac without CUDA (X86_64) Python ${{ matrix.python-version }} | |
if: matrix.os == 'macos-latest' | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS_MACOS: "x86_64" | |
CIBW_BUILD: "${{ matrix.python-version }}-macosx_x86_64" | |
CIBW_SKIP: "pp* cp36-* cp37-* cp38-*" | |
CIBW_BUILD_VERBOSITY: 3 | |
CIBW_ENVIRONMENT: "USE_LONG_INT=0 USE_UNSIGNED_LONG_INT=0 USE_CBLAS=0 USE_CUDA=0" | |
with: | |
output-dir: wheelhouse | |
# Enable compiling with CUDA, only for linux. Note that cuda must | |
# be installed "inside" the manylinux docker image, not in the main | |
# github virtual machine. Also, we should use manylinux2014, but | |
# not manylinux1. Because of this, we will not install CUDA with | |
# the Jimver's action (unlike we did so for the windows wheel in | |
# the above). The ``CUDA_DYNAMIC_LOADING=1`` enables dynamic | |
# loading of CUDA library. Base of this, when the wheels are | |
# created in manylinux platform, the cuda's libraries | |
# (libcudart.so, libcublas.so, libcusparse.so) will bundle to | |
# the wheel. This is increases the wheel size, bit since the | |
# anaconda cloud upload size is 1GB, the large wheel size will not | |
# be a problem. The advantage of bundling cuda libraries to the | |
# wheel is that the end-user does not have to install cuda toolkit. | |
# Note that wheels for linux AARCH64 will be built on cirrus ci (see /tools/ci) | |
- name: Build wheels in linux with CUDA (X86_64) Python ${{ matrix.python-version }} | |
if: matrix.os == 'ubuntu-latest' | |
uses: pypa/[email protected] | |
env: | |
CIBW_MANYLINUX_X86_64_IMAGE: sameli/manylinux2014_x86_64_cuda_12.3 | |
# CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 | |
# CIBW_BEFORE_ALL_LINUX: chmod +x .github/scripts/install_cuda.sh && .github/scripts/install_cuda.sh | |
CIBW_ARCHS_LINUX: "x86_64" | |
CIBW_BUILD: "${{ matrix.python-version }}-manylinux_x86_64" | |
CIBW_SKIP: "pp* cp36-* cp37-* cp38-*" | |
CIBW_BUILD_VERBOSITY: 1 | |
CIBW_ENVIRONMENT: "USE_LONG_INT=0 USE_UNSIGNED_LONG_INT=0 USE_CBLAS=0 USE_CUDA=1 CUDA_DYNAMIC_LOADING=1 CUDA_HOME=/usr/local/cuda" | |
with: | |
output-dir: wheelhouse | |
# Upload all wheels to an artifact | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: artifacts-wheel-${{ matrix.os }}-${{ matrix.python-version }} | |
path: ./wheelhouse/*.whl | |
retention-days: 1 | |
build_conda: | |
needs: [build_wheels] | |
name: Build conda on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
# To upload to PyPI on every tag starting with 'v', use the following: | |
# if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v') | |
# To publish to pypi on each GitHub Release, use the following: | |
# if: github.event_name == 'release' && github.event.action == 'published' | |
steps: | |
- name: Clean runner space | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo rm -rf /usr/share/dotnet | |
sudo rm -rf /opt/ghc | |
sudo rm -rf "/usr/local/share/boost" | |
sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
docker system prune -af | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: artifacts-* | |
merge-multiple: true | |
path: dist | |
- name: Setup Miniconda | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
miniconda-version: "latest" | |
auto-update-conda: true | |
- name: Install OpenMP for mac | |
if: matrix.os == 'macos-latest' | |
run: | | |
brew install libomp | |
# Starting from libomp>=15.0, the libomp installation in homebrew is "keg-only", | |
# meaning that libomp is only installed in homebrew's directory, but not moved | |
# to /usr/local to avoid other OpenMP installations (such as with gcc's version | |
# of OpenMP). To use the homebrew's version of OpenMP,the following symbolic | |
# links are created. Without these, the installation will fail with the error | |
# of "fatal error: omp.h file found" | |
ln -s /usr/local/opt/libomp/include/omp-tools.h /usr/local/include/omp-tools.h | |
ln -s /usr/local/opt/libomp/include/omp.h /usr/local/include/omp.h | |
ln -s /usr/local/opt/libomp/include/ompt.h /usr/local/include/ompt.h | |
ln -s /usr/local/opt/libomp/lib/libomp.a /usr/local/lib/libomp.a | |
ln -s /usr/local/opt/libomp/lib/libomp.dylib /usr/local/lib/libomp.dylib | |
- name: Build and upload package | |
shell: bash -el {0} | |
run: | | |
conda install -y conda-build anaconda-client | |
conda config --set anaconda_upload yes | |
export PATH=$(conda info --root):$PATH | |
export PATH=$(conda info --root)/bin:$PATH | |
conda build --output-folder conda-bld . | |
env: | |
CYTHON_BUILD_IN_SOURCE: '1' # see setup.py. Avoids a bug when building with multiple python variants | |
ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_TOKEN }} | |
# The manylinux wheels (after repaired with auditwheel) are very | |
# large in size. It is better to delete them. If we do not delete | |
# them, however, they will be deleted after the retention days, | |
# which I set to one day. | |
- name: Delete artifacts | |
uses: geekyeggo/delete-artifact@v4 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
name: artifacts-* | |
test_conda: | |
needs: [build_conda] | |
name: Test on ${{ matrix.os }} and Python ${{ matrix.python-version }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
python-version: ['3.9', '3.10', '3.11', '3.12'] | |
steps: | |
- name: Setup Miniconda | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
auto-update-conda: true | |
python-version: ${{ matrix.python-version }} | |
activate-environment: myenv | |
- name: Checkout | |
uses: actions/checkout@v3 | |
# Remove MKL as it causes error in initializing libomp. This only happens in MacOS and | |
# the conda (but not pip) installation of this package. | |
- name: Remove MKL in MacOS | |
if: matrix.os == 'macos-latest' | |
shell: bash -l {0} | |
run: | | |
conda install nomkl | |
conda remove mkl mkl-service || true # use true since if mkl or mkl-service does not exist, conda throw error and fails the whole runner action to continue | |
- name: Test | |
shell: bash -l {0} | |
run: | | |
mv imate imate-DoNotImport | |
rm setup.cfg | |
conda install -c s-ameli imate -y | |
conda install pytest -y | |
pytest |