trying to natively build on m1 chip, removing linnux build on arm64 #363
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 on ${{ matrix.cont.name}} | |
runs-on: ubuntu-latest | |
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', | |
} | |
cont: | |
- { | |
name: manylinux2014_x86_64, | |
val: quay.io/pypa/manylinux2014_x86_64, | |
arch: amd64 | |
} | |
# - { | |
# name: manylinux2014_aarch64, | |
# val: quay.io/pypa/manylinux2014_aarch64, | |
# arch: arm64 | |
# } | |
container: | |
image: ${{matrix.cont.val}} | |
# does not work if not manylinux2014_x86_64... | |
steps: | |
# - name: Set up QEMU | |
# if: matrix.cont.name == 'manylinux2014_aarch64' | |
# uses: docker/setup-qemu-action@v2 | |
# with: | |
# platforms: arm64 | |
- name: Checkout sources | |
uses: actions/checkout@v3 # v4 not working... | |
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 | |
pip freeze | |
- name: Check package can be imported (bare install) | |
run: | | |
mkdir tmp_for_import_checking | |
cd tmp_for_import_checking | |
python3 -c "import lightsim2grid" | |
python3 -c "from lightsim2grid import *" | |
python3 -c "from lightsim2grid.newtonpf import newtonpf" | |
python3 -c "from lightsim2grid.timeSerie import TimeSeriesCPP" | |
python3 -c "from lightsim2grid.contingencyAnalysis import ContingencyAnalysisCPP" | |
python3 -c "from lightsim2grid.securityAnalysis import SecurityAnalysisCPP" | |
python3 -c "from lightsim2grid.gridmodel import init, GridModel" | |
- 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: Install grid2op | |
run: | | |
python3 -m pip install grid2op | |
python3 -m pip freeze | |
- name: Check extra can be imported can be imported (with grid2op) | |
run: | |
cd tmp_for_import_checking | |
python3 -v -c "from lightsim2grid import LightSimBackend" | |
python3 -c "from lightsim2grid.timeSerie import TimeSerie" | |
python3 -c "from lightsim2grid.contingencyAnalysis import ContingencyAnalysis" | |
python3 -c "from lightsim2grid.physical_law_checker import PhysicalLawChecker" | |
python3 -c "from lightsim2grid.securityAnalysis import SecurityAnalysis" | |
- name: Check LightSimBackend can be used to create env | |
run: | |
cd tmp_for_import_checking | |
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 # v4 broken | |
with: | |
name: lightsim2grid-wheel-linux-${{ matrix.python.name }}-${{ matrix.cont.name }} | |
path: wheelhouse/*.whl | |
- name: Upload source archive | |
uses: actions/upload-artifact@v3 # v4 broken | |
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 for ${{ matrix.win_arch.msvc}} | |
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', | |
} | |
win_arch: | |
- { | |
name: "AMD64", | |
msvc: x64 | |
} | |
# - { | |
# name: "x86", | |
# msvc: x86 | |
# } | |
env: | |
RUNNER_OS: windows-2019 | |
PYTHON_VERSION: ${{ matrix.python.version }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Setup Python ${{ matrix.python.version }} ${{ matrix.win_arch.msvc}} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python.version }} | |
architecture: ${{ matrix.win_arch.msvc}} | |
- name: Setup MSVC ${{ matrix.win_arch.msvc}} | |
uses: bus1/cabuild/action/msdevshell@e22aba57d6e74891d059d66501b6b5aed8123c4d # v1 | |
with: | |
architecture: ${{ matrix.win_arch.msvc}} | |
- 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-win-${{ matrix.python.name }}-${{ matrix.win_arch.msvc}} | |
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@v4 | |
with: | |
submodules: true | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
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 on ${{ matrix.runner.arch}} | |
runs-on: ${{ matrix.runner.name }} | |
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', | |
} | |
runner: | |
- { | |
name: macos-13, | |
arch: x86_64 | |
} | |
- { | |
name: macos-14, | |
arch: arm64 | |
} | |
env: | |
RUNNER_OS: macos-latest | |
PYTHON_VERSION: ${{ matrix.python.version }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
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 | |
pip freeze | |
- name: Check package can be imported (bare install) | |
run: | | |
mkdir tmp_for_import_checking | |
cd tmp_for_import_checking | |
python3 -c "import lightsim2grid" | |
python3 -c "from lightsim2grid import *" | |
python3 -c "from lightsim2grid.newtonpf import newtonpf" | |
python3 -c "from lightsim2grid.timeSerie import TimeSeriesCPP" | |
python3 -c "from lightsim2grid.contingencyAnalysis import ContingencyAnalysisCPP" | |
python3 -c "from lightsim2grid.securityAnalysis import SecurityAnalysisCPP" | |
python3 -c "from lightsim2grid.gridmodel import init, GridModel" | |
- 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: Install grid2op | |
run: | | |
python3 -m pip install grid2op | |
python3 -m pip freeze | |
- name: Check extra can be imported can be imported (with grid2op) | |
run: | |
cd tmp_for_import_checking | |
python3 -v -c "from lightsim2grid import LightSimBackend" | |
python3 -c "from lightsim2grid.timeSerie import TimeSerie" | |
python3 -c "from lightsim2grid.contingencyAnalysis import ContingencyAnalysis" | |
python3 -c "from lightsim2grid.physical_law_checker import PhysicalLawChecker" | |
python3 -c "from lightsim2grid.securityAnalysis import SecurityAnalysis" | |
- name: Check LightSimBackend can be used to create env | |
run: | |
cd tmp_for_import_checking | |
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-darwin-${{ matrix.python.name }} | |
path: dist/*.whl | |
# - name: Checkout sources | |
# uses: actions/checkout@v4 | |
# with: | |
# submodules: true | |
# - name: Setup Python | |
# uses: actions/setup-python@v5 | |
# 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: lightsim2grid-wheel-darwin-${{ matrix.python.name }}-${{ matrix.runner.arch}} | |
path: dist/*.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 |