diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 198736f..86fe633 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -19,7 +19,7 @@ concurrency: defaults: run: - shell: bash + shell: bash -l {0} jobs: @@ -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, 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] }} @@ -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 @@ -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 @@ -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: | @@ -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: | @@ -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: | diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 631f17d..8d1fa26 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -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 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 @@ -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 diff --git a/.github/workflows/gh-ci.yaml b/.github/workflows/gh-ci.yaml index 88f2d8a..11f0f42 100644 --- a/.github/workflows/gh-ci.yaml +++ b/.github/workflows/gh-ci.yaml @@ -20,7 +20,7 @@ concurrency: defaults: run: - shell: bash -l {0} + shell: bash -el {0} jobs: main-tests: @@ -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 @@ -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 @@ -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: | @@ -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 @@ -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: | @@ -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: | diff --git a/CHANGELOG.md b/CHANGELOG.md index 12f35fd..c59668c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ The rules for this file: - ianmkenney - tylerjereddy - IAlibay +- orbeckst ### Added @@ -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 diff --git a/devtools/conda-envs/test_env.yaml b/devtools/conda-envs/test_env.yaml index cf9350a..97ce5fe 100644 --- a/devtools/conda-envs/test_env.yaml +++ b/devtools/conda-envs/test_env.yaml @@ -1,7 +1,6 @@ name: mdaencore-test channels: - conda-forge - - defaults dependencies: # Base depends - python diff --git a/docs/requirements.yaml b/docs/requirements.yaml index b8e2125..9df4b53 100644 --- a/docs/requirements.yaml +++ b/docs/requirements.yaml @@ -1,6 +1,5 @@ name: mdaencore-docs channels: - - default - conda-forge dependencies: # Base depends diff --git a/pyproject.toml b/pyproject.toml index ae1043f..ad94f80 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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.md"] authors = [ {name = "Matteo Tiberti", email = "tiberti@cancer.dk"}, {name = "Wouter Boomsma", email = "wb@di.ku.dk"}, @@ -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", @@ -82,7 +83,6 @@ testpaths = [ [tool.black] line-length = 80 -extend-exclude = "versioneer.py" [tool.versioningit] default-version = "1+unknown" diff --git a/readthedocs.yaml b/readthedocs.yaml index 875aac1..91a9a2b 100644 --- a/readthedocs.yaml +++ b/readthedocs.yaml @@ -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: diff --git a/setup.cfg b/setup.cfg index 50ebcd0..87ea506 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,8 +5,6 @@ omit = # Omit the tests */tests/* - # Omit generated versioneer - mdaencore/_version.py [coverage:report] exclude_also = @@ -28,7 +26,6 @@ USE_TABS = False [flake8] # Flake8, PyFlakes, etc max-line-length = 80 -exclude = versioneer.py [aliases] test = pytest