Merge pull request #77 from BDonnot/bd-dev #329
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: CI | |
on: | |
push: | |
branches: | |
- '*' | |
tags: | |
- 'v*.*.*' | |
jobs: | |
manylinux_build: | |
# build wheels for some linux | |
name: Build linux ${{ matrix.python.name }} wheel | |
runs-on: ubuntu-latest | |
container: quay.io/pypa/manylinux2014_x86_64 | |
strategy: | |
matrix: | |
python: | |
- { | |
name: cp37, | |
abi: cp37m, | |
version: '3.7', | |
} | |
- { | |
name: cp38, | |
abi: cp38, | |
version: '3.8', | |
} | |
- { | |
name: cp39, | |
abi: cp39, | |
version: '3.9', | |
} | |
- { | |
name: cp310, | |
abi: cp310, | |
version: '3.10', | |
} | |
- { | |
name: cp311, | |
abi: cp311, | |
version: '3.11', | |
} | |
- { | |
name: cp312, | |
abi: cp312, | |
version: '3.12', | |
} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup path | |
run: echo "/opt/python/${{ matrix.python.name }}-${{ matrix.python.abi }}/bin/" >> $GITHUB_PATH | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -r requirements.txt | |
- name: Compile SuiteSparse | |
run: make | |
- name: Build wheel | |
run: | | |
# export __O3_OPTIM=1 | |
python3 setup.py bdist_wheel | |
auditwheel repair dist/*.whl | |
- name: Build source archive | |
if: matrix.python.name == 'cp311' | |
run: python setup.py sdist | |
- name: Install wheel | |
run: pip3 install wheelhouse/*.whl --user | |
# - name: Install GDB | |
# run: yum install -y gdb | |
- name: Check package can be imported | |
run: | | |
python3 -c "import lightsim2grid" | |
python3 -c "from lightsim2grid import *" | |
python3 -c "from lightsim2grid.newtonpf import newtonpf" | |
- name: Fix urllib3 (python 3.7) | |
if: matrix.python.name == 'cp37' | |
run: | |
pip install urllib3==1.26.6 | |
# otherwise urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips 26 Jan 2017' | |
- name: Check LightSimBackend can be imported (install grid2op) | |
run: | | |
python3 -m pip install grid2op | |
python3 -m pip freeze | |
- name: Check LightSimBackend can be imported 1 | |
run: | |
python3 -v -c "from lightsim2grid import LightSimBackend" | |
- name: Check LightSimBackend can be imported 2 | |
run: | |
python3 -v -c "from lightsim2grid import LightSimBackend; import grid2op; env = grid2op.make('l2rpn_case14_sandbox', test=True, backend=LightSimBackend())" | |
- name: Upload wheel | |
uses: actions/upload-artifact@v3 | |
with: | |
name: lightsim2grid-wheel-linux-${{ matrix.python.name }} | |
path: wheelhouse/*.whl | |
- name: Upload source archive | |
uses: actions/upload-artifact@v3 | |
if: matrix.python.name == 'cp311' | |
with: | |
name: lightsim2grid-sources | |
path: dist/*.tar.gz | |
windows_build: | |
# build wheels for windows | |
name: Build windows ${{ matrix.python.name }} wheel | |
runs-on: windows-2019 | |
strategy: | |
matrix: | |
python: | |
- { | |
name: cp37, | |
version: '3.7', | |
} | |
- { | |
name: cp38, | |
version: '3.8', | |
} | |
- { | |
name: cp39, | |
version: '3.9', | |
} | |
- { | |
name: cp310, | |
version: '3.10', | |
} | |
- { | |
name: cp311, | |
version: '3.11', | |
} | |
- { | |
name: cp312, | |
version: '3.12', | |
} | |
env: | |
RUNNER_OS: windows-2019 | |
PYTHON_VERSION: ${{ matrix.python.version }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python.version }} | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install --upgrade setuptools | |
python -m pip install -r requirements.txt | |
- name: Compile SuiteSparse cmake | |
run: | | |
cd build_cmake | |
python generate_c_files.py | |
mkdir build | |
cd build | |
cmake -DCMAKE_INSTALL_PREFIX=..\built -DCMAKE_BUILD_TYPE=Release .. | |
cmake --build . --config Release | |
cmake --install . --prefix ..\built | |
cd .. | |
cd .. | |
set __O3_OPTIM=1 | |
python setup.py build | |
- name: Build wheel | |
run: python setup.py bdist_wheel | |
- name: Install wheel | |
shell: bash | |
run: python -m pip install dist/*.whl --user | |
- name: Check package can be imported | |
run: | | |
mkdir tmp_for_import_checking | |
cd tmp_for_import_checking | |
python -c "import lightsim2grid" | |
python -c "from lightsim2grid import *" | |
python -c "from lightsim2grid.newtonpf import newtonpf" | |
cd .. | |
- name: Check LightSimBackend can be imported | |
run: | | |
cd tmp_for_import_checking | |
python -m pip install grid2op | |
python -c "from lightsim2grid import LightSimBackend" | |
python -c "from lightsim2grid import LightSimBackend; import grid2op; env = grid2op.make('l2rpn_case14_sandbox', test=True, backend=LightSimBackend())" | |
- name: Upload wheel | |
uses: actions/upload-artifact@v3 | |
with: | |
name: lightsim2grid-wheel-${{ matrix.config.name }}-${{ matrix.python.name }} | |
path: dist/*.whl | |
macos_build_37: | |
# build wheel for python 3.7 for macos | |
name: Build macos ${{ matrix.python.name }} wheel | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
python: | |
- { | |
name: cp37, | |
version: '3.7', | |
} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python.version }} | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -r requirements.txt | |
- name: Compile SuiteSparse make | |
run: | | |
make | |
export __O3_OPTIM=1 | |
python3 setup.py build | |
- name: Build wheel | |
run: python setup.py bdist_wheel | |
- name: Install wheel | |
shell: bash | |
run: python -m pip install dist/*.whl --user | |
- name: Check package can be imported | |
run: | | |
mkdir tmp_for_import_checking | |
cd tmp_for_import_checking | |
python -c "import lightsim2grid" | |
python -c "from lightsim2grid import *" | |
python -c "from lightsim2grid.newtonpf import newtonpf" | |
cd .. | |
- name: Check LightSimBackend can be imported | |
run: | | |
cd tmp_for_import_checking | |
python -m pip install grid2op | |
python -c "from lightsim2grid import LightSimBackend" | |
python -c "from lightsim2grid import LightSimBackend; import grid2op; env = grid2op.make('l2rpn_case14_sandbox', test=True, backend=LightSimBackend())" | |
- name: Upload wheel | |
uses: actions/upload-artifact@v3 | |
with: | |
name: lightsim2grid-wheel-darwin-${{ matrix.python.name }} | |
path: dist/*.whl | |
macos_build_38_: | |
# build wheel for python 3.8 and above for macos | |
name: Build darwin ${{ matrix.python.name }} wheel | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
python: | |
- { | |
name: cp38, | |
version: '3.8', | |
} | |
- { | |
name: cp39, | |
version: '3.9', | |
} | |
- { | |
name: cp310, | |
version: '3.10', | |
} | |
- { | |
name: cp311, | |
version: '3.11', | |
} | |
- { | |
name: cp312, | |
version: '3.12', | |
} | |
env: | |
RUNNER_OS: macos-latest | |
PYTHON_VERSION: ${{ matrix.python.version }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python.version }} | |
- name: Set Additional Envs | |
shell: bash | |
run: | | |
echo "PYTHON_SUBVERSION=$(echo $PYTHON_VERSION | cut -c 3-)" >> $GITHUB_ENV | |
echo "DEPLOY=$( [[ $GITHUB_EVENT_NAME == 'push' && $GITHUB_REF == 'refs/tags'* ]] && echo 'True' || echo 'False' )" >> $GITHUB_ENV | |
- name: Compile with cibuildwheel | |
uses: pypa/[email protected] | |
env: | |
CIBW_BUILD: "cp3${{env.PYTHON_SUBVERSION}}-*" # see https://github.com/cvxpy/cvxpy/blob/master/.github/workflows/build.yml | |
CIBW_ARCHS_LINUX: auto aarch64 # not used I believe | |
CIBW_ARCHS_MACOS: x86_64 arm64 | |
CIBW_ENVIRONMENT: __O3_OPTIM=1 | |
CIBW_BEFORE_ALL: python -m pip install --upgrade setuptools wheel pybind11 | |
CIBW_BEFORE_BUILD: make clean && make CC=clang CXX=clang++ # and not CIBW_BEFORE_ALL ! | |
CIBW_TEST_REQUIRES: grid2op pandapower | |
CIBW_TEST_SKIP: "cp312-* *-macosx_arm64" # to silence warning "While arm64 wheels can be built on x86_64, they cannot be tested." | |
CIBW_TEST_COMMAND: > | |
python -c "import lightsim2grid" && | |
python -c "from lightsim2grid import *" && | |
python -c "from lightsim2grid.newtonpf import newtonpf" && | |
python -c "from lightsim2grid.solver import KLUSolver" && | |
python -c "from lightsim2grid import LightSimBackend" && | |
python -c "from lightsim2grid import LightSimBackend; import grid2op; env = grid2op.make('l2rpn_case14_sandbox', test=True, backend=LightSimBackend())" | |
- name: Upload wheel | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels-darwin-${{ matrix.python.name }} | |
path: ./wheelhouse/*.whl | |
package: | |
name: Package wheels | |
runs-on: ubuntu-latest | |
needs: [manylinux_build, windows_build, macos_build_37, macos_build_38_] | |
steps: | |
- name: Download wheels | |
uses: actions/download-artifact@v3 | |
with: | |
path: download | |
- name: Upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: lightsim2grid-wheels | |
path: | | |
download/**/*.whl | |
download/**/*.tar.gz |