diff --git a/.github/workflows/build-env.yml b/.github/workflows/build-env.yml index 8de2030a..cf44d754 100644 --- a/.github/workflows/build-env.yml +++ b/.github/workflows/build-env.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Docker uses: docker/setup-buildx-action@v1 - name: Login to registry - uses: docker/login-action@v1 + uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -24,5 +24,5 @@ jobs: with: push: true context: . - file: spack/ci-spack-pyprecice-deps-2204.dockerfile - tags: precice/ci-spack-pyprecice-deps-2204 + file: spack/ci-spack-pyprecice-deps-2404.dockerfile + tags: precice/ci-spack-pyprecice-deps-2404 diff --git a/.github/workflows/build-spack.yml b/.github/workflows/build-spack.yml index f4633796..8ff0b6cb 100644 --- a/.github/workflows/build-spack.yml +++ b/.github/workflows/build-spack.yml @@ -1,35 +1,35 @@ -# name: Build Spack -# on: -# push: -# branches: -# - "*" -# pull_request: -# branches: -# - "*" -# schedule: -# - cron: '0 4 * * 1' # Schedule it every Sunday -# -# jobs: -# build_spack: -# name: build_spack -# runs-on: ubuntu-latest -# timeout-minutes: 15 -# container: precice/ci-spack-pyprecice-deps-2204 -# defaults: -# run: -# shell: "bash --login -eo pipefail {0}" -# steps: -# - name: Checkout Repository -# uses: actions/checkout@v2 -# - name: Move Package Script -# run: | -# cp -r spack/repo/packages/py-pyprecice/ /py-pyprecice-repo/packages/ -# - name: Try to build py-pyprecice with spack and test it -# run: | -# . /opt/spack/share/spack/setup-env.sh -# spack env activate ci && spack arch -# spack remove py-pyprecice -# spack add pyprecice.test.py-pyprecice@develop && spack develop pyprecice.test.py-pyprecice@develop -# spack install && spack find -# spack load py-pyprecice -# BINDINGS_VERSION=$(python3 -c "import precice; print(precice.__version__)") && echo "Installed version of bindings is ${BINDINGS_VERSION}" \ No newline at end of file +name: Build Spack +on: + push: + branches: + - "*" + pull_request: + branches: + - "*" + schedule: + - cron: '0 4 * * 1' # Schedule it every Sunday + +jobs: + build_spack: + name: build_spack + runs-on: ubuntu-latest + timeout-minutes: 15 + container: precice/ci-spack-pyprecice-deps-2404 + defaults: + run: + shell: "bash --login -eo pipefail {0}" + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + - name: Move Package Script + run: | + cp -r spack/repo/packages/py-pyprecice/ /py-pyprecice-repo/packages/ + - name: Try to build py-pyprecice@develop with spack and test it + run: | + . /opt/spack/share/spack/setup-env.sh + spack env activate ci && spack arch + spack remove py-pyprecice + spack add pyprecice.test.py-pyprecice@develop && spack develop pyprecice.test.py-pyprecice@develop + spack install && spack find + spack load py-pyprecice + BINDINGS_VERSION=$(python3 -c "import precice; print(precice.__version__)") && echo "Installed version of bindings is ${BINDINGS_VERSION}" \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8741bca3..aa26432a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. +## v3.1.2 + +* Restrict to numpy < 2 for better compatibility with CI pipeline. https://github.com/precice/python-bindings/pull/213 +* Require setuptools < 72 since support for the test command was removed in Setuptools 72. https://github.com/precice/python-bindings/pull/213 +* Require setuptools >= 61 to guarantee that pyproject.toml is used https://github.com/precice/python-bindings/pull/207 +* Fix CI pipeline for spack https://github.com/precice/python-bindings/pull/206 + ## v3.1.1 * Fix NumPy include order to not conflict with system NumPy and the one installed via pip https://github.com/precice/python-bindings/pull/204 diff --git a/cyprecice/cyprecice.pyx b/cyprecice/cyprecice.pyx index a2897186..557e8f04 100644 --- a/cyprecice/cyprecice.pyx +++ b/cyprecice/cyprecice.pyx @@ -818,7 +818,8 @@ cdef class Participant: >>> mesh_name = "MeshOne" >>> data_name = "DataOne" >>> vertex_ids = [1, 2, 3, 4, 5] - >>> values = read_data(mesh_name, data_name, vertex_ids) + >>> dt = 1.0 + >>> values = read_data(mesh_name, data_name, vertex_ids, dt) >>> values.shape >>> (5, ) @@ -826,7 +827,8 @@ cdef class Participant: >>> mesh_name = "MeshOne" >>> data_name = "DataOne" >>> vertex_ids = [1, 2, 3, 4, 5] - >>> values = read_data(mesh_name, data_name, vertex_ids) + >>> dt = 1.0 + >>> values = read_data(mesh_name, data_name, vertex_ids, dt) >>> values.shape >>> (5, 2) @@ -834,7 +836,8 @@ cdef class Participant: >>> mesh_name = "MeshOne" >>> data_name = "DataOne" >>> vertex_ids = [1, 2, 3, 4, 5] - >>> values = read_data(mesh_name, data_name, vertex_ids) + >>> dt = 1.0 + >>> values = read_data(mesh_name, data_name, vertex_ids, dt) >>> values.shape >>> (5, 3) """ diff --git a/docs/ReleaseGuide.md b/docs/ReleaseGuide.md index 8cf10da0..5e9aa226 100644 --- a/docs/ReleaseGuide.md +++ b/docs/ReleaseGuide.md @@ -25,7 +25,7 @@ The release of the `python-bindings` repository is made directly from a release 7. If everything is in order up to this point then the new version can be released by hitting the "Publish release" button in your release Draft. This will create the corresponding tag and trigger [publishing the release to PyPI](https://github.com/precice/python-bindings/actions?query=workflow%3A%22Upload+Python+Package%22). -8. Now there exists be a tag corresponding to the release on `master`. Re-run the [docker release workflow `build-docker.yml` via dispatch]([https://github.com/precice/fenics-adapter/actions/workflows/build-docker.yml](https://github.com/precice/python-bindings/actions/workflows/build-docker.yml)) such that the correct version is picked up by `versioneer`. Check the version in the container via `docker pull precice/pythonbindings`, then `docker run -ti precice/pythonbindings`, and inside the container `$ python3 -c "import precice; print(precice.__version__)"`. ⚠️ There is an open issue that needs fixing https://github.com/precice/python-bindings/issues/195 ⚠️ +8. Now there exists be a tag corresponding to the release on `master`. Re-run the [docker release workflow `build-docker.yml` via dispatch]([https://github.com/precice/fenics-adapter/actions/workflows/build-docker.yml](https://github.com/precice/python-bindings/actions/workflows/build-docker.yml)) such that the correct version is picked up by `versioneer`. Check the version in the container via `docker pull precice/python-bindings`, then `docker run -ti precice/python-bindings`, and inside the container `$ python3 -c "import precice; print(precice.__version__)"`. ⚠️ There is an open issue that needs fixing https://github.com/precice/python-bindings/issues/195 ⚠️ 9. Add an empty commit (details https://github.com/precice/python-bindings/issues/109) on master by running the steps: diff --git a/pyproject.toml b/pyproject.toml index a618c480..6f8c358a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,3 @@ [build-system] # PEP 518 - minimum build system requirements -requires = ["setuptools", "wheel", "Cython>=0.29", "packaging", "pip>=19.0.0", "numpy", "mpi4py", "pkgconfig"] +requires = ["setuptools>=61,<72", "wheel", "Cython>=0.29", "packaging", "pip>=19.0.0", "numpy<2", "mpi4py", "pkgconfig"] \ No newline at end of file diff --git a/setup.py b/setup.py index 31750061..2adf7a44 100644 --- a/setup.py +++ b/setup.py @@ -5,17 +5,6 @@ uses_pip = "pip" in __file__ -# check whether pip is used for installation. If pip is not used, dependencies defined in pyproject.toml might be -# missing. -if not uses_pip: - warnings.warn( - "It looks like you are not using pip for installation. Installing the package via 'pip3 install " - "--user .' is recommended. You can still use 'python3 setup.py install --user', if you want and if " - "the bindings work correctly, you do not have to worry. However, if you face problems during " - "installation or running pyprecice, this means that you have to make sure that all dependencies are " - "installed correctly and repeat the installation of pyprecice. Refer to pyproject.toml for a list " - "of dependencies.") - if uses_pip: # If installed with pip we need to check its version try: @@ -45,7 +34,6 @@ " flag.".format(pip.__version__)) from setuptools import setup -from setuptools import Command from setuptools.command.test import test from setuptools.command.install import install from Cython.Distutils.extension import Extension @@ -149,7 +137,7 @@ def initialize_options(self): author_email='info@precice.org', license='LGPL-3.0', python_requires='>=3', - install_requires=['numpy', 'mpi4py', 'Cython'], + install_requires=['numpy<2', 'mpi4py', 'Cython'], # mpi4py is only needed, if preCICE was compiled with MPI # see https://github.com/precice/python-bindings/issues/8 packages=['precice'], diff --git a/spack/README.md b/spack/README.md index f905741f..a8f92f4c 100644 --- a/spack/README.md +++ b/spack/README.md @@ -2,11 +2,11 @@ The Spack package `py-pyprecice` provides the python bindings via Spack and was submitted via [pull request 19558](https://github.com/spack/spack/pull/19558) in the Spack repository. This folder contains the Spack package script that can be used for testing whether the Spack installation works. -## Docker image `precice/ci-spack-pyprecice-deps-2204` +## Docker image `precice/ci-spack-pyprecice-deps-2404` -The workflow `build-spack-pyprecice-deps` in `.github/workflows/build-env.yml` creates the image `precice/ci-spack-pyprecice-deps-2204`. This image contains all dependencies of `py-pyprecice@develop`. +The workflow `build-spack-pyprecice-deps` in `.github/workflows/build-env.yml` creates the image `precice/ci-spack-pyprecice-deps-2404`. This image contains all dependencies of `py-pyprecice@develop`. -The workflow `build_spack` in `.github/workflows/build-spack.yml` uses the image `precice/ci-spack-pyprecice-deps-2204` to reduce build time. The workflow uses the `package.py` from this repository to build the latest version of the bindings and run a small test on this version. +The workflow `build_spack` in `.github/workflows/build-spack.yml` uses the image `precice/ci-spack-pyprecice-deps-2404` to reduce build time. The workflow uses the `package.py` from this repository to build the latest version of the bindings and run a small test on this version. ## When a new Spack release is necessary diff --git a/spack/ci-spack-pyprecice-deps-2204.dockerfile b/spack/ci-spack-pyprecice-deps-2404.dockerfile similarity index 94% rename from spack/ci-spack-pyprecice-deps-2204.dockerfile rename to spack/ci-spack-pyprecice-deps-2404.dockerfile index 545b4baf..13051242 100644 --- a/spack/ci-spack-pyprecice-deps-2204.dockerfile +++ b/spack/ci-spack-pyprecice-deps-2404.dockerfile @@ -1,5 +1,5 @@ # Build stage with Spack pre-installed and ready to be used -FROM spack/ubuntu-jammy:latest +FROM spack/ubuntu-noble:latest # Mount the current sources into the build container # and build the default environment diff --git a/spack/repo/packages/py-pyprecice/package.py b/spack/repo/packages/py-pyprecice/package.py index 56a744f9..7ee79d6e 100644 --- a/spack/repo/packages/py-pyprecice/package.py +++ b/spack/repo/packages/py-pyprecice/package.py @@ -1,4 +1,4 @@ -# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other +# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) @@ -14,13 +14,18 @@ class PyPyprecice(PythonPackage): homepage = "https://precice.org" git = "https://github.com/precice/python-bindings.git" - url = "https://github.com/precice/python-bindings/archive/v2.4.0.0.tar.gz" + url = "https://github.com/precice/python-bindings/archive/v3.1.1.tar.gz" maintainers("ajaust", "BenjaminRodenberg", "IshaanDesai") # Always prefer final version of release candidate version("develop", branch="develop") + version("3.1.1", sha256="50a0f1cbdb8fc362c22d316151c0e757958ff136a094e63b9b82d045d01d19c7") + version("3.1.0", sha256="8d9bd9e28859001ab503a1e2f90e54b3c000079f04c14dc7c0c04c61c5666641") + version("3.0.0.0", sha256="7e2c4b106a231b0df2a430d86d4a7b295f85adbe3478c425f863d1a4bebee9f7") + version("2.5.0.4", sha256="7f9449573eb52ce48ca3f0ab35529ea0064942487842515ae0a2c9299aa0f0db") + version("2.5.0.3", sha256="b983229b9fdf6bd4605ae8710985eb681025f6fb28ad8d7736cdf92593eef6df") version("2.5.0.2", sha256="6d7b78da830db6c5133b44617196ee90be8c7d6c8e14c8994a4800b3d4856416") - version("2.5.0.1", sha256="e2602f828d4f907ea93e34f7d4adb8db086044a75a446592a4099423d56ed62c") + version("2.5.0.1", sha256="d7c666e6ebff9e007c3703d8e3c3fcdf0f45289e36c2c17223b3aedc3259ab6c") version("2.5.0.0", sha256="9f55a22594bb602cde8a5987217728569f16d9576ea53ed00497e9046a2e1794") version("2.4.0.0", sha256="e80d16417b8ce1fdac80c988cb18ae1e16f785c5eb1035934d8b37ac18945242") version("2.3.0.1", sha256="ed4e48729b662680beaa4ee2a9aff724a79e760534c6c58181be739988da2789") @@ -37,6 +42,8 @@ class PyPyprecice(PythonPackage): for ver in [ "develop", + "3.1", # only consider major.minor from 3.1.0. See https://github.com/precice/python-bindings/pull/199 + "3.0.0", "2.5.0", "2.4.0", "2.3.0", @@ -51,8 +58,8 @@ class PyPyprecice(PythonPackage): depends_on("precice@" + ver, when="@" + ver) depends_on("python@3:", type=("build", "link", "run")) - depends_on("py-setuptools", type="build") - depends_on("py-numpy", type=("build", "link", "run")) + depends_on("py-setuptools@61:71", type="build") + depends_on("py-numpy@:1", type=("build", "link", "run")) depends_on("py-mpi4py", type=("build", "run")) depends_on("py-cython@0.29:", type="build") depends_on("py-packaging", type="build")