Skip to content
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 39 additions & 24 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ concurrency:

defaults:
run:
shell: bash
shell: bash -l {0}
Comment thread
orbeckst marked this conversation as resolved.


jobs:
Expand All @@ -32,18 +32,17 @@ jobs:
fail-fast: false
matrix:
buildplat:
- [ubuntu-20.04, manylinux_x86_64, x86_64]
- [macos-11, macosx_*, x86_64]
- [windows-2019, win_amd64, AMD64]
- [macos-14, macosx_*, arm64]
python: ["cp39", "cp310", "cp311", "cp312"]
- [ubuntu-22.04, manylinux_x86_64, x86_64]
- [windows-2022, win_amd64, AMD64]
- [macos-15-intel, macosx_*, arm64]
python: ["cp311", "cp312", "cp313", "cp314"]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
uses: pypa/cibuildwheel@v3.4.0
env:
CIBW_BUILD: ${{ matrix.python }}-${{ matrix.buildplat[1] }}
CIBW_ARCHS: ${{ matrix.buildplat[2] }}
Expand All @@ -53,8 +52,9 @@ jobs:
if: |
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) ||
(github.event_name == 'release' && github.event.action == 'published')
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v7
with:
name: wheel-${{ matrix.buildplat[0] }}-${{ matrix.python }}
path: wheelhouse/*.whl
retention-days: 7

Expand All @@ -63,20 +63,32 @@ jobs:
name: build package source distribution
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
version: ${{ steps.extract-version.outputs.version }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Build sdist
run: pipx run build --sdist

- name: Extract package version
id: extract-version
run: |
SDIST_FILE=$(ls dist/*.tar.gz)
# Extract version from sdist archive (format: mdaencore-1.0.1rc1.tar.gz)
VERSION=$(tar xf ${SDIST_FILE} -O --wildcards '*/*.egg-info/PKG-INFO' | awk '/^Version:/ {print $2}')
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Extracted version: $VERSION"

- name: upload artifacts
if: |
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) ||
(github.event_name == 'release' && github.event.action == 'published')
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v7
with:
name: dist-files
path: dist/*.tar.gz
retention-days: 7

Expand All @@ -93,16 +105,16 @@ jobs:
runs-on: ubuntu-latest
needs: [build_wheels, build_sdist]
steps:
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v8
with:
name: artifact
path: dist
merge-multiple: true

- name: upload_source_and_wheels
uses: pypa/gh-action-pypi-publish@v1.8.10
uses: pypa/gh-action-pypi-publish@v1.14.0
with:
skip_existing: true
repository_url: https://test.pypi.org/legacy/
skip-existing: true
repository-url: https://test.pypi.org/legacy/

upload_pypi:
if: |
Expand All @@ -117,13 +129,13 @@ jobs:
runs-on: ubuntu-latest
needs: [build_wheels, build_sdist]
steps:
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v8
with:
name: artifact
path: dist
merge-multiple: true

- name: upload_source_and_wheels
uses: pypa/gh-action-pypi-publish@v1.8.10
uses: pypa/gh-action-pypi-publish@v1.14.0

check_testpypi:
if: |
Expand All @@ -132,22 +144,25 @@ jobs:
name: testpypi check
runs-on: ${{ matrix.os }}
timeout-minutes: 60
needs: upload_testpypi
needs: [upload_testpypi, build_sdist]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.9", "3.10", "3.11", "3.12"]
python-version: ["3.11", "3.12", "3.13", "3.14"]

steps:
- name: setup python
uses: actions/setup-python@v4
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

- name: pip install
- name: Wait for version to be available on TestPyPI (30 seconds)
run: sleep 30

- name: pip install mdaencore from testpypi (${{ needs.build_sdist.outputs.version }})
run: |
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple mdaencore
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple "mdaencore==${{ needs.build_sdist.outputs.version }}"

- name: install test deps
run: |
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,19 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: setup_miniconda
uses: conda-incubator/setup-miniconda@v2
uses: conda-incubator/setup-miniconda@v4
with:
python-version: 3.11
python-version: 3.14
Copy link
Copy Markdown
Member

@ojeda-e ojeda-e Apr 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm shadowing your changes here.
Since I’m not very familiar with this action (or conda in general), I wanted to ask: is this python-version meant to target the latest Python version? I’m wondering whether it might be better to target the oldest supported version instead, then if it works with the min supported here -3.11-, it should also work for newer versions.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it matters as it really only needs to build the docs. I just bumped it up so that it will be 2 years until someone has to bump it up again...

environment-file: docs/requirements.yaml
auto-update-conda: true
channel-priority: flexible
channels: conda-forge
miniforge-variant: Mambaforge
miniforge-version: latest
use-mamba: true

- name: Build and install package
Expand All @@ -55,7 +55,7 @@ jobs:
user_name: 'github-actions'
user_email: 'github-action@users.noreply.github.com'

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v7
if: github.event_name == 'pull_request'
with:
name: pr_docs
Expand Down
44 changes: 21 additions & 23 deletions .github/workflows/gh-ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ concurrency:

defaults:
run:
shell: bash -l {0}
shell: bash -el {0}

jobs:
main-tests:
Expand All @@ -29,19 +29,17 @@ jobs:
strategy:
fail-fast: false
matrix:
# macos-13 is x86_64 and macos-14 is arm64
os: [ubuntu-latest, windows-latest, macos-14, macos-13]
python-version: ["3.10", "3.11", "3.12"]
# macos-latest = arm64, macos-15-intel = x86_64
os: [ubuntu-latest, windows-latest, macos-latest, macos-15-intel]
python-version: ["3.11", "3.12", "3.13", "3.14"]
mdanalysis-version: ["latest", "develop"]
# Manually exclude any combinations of the test matrix that can't be run
exclude:
# The latest release of MDAnalysis only supports up to Python 3.11
# so we exclude 3.12 from the test matrix (issue #68)
- python-version: "3.12"
mdanalysis-version: "latest"
#exclude:
# - python-version: "3.12"
# mdanalysis-version: "latest"

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0

Expand All @@ -53,15 +51,15 @@ jobs:

# More info on options: https://github.com/conda-incubator/setup-miniconda
- name: Install conda dependencies
uses: conda-incubator/setup-miniconda@v3
uses: conda-incubator/setup-miniconda@v4
with:
python-version: ${{ matrix.python-version }}
environment-file: devtools/conda-envs/test_env.yaml
add-pip-as-python-dependency: true

miniforge-variant: Mambaforge
miniforge-version: latest
use-mamba: true
channels: conda-forge, defaults
channels: conda-forge

activate-environment: mdaencore-test
auto-update-conda: true
Expand All @@ -74,8 +72,8 @@ jobs:
with:
version: ${{ matrix.mdanalysis-version }}
install-tests: true
installer: mamba
shell: bash -l {0}
installer: conda
shell: bash -el {0}

- name: Install package
run: |
Expand All @@ -101,9 +99,9 @@ jobs:

- name: codecov
if: github.repository == 'MDAnalysis/mdaencore' && github.event_name != 'schedule'
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v6
with:
file: coverage.xml
files: coverage.xml
name: codecov-${{ matrix.os }}-py${{ matrix.python-version }}
token: ${{ secrets.CODECOV_TOKEN }}
verbose: True
Expand All @@ -115,12 +113,12 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v6
with:
python-version: "3.11"
python-version: "3.14"

- name: Install Pylint
run: |
Expand All @@ -140,12 +138,12 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v6
with:
python-version: "3.11"
python-version: "3.14"

- name: Install dependencies
run: |
Expand Down
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ The rules for this file:
- ianmkenney
- tylerjereddy
- IAlibay
- orbeckst

### Added
<!-- Added functionality -->
Expand All @@ -32,7 +33,7 @@ The rules for this file:

### Changed
- Update CI and wheel deployment to include macos-arm64 and py3.12 (PR #63)
- Minimum Python version has been raised to 3.10 (PR #66)
- Minimum Python version has been raised to 3.11 (PR #66, PR #76)
- Minimum MDAnalysis version has been raised to 2.1.0 (PR #66)

### Deprecated
Expand Down
1 change: 0 additions & 1 deletion devtools/conda-envs/test_env.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
name: mdaencore-test
channels:
- conda-forge
- defaults
dependencies:
# Base depends
- python
Expand Down
1 change: 0 additions & 1 deletion docs/requirements.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
name: mdaencore-docs
channels:
- default
- conda-forge
dependencies:
# Base depends
Expand Down
10 changes: 5 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ build-backend = "setuptools.build_meta"
[project]
name = "mdaencore"
description = "Ensemble overlap comparison software for molecular data."
license = {file = "LICENSE" }
license = "GPL-2.0-or-later"
license-files = ["LICENSE", "AUTHORS"]
authors = [
{name = "Matteo Tiberti", email = "tiberti@cancer.dk"},
{name = "Wouter Boomsma", email = "wb@di.ku.dk"},
Expand All @@ -29,20 +30,20 @@ classifiers = [
"Development Status :: 6 - Mature",
"Environment :: Console",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX",
"Programming Language :: C",
"Programming Language :: Python",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Scientific/Engineering",
"Topic :: Software Development :: Libraries :: Python Modules",
]
readme = "README.md"
requires-python = ">=3.10"
requires-python = ">=3.11"
dependencies = [
"MDAnalysis>=2.1.0",
"joblib",
Expand Down Expand Up @@ -82,7 +83,6 @@ testpaths = [

[tool.black]
line-length = 80
extend-exclude = "versioneer.py"

[tool.versioningit]
default-version = "1+unknown"
Expand Down
4 changes: 2 additions & 2 deletions readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ sphinx:
configuration: docs/source/conf.py

build:
os: ubuntu-22.04
os: ubuntu-24.04
tools:
python: "mambaforge-4.10"
python: "miniforge3-latest"

python:
install:
Expand Down
3 changes: 0 additions & 3 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
omit =
# Omit the tests
*/tests/*
# Omit generated versioneer
mdaencore/_version.py

[coverage:report]
exclude_also =
Expand All @@ -28,7 +26,6 @@ USE_TABS = False
[flake8]
# Flake8, PyFlakes, etc
max-line-length = 80
exclude = versioneer.py

[aliases]
test = pytest
Expand Down
Loading