diff --git a/.github/workflows/publish-to-pypi.yml b/.github/workflows/publish-to-pypi.yml new file mode 100644 index 0000000..442973d --- /dev/null +++ b/.github/workflows/publish-to-pypi.yml @@ -0,0 +1,65 @@ +name: PyPI + +on: + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+rc[0-9]+' + +jobs: + build: + name: Build distribution 📦 + runs-on: ubuntu-latest + container: # we have to provide a working triqs installation to make the cmake step work + image: flatironinstitute/triqs:latest + options: --user root + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install pypa/build + run: >- + python3 -m + pip install + build toml + --user + - name: prepare python distribution + run: | + git config --global --add safe.directory ${GITHUB_WORKSPACE} + cmake -S . -B build/ + cp build/packaging/pypi/* ./ + mv build/python/triqs_hubbardI/version.py ./python/triqs_hubbardI/version.py + rm ./python/triqs_hubbardI/version.py.in + - name: Build a binary wheel and a source tarball + run: python3 -m build + - name: Store the distribution packages + uses: actions/upload-artifact@v4 + with: + name: python-package-distributions + path: dist/ + + publish-to-pypi: + name: Publish PyPI 🐍 + needs: + - build + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/hubbardI + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + skip-existing: true # skip if version name package already exists on pypi + diff --git a/CMakeLists.txt b/CMakeLists.txt index 17b5138..80e7f6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ cmake_policy(VERSION 3.20) # ############ # Define Project -project(triqs_hubbardI VERSION 3.2.0 LANGUAGES C CXX) +project(triqs_hubbardI VERSION 3.2.1 LANGUAGES C CXX) get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY) # ############ @@ -104,6 +104,9 @@ endif() # Additional configuration files add_subdirectory(share) +# add packaging for automatic Versioning +add_subdirectory(packaging) + # ############# # Debian Package diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index 530e0ce..4ac8d96 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -2,6 +2,11 @@ # Changelog +## Version 3.2.1 + +hubbardI version 3.2.1 is a small update +* automatically build pypi packages + ## Version 3.2.0 hubbardI version 3.2.0 is a compatibility release for TRIQS version 3.2.0 diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt new file mode 100644 index 0000000..1dae8be --- /dev/null +++ b/packaging/CMakeLists.txt @@ -0,0 +1,9 @@ +# Configure the version of packaging files +configure_file(conda/meta.yaml.in conda/meta.yaml) +configure_file(conda/build.sh conda/build.sh COPYONLY) +configure_file(conda/conda_build_config.yaml conda/conda_build_config.yaml COPYONLY) +configure_file(pypi/MANIFEST.in pypi/MANIFEST.in COPYONLY) +configure_file(pypi/pyproject.toml.in pypi/pyproject.toml) +configure_file(TRIQS-hubbardI-foss-2021b.eb.in TRIQS-hubbardI-foss-2021b.eb) + + diff --git a/packaging/TRIQS-hubbardI-foss-2021b.eb.in b/packaging/TRIQS-hubbardI-foss-2021b.eb.in new file mode 100644 index 0000000..5aba0b7 --- /dev/null +++ b/packaging/TRIQS-hubbardI-foss-2021b.eb.in @@ -0,0 +1,58 @@ +easyblock = 'CMakeMake' + +name = 'TRIQS-hubbardI' +version = '@PROJECT_VERSION@' + +homepage = 'https://triqs.github.io/hubbardI/' +description = """ + Hubbard-I impurity solver based on the TRIQS library +""" + +docurls = ['https://triqs.github.io/hubbardI/%(version_major_minor)s.x/'] +software_license = 'LicenseGPLv3' + +toolchain = {'name': 'foss', 'version': '2021b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://github.com/TRIQS/hubbardI/releases/download/%(version)s/'] +sources = ['hubbardI-%(version)s.tar.gz'] +checksums = ['PUT HERE THE SHA256 OF THE RELEASE TARBALL'] + +dependencies = [ + ('Python', '3.9.6'), + ('SciPy-bundle', '2021.10'), + ('Boost', '1.77.0'), + ('Clang', '13.0.1'), + ('Clang-Python-bindings', '13.0.1'), + ('GMP', '6.2.1'), + ('HDF5', '1.10.7'), + ('Mako', '1.1.4'), + ('TRIQS', '3.2.0'), + ('NFFT', '3.5.2') +] + +builddependencies = [ + ('CMake', '3.22.1') +] + +separate_build_dir = True + +runtest = 'test' + +sanity_check_paths = { + 'dirs': ['lib', 'share', + 'lib/python%(pyshortver)s/site-packages/triqs_hubbardI'], +} + +sanity_check_commands = ["python -c 'import triqs_hubbardI'"] + +modextrapaths = { + 'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages/triqs_hubbardI', + 'CMAKE_PREFIX_PATH': 'lib/cmake/hubbardI', +} +modextravars = { + 'HUBBARDI_ROOT': '%(installdir)s', + 'HUBBARDI_VERSION': '%(version)s', +} + +moduleclass = 'phys' diff --git a/packaging/conda/meta.yaml b/packaging/conda/meta.yaml.in similarity index 96% rename from packaging/conda/meta.yaml rename to packaging/conda/meta.yaml.in index 68c56dc..e57c951 100644 --- a/packaging/conda/meta.yaml +++ b/packaging/conda/meta.yaml.in @@ -1,4 +1,4 @@ -{% set version = "3.1.0" %} +{% set version = "@PROJECT_VERSION@" %} package: name: hubbardI diff --git a/packaging/pypi/MANIFEST.in b/packaging/pypi/MANIFEST.in new file mode 100644 index 0000000..2cad09e --- /dev/null +++ b/packaging/pypi/MANIFEST.in @@ -0,0 +1,13 @@ +prune test +prune .git +prune .github +prune doc +prune share +prune Docker +prune deps +prune packaging +prune paper +prune bin +prune build + +global-exclude .clang-format .clang-tidy .dockerignore .gitignore CMakeLists.txt Jenkinsfile diff --git a/packaging/pypi/pyproject.toml.in b/packaging/pypi/pyproject.toml.in new file mode 100644 index 0000000..622db98 --- /dev/null +++ b/packaging/pypi/pyproject.toml.in @@ -0,0 +1,35 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[tool.setuptools.packages.find] +where = ["python"] + +[project] +name = "hubbardI" +version = "@PROJECT_VERSION@" +authors = [ + { name="TRIQS", email="triqs@flatironinstitute.org" } +] +description = "Hubbard-I impurity solver based on the TRIQS library" +readme = "README.md" +keywords = ["triqs", "hhubbard-I", "impurity solver", "dmft"] +requires-python = ">=3.7" +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Operating System :: OS Independent", +] +dependencies = [ + "numpy", + "scipy" +] + +[project.urls] +"Homepage" = "https://triqs.github.io/hartree_fock" +"Bug Tracker" = "https://github.com/triqs/hartree_fock/issues" + +# in case you want an executable hook of your app +# [project.scripts] +# solid_dmft = "solid_dmft.main:main" +