Skip to content

Make MAPPED_SCYLLA_VERSION a soft requirement #980

Make MAPPED_SCYLLA_VERSION a soft requirement

Make MAPPED_SCYLLA_VERSION a soft requirement #980

Workflow file for this run

name: Build and upload to PyPi
on: [push, pull_request]
env:
CIBW_TEST_COMMAND_LINUX: "pytest --import-mode append {project}/tests/unit -k 'not (test_connection_initialization or test_cloud)' && EVENT_LOOP_MANAGER=gevent pytest --import-mode append {project}/tests/unit/io/test_geventreactor.py"
CIBW_TEST_COMMAND_MACOS: "pytest --import-mode append {project}/tests/unit -k 'not (test_multi_timer_validation or test_empty_connections or test_connection_initialization or test_timer_cancellation or test_cloud)' "
CIBW_TEST_COMMAND_WINDOWS: "pytest --import-mode append {project}/tests/unit -k \"not (test_deserialize_date_range_year or test_datetype or test_libevreactor or test_connection_initialization or test_cloud)\" "
CIBW_BEFORE_TEST: "pip install -r {project}/test-requirements.txt"
CIBW_BEFORE_BUILD_LINUX: "rm -rf ~/.pyxbld && rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux && yum install -y libffi-devel libev libev-devel openssl openssl-devel"
CIBW_ENVIRONMENT: "CASS_DRIVER_BUILD_CONCURRENCY=2 CFLAGS='-g0 -O3'"
CIBW_SKIP: cp35* cp36* cp37* pp*i686 *musllinux*
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
CIBW_MANYLINUX_PYPY_X86_64_IMAGE: manylinux_2_28
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28
CIBW_MANYLINUX_PYPY_AARCH64_IMAGE: manylinux_2_28
jobs:
build_wheels:
name: Build wheels ${{ matrix.os }} (${{ matrix.platform }})
if: "(!contains(github.event.pull_request.labels.*.name, 'disable-test-build')) || github.event_name == 'push' && endsWith(github.event.ref, 'scylla')"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: x86_64
- os: ubuntu-latest
platform: PyPy
- os: windows-latest
platform: win64
- os: windows-latest
platform: PyPy
- os: macos-latest
platform: all
- os: macos-latest
platform: PyPy
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
name: Install Python
- name: Enable pip installing globally
if: runner.os == 'MacOs' || runner.os == 'Windows'
run: |
echo "PIP_BREAK_SYSTEM_PACKAGES=1" >> $GITHUB_ENV
- name: Install cibuildwheel
run: |
python3 -m pip install cibuildwheel==2.16.2
- name: Install OpenSSL for Windows
if: runner.os == 'Windows'
run: |
choco install openssl --version=3.3.1 -f -y
- name: Install Conan
if: runner.os == 'Windows'
uses: turtlebrowser/get-conan@main
- name: configure libev for Windows
if: runner.os == 'Windows'
run: |
conan profile detect
conan install conanfile.py
- name: Install OpenSSL for MacOS
if: runner.os == 'MacOs'
run: |
brew install libev
- name: Overwrite for Linux 64
if: runner.os == 'Linux' && matrix.platform == 'x86_64'
run: |
echo "CIBW_BUILD=cp3*_x86_64" >> $GITHUB_ENV
- name: Overwrite for Linux PyPy
if: runner.os == 'Linux' && matrix.platform == 'PyPy'
run: |
echo "CIBW_BUILD=pp*" >> $GITHUB_ENV
echo "CIBW_TEST_COMMAND_LINUX=" >> $GITHUB_ENV
- name: Overwrite for Windows 64
if: runner.os == 'Windows' && matrix.platform == 'win64'
run: |
echo "CIBW_BUILD=cp*win_amd64" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append
- name: Overwrite for Windows PyPY
if: runner.os == 'Windows' && matrix.platform == 'PyPy'
run: |
echo "CIBW_BUILD=pp*" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append
echo "CIBW_TEST_COMMAND_WINDOWS=" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append
- name: Overwrite for MacOs
if: runner.os == 'MacOs' && matrix.platform == 'all'
run: |
echo "CIBW_BUILD=cp37* cp38*" >> $GITHUB_ENV
echo "CIBW_BEFORE_TEST_MACOS=pip install -r {project}/test-requirements.txt pytest" >> $GITHUB_ENV
- name: Overwrite for MacOs PyPy
if: runner.os == 'MacOs' && matrix.platform == 'PyPy'
run: |
echo "CIBW_BUILD=pp*" >> $GITHUB_ENV
echo "CIBW_BEFORE_TEST_MACOS=pip install -r {project}/test-requirements.txt pytest" >> $GITHUB_ENV
echo "CIBW_TEST_COMMAND_MACOS=" >> $GITHUB_ENV
- name: Build wheels
run: |
python3 -m cibuildwheel --output-dir wheelhouse
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}-${{ matrix.platform }}
path: ./wheelhouse/*.whl
build_sdist:
name: Build source distribution
if: "(!contains(github.event.pull_request.labels.*.name, 'disable-test-build'))|| github.event_name == 'push' && endsWith(github.event.ref, 'scylla')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
name: Install Python
- name: Build sdist
run: |
pip install build
python -m build --sdist
- uses: actions/upload-artifact@v4
with:
name: source-dist
path: dist/*.tar.gz
build_wheels_extra_arch:
if: "(!contains(github.event.pull_request.labels.*.name, 'disable-test-build'))|| github.event_name == 'push' && endsWith(github.event.ref, 'scylla')"
# The host should always be linux
runs-on: ubuntu-latest
name: Build extra arch ${{ matrix.archs }} wheels
strategy:
fail-fast: false
matrix:
archs: [ aarch64,] # ppc64le ]
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v3
with:
platforms: all
if: runner.os == 'Linux'
- uses: actions/setup-python@v5
name: Install Python
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.16.2
- name: Build wheels
env:
CIBW_BUILD: "cp39* cp310* cp311* cp312*" # limit to specific version since it take much more time than jobs limit
run: |
python -m cibuildwheel --archs ${{ matrix.archs }} --output-dir wheelhouse
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.archs }}
path: ./wheelhouse/*.whl
upload_pypi:
needs: [build_wheels, build_wheels_extra_arch, build_sdist]
runs-on: ubuntu-latest
permissions:
id-token: write
# upload to PyPI on every tag starting with 'v'
if: github.event_name == 'push' && endsWith(github.event.ref, 'scylla')
# alternatively, to publish when a GitHub Release is created, use the following rule:
# if: github.event_name == 'release' && github.event.action == 'published'
steps:
- uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- uses: pypa/gh-action-pypi-publish@release/v1
with:
skip-existing: true