diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 8ecce1d..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,120 +0,0 @@ -version: 2 - -references: - - ci_steps: &ci_steps - working_directory: /work - steps: - - checkout - - run: - name: Run CI - command: | - # - # 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 - - persist_to_workspace: - root: ./ - paths: - - dist - - x64_build_job: &x64_build_job - docker: - - image: dockcross/manylinux2014-x64 - <<: *ci_steps - -# x86_build_job: &x86_build_job -# docker: -# - image: dockcross/manylinux2014-x86 -# <<: *ci_steps - - no_filters: &no_filters - filters: - tags: - only: /.*/ - -jobs: - - # x64 -# manylinux-x64_cp27-cp27mu: -# <<: *x64_build_job - manylinux-x64_cp37-cp37m: - <<: *x64_build_job - - # x86 -# manylinux-x86_cp27-cp27mu: -# <<: *x86_build_job -# manylinux-x86_cp37-cp37m: -# <<: *x86_build_job - - deploy-master: - docker: - - image: circleci/python:3.7.0-stretch - steps: - - attach_workspace: - at: ./ - - run: - name: Deploy master - command: | - echo "Deploy master (not implemented)" - - deploy-release: - docker: - - image: circleci/python:3.7.0-stretch - steps: - - attach_workspace: - at: ./ - - run: - name: Deploy release - command: | - echo "Deploy release" - python -m venv ../venv - . ../venv/bin/activate - pip install --upgrade pip - pip install twine - ls dist - twine upload -u __token__ -p $PYPI_PASSWORD --skip-existing dist/* - -workflows: - version: 2 - build-test-deploy: - jobs: - # x64 -# - manylinux-x64_cp27-cp27mu: -# <<: *no_filters - - manylinux-x64_cp37-cp37m: - <<: *no_filters - # x86 -# - manylinux-x86_cp27-cp27mu: -# <<: *no_filters -# - manylinux-x86_cp37-cp37m: -# <<: *no_filters - - - deploy-master: - requires: - # x64 -# - manylinux-x64_cp27-cp27mu - - manylinux-x64_cp37-cp37m - # x86 -# - manylinux-x86_cp27-cp27mu -# - manylinux-x86_cp37-cp37m - filters: - branches: - only: master - - deploy-release: - requires: - # x64 -# - manylinux-x64_cp27-cp27mu - - manylinux-x64_cp37-cp37m - # x86 -# - manylinux-x86_cp27-cp27mu -# - manylinux-x86_cp37-cp37m - filters: - tags: - only: /^[0-9]+(\.[0-9]+)*(\.post[0-9]+)?$/ - branches: - ignore: /.*/ - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1a4684a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,92 @@ +name: "Build + Test" + +on: + workflow_dispatch: + pull_request: + branches: + - master + - releases/** + push: + branches: + - master + - releases/** + release: + types: [published] + +jobs: + build-wheels: + runs-on: ${{ matrix.os }} + strategy: + matrix: + # x86_64 only: CastXMLUrls.cmake only has x86_64 CastXML binaries. + # Add ARM runners back once CastXML is built from source. + os: [ubuntu-latest, macos-15-intel, windows-latest] + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + fetch-depth: 0 # setuptools-scm needs the tags to compute the version + - name: Build Wheels + uses: pypa/cibuildwheel@e090b81e30c4d855ea63bf4b6e59204c09a101ae # v4.2.1 + - name: Upload Wheel + if: github.event_name == 'release' + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} + path: ./wheelhouse/*.whl + + build-sdist: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + fetch-depth: 0 # setuptools-scm needs the tags to compute the version + - name: Set up Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.x" + - name: Build SDist + run: | + pipx run build --sdist + - name: Check SDist + run: | + pipx run twine check dist/* + - name: Test SDist + # Mirror a downstream packager: build and install from the sdist, then + # run the sdist's own tests against that install. + run: | + python -m pip install --upgrade pip + python -m pip install dist/*.tar.gz + mkdir sdist-test + tar -xzf dist/*.tar.gz -C sdist-test --strip-components=1 + cd sdist-test + python -m pip install --group test + # Not `python -m pytest`: that puts the unpacked source package on + # sys.path ahead of the installed one, which has the binary. + pytest + - name: Upload SDist + if: github.event_name == 'release' + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: cibw-sdist + path: dist/*.tar.gz + + publish: + needs: [build-wheels, build-sdist] + if: github.event_name == 'release' + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/castxml + permissions: + id-token: write # PyPI trusted publishing + steps: + - name: Download Wheels and SDist + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + pattern: cibw-* + path: dist + merge-multiple: true + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 506127a..0000000 --- a/.travis.yml +++ /dev/null @@ -1,76 +0,0 @@ -branches: - only: - - master - - /^[0-9]+(\.[0-9]+)*(\.post[0-9]+)?$/ - -language: python - -matrix: - include: - - - os: osx - osx_image: xcode12 - language: generic - env: - - PYTHON_VERSION=3.7.8 - -before_cache: - # Cleanup to avoid the cache to grow indefinitely as new package versions are released - # see https://stackoverflow.com/questions/39930171/cache-brew-builds-with-travis-ci - - brew cleanup - -cache: - directories: - # Cache downloaded bottles - - $HOME/Library/Caches/Homebrew - # pyenv - - $HOME/.pyenv_cache - - $HOME/.pyenv/versions/3.7.8 - # scikit-ci-addons - - $HOME/downloads - -before_install: - - brew update - - brew upgrade - - | - # Workaround the following error occuring because python installation is cached but gettext dependency is not - # dyld: Library not loaded: /usr/local/opt/gettext/lib/libintl.8.dylib - # Referenced from: /Users/travis/.pyenv/versions/3.7.2/bin/python - # Reason: Incompatible library version: python requires version 11.0.0 or later, but libintl.8.dylib provides version 10.0.0 - if [[ "$TRAVIS_OS_NAME" == "osx" && "${PYTHON_VERSION}" == "3.7.8" ]]; then - brew install gettext - fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then mkdir $HOME/bin; ln -s $(which pip2) $HOME/bin/pip; ln -s $(which python2) $HOME/bin/python; fi - - python -m pip install --disable-pip-version-check --upgrade pip - - pip install -U scikit-ci scikit-ci-addons - - ci_addons --install ../addons - -install: - - ci install - -script: - - ci test - -after_success: - - ci after_test - -deploy: - # deploy-release - - provider: script - script: pwd && ls dist;echo "deploy-release" && ~/.pyenv/versions/${PYTHON_VERSION}/bin/twine upload -u __token__ -p $PYPI_PASSWORD --skip-existing dist/* - skip_cleanup: true - on: - repo: ${TRAVIS_REPO_SLUG} - tags: true - # deploy-master - - provider: script - script: pwd && ls dist;echo "deploy-master" && echo "not implemented" - skip_cleanup: true - on: - repo: ${TRAVIS_REPO_SLUG} - branch: master - -env: - global: - # PYPI_PASSWORD - - secure: "KGHel2nKEcPM6VAYgBdwPEKghrUfylvtAXsXm2kjxzTT2zCiOYWTy0pb1grKlvcasRcvSViuiGL6x/tyTT2mh5Qf74S5WgIbgo2VEFIP9XekNRiYFOp4UEfup0Roa4tL3Yvb+xkcF5kIe4mhf4hddAweJN0KWZt+Vk6Q6udJ4c+WyIWFaXIpl1/QyAeGs6tSpYKQiE40aGUYcRgKrZf1ydPqLJ1SKul13nurnZ3CsH7GcezsVbmdV0QvUcfPwefMSO+pMMMirQmKj977dPRz7CI0hlw0sJTGIOLxHIQNYBMBYu6G81yjyNHh2BKjAXv7V4K5Rc9TmCdAQYSmkhRQVBsaLxIYMuux5w8ms+ldd0oXd38UoFLhZyu4QZBAROEsTRPWLugzsJWgPJRQazv2ENZE5QykzIMJJf4VpTGWQfhbCgUA7GIHUYYKFiJ6Jr33Fzv1HKVhUabSB2yWYiMYoy54rosvxiwSacrC0aWEFGiB9D6sbEQ9rKdHY2ivmT1u/iFw+Qb59uaWy0lm1qoYiLbBt5tpJr5epdc+rOo9i0QB81KhU7/4Hf4kr+QRGxIp/jXEpbrKqgG6YCTzxEMZ2PV3uzV2Z3ZUqupRdcihmouhy7TnbIG7vhm7fVtold9Wwmoiv46/FT2v0EjjiMunhgEhk7t5Lia+qwJgPzrx5xw=" diff --git a/README.md b/README.md index 8de7d7b..fcf002d 100644 --- a/README.md +++ b/README.md @@ -26,31 +26,21 @@ Latest Release [![][pypi-version-img]][pypi] [![][pypi-download-img]][pypi] [pypi-version-img]: https://img.shields.io/pypi/v/castxml.svg -[pypi-download-img]: https://img.shields.io/badge/downloads-0%20total-green.svg +[pypi-download-img]: https://img.shields.io/pypi/dm/castxml.svg [pypi]: https://pypi.python.org/pypi/castxml Build Status ============ -| | Linux | macOS | Windows | -|------|-------|-------|----------| -| PyPI | [![][ci-status-linux-img]][ci-status-linux] | [![][ci-status-macos-img]][ci-status-macos] | [![][ci-status-win-img]][ci-status-win] | +[![][ci-status-img]][ci-status] -[ci-status-linux-img]: https://circleci.com/gh/CastXML/CastXML-python-distributions.svg?style=shield -[ci-status-linux]: https://circleci.com/gh/CastXML/CastXML-python-distributions - -[ci-status-macos-img]: https://travis-ci.org/CastXML/CastXML-python-distributions.svg?branch=master -[ci-status-macos]: https://travis-ci.org/CastXML/CastXML-python-distributions - -[ci-status-win-img]: https://ci.appveyor.com/api/projects/status/56orbr008wcgjyr4?svg=true -[ci-status-win]: https://ci.appveyor.com/project/CastXML/CastXML-python-distributions/branch/master +[ci-status-img]: https://github.com/CastXML/CastXML-python-distributions/actions/workflows/ci.yml/badge.svg?branch=master +[ci-status]: https://github.com/CastXML/CastXML-python-distributions/actions/workflows/ci.yml Maintainers =========== -* [How to update CastXML version ?](https://github.com/CastXML/CastXML-python-distributions/blob/master/docs/update_castxml_version.rst) - -* [How to make a release ?](https://github.com/CastXML/CastXML-python-distributions/blob/master/docs/make_a_release.rst) +* [How to make a release ?](https://github.com/CastXML/CastXML-python-distributions/blob/master/docs/make_a_release.md) Miscellaneous ============= diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 5dcf59f..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,65 +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= - -cache: - - C:\\cmake-3.6.2 - -init: - - ps: Invoke-Expression "$env:PYTHON_DIR\python -m pip install -U scikit-ci scikit-ci-addons" - - ps: Invoke-Expression "$env:PYTHON_DIR\python -m ci_addons --install ../addons" - - - ps: ../addons/appveyor/rolling-build.ps1 - -install: - - ps: Invoke-Expression "$env:PYTHON_DIR\python -m ci install" - -build_script: - - ps: Invoke-Expression "$env:PYTHON_DIR\python -m ci build" - -test_script: - - ps: Invoke-Expression "$env:PYTHON_DIR\python -m ci test" - -after_test: - - ps: Invoke-Expression "$env:PYTHON_DIR\python -m ci after_test" - -on_finish: - - ps: ../addons/appveyor/enable-worker-remote-access.ps1 -check_for_block - -deploy_script: - - ps: | - 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" - $env:PATH="$env:PYTHON_DIR/Scripts/;$env:PATH" - twine upload -u __token__ -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/docs/make_a_release.md b/docs/make_a_release.md new file mode 100644 index 0000000..db796e8 --- /dev/null +++ b/docs/make_a_release.md @@ -0,0 +1,124 @@ +# Making a release + +Releases are built and uploaded to [PyPI][pypi] by the [Build + Test workflow][ci] +(`.github/workflows/ci.yml`). Publishing a GitHub release starts the workflow, +which builds and tests the wheels and the sdist, then uploads them to PyPI using +trusted publishing. Pushes and pull requests run the same builds and tests but +never upload anything. + +## Updating the CastXML version + +Skip this section if the release doesn't change the CastXML version. + +Available CastXML archives can be found +[here](https://data.kitware.com/#folder/57b5de948d777f10f2696370). + +1. Install `girder-client`: + + ```bash + pip install girder-client + ``` + +2. Run `scripts/update_castxml_version.py` with the CastXML version `X.Y.Z` to + package. For example: + + ```bash + release=0.4.5 + python scripts/update_castxml_version.py ${release} + ``` + + It updates the archive URLs and checksums, the version in `README.md`, and + the expected version in the tests: + + ``` + Collecting URLs and SHAs from 'https://data.kitware.com/#folder/57b5de948d777f10f2696370' + Collecting URLs and SHAs from 'https://data.kitware.com/#folder/57b5de948d777f10f2696370' - done + Updating 'CastXMLUrls.cmake' with CastXML version 0.4.5 + Updating 'CastXMLUrls.cmake' with CastXML version 0.4.5 - done + Updating README.md + Updating README.md - done + Updating tests/test_distribution.py + Updating tests/test_distribution.py - done + ``` + +3. Commit the changes on a branch named `update-to-castxml-X.Y.Z`: + + ```bash + git checkout -b update-to-castxml-${release} + git add CastXMLUrls.cmake README.md tests/test_distribution.py + git commit -m "Update to CastXML ${release}" + ``` + +4. Open a pull request, and merge it once CI passes. + +## Cutting the release + +1. Choose the release version. + + ```bash + release=X.Y.Z + ``` + + The git tag *is* the package version: setuptools-scm reads it at build time. + Use the bare form `X.Y.Z` with no `v` prefix. For a packaging-only fix to a + version that's already on PyPI, use `X.Y.Z.postN`. + +2. Make sure your local `master` matches what CI tested: + + ```bash + git checkout master + git pull origin master + ``` + +3. Tag the release and push the tag: + + ```bash + git tag --sign -m "CastXML-python-distributions ${release}" ${release} master + git push origin ${release} + ``` + + Signing the tag with a [GPG key][gpg] is recommended. Pushing the tag on its + own doesn't start a build. + +4. Publish a GitHub release for the tag. This is what starts the release build: + + ```bash + gh release create ${release} --verify-tag --title "CastXML-python-distributions ${release}" --generate-notes + ``` + + Alternatively, in the GitHub UI, go to **Releases → Draft a new release**, + choose the tag, and click **Publish release**. Saving a draft doesn't start + the workflow; only publishing does. + +5. Follow the run in the repository's **Actions** tab, or with `gh run watch`. + If the `pypi` environment requires reviewers, the `publish` job waits until + you approve it with **Review deployments** on the run page. + +6. Once the run finishes, check that the wheels and sdist are on [PyPI][pypi]. + +7. Test the installation in a clean environment: + + ```bash + python -m venv /tmp/castxml-${release}-test + /tmp/castxml-${release}-test/bin/pip install castxml==${release} + /tmp/castxml-${release}-test/bin/castxml --version + rm -rf /tmp/castxml-${release}-test + ``` + +## If something goes wrong + +- **The build or tests fail:** nothing was uploaded, because the `publish` job + only runs after every build succeeds. Fix the problem on `master`, delete the + release and its tag, and start again from step 2: + + ```bash + gh release delete ${release} --cleanup-tag --yes + git tag -d ${release} + ``` + +- **A broken release reached PyPI:** PyPI never accepts the same version twice, + even after it's deleted. Fix the problem and release `X.Y.Z.post1`. + +[pypi]: https://pypi.org/project/castxml +[ci]: https://github.com/CastXML/CastXML-python-distributions/actions/workflows/ci.yml +[gpg]: https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key diff --git a/docs/make_a_release.rst b/docs/make_a_release.rst deleted file mode 100644 index 5ed4754..0000000 --- a/docs/make_a_release.rst +++ /dev/null @@ -1,145 +0,0 @@ -.. _making_a_release: - -================ -Making a release -================ - -A core developer should use the following steps to create a release `X.Y.Z` of -**CastXML-python-distributions** on `PyPI`_. - -This is usually done after :ref:`updating_castxml_version`. - -------------- -Prerequisites -------------- - -* All CI tests are passing on `AppVeyor`_, `CircleCI`_ and `Travis CI`_. - -* You have a `GPG signing key `_. - -------------------------- -Documentation conventions -------------------------- - -The commands reported below should be evaluated in the same terminal session. - -Commands to evaluate starts with a dollar sign. For example:: - - $ echo "Hello" - Hello - -means that ``echo "Hello"`` should be copied and evaluated in the terminal. - - ---------------------- -`PyPI`_: Step-by-step ---------------------- - -1. Make sure that all CI tests are passing on `AppVeyor`_, `CircleCI`_ and `Travis CI`_. - - -2. Download the latest sources - - .. code:: - - $ cd /tmp && \ - git clone git@github.com:CastXML/CastXML-python-distributions CastXML-python-distributions-release && \ - cd CastXML-python-distributions-release - -3. List all tags sorted by version - - .. code:: - - $ git fetch --tags && \ - git tag -l | sort -V - - -4. Choose the next release version number - - .. code:: - - $ release=X.Y.Z - - .. warning:: - - To ensure the packages are uploaded on `PyPI`_, tags must match this regular - expression: ``^[0-9]+(\.[0-9]+)*(\.post[0-9]+)?$``. - - -5. In `README.md`, update `PyPI`_ download count after running ``pypistats overall CastXML`` - and commit the changes. - - .. code:: - - $ git add README.rst && \ - git commit -m "README: Update download stats" - - .. note:: - - To learn more about `pypistats`, see https://pypi.org/project/pypistats/ - - -6. Tag the release - - .. code:: - - $ git tag --sign -m "CastXML-python-distributions ${release}" ${release} master - - .. warning:: - - We recommend using a `GPG signing key `_ - to sign the tag. - - -7. Publish the release tag - - .. code:: - - $ git push origin ${release} - - .. note:: This will trigger builds on each CI services and automatically upload the wheels \ - and source distribution on `PyPI`_. - -8. Check the status of the builds on `AppVeyor`_, `CircleCI`_ and `Travis CI`_. - -9. Once the builds are completed, check that the distributions are available on `PyPI`_. - -10. Create a clean testing environment to test the installation - - .. code:: - - $ pushd $(mktemp -d) && \ - mkvirtualenv CastXML-${release}-install-test && \ - pip install CastXML && \ - castxml --version - - .. note:: - - If the ``mkvirtualenv`` command is not available, this means you do not have `virtualenvwrapper`_ - installed, in that case, you could either install it or directly use `virtualenv`_ or `venv`_. - -11. Cleanup - - .. code:: - - $ popd && \ - deactivate && \ - rm -rf dist/* && \ - rmvirtualenv CastXML-${release}-install-test - -12. Publish master branch - - .. code:: - - $ git push origin master - -.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.io/ -.. _virtualenv: http://virtualenv.readthedocs.io -.. _venv: https://docs.python.org/3/library/venv.html - - -.. _AppVeyor: https://ci.appveyor.com/project/CastXML/CastXML-python-distributions/history -.. _CircleCI: https://circleci.com/gh/CastXML/CastXML-python-distributions -.. _Travis CI: https://travis-ci.org/github/CastXML/CastXML-python-distributions/pull_requests - -.. _PyPI: https://pypi.org/project/CastXML diff --git a/docs/update_castxml_version.rst b/docs/update_castxml_version.rst deleted file mode 100644 index 6880021..0000000 --- a/docs/update_castxml_version.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. _updating_castxml_version: - -============================ -Updating the CastXML version -============================ - -A developer should use the following steps to update the version ``X.Y.Z`` -of CastXML associated with the current CastXML python distributions. - -Available CastXML archives can be found `here `_. - -1. Install `girder-client`:: - - $ pip install girder-client - -2. Execute `scripts/update_castxml_version.py` command line tool with the desired - ``X.Y.Z`` CastXML version available for download. For example:: - - $ release=0.4.5 - $ python scripts/update_castxml_version.py ${release} - - Collecting URLs and SHAs from 'https://data.kitware.com/#folder/57b5de948d777f10f2696370' - Collecting URLs and SHAs from 'https://data.kitware.com/#folder/57b5de948d777f10f2696370' - done - Updating 'CastXMLUrls.cmake' with CastXML version 0.4.5 - Updating 'CastXMLUrls.cmake' with CastXML version 0.4.5 - done - Updating README.md - Updating README.md - done - Updating docs/update_castxml_version.rst - Updating docs/update_castxml_version.rst - done - Updating tests/test_distribution.py - Updating tests/test_distribution.py - done - -3. Create a topic named `update-to-castxml-X.Y.Z` and commit the changes. - For example:: - - release=0.4.5 - git checkout -b update-to-castxml-${release} - git add CastXMLUrls.cmake README.md docs/update_castxml_version.rst tests/test_distribution.py - git commit -m "Update to CastXML ${release}" - -4. Create a `Pull Request`. - -5. If all CI tests are passing, merge the topic and consider `making a new - release `_. \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 4eb855e..ed6ebda 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,3 +86,16 @@ provider = "scikit_build_core.metadata.setuptools_scm" [tool.setuptools_scm] version_file = "castxml/_version.py" + +[tool.cibuildwheel] +manylinux-x86_64-image = "manylinux2014" +manylinux-aarch64-image = "manylinux_2_28" +# The prebuilt Linux CastXML binary links against glibc. +skip = ["*-musllinux_*"] + +test-requires = "pytest" +test-command = "pytest --import-mode=importlib {project}/tests/test_castxml.py" + +[tool.cibuildwheel.linux] +# No 32-bit Linux CastXML binary exists. +archs = ["x86_64"] diff --git a/scikit-ci.yml b/scikit-ci.yml deleted file mode 100644 index 0bfe37f..0000000 --- a/scikit-ci.yml +++ /dev/null @@ -1,67 +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:$ - # Required to build cryptography wheel from source for cp37-cp37 when using manylinux-x86 - CFLAGS: -I/usr/local/ssl/include -L/usr/local/ssl/lib - - travis: - osx: - environment: - # See https://scikit-build.readthedocs.io/en/latest/generators.html#libstdc-vs-libc - CPPFLAGS: "-stdlib=libstdc++" - PATH: $/.pyenv/versions/$/bin:$ - SETUP_BDIST_WHEEL_ARGS: --plat-name macosx-10.13 - commands: - - python ../addons/travis/install_pyenv.py - -install: - commands: - - python -c "import sys; print(sys.version)" - - python -m pip install --disable-pip-version-check --upgrade pip - - pip install git+https://github.com/jcfr/wheeltools.git@wheeltools-2018-10-28-a2f174d0e - - pip install -U -r requirements-dev.txt - -before_build: - commands: - - flake8 - -build: - commands: - # Built distribution (wheel) - - python setup.py --hide-listing bdist_wheel $ -- $ - - circle: - commands: - - | - # Since there are no external shared libraries to bundle into the wheels - # this step will fixup the wheel switching from 'linux' to 'manylinux' tag - for whl in dist/*$(python -c "import wheel.pep425tags as w; print(w.get_platform())").whl; do - auditwheel repair $whl -w ./dist/ - rm $whl - done - -test: - commands: - # Convert to generic platform wheel - - python: | - import glob, sys - sys.path.insert(0, "./scripts") - from convert_to_generic_platform_wheel import convert_to_generic_platform_wheel - wheels = glob.glob("dist/*.whl") - for wheel in wheels: - convert_to_generic_platform_wheel(wheel, remove_original=True) - - python setup.py test - -#after_test: -# commands: -# - codecov -X gcov --required --file ./tests/coverage.xml diff --git a/scripts/update_castxml_version.py b/scripts/update_castxml_version.py index 3f60b6d..688f4ed 100644 --- a/scripts/update_castxml_version.py +++ b/scripts/update_castxml_version.py @@ -133,12 +133,6 @@ def update_docs(version): os.path.join(ROOT_DIR, "README.md"), pattern, replacement) - pattern = re.compile(r"\d\.\d\.\d") - replacement = version - _update_file( - os.path.join(ROOT_DIR, "docs/update_castxml_version.rst"), - pattern, replacement) - def update_tests(version): pattern = re.compile(r'expected_version = "\d.(\d)+.\d"')