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"')