From bdf846c01f939c67e2128863b566184ef5cfb00d Mon Sep 17 00:00:00 2001 From: mayeut Date: Sat, 15 May 2021 13:37:29 +0200 Subject: [PATCH 1/3] ci: use cibuildwheel Use GitHub Actions for all x86/x64 builds --- .circleci/config.yml | 145 ----------------- .github/workflows/build.yml | 151 ++++++++++++++++++ .travis.yml | 92 +++-------- appveyor.yml | 66 -------- scikit-ci.yml | 111 ------------- scripts/manylinux-build-wheels.sh | 73 --------- scripts/manylinux2014-build-and-test-wheel.sh | 30 ---- scripts/ssl-check.py | 32 ---- 8 files changed, 169 insertions(+), 531 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/build.yml delete mode 100644 appveyor.yml delete mode 100644 scikit-ci.yml delete mode 100755 scripts/manylinux-build-wheels.sh delete mode 100755 scripts/manylinux2014-build-and-test-wheel.sh delete mode 100644 scripts/ssl-check.py diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 96a70ab4..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,145 +0,0 @@ -version: 2 - -references: - - ci_steps: &ci_steps - working_directory: /work - steps: - - checkout - - run: - name: Run CI - command: | - # - # Set UPLOAD_SDIST environment variable - # - export UPLOAD_SDIST=$(echo ${CIRCLE_JOB} | cut -d"_" -f3) - echo "UPLOAD_SDIST [${UPLOAD_SDIST}]" - # - # Run CI - # - export MANYLINUX_PYTHON=$(echo ${CIRCLE_JOB} | cut -d"_" -f2) - echo "MANYLINUX_PYTHON [${MANYLINUX_PYTHON}]" - /opt/python/${MANYLINUX_PYTHON}/bin/pip install scikit-ci - /opt/python/${MANYLINUX_PYTHON}/bin/ci - if [ "${UPLOAD_SDIST}" == "tests-only" ]; then - rm -f ./dist/* - fi - no_output_timeout: 20m # may die at 10 minutes - - persist_to_workspace: - root: ./ - paths: - - dist - - x64_build_job: &x64_build_job - docker: - - image: quay.io/pypa/manylinux1_x86_64:2021-05-29-46e3cf1 - <<: *ci_steps - - x86_build_job: &x86_build_job - docker: - - image: quay.io/pypa/manylinux1_i686:2021-05-29-46e3cf1 - <<: *ci_steps - - no_filters: &no_filters - filters: - tags: - only: /.*/ - -jobs: - - # x64 - manylinux-x64_cp37-cp37m_upload-sdist: - <<: *x64_build_job - - # x86 - manylinux-x86_cp37-cp37m: - <<: *x86_build_job - - # python 2.7 tests - manylinux-x64_cp27-cp27mu_tests-only: - <<: *x64_build_job - - check-dist: - docker: - - image: cimg/python:3.9.5 - steps: - - attach_workspace: - at: ./ - - run: - name: Check dist - command: | - echo "Check dist" - ls dist - python -m venv ../venv - . ../venv/bin/activate - pip install twine - twine check --strict dist/* - - deploy-master: - docker: - - image: cimg/python:3.9.5 - steps: - - attach_workspace: - at: ./ - - run: - name: Deploy master - command: | - echo "Deploy master (not implemented)" - - deploy-release: - docker: - - image: cimg/python:3.9.5 - steps: - - attach_workspace: - at: ./ - - run: - name: Deploy release - command: | - echo "Deploy release" - python -m venv ../venv - . ../venv/bin/activate - pip install twine - ls dist - twine upload -u $PYPI_USER -p $PYPI_PASSWORD --skip-existing dist/* - -workflows: - version: 2 - build-test-deploy: - jobs: - # x64 - - manylinux-x64_cp37-cp37m_upload-sdist: - <<: *no_filters - # x86 - - manylinux-x86_cp37-cp37m: - <<: *no_filters - - # python 2.7 tests - - manylinux-x64_cp27-cp27mu_tests-only: - <<: *no_filters - - - check-dist: - requires: - # x64 - - manylinux-x64_cp37-cp37m_upload-sdist - # x86 - - manylinux-x86_cp37-cp37m - # python 2.7 test - - manylinux-x64_cp27-cp27mu_tests-only - filters: - tags: - only: /.*/ - - - deploy-master: - requires: - - check-dist - filters: - branches: - only: master - - deploy-release: - requires: - - check-dist - filters: - tags: - only: /^[0-9]+(\.[0-9]+)*(\.post[0-9]+)?$/ - branches: - ignore: /.*/ diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..19a50e69 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,151 @@ +name: Build and upload to PyPI + +on: + push: + pull_request: + +jobs: + flake8: + name: flake8 + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - run: pipx run flake8 + + build_wheels: + name: Build ${{ matrix.build }} wheels on ${{ matrix.os }} + needs: [flake8] + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + build: "cp39-*x86_64*" + - os: ubuntu-20.04 + build: "cp39-*i686*" + - os: windows-2019 + build: "cp39-*win_amd64*" + - os: windows-2019 + build: "cp39-*win32*" + - os: macos-10.15 + build: "cp39-*x86_64*" + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 # required for versioneer to find tags + + - name: Build wheels + uses: pypa/cibuildwheel@v1.11.0 + env: + CIBW_BEFORE_ALL: "pipx install cmake && pipx install ninja" + CIBW_BEFORE_ALL_LINUX: "pipx install cmake && pipx install ninja && ./scripts/manylinux-build-and-install-openssl.sh" + CIBW_BUILD: "${{ matrix.build }}" + CIBW_ENVIRONMENT_MACOS: "MACOSX_DEPLOYMENT_TARGET=10.10" + CIBW_ENVIRONMENT_LINUX: "SKBUILD_CONFIGURE_OPTIONS='-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl -DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link -DCMAKE_JOB_POOLS:STRING=compile=2;link=1'" + CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux1_x86_64:2021-05-16-740a2ec + CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux1_i686:2021-05-16-740a2ec + CIBW_BEFORE_BUILD: "python -m pip install -r requirements-repair.txt" + CIBW_REPAIR_WHEEL_COMMAND: "python scripts/repair_wheel.py -w {dest_dir} {wheel}" + CIBW_TEST_REQUIRES: "-r requirements-test.txt" + CIBW_TEST_COMMAND: "pytest {project}/tests" + + - uses: actions/upload-artifact@v2 + with: + path: ./wheelhouse/*.whl + + build_sdist: + name: Build source distribution + needs: [flake8] + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 # required for versioneer to find tags + + - name: Build SDist + run: pipx run build --sdist + + - uses: actions/upload-artifact@v2 + with: + path: dist/*.tar.gz + + test_sdist: + name: Test SDist with python ${{ matrix.python }} + needs: [build_sdist] + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + python: ["2.7", "3.6", "3.10-dev"] + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + name: Install Python ${{ matrix.python }} + with: + python-version: ${{ matrix.python }} + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends libssl-dev + pip install -r requirements-dev.txt + + - uses: actions/download-artifact@v2 + with: + name: artifact + path: dist + + - name: Install SDist + env: + SKBUILD_CONFIGURE_OPTIONS: "-DBUILD_CMAKE_FROM_SOURCE:BOOL=OFF" + run: | + pip install dist/*.tar.gz + rm dist/*.tar.gz + + - name: Test installed SDist + run: pytest ./tests + + check_dist: + name: Check dist + needs: [build_wheels, build_sdist, test_sdist] + runs-on: ubuntu-20.04 + steps: + - uses: actions/download-artifact@v2 + with: + name: artifact + path: dist + + - run: | + pipx install twine + twine check --strict dist/* + + upload_pypi: + name: Upload to (Test) PyPI + needs: [build_wheels, build_sdist, test_sdist, check_dist] + runs-on: ubuntu-latest + if: github.event_name == 'push' && github.repository == 'scikit-build/cmake-python-distributions' + steps: + - uses: actions/download-artifact@v2 + with: + name: artifact + path: dist + + - name: Upload to Test PyPI + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + with: + user: __token__ + password: ${{ secrets.PYPI_TEST_PASSWORD }} + skip_existing: true + repository_url: https://test.pypi.org/legacy/ + + - name: Upload to PyPI + # upload to PyPI on every tag + if: startsWith(github.ref, 'refs/tags/') + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + with: + user: __token__ + password: ${{ secrets.PYPI_RELEASE_PASSWORD }} + skip_existing: true diff --git a/.travis.yml b/.travis.yml index 986b9b7b..abec5ea4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,89 +8,40 @@ dist: focal language: python python: "3.8" +env: + global: + # PYPI_USER + - secure: "Xejg5qGnAyo3G+/TaaAr1uHzDv9GLo3mxi6Aw/hZc9gF9lYix1TvkfE6GEBKdPgSLJSqF9NJrwKTt37XH1DjSRLG+qw6Bt1goi5Bkugdk+SC5qmMkvAoG0EKyD119WS4ObrpzqAFcOQqG+4F6iDkSuJLA+dzA3yAzTME4pkhr/2dn0krOSqIcTlgifPwhEaMgo//WRT2dEBM5dWoehXsEMD7VMOUyC0DlV15lKTPKSzTrDEUPU7UFnXgIqZM/brEPbWPQr5Jzgu7BeBk6bmPiiYeh28Cq2juzOzA+JWcGgJmXOfsImYwYuAWZrf0pkE0uQjLySvIBKT7phJv05eNqIxmv/wHK1BPcyMV+2IgFR4+f5ty6C4VUV0hT0HvHr3pMa/8A/5wSNCShEAMTHrwPM5VPWFJtUKTtS5+wwNQDI39MLk/vr9ZTo+y3WJHPaRR0nRpbA3nXFHSqoJJunoMyeI8x9cXZvJ9IENMxGuo3CfBT5RGZamfqSTgn6NjL51ArIMKpvUfm3tXTtlvCHenED1ZQeJI1nWZEalxl8pTyAZoA8S1+h8wraZrUPzhM0QuVpw7vZQeOYu2VSdHO46yxUWoQyb+JWrDTN7EC8vOl7QQzIQlqOWJB5uDJD7UlKKtneTHJrdfXvGxS/hf+Y+hFZK7r+/PDPS6aQjSNDyy+js=" + # PYPI_PASSWORD + - secure: "iEHYaOC/yivDupsbRzohWYCwFMZbCfT2hYOM96akQtOfd1d37rqFCFjDKr3BNyvHyHzj+uNQ7IblynWAqu3cax2Z8b9YuIFXFAslD76IIgeIhxmi8jPtamMK0NBXam/LEL49EIVXUnwVZrWjnLcJxVaBHGS/9Ft3zWP5Gspa4G1yAJDhNfs+jrFipxO4DOBie9mGI2jFdbFRgcCYoY6Jo4y95zxUG1YF5e+8sUobLoBgVqyaJP4SP/Zu/4CEWMfJev8EjLBzzkoPwOU+hC09qwf2FQCvBXFrudpjPpY23WDFeKf+LcMoW9tIoUmP6UJcQibqHeidimrbo9jST0+wTo1NYjrvriKrlMho/QS4iYkd5N6DGUrhSXEMSiqfdMjVGDZ00wvCsT3DwqE9eG7K+Kw09enchjcZcggZIt9crqZPJg3GMdSwPYTlRpf2OQmE4OHL3pN5dSH5Es/sb0X1G6JQgB/2Ia9Aks2ywYEdzUZhbMqfLVx75bVS4bLfYMAMhE/j7NxpYaUlVkFhz3srLhnrYyAcvCQ6XF4cSeFfxD1ie62/qFIF/QH5u76t91uURHygvNdyJCNHhVJnnWgN9kPsJxfyfdOC2Dnrz/jJcw5irsgQVO2/K4iyGyBVoOqwwpymjoCkxB8capEoLRNLcwyQqCTBnMtGykyRYF2I7FA=" + - CIBW_BEFORE_ALL="./scripts/manylinux-build-and-install-openssl.sh" + - CIBW_BUILD="cp39-*" + - CIBW_BUILD_VERBOSITY="1" + - CIBW_ENVIRONMENT_LINUX="SKBUILD_CONFIGURE_OPTIONS='-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl -DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link -DCMAKE_JOB_POOLS:STRING=compile=2;link=1'" + - CIBW_BEFORE_BUILD="python -m pip install -r requirements-repair.txt" + - CIBW_REPAIR_WHEEL_COMMAND="python scripts/repair_wheel.py -w {dest_dir} {wheel}" + - CIBW_TEST_REQUIRES="-r requirements-test.txt" + - CIBW_TEST_COMMAND="pytest {project}/tests" + matrix: include: - - - os: osx - language: generic - env: - - PYTHON_VERSION=3.7.9 - - MACOSX_DEPLOYMENT_TARGET=10.10 - - arch: arm64-graviton2 virt: vm group: edge - - arch: ppc64le - - arch: s390x - - -cache: - directories: - # scikit-ci-addons - - $HOME/downloads - -before_install: - - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - # Install official python distribution - curl -fsSLo /tmp/Python.pkg "https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-macosx10.9.pkg" - sudo installer -pkg /tmp/Python.pkg -target / - PYTHON_VERSION2=${PYTHON_VERSION%.*} - PYTHON_VERSION1=${PYTHON_VERSION2%.*} - python_executable=/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION2}/bin/python${PYTHON_VERSION1} - - # Install SSL certificates - curl -fsSLo /tmp/install_certifi.py https://github.com/joerick/cibuildwheel/raw/v1.10.0/cibuildwheel/resources/install_certifi.py - sudo ${python_executable} /tmp/install_certifi.py - ${python_executable} scripts/ssl-check.py - - # Install packages - ${python_executable} -m pip install --disable-pip-version-check --upgrade pip - ${python_executable} -m pip install virtualenv - - # Create and activate virtual environment - ${python_executable} -m virtualenv ${HOME}/.pyenv/versions/${PYTHON_VERSION} - source ${HOME}/.pyenv/versions/${PYTHON_VERSION}/bin/activate - fi - - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - pip install -U scikit-ci scikit-ci-addons - ci_addons --install ../addons - elif [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - docker run -t --rm \ - -v $(pwd):/io \ - --env TRAVIS=True \ - --env TRAVIS_OS_NAME="${TRAVIS_OS_NAME}" \ - quay.io/pypa/manylinux2014_$(uname -m) \ - /io/scripts/manylinux2014-build-and-test-wheel.sh - fi - install: - - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - ci install - fi - python -m pip install -r requirements-deploy.txt + - python -m pip install cibuildwheel==1.11.0 + - python -m pip install -r requirements-deploy.txt script: - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - ci test - fi - pwd + cibuildwheel --output-dir dist ls dist twine --version twine check --strict dist/* -after_success: - - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - ci after_test - fi - deploy: # deploy-release - provider: script @@ -106,10 +57,3 @@ deploy: on: repo: ${TRAVIS_REPO_SLUG} branch: master - -env: - global: - # PYPI_USER - - secure: "Xejg5qGnAyo3G+/TaaAr1uHzDv9GLo3mxi6Aw/hZc9gF9lYix1TvkfE6GEBKdPgSLJSqF9NJrwKTt37XH1DjSRLG+qw6Bt1goi5Bkugdk+SC5qmMkvAoG0EKyD119WS4ObrpzqAFcOQqG+4F6iDkSuJLA+dzA3yAzTME4pkhr/2dn0krOSqIcTlgifPwhEaMgo//WRT2dEBM5dWoehXsEMD7VMOUyC0DlV15lKTPKSzTrDEUPU7UFnXgIqZM/brEPbWPQr5Jzgu7BeBk6bmPiiYeh28Cq2juzOzA+JWcGgJmXOfsImYwYuAWZrf0pkE0uQjLySvIBKT7phJv05eNqIxmv/wHK1BPcyMV+2IgFR4+f5ty6C4VUV0hT0HvHr3pMa/8A/5wSNCShEAMTHrwPM5VPWFJtUKTtS5+wwNQDI39MLk/vr9ZTo+y3WJHPaRR0nRpbA3nXFHSqoJJunoMyeI8x9cXZvJ9IENMxGuo3CfBT5RGZamfqSTgn6NjL51ArIMKpvUfm3tXTtlvCHenED1ZQeJI1nWZEalxl8pTyAZoA8S1+h8wraZrUPzhM0QuVpw7vZQeOYu2VSdHO46yxUWoQyb+JWrDTN7EC8vOl7QQzIQlqOWJB5uDJD7UlKKtneTHJrdfXvGxS/hf+Y+hFZK7r+/PDPS6aQjSNDyy+js=" - # PYPI_PASSWORD - - secure: "iEHYaOC/yivDupsbRzohWYCwFMZbCfT2hYOM96akQtOfd1d37rqFCFjDKr3BNyvHyHzj+uNQ7IblynWAqu3cax2Z8b9YuIFXFAslD76IIgeIhxmi8jPtamMK0NBXam/LEL49EIVXUnwVZrWjnLcJxVaBHGS/9Ft3zWP5Gspa4G1yAJDhNfs+jrFipxO4DOBie9mGI2jFdbFRgcCYoY6Jo4y95zxUG1YF5e+8sUobLoBgVqyaJP4SP/Zu/4CEWMfJev8EjLBzzkoPwOU+hC09qwf2FQCvBXFrudpjPpY23WDFeKf+LcMoW9tIoUmP6UJcQibqHeidimrbo9jST0+wTo1NYjrvriKrlMho/QS4iYkd5N6DGUrhSXEMSiqfdMjVGDZ00wvCsT3DwqE9eG7K+Kw09enchjcZcggZIt9crqZPJg3GMdSwPYTlRpf2OQmE4OHL3pN5dSH5Es/sb0X1G6JQgB/2Ia9Aks2ywYEdzUZhbMqfLVx75bVS4bLfYMAMhE/j7NxpYaUlVkFhz3srLhnrYyAcvCQ6XF4cSeFfxD1ie62/qFIF/QH5u76t91uURHygvNdyJCNHhVJnnWgN9kPsJxfyfdOC2Dnrz/jJcw5irsgQVO2/K4iyGyBVoOqwwpymjoCkxB8capEoLRNLcwyQqCTBnMtGykyRYF2I7FA=" diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 9f807170..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,66 +0,0 @@ -branches: - only: - - master - - /^[0-9]+(\.[0-9]+)*(\.post[0-9]+)?$/ - -version: "0.0.1.{build}" - -environment: - matrix: - - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - PYTHON_DIR: "C:\\Python37" - PYTHON_VERSION: "3.7.x" - PYTHON_ARCH: "32" - BLOCK: "0" - - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - PYTHON_DIR: "C:\\Python37-x64" - PYTHON_VERSION: "3.7.x" - PYTHON_ARCH: "64" - BLOCK: "0" - - PYPI_USER: - secure: j/nubIi1eucjCtYuwpykWg== - PYPI_PASSWORD: - secure: qDoPKmtLMdcKUKRHuTlfaajjzO4Q4yu25FM5JuB7z84= - -init: - - "%PYTHON_DIR%\\python.exe -m pip install -U scikit-ci scikit-ci-addons" - - "%PYTHON_DIR%\\python.exe -m ci_addons --install ../addons" - - - ps: ../addons/appveyor/rolling-build.ps1 - -install: - - "%PYTHON_DIR%\\python.exe -m ci install" - - "%PYTHON_DIR%\\python.exe -m pip install -r requirements-deploy.txt" - -build_script: - - "%PYTHON_DIR%\\python.exe -m ci build" - -test_script: - - "%PYTHON_DIR%\\python.exe -m ci test" - - ps: | - $env:PATH="$env:PYTHON_DIR/Scripts/;$env:PATH" - twine check --strict dist/* - -after_test: - - "%PYTHON_DIR%\\python.exe -m ci after_test" - -on_finish: - - ps: ../addons/appveyor/enable-worker-remote-access.ps1 -check_for_block - -deploy_script: - - ps: | - $env:PATH="$env:PYTHON_DIR/Scripts/;$env:PATH" - if ($env:appveyor_repo_tag -eq $true -and $env:appveyor_repo_tag_name –match "^[0-9]+(\.[0-9]+)*(\.post[0-9]+)?$") { - Write-Host "deploy release" - twine upload -u $env:PYPI_USER -p $env:PYPI_PASSWORD --skip-existing dist/* - } elseif ($env:appveyor_repo_branch -eq "master") { - Write-Host "deploy master (not implemented)" - } else { - Write-Host "nothing to deploy" - } - -matrix: - fast_finish: false diff --git a/scikit-ci.yml b/scikit-ci.yml deleted file mode 100644 index 421fa5ba..00000000 --- a/scikit-ci.yml +++ /dev/null @@ -1,111 +0,0 @@ -schema_version: "0.5.0" - -before_install: - - appveyor: - environment: - PATH: $;$\\Scripts;$ - commands: - - python ../addons/appveyor/patch_vs2008.py - - circle: - environment: - PATH: /opt/python/$/bin:$ - SETUP_CMAKE_ARGS: -DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link '-DCMAKE_JOB_POOLS:STRING=compile=4;link=3' - commands: - - python: | - import ci, os - arch = os.environ["AUDITWHEEL_PLAT"].split("_", 1)[1] - # ENTRYPOINT - if arch == "i686": - os.environ["ENTRYPOINT"] = "linux32" - else: - os.environ["ENTRYPOINT"] = "exec" - # SETUP_CMAKE_ARGS - os.environ["SETUP_CMAKE_ARGS"] = "-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl " + os.environ["SETUP_CMAKE_ARGS"] - ci.driver.Driver.save_env(os.environ) - - travis: - osx: - environment: - PATH: $/.pyenv/versions/$/bin:$ - SETUP_BDIST_WHEEL_ARGS: --plat-name macosx-$-x86_64 - commands: - - python scripts/ssl-check.py - - python ../addons/travis/install_cmake.py 3.12.0 - linux: - commands: - - python: | - import os - import ci - import platform - setup_cmake_args = [] - setup_cmake_args.append("-DSTRIP_EXECUTABLE:FILEPATH=/opt/rh/devtoolset-9/root/usr/" + "/bin/strip") - if platform.machine() in {"aarch64", "ppc64le", "s390x"}: - # Remove this after addressing https://github.com/dockcross/dockcross/issues/431 - setup_cmake_args.append("-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl") - os.environ["SETUP_CMAKE_ARGS"] = " ".join(setup_cmake_args) - if platform.machine() in {"ppc64le"}: - # the container sees all 16 threads but building with all of them - # triggers the OoM killer due to RAM limitations - os.environ["SETUP_MAKE_ARGS"] = "-j2" - else: - os.environ["SETUP_MAKE_ARGS"] = "-j$(nproc)" - ci.driver.Driver.save_env(os.environ) - -install: - commands: - - python -c "import sys; print(sys.version)" - - python -m pip install --disable-pip-version-check --upgrade pip - - pip install -r requirements-test.txt -r requirements-repair.txt - - circle: - commands: - - pipx install cmake - - ${ENTRYPOINT} ./scripts/manylinux-build-and-install-openssl.sh - -before_build: - commands: - - flake8 - -build: - commands: - # Source distribution - - python setup.py --hide-listing sdist - # Built distribution (wheel) - - python setup.py --hide-listing bdist_wheel $ -- $ -- $ - # Cleanup - - python: | - import glob, os - if os.environ.get("UPLOAD_SDIST", "") == "": - sdist=(glob.glob("dist/*.tar.gz") + glob.glob("dist/*.zip"))[0] - print("Deleting [%s]" % sdist) - os.remove(sdist) - # Convert to generic platform wheel - - python: | - import glob, os, subprocess, sys - if os.environ.get("UPLOAD_SDIST", "") != "tests-only": # no need to repair for "tests-only" - wheels = glob.glob("dist/*.whl") - for wheel in wheels: - subprocess.check_call([sys.executable, "scripts/repair_wheel.py", "-w", "dist", wheel]) - os.remove(wheel) - wheels = glob.glob("dist/*.whl") - assert len(wheels) == 1, "There shall be exactly 1 final wheel per build" - -test: - appveyor: - commands: - - python setup.py test - - circle: - commands: - - python setup.py test - - travis: - osx: - commands: - - python setup.py test - -#after_test: -# commands: -# - codecov -X gcov --required --file ./tests/coverage.xml diff --git a/scripts/manylinux-build-wheels.sh b/scripts/manylinux-build-wheels.sh deleted file mode 100755 index 1f64a577..00000000 --- a/scripts/manylinux-build-wheels.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -# -# Warning: This script is not tested and is kept here for convenience. -# - -# -# Usage: -# -# docker pull dockcross/manylinux-x64 -# docker run dockcross/manylinux-x64 > ~/bin/dockcross-manylinux-x64 -# chmod u+x ~/bin/dockcross-manylinux-x64 -# -# git clone git://github.com/scikit-build/cmake-python-distributions.git -# cd cmake-python-distributions -# -# dockcross-manylinux-x64 ./scripts/manylinux-build-wheels.sh -# - -set -e -x - -# i686 or x86_64 ? -case $(uname -p) in - i686) - arch=x86 - ;; - x86_64) - arch=x64 - ;; - *) - die "Unknown architecture $(uname -p)" - ;; -esac - -echo "Building wheels for $arch" - -# Build standalone project and populate archive cache -mkdir -p /work/archive-cache -mkdir -p /work/standalone-${arch}-build -pushd /work/standalone-${arch}-build > /dev/null 2>&1 - cmake -DCMakePythonDistributions_ARCHIVE_DOWNLOAD_DIR:PATH=/work/archive-cache -G Ninja ../ - ninja -popd > /dev/null 2>&1 - -# Compile wheels re-using standalone project and archive cache -for PYBIN in /opt/python/*/bin; do - if [[ ${PYBIN} == *"cp26"* ]]; then - echo "Skipping ${PYBIN}" - continue - fi - ${PYBIN}/pip install --user -r /work/requirements-dev.txt - ${PYBIN}/python setup.py bdist_wheel -- \ - -DCMakePythonDistributions_ARCHIVE_DOWNLOAD_DIR:PATH=/work/archive-cache \ - -DCMakeProject_BINARY_DIR:PATH=/work/standalone-${arch}-build - ${PYBIN}/python setup.py clean -done - -# Since there are no external shared libraries to bundle into the wheels -# this step will fixup the wheel switching from 'linux' to 'manylinux1' tag -for whl in dist/*$(uname -p).whl; do - auditwheel repair $whl -w /work/dist/ - rm $whl -done - -# Install packages and test -for PYBIN in /opt/python/*/bin/; do - if [[ ${PYBIN} == *"cp26"* ]]; then - echo "Skipping ${PYBIN}" - continue - fi - sudo ${PYBIN}/pip install cmake --no-cache-dir --no-index -f /work/dist - (cd $HOME; ${PYBIN}/cmake --version) -done diff --git a/scripts/manylinux2014-build-and-test-wheel.sh b/scripts/manylinux2014-build-and-test-wheel.sh deleted file mode 100755 index c043cbcd..00000000 --- a/scripts/manylinux2014-build-and-test-wheel.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -set -e -set -x - -MANYLINUX_PYTHON_BIN=/opt/python/cp38-cp38/bin -export PATH="${MANYLINUX_PYTHON_BIN}:$PATH" - -cd /io -./scripts/manylinux-build-and-install-openssl.sh - -ci_before_install() { - ${MANYLINUX_PYTHON_BIN}/python scripts/ssl-check.py - ${MANYLINUX_PYTHON_BIN}/pip install scikit-ci scikit-ci-addons scikit-build -} - -ci_install() { - ${MANYLINUX_PYTHON_BIN}/ci install -} -ci_test() { - ${MANYLINUX_PYTHON_BIN}/ci test -} -ci_after_success() { - ${MANYLINUX_PYTHON_BIN}/ci after_test -} - -ci_before_install -ci_install -ci_test -ci_after_success diff --git a/scripts/ssl-check.py b/scripts/ssl-check.py deleted file mode 100644 index 3e247e66..00000000 --- a/scripts/ssl-check.py +++ /dev/null @@ -1,32 +0,0 @@ -# cf. https://github.com/pypa/manylinux/issues/53 - -import sys - -GOOD_SSL = "https://google.com" -BAD_SSL = "https://self-signed.badssl.com" - -print("Testing SSL certificate checking for Python:", sys.version) - -if (sys.version_info[:2] < (3, 4)): - print("This version never checks SSL certs; skipping tests") - sys.exit(0) - -if sys.version_info[0] >= 3: - from urllib.request import urlopen - EXC = OSError -else: - from urllib import urlopen - EXC = IOError - -print("Connecting to %s should work" % (GOOD_SSL,)) -urlopen(GOOD_SSL) -print("...it did, yay.") - -print("Connecting to %s should fail" % (BAD_SSL,)) -try: - urlopen(BAD_SSL) - # If we get here then we failed: - print("...it DIDN'T!!!!!11!!1one!") - sys.exit(1) -except EXC: - print("...it did, yay.") From bc80ddb3bc13f1d28d9a1e28b36ba9ce6f92cba9 Mon Sep 17 00:00:00 2001 From: mayeut Date: Mon, 31 May 2021 12:22:24 +0200 Subject: [PATCH 2/3] Try cibuildwheel configuration in `pyproject.toml` --- .github/workflows/build.yml | 26 ++++++++------------------ .travis.yml | 10 +--------- pyproject.toml | 31 +++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 19a50e69..c5653cf4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,7 @@ jobs: - run: pipx run flake8 build_wheels: - name: Build ${{ matrix.build }} wheels on ${{ matrix.os }} + name: Build ${{ matrix.arch }} wheels on ${{ matrix.os }} needs: [flake8] runs-on: ${{ matrix.os }} strategy: @@ -21,15 +21,15 @@ jobs: matrix: include: - os: ubuntu-20.04 - build: "cp39-*x86_64*" + arch: "x86_64" - os: ubuntu-20.04 - build: "cp39-*i686*" + arch: "i686" - os: windows-2019 - build: "cp39-*win_amd64*" + arch: "AMD64" - os: windows-2019 - build: "cp39-*win32*" + arch: "x86" - os: macos-10.15 - build: "cp39-*x86_64*" + arch: "x86_64" steps: - uses: actions/checkout@v2 @@ -37,19 +37,9 @@ jobs: fetch-depth: 0 # required for versioneer to find tags - name: Build wheels - uses: pypa/cibuildwheel@v1.11.0 + uses: henryiii/cibuildwheel@3b715c72d5159c3bf1d37faaf42ba544e038d695 env: - CIBW_BEFORE_ALL: "pipx install cmake && pipx install ninja" - CIBW_BEFORE_ALL_LINUX: "pipx install cmake && pipx install ninja && ./scripts/manylinux-build-and-install-openssl.sh" - CIBW_BUILD: "${{ matrix.build }}" - CIBW_ENVIRONMENT_MACOS: "MACOSX_DEPLOYMENT_TARGET=10.10" - CIBW_ENVIRONMENT_LINUX: "SKBUILD_CONFIGURE_OPTIONS='-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl -DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link -DCMAKE_JOB_POOLS:STRING=compile=2;link=1'" - CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux1_x86_64:2021-05-16-740a2ec - CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux1_i686:2021-05-16-740a2ec - CIBW_BEFORE_BUILD: "python -m pip install -r requirements-repair.txt" - CIBW_REPAIR_WHEEL_COMMAND: "python scripts/repair_wheel.py -w {dest_dir} {wheel}" - CIBW_TEST_REQUIRES: "-r requirements-test.txt" - CIBW_TEST_COMMAND: "pytest {project}/tests" + CIBW_ARCHS: "${{ matrix.arch }}" - uses: actions/upload-artifact@v2 with: diff --git a/.travis.yml b/.travis.yml index abec5ea4..c65c5d8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,14 +14,6 @@ env: - secure: "Xejg5qGnAyo3G+/TaaAr1uHzDv9GLo3mxi6Aw/hZc9gF9lYix1TvkfE6GEBKdPgSLJSqF9NJrwKTt37XH1DjSRLG+qw6Bt1goi5Bkugdk+SC5qmMkvAoG0EKyD119WS4ObrpzqAFcOQqG+4F6iDkSuJLA+dzA3yAzTME4pkhr/2dn0krOSqIcTlgifPwhEaMgo//WRT2dEBM5dWoehXsEMD7VMOUyC0DlV15lKTPKSzTrDEUPU7UFnXgIqZM/brEPbWPQr5Jzgu7BeBk6bmPiiYeh28Cq2juzOzA+JWcGgJmXOfsImYwYuAWZrf0pkE0uQjLySvIBKT7phJv05eNqIxmv/wHK1BPcyMV+2IgFR4+f5ty6C4VUV0hT0HvHr3pMa/8A/5wSNCShEAMTHrwPM5VPWFJtUKTtS5+wwNQDI39MLk/vr9ZTo+y3WJHPaRR0nRpbA3nXFHSqoJJunoMyeI8x9cXZvJ9IENMxGuo3CfBT5RGZamfqSTgn6NjL51ArIMKpvUfm3tXTtlvCHenED1ZQeJI1nWZEalxl8pTyAZoA8S1+h8wraZrUPzhM0QuVpw7vZQeOYu2VSdHO46yxUWoQyb+JWrDTN7EC8vOl7QQzIQlqOWJB5uDJD7UlKKtneTHJrdfXvGxS/hf+Y+hFZK7r+/PDPS6aQjSNDyy+js=" # PYPI_PASSWORD - secure: "iEHYaOC/yivDupsbRzohWYCwFMZbCfT2hYOM96akQtOfd1d37rqFCFjDKr3BNyvHyHzj+uNQ7IblynWAqu3cax2Z8b9YuIFXFAslD76IIgeIhxmi8jPtamMK0NBXam/LEL49EIVXUnwVZrWjnLcJxVaBHGS/9Ft3zWP5Gspa4G1yAJDhNfs+jrFipxO4DOBie9mGI2jFdbFRgcCYoY6Jo4y95zxUG1YF5e+8sUobLoBgVqyaJP4SP/Zu/4CEWMfJev8EjLBzzkoPwOU+hC09qwf2FQCvBXFrudpjPpY23WDFeKf+LcMoW9tIoUmP6UJcQibqHeidimrbo9jST0+wTo1NYjrvriKrlMho/QS4iYkd5N6DGUrhSXEMSiqfdMjVGDZ00wvCsT3DwqE9eG7K+Kw09enchjcZcggZIt9crqZPJg3GMdSwPYTlRpf2OQmE4OHL3pN5dSH5Es/sb0X1G6JQgB/2Ia9Aks2ywYEdzUZhbMqfLVx75bVS4bLfYMAMhE/j7NxpYaUlVkFhz3srLhnrYyAcvCQ6XF4cSeFfxD1ie62/qFIF/QH5u76t91uURHygvNdyJCNHhVJnnWgN9kPsJxfyfdOC2Dnrz/jJcw5irsgQVO2/K4iyGyBVoOqwwpymjoCkxB8capEoLRNLcwyQqCTBnMtGykyRYF2I7FA=" - - CIBW_BEFORE_ALL="./scripts/manylinux-build-and-install-openssl.sh" - - CIBW_BUILD="cp39-*" - - CIBW_BUILD_VERBOSITY="1" - - CIBW_ENVIRONMENT_LINUX="SKBUILD_CONFIGURE_OPTIONS='-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl -DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link -DCMAKE_JOB_POOLS:STRING=compile=2;link=1'" - - CIBW_BEFORE_BUILD="python -m pip install -r requirements-repair.txt" - - CIBW_REPAIR_WHEEL_COMMAND="python scripts/repair_wheel.py -w {dest_dir} {wheel}" - - CIBW_TEST_REQUIRES="-r requirements-test.txt" - - CIBW_TEST_COMMAND="pytest {project}/tests" matrix: include: @@ -32,7 +24,7 @@ matrix: - arch: s390x install: - - python -m pip install cibuildwheel==1.11.0 + - python -m pip install git+https://github.com/henryiii/cibuildwheel.git@3b715c72d5159c3bf1d37faaf42ba544e038d695 - python -m pip install -r requirements-deploy.txt script: diff --git a/pyproject.toml b/pyproject.toml index 965f0b47..665b9352 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,3 +5,34 @@ requires = [ "wheel" ] build-backend = "setuptools.build_meta" + +[tool.cibuildwheel] +build = "cp39-*" +before-all = [ + "pipx install cmake", + "cmake --version", + "pipx install ninja", + "ninja --version", +] +before-build = "pip install -r requirements-repair.txt" +repair-wheel-command = "python scripts/repair_wheel.py -w {dest_dir} {wheel}" +test-requires = "-r requirements-test.txt" +test-command = "pytest {project}/tests" + +[tool.cibuildwheel.linux] +before-all = [ + "pipx install cmake", + "cmake --version", + "pipx install ninja", + "ninja --version", + "./scripts/manylinux-build-and-install-openssl.sh", +] +build-verbosity = "1" +manylinux-x86_64-image = "manylinux1" +manylinux-i686-image = "manylinux1" + +[tool.cibuildwheel.linux.environment] +SKBUILD_CONFIGURE_OPTIONS = "-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl -DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link -DCMAKE_JOB_POOLS:STRING=compile=2;link=1" + +[tool.cibuildwheel.macos.environment] +MACOSX_DEPLOYMENT_TARGET = "10.10" From 7372dbd8a8dc61aa0e0c259b0349c7dbf56b92bb Mon Sep 17 00:00:00 2001 From: mayeut Date: Sat, 26 Jun 2021 13:56:22 +0200 Subject: [PATCH 3/3] Update cibuildwheel --- .github/workflows/build.yml | 2 +- .travis.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c5653cf4..4e405a40 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,7 +37,7 @@ jobs: fetch-depth: 0 # required for versioneer to find tags - name: Build wheels - uses: henryiii/cibuildwheel@3b715c72d5159c3bf1d37faaf42ba544e038d695 + uses: pypa/cibuildwheel@v2.0.0a4 env: CIBW_ARCHS: "${{ matrix.arch }}" diff --git a/.travis.yml b/.travis.yml index c65c5d8d..9e543a89 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,7 +24,7 @@ matrix: - arch: s390x install: - - python -m pip install git+https://github.com/henryiii/cibuildwheel.git@3b715c72d5159c3bf1d37faaf42ba544e038d695 + - python -m pip install cibuildwheel==2.0.0a4 - python -m pip install -r requirements-deploy.txt script: