Skip to content

cpp: Use better hash map implementation in whole talipot codebase #750

cpp: Use better hash map implementation in whole talipot codebase

cpp: Use better hash map implementation in whole talipot codebase #750

name: macos-macports-wheels-build
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
macos:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- name: Talipot wheels build on macOS x86_64
os: macos-13
macosx_deployment_target: "12.0"
- name: Talipot wheels build on macOS arm64
os: macos-14
macosx_deployment_target: "14.0"
env:
CLANG_VERSION: 16
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.config.macosx_deployment_target }}
TWINE_REPOSITORY: https://test.pypi.org/legacy/
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}
steps:
- name: Checkout Talipot code
uses: actions/checkout@v4
- name: Get wheel next dev version
run: |
JSON=$(curl -s 'https://test.pypi.org/pypi/talipot/json')
LAST_VERSION=$(echo $JSON | python -c "
import sys, json
print(json.load(sys.stdin)['info']['version'])" 2>/dev/null)
if [ $? -ne 0 ]
then
DEV_VERSION=1
else
echo last wheel dev version = $LAST_VERSION
# check if dev wheel version needs to be incremented
VERSION_INCREMENT=$(echo $JSON | python -c "
import sys, json, platform
releases = json.load(sys.stdin)['releases']['$LAST_VERSION']
machine = platform.uname().machine
print(any(['macosx' in r['filename'] and machine in r['filename'] for r in releases]))")
DEV_VERSION=$(echo $LAST_VERSION | cut -f4 -d '.' | sed 's/dev//')
if [ "$VERSION_INCREMENT" == "True" ]
then
let DEV_VERSION+=1
fi
fi
echo current wheel dev version = $DEV_VERSION
echo "DEV_VERSION=$DEV_VERSION" >> $GITHUB_ENV
- name: Prepare ccache timestamp
id: get-current-date
run: |
echo "date=$(date -u "+%Y-%m-%d-%H-%m-%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Cache files
uses: actions/cache@v4
with:
path: |
/Users/runner/Library/Caches/ccache
/Users/runner/.macports-ci-ccache
key: macos-wheels-ccache-${{ steps.get-current-date.outputs.date }}
restore-keys: |
${{ matrix.config.os }}-ccache-
save-always: true
- name: Install MacPorts
run: |
curl -LO https://raw.githubusercontent.com/GiovanniBussi/macports-ci/master/macports-ci
source ./macports-ci install
- name: Install Talipot build dependencies
run: sudo port -N install
cmake
clang-${{ env.CLANG_VERSION }}
bison
zlib
zstd
libomp
qhull
yajl
libgit2
graphviz
- name: Install Python versions to build wheels against
run: |
os_ver=$(sw_vers -productVersion | cut -c1-2)
if [[ $os_ver -lt 13 ]]; then
curl -LO https://www.python.org/ftp/python/3.9.0/python-3.9.0-macosx10.9.pkg
sudo installer -pkg python-3.9.0-macosx10.9.pkg -target /
sudo /Library/Frameworks/Python.framework/Versions/3.9/bin/pip3 install wheel
fi
curl -LO https://www.python.org/ftp/python/3.10.10/python-3.10.10-macos11.pkg
sudo installer -pkg python-3.10.10-macos11.pkg -target /
sudo /Library/Frameworks/Python.framework/Versions/3.10/bin/pip3 install wheel
curl -LO https://www.python.org/ftp/python/3.11.0/python-3.11.0-macos11.pkg
sudo installer -pkg python-3.11.0-macos11.pkg -target /
sudo /Library/Frameworks/Python.framework/Versions/3.11/bin/pip3 install wheel
curl -LO https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg
sudo installer -pkg python-3.12.7-macos11.pkg -target /
sudo /Library/Frameworks/Python.framework/Versions/3.12/bin/pip3 install wheel
curl -LO https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg
sudo installer -pkg python-3.13.0-macos11.pkg -target /
sudo /Library/Frameworks/Python.framework/Versions/3.13/bin/pip3 install wheel twine
- name: Create build directory
run: mkdir build
- name: Build Talipot Python wheels
working-directory: ./build
run: |
os_ver=$(sw_vers -productVersion | cut -c1-2)
if [[ $os_ver -lt 13 ]]; then
py3Versions="3.9 3.10 3.11 3.12 3.13"
else
py3Versions="3.10 3.11 3.12 3.13"
fi
for py3Version in $py3Versions
do
rm -f CMakeCache.txt || true
sudo /Library/Frameworks/Python.framework/Versions/$py3Version/bin/pip3 install sip
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$PWD/install \
-DCMAKE_C_COMPILER=/opt/local/bin/clang-mp-${{ env.CLANG_VERSION }} \
-DCMAKE_CXX_COMPILER=/opt/local/bin/clang++-mp-${{ env.CLANG_VERSION }} \
-DTALIPOT_ACTIVATE_PYTHON_WHEEL_TARGET=ON \
-DTALIPOT_PYTHON_TEST_WHEEL_SUFFIX=a3.dev${{ env.DEV_VERSION }}\
-DPython3_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/$py3Version/bin/python3 \
-DTALIPOT_USE_CCACHE=ON \
-DTALIPOT_BUILD_CORE_ONLY=ON \
-DTALIPOT_BUILD_DOC=OFF
make -j4 test-wheel
done
- name: Upload Talipot Python wheels on test PyPI
if: github.ref == 'refs/tags/dev-latest'
working-directory: ./build
run: make test-wheel-upload
- name: Test uploaded wheels in clean environment
if: github.ref == 'refs/tags/dev-latest'
run: |
os_ver=$(sw_vers -productVersion | cut -c1-2)
sudo port -N -f uninstall \
cmake \
clang-${CLANG_VERSION} \
qhull \
yajl \
libgit2 \
graphviz
sudo port -N install \
python39 \
py39-pip \
python310 \
py310-pip \
python311 \
py311-pip \
python312 \
py312-pip \
python313 \
py313-pip
if [[ $os_ver -lt 13 ]]; then
sudo pip-3.9 install --index-url https://test.pypi.org/simple/ talipot
python3.9 -c "from talipot import tlp; print(tlp.getLayoutAlgorithmPluginsList())"
python3.9 -c "from talipot import tlp; print(tlp.getImportPluginsList())"
fi
sudo pip-3.10 install --index-url https://test.pypi.org/simple/ talipot
python3.10 -c "from talipot import tlp; print(tlp.getLayoutAlgorithmPluginsList())"
python3.10 -c "from talipot import tlp; print(tlp.getImportPluginsList())"
sudo pip-3.11 install --index-url https://test.pypi.org/simple/ talipot
python3.11 -c "from talipot import tlp; print(tlp.getLayoutAlgorithmPluginsList())"
python3.11 -c "from talipot import tlp; print(tlp.getImportPluginsList())"
sudo pip-3.12 install --index-url https://test.pypi.org/simple/ talipot
python3.12 -c "from talipot import tlp; print(tlp.getLayoutAlgorithmPluginsList())"
python3.12 -c "from talipot import tlp; print(tlp.getImportPluginsList())"
sudo pip-3.13 install --index-url https://test.pypi.org/simple/ talipot
python3.13 -c "from talipot import tlp; print(tlp.getLayoutAlgorithmPluginsList())"
python3.13 -c "from talipot import tlp; print(tlp.getImportPluginsList())"