Skip to content

Sped up Smoldyn suface and panel lookup with new c-safe Hashtable #335

Sped up Smoldyn suface and panel lookup with new c-safe Hashtable

Sped up Smoldyn suface and panel lookup with new c-safe Hashtable #335

Workflow file for this run

name: "Pip"
on:
workflow_dispatch:
pull_request:
push:
branches:
- master
release:
types:
- published
jobs:
build:
name: Build with Pip
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ windows-latest, macos-13, macos-14, ubuntu-latest ]
#platform: [ macos-13, macos-14, ubuntu-latest ]
python-version: ["3.9","3.10","3.11","3.12"]
exclude:
- platform: windows-latest
python-version: "3.9"
# - platform: windows-latest
# python-version: "3.12"
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install Intel MacOS dependencies
if: matrix.platform == 'macos-13'
shell: bash
run: |
brew install boost
brew install hdf5
brew install libzip
brew install ninja
brew install libaec
brew install llvm
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile
source /Users/runner/.bash_profile
ln -s $(which gfortran-14) /usr/local/bin/gfortran
gcc --version
gfortran --version
cmake --version
brew info boost
brew info hdf5
- name: Install ARM MacOS dependencies
if: matrix.platform == 'macos-14'
shell: bash
run: |
brew install boost
brew install hdf5
brew install libzip
brew install ninja
brew install libaec
brew install llvm
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile
ln -s /opt/homebrew/bin/gfortran-14 /usr/local/bin/gfortran
gcc --version
gfortran --version
cmake --version
brew info boost
brew info hdf5
- name: Install Windows Dependencies
if: matrix.platform == 'windows-latest'
uses: msys2/setup-msys2@v2
with:
msystem: CLANG64
update: true
install: >
zip
git
mingw-w64-clang-x86_64-curl
mingw-w64-clang-x86_64-toolchain
mingw-w64-clang-x86_64-flang
mingw-w64-clang-x86_64-cmake
mingw-w64-clang-x86_64-boost
mingw-w64-clang-x86_64-hdf5
mingw-w64-clang-x86_64-libzip
mingw-w64-clang-x86_64-zlib
mingw-w64-clang-x86_64-libaec
mingw-w64-clang-x86_64-python-pip-tools
- name: Fix windows python version for python3.10
if: matrix.platform == 'windows-latest' && matrix.python-version == '3.10'
shell: msys2 {0}
run: |
echo "Preparing files for installation"
pacman -Sy --noconfirm mingw-w64-clang-x86_64-python-pip
echo "Downloading old archives"
curl -LO https://repo.msys2.org/mingw/clang64/mingw-w64-clang-x86_64-python3.10-3.10.5-1-any.pkg.tar.zst
curl -LO https://repo.msys2.org/mingw/clang64/mingw-w64-clang-x86_64-python-pip-23.1.2-1-any.pkg.tar.zst
echo "Installing Python 3.10"
pacman -U --noconfirm mingw-w64-clang-x86_64-python3.10-3.10.5-1-any.pkg.tar.zst && pacman -Ql mingw-w64-clang-x86_64-python3.10 | grep bin/python
echo "Installing Corresponding Pip"
pacman -U --noconfirm mingw-w64-clang-x86_64-python-pip-23.1.2-1-any.pkg.tar.zst && pacman -Ql mingw-w64-clang-x86_64-python-pip | grep bin/pip
echo "Attempting to create python symlink"
ln -sf /clang64/bin/python3.10.exe /clang64/bin/python3
/clang64/bin/python3 --version
- name: Fix windows python version for python3.11
if: matrix.platform == 'windows-latest' && matrix.python-version == '3.11'
shell: msys2 {0}
run: |
echo "Preparing files for installation"
pacman -Sy --noconfirm mingw-w64-x86_64-python-pip
echo "Downloading old archives"
curl -LO https://repo.msys2.org/mingw/clang64/mingw-w64-clang-x86_64-python3.11-3.11.4-1-any.pkg.tar.zst
curl -LO https://repo.msys2.org/mingw/clang64/mingw-w64-clang-x86_64-python-pip-23.3.2-1-any.pkg.tar.zst
echo "Installing Python 3.11"
pacman -U --noconfirm mingw-w64-clang-x86_64-python3.11-3.11.4-1-any.pkg.tar.zst && pacman -Ql mingw-w64-clang-x86_64-python3.11 | grep bin/python
echo "Installing Corresponding Pip"
pacman -U --noconfirm mingw-w64-clang-x86_64-python-pip-23.3.2-1-any.pkg.tar.zst && pacman -Ql mingw-w64-clang-x86_64-python-pip | grep bin/pip
echo "Attempting to create python symlink..."
ln -sf /clang64/bin/python3.11.exe /clang64/bin/python3
/clang64/bin/python3 --version
- name: Fix windows python version for python3.12
if: matrix.platform == 'windows-latest' && matrix.python-version == '3.12'
shell: msys2 {0}
run: |
echo "Preparing files for installation"
pacman -Sy --noconfirm mingw-w64-x86_64-python-pip
echo "Downloading old archives"
curl -LO https://repo.msys2.org/mingw/clang64/mingw-w64-clang-x86_64-python3.12-3.12.7-1-any.pkg.tar.zst
curl -LO https://repo.msys2.org/mingw/clang64/mingw-w64-clang-x86_64-python-pip-25.0.1-1-any.pkg.tar.zst
echo "Installing Python 3.12"
pacman -U --noconfirm mingw-w64-clang-x86_64-python3.12-3.12.7-1-any.pkg.tar.zst && pacman -Ql mingw-w64-clang-x86_64-python3.12 | grep bin/python
echo "Installing Corresponding Pip"
pacman -U --noconfirm mingw-w64-clang-x86_64-python-pip-25.0.1-1-any.pkg.tar.zst && pacman -Ql mingw-w64-clang-x86_64-python-pip | grep bin/pip
echo "Attempting to create python symlink"
ln -sf /clang64/bin/python3.12.exe /clang64/bin/python3
/clang64/bin/python3 --version
- uses: actions/setup-python@v5
if: matrix.platform != 'windows-latest'
with:
python-version: "${{ matrix.python-version }}"
- name: Build and install macos-13
run: |
export MACOSX_DEPLOYMENT_TARGET=13.0
PATH="/usr/local/opt/llvm/bin:$PATH"
pip wheel . -w dist
ls -al dist
pip install delocate
delocate-listdeps dist/*.whl
delocate-wheel -v dist/*.whl
pip install dist/*.whl
if: matrix.platform == 'macos-13'
- name: Build and install macos-14
run: |
PATH="/opt/homebrew/opt/llvm/bin:$PATH"
pip wheel . -w dist
ls -al dist
pip install delocate
delocate-listdeps dist/*.whl
delocate-wheel -v dist/*.whl
pip install dist/*.whl
if: matrix.platform == 'macos-14'
- name: Build and install windows-latest
shell: msys2 {0}
run: |
which python3
python3 --version
python3 -m pip wheel --verbose -Ccmake.define.CMAKE_C_COMPILER="clang.exe" -Ccmake.define.CMAKE_CXX_COMPILER="clang++.exe" . -w dist
python3 -m pip install delvewheel
for wheel_file in dist/*.whl; do
echo "not inspecting $wheel_file"
echo "delvewheel needed -v $wheel_file"
echo "not repairing $wheel_file"
echo "delvewheel repair -v $wheel_file"
done
python3 -m pip install dist/*.whl
if: matrix.platform == 'windows-latest'
- name: Build and install manylinux for python 3.9
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux_2_34_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel libzip-devel bzip2-devel ninja-build openssl-devel xz-devel && \
/opt/python/cp39-cp39/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair --disable-isa-ext-check /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.9'
- name: Build and install manylinux for python 3.10
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux_2_34_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel libzip-devel bzip2-devel ninja-build openssl-devel xz-devel && \
/opt/python/cp310-cp310/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair --disable-isa-ext-check /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.10'
- name: Build and install manylinux for python 3.11
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux_2_34_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel libzip-devel bzip2-devel ninja-build openssl-devel xz-devel && \
/opt/python/cp311-cp311/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair --disable-isa-ext-check /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.11'
- name: Build and install manylinux for python 3.12
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux_2_34_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel libzip-devel bzip2-devel ninja-build openssl-devel xz-devel && \
/opt/python/cp312-cp312/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair --disable-isa-ext-check /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.12'
- name: Test not windows
run: |
pip install pytest
pytest
if: matrix.platform != 'windows-latest'
- name: Test on windows
shell: msys2 {0}
run: |
which python3
python3 --version
python3 -m pip install pytest
python3 -m pytest
if: matrix.platform == 'windows-latest'
- name: set wheel_file and artifact_name environment vars (non-windows)
if: matrix.platform != 'windows-latest'
run: |
for wheel_file in dist/*.whl; do
echo "Uploading $wheel_file"
echo "wheel_file=$wheel_file" >> $GITHUB_ENV
echo "artifact_name=$(basename $wheel_file)" >> $GITHUB_ENV
done
- name: set wheel_file and artifact_name environment vars (windows)
if: matrix.platform == 'windows-latest'
shell: pwsh
run: |
foreach ($wheel_file in Get-ChildItem -Path dist -Filter *.whl) {
Write-Output "Uploading $wheel_file"
echo "wheel_file=$wheel_file" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
echo "artifact_name=$(Split-Path $wheel_file -Leaf)" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
}
- name: Upload wheel file
uses: actions/upload-artifact@v4
with:
name: ${{ env.artifact_name }}
path: ${{ env.wheel_file }}
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
if: ${{ failure() }}
with:
limit-access-to-actor: true
publish-to-pypi:
name: Publish to PyPI
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'published'
environment: pypi
permissions:
id-token: write
steps:
- name: download all artifacts (wheels and executables)
uses: actions/download-artifact@v4
with:
path: dist_temp/
- name: Install Python
uses: actions/setup-python@v2
with:
python-version: '3.12'
- name: Publish wheels to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: |
pip install twine
mkdir dist
echo "current directory is $(pwd)"
ls -al dist*
echo "absolute paths of wheels:"
find dist_temp -type f -name '*.whl' -exec sh -c 'echo "$(realpath {})"/' \;
echo "moving wheels to dist directory"
find dist_temp -type f -name '*.whl' -exec sh -c 'mv "$(realpath {})" dist/' \;
twine upload --repository pypi dist/*.whl
- name: Setup tmate session for PyPI upload failure
uses: mxschmitt/action-tmate@v3
if: ${{ failure() }}
with:
limit-access-to-actor: true