Move coverage configuration to pyproject.toml #695
Workflow file for this run
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: build | |
on: | |
push: | |
pull_request: | |
jobs: | |
# Quickly check with flake8 without having to go through the whole build: | |
flake8: | |
name: "Fast flake8" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
# Check on lowest supported python version to catch syntax errors: | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.7" } | |
- run: pip install flake8 | |
- run: flake8 | |
build_linux: | |
name: "Build: Linux (x64)" | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
base: | |
- manylinux1_x86_64 | |
- manylinux2014_x86_64 | |
- manylinux2014_aarch64 | |
defaults: | |
run: | |
shell: docker run --rm --init -w /mnt -v `pwd`:/mnt builder bash -eo pipefail {0} | |
steps: | |
- uses: actions/checkout@v4 | |
- run: echo "MADX_VERSION=$(cat MADX_VERSION)" >> $GITHUB_ENV | |
shell: bash | |
- name: Download cached MAD-X build | |
id: madx-build-cache | |
uses: actions/cache@v4 | |
with: | |
path: dist/MAD-X | |
key: "\ | |
madx-${{ env.MADX_VERSION }}-\ | |
${{ matrix.base }}-\ | |
patches-${{ hashFiles('.github/patch/*') }}-\ | |
scripts-${{ hashFiles('.github/build/linux/madx*') }}\ | |
" | |
- run: git clone https://github.com/MethodicalAcceleratorDesign/MAD-X | |
src/MAD-X -b $MADX_VERSION --depth 1 | |
if: steps.madx-build-cache.outputs.cache-hit != 'true' | |
shell: bash | |
- name: Set up QEMU for running arm64 containers | |
if: endsWith(matrix.base, '_aarch64') | |
uses: docker/setup-qemu-action@v3 | |
- name: Prepare docker image | |
run: | | |
docker buildx build .github/build/linux \ | |
--build-arg UID=`id -u` \ | |
--build-arg GID=`id -g` \ | |
--build-arg BASE=${{ matrix.base }} \ | |
-t builder | |
shell: bash | |
- name: Build MAD-X | |
if: steps.madx-build-cache.outputs.cache-hit != 'true' | |
run: .github/build/linux/madx.sh src/MAD-X build/MAD-X dist/MAD-X | |
# We create the wheels from the source distribution to verify that the | |
# source distribution can be used as installation medium. We will later | |
# upload this exact source distribution to PyPI: | |
- run: python setup.py sdist | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp35-cp35m | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp36-cp36m | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp37-cp37m | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp38-cp38 | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp39-cp39 | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp39-cp39 | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp310-cp310 | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp311-cp311 | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp312-cp312 | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp313-cp313 | |
- run: .github/build/linux/cpymad.sh dist/MAD-X cp313-cp313t | |
- run: | | |
# Bundle external shared libraries into the wheels | |
mkdir -p dist | |
for whl in rawdist/*.whl; do | |
auditwheel repair "$whl" -w dist/ | |
done | |
- name: Upload cpymad wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-linux-${{ matrix.base }} | |
path: | | |
dist/ | |
!dist/MAD-X | |
build_windows: | |
name: "Build: Windows" | |
runs-on: windows-latest | |
defaults: | |
run: | |
shell: msys2 {0} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: msys2/setup-msys2@v2 | |
with: | |
update: true | |
path-type: inherit | |
install: mingw-w64-ucrt-x86_64-gcc | |
mingw-w64-ucrt-x86_64-gcc-fortran | |
mingw-w64-ucrt-x86_64-cmake | |
- run: echo "MSYSTEM=UCRT64" >> $GITHUB_ENV | |
- run: echo "MADX_VERSION=$(cat MADX_VERSION)" >> $GITHUB_ENV | |
- name: Download cached MAD-X build | |
id: madx-build-cache | |
uses: actions/cache@v4 | |
with: | |
path: src/MAD-X/dist | |
key: "\ | |
madx-${{ env.MADX_VERSION }}-\ | |
windows-\ | |
patches-${{ hashFiles('.github/patch/*') }}-\ | |
scripts-${{ hashFiles('.github/build/windows/madx*') }}\ | |
" | |
- run: git clone https://github.com/MethodicalAcceleratorDesign/MAD-X | |
src/MAD-X -b $MADX_VERSION --depth 1 | |
if: steps.madx-build-cache.outputs.cache-hit != 'true' | |
- name: Apply patches | |
if: steps.madx-build-cache.outputs.cache-hit != 'true' | |
run: git -C src/MAD-X apply - <.github/patch/fix-madx-win32.patch | |
- name: Build MAD-X | |
if: steps.madx-build-cache.outputs.cache-hit != 'true' | |
run: .github/build/windows/madx.sh src/MAD-X | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.6"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.6 | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.7"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.7 | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.8"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.8 | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.9"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.9 | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.10"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.10 | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.11"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.11 | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.12"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.12 | |
- uses: actions/setup-python@v5 | |
with: {python-version: "3.13"} | |
- run: .github/build/windows/cpymad.sh src/MAD-X/dist 3.13 | |
- name: Upload cpymad wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-windows | |
path: dist | |
build_macos: | |
name: "Build: MacOS" | |
runs-on: macos-13 | |
strategy: | |
matrix: | |
arch: | |
- x86_64 | |
- arm64 | |
steps: | |
- uses: actions/checkout@v4 | |
- run: echo "MADX_VERSION=$(cat MADX_VERSION)" >> $GITHUB_ENV | |
- name: Download cached MAD-X build | |
id: madx-build-cache | |
uses: actions/cache@v4 | |
with: | |
path: src/MAD-X/dist | |
key: "\ | |
madx-${{ env.MADX_VERSION }}-\ | |
macos-${{ matrix.arch }}-\ | |
patches-${{ hashFiles('.github/patch/*') }}-\ | |
scripts-${{ hashFiles('.github/build/macos/madx*') }}\ | |
" | |
- run: git clone https://github.com/MethodicalAcceleratorDesign/MAD-X | |
src/MAD-X -b $MADX_VERSION --depth 1 | |
if: steps.madx-build-cache.outputs.cache-hit != 'true' | |
# Select matching Xcode and SDK, see: https://xcodereleases.com/ | |
- run: | | |
sudo xcode-select -switch /Applications/Xcode_15.2.app | |
echo "SDKROOT=$(xcrun --show-sdk-path)" >> $GITHUB_ENV | |
- name: Setup gfortran | |
run: | | |
set -xeo pipefail | |
if [[ ${{ matrix.arch }} == "x86_64" ]]; then | |
FC=gfortran-12 | |
LIBDIR=$(dirname $(find /usr/local/Cellar/gcc@12 -name libgfortran.dylib)) | |
echo "MACOSX_DEPLOYMENT_TARGET=13.0" >> $GITHUB_ENV | |
elif [[ ${{ matrix.arch }} == "arm64" ]]; then | |
# See: https://github.com/MacPython/gfortran-install | |
name=gfortran-darwin-arm64-cross | |
curl -L -O https://github.com/isuruf/gcc/releases/download/gcc-11.3.0-2/${name}.tar.gz | |
sudo tar -f ${name}.tar.gz -C /opt -xzv | |
rm ${name}.tar.gz | |
FC=$(find /opt/${name}/bin -name "*-gfortran") | |
LIBDIR=$(dirname $(find /opt/${name}/lib -name libgfortran.dylib)) | |
# See: https://github.com/pypa/cibuildwheel/discussions/997 | |
echo "ARCHFLAGS=-arch arm64" >> $GITHUB_ENV | |
echo "_PYTHON_HOST_PLATFORM=macosx-13.0-arm64" >> $GITHUB_ENV | |
echo "MACOSX_DEPLOYMENT_TARGET=13.0" >> $GITHUB_ENV | |
fi | |
LDFLAGS="-L$LIBDIR -Wl,-rpath,$LIBDIR" | |
echo "FC=$FC" >> $GITHUB_ENV # for cmake | |
echo "LDFLAGS=$LDFLAGS" >> $GITHUB_ENV # for setuptools | |
echo "LIBDIR=$LIBDIR" >> $GITHUB_ENV # for delocate step | |
- name: Build MAD-X | |
if: steps.madx-build-cache.outputs.cache-hit != 'true' | |
run: .github/build/macos/madx.sh src/MAD-X ${{ matrix.arch }} | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.6" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.7" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.8" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.9" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.10" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.11" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.12" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- uses: actions/setup-python@v5 | |
with: { python-version: "3.13" } | |
- run: .github/build/macos/cpymad.sh src/MAD-X/dist | |
- name: Fixup wheel dependencies | |
run: | | |
pip3 install delocate | |
DYLD_LIBRARY_PATH=$LIBDIR delocate-wheel dist/*.whl | |
DYLD_LIBRARY_PATH=$LIBDIR delocate-listdeps --all dist/*.whl | |
- name: Upload cpymad wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-macos-${{ matrix.arch }} | |
path: dist | |
test: | |
name: Tests | |
runs-on: ${{ matrix.os.run }} | |
needs: [build_linux, build_windows, build_macos] | |
strategy: | |
matrix: | |
os: | |
- {run: ubuntu-latest, dist: dist-linux-manylinux2014_x86_64} | |
- {run: windows-latest, dist: dist-windows} | |
- {run: macos-latest, dist: dist-macos-arm64} | |
- {run: macos-13, dist: dist-macos-x86_64} | |
python: | |
- '3.7' | |
- '3.8' | |
- '3.9' | |
- '3.10' | |
- '3.11' | |
- '3.12' | |
- '3.13' | |
exclude: | |
- os: {run: macos-latest} | |
python: '3.7' | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Download cpymad wheels | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ matrix.os.dist }} | |
path: dist | |
- name: Install cpymad from wheel | |
run: | | |
set -ex | |
python -m pip install -U pip || sudo python -m pip install -U pip | |
pip install cpymad -f dist --no-index --no-deps | |
pip install cpymad | |
- run: pip install flake8 twine coverage coveralls pytest | |
- run: twine check dist/* | |
- run: flake8 | |
- run: coverage run --source=cpymad -p -m pytest -v -k "not dframe" | |
- run: pip install pandas | |
- run: coverage run --source=cpymad -p -m pytest -v -k "dframe" | |
- run: coverage combine | |
- run: coveralls | |
if: inputs.COVERALLS_REPO_TOKEN != '' | |
env: | |
COVERALLS_REPO_TOKEN: ${{ inputs.COVERALLS_REPO_TOKEN }} | |
documentation: | |
name: Update documentation | |
needs: build_linux | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.9' | |
- uses: actions/download-artifact@v4 | |
with: | |
name: dist-linux-manylinux2014_x86_64 | |
path: dist | |
- run: sudo apt-get install -qy graphviz | |
- run: pip install -U pip | |
- run: pip install cpymad[doc] -f dist | |
- run: make -C doc html | |
- name: Deploy to GitHub Pages | |
if: success() && ( | |
startsWith(github.ref, 'refs/tags/v') || | |
github.ref == 'refs/heads/master') | |
uses: crazy-max/ghaction-github-pages@v4 | |
with: | |
build_dir: doc/_build/html | |
commit_message: Build documentation from ${{ github.ref }}@${{ github.sha }} | |
jekyll: false | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
upload_release: | |
name: Upload release | |
needs: test | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
permissions: | |
id-token: write | |
steps: | |
- name: Fetch built distributions | |
uses: actions/download-artifact@v4 | |
with: | |
path: dist | |
- name: Merge artifacts to single folder | |
run: | | |
mv dist/dist-*/*.whl dist/ | |
mv dist/dist-linux-manylinux2014_x86_64/*.tar.gz dist/ | |
- name: Publish PyPI package | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
if: startsWith(github.ref, 'refs/tags/v') | |
- name: Publish TestPyPI package | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
if: github.ref == 'refs/heads/test-release' | |
with: | |
repository-url: https://test.pypi.org/legacy/ | |
- name: Create GitHub Release | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/tags/v') | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |