tmp #627
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: windows-wheels-build | |
on: [push, pull_request] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
windows: | |
name: Talipot Python ${{ matrix.python-version }} wheel build on windows | |
runs-on: windows-latest | |
env: | |
TWINE_REPOSITORY: https://test.pypi.org/legacy/ | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
defaults: | |
run: | |
shell: msys2 {0} | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] | |
steps: | |
- name: Checkout Talipot code | |
uses: actions/checkout@v4 | |
- name: Install mingw64 and Talipot build dependencies | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MINGW64 | |
update: true | |
install: git | |
base-devel | |
mingw-w64-x86_64-toolchain | |
mingw-w64-x86_64-cmake | |
mingw-w64-x86_64-ccache | |
mingw-w64-x86_64-yajl | |
mingw-w64-x86_64-zstd | |
mingw-w64-x86_64-qhull | |
mingw-w64-x86_64-graphviz | |
mingw-w64-x86_64-libgit2 | |
- name: Install Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
id: python-install | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install sip, twine and wheel Python packages | |
run: | | |
set PATH=%Python3_ROOT_DIR%\Scripts:%PATH% | |
pip install sip twine wheel | |
shell: cmd | |
- name: Get wheel next dev version | |
run: | | |
PYTHON_PATH=$(echo '${{ steps.python-install.outputs.python-path }}') | |
export PATH=$(cygpath -u "$(dirname $PYTHON_PATH)"):$PATH | |
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 | |
from wheel._bdist_wheel import get_abi_tag | |
releases = json.load(sys.stdin)['releases']['$LAST_VERSION'] | |
abi_tag = get_abi_tag() + '-' | |
print(any(['win_amd64' in r['filename'] and abi_tag 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 | |
- name: Get ccache directory | |
id: get-cccache-dir | |
run: | | |
ccache_dir=$(ccache -sv | grep "Cache directory" | awk '{print $3}') | |
echo "ccache-dir=$ccache_dir" >> $GITHUB_OUTPUT | |
- name: Cache files | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.get-cccache-dir.outputs.ccache-dir }} | |
key: | |
windows-wheel-${{ steps.python-install.outputs.python-version }}-build-ccache | |
-${{ steps.get-current-date.outputs.date }} | |
restore-keys: | | |
windows-wheel-${{ steps.python-install.outputs.python-version }}-build-ccache | |
save-always: true | |
- name: Create build directory | |
run: mkdir build | |
- name: Configure Talipot Python wheel build with CMake | |
working-directory: ./build | |
run: | | |
pyver="${{ steps.python-install.outputs.python-version }}" | |
rm -f /mingw64/lib/libpython$pyver.dll.a | |
cmake .. -G "MSYS Makefiles" \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_NEED_RESPONSE=ON \ | |
-DCMAKE_INSTALL_PREFIX=$PWD/install \ | |
-DTALIPOT_ACTIVATE_PYTHON_WHEEL_TARGET=ON \ | |
-DTALIPOT_PYTHON_TEST_WHEEL_SUFFIX=a3.dev${{ env.DEV_VERSION }} \ | |
-DPython3_EXECUTABLE=$(cygpath -u "${{ steps.python-install.outputs.python-path }}") \ | |
-DTALIPOT_USE_CCACHE=ON \ | |
-DTALIPOT_BUILD_CORE_ONLY=ON \ | |
-DTALIPOT_BUILD_DOC=OFF | |
- name: Talipot Python wheel build | |
working-directory: ./build | |
run: make -j4 test-wheel | |
- name: Test built wheel can be installed and imported | |
working-directory: ./build/library/talipot-python/bindings/talipot-core/talipot_module/dist | |
run: | | |
set PATH=%Python3_ROOT_DIR%\Scripts:%PATH% | |
for /f "tokens=*" %%g in ('dir /b *.whl') do (set wheel=%%g) | |
pip install %wheel% | |
python -c "from talipot import tlp; print(tlp.getLayoutAlgorithmPluginsList())" | |
shell: cmd | |
- name: Upload Talipot Python wheel on test PyPI | |
if: github.ref == 'refs/tags/dev-latest' | |
working-directory: ./build | |
run: make test-wheel-upload | |
- name: Test uploaded wheel in clean environment | |
if: github.ref == 'refs/tags/dev-latest' | |
run: | | |
set PATH=%Python3_ROOT_DIR%\Scripts:%PATH% | |
pip install --index-url https://test.pypi.org/simple/ talipot | |
python -c "from talipot import tlp; print(tlp.getLayoutAlgorithmPluginsList())" | |
shell: cmd |