From 32ce113608706ee8cb59372bea7c82d95e664185 Mon Sep 17 00:00:00 2001 From: Maks Snegov Date: Tue, 3 Feb 2026 21:27:49 -0800 Subject: [PATCH] Migrate to pyproject.toml with setuptools_scm Replace custom version management with setuptools_scm to eliminate source file modifications during installation. Version is now derived from git tags at build time without writing to tracked files. Changes: - Add pyproject.toml with full project metadata - Simplify setup.py to minimal backwards-compatible shim - Remove curateipsum/_version.py from version control - Add _version.py to .gitignore (auto-generated at build time) - Use PEP 440 compliant version strings Fixes #18 --- .gitignore | 6 ++++- curateipsum/_version.py | 1 - pyproject.toml | 36 +++++++++++++++++++++++++++++ setup.py | 51 ++++------------------------------------- 4 files changed, 45 insertions(+), 49 deletions(-) delete mode 100644 curateipsum/_version.py create mode 100644 pyproject.toml diff --git a/.gitignore b/.gitignore index f469996..11c0cc4 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,9 @@ wheels/ *.egg MANIFEST +# Version file generated by setuptools_scm +curateipsum/_version.py + # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. @@ -72,8 +75,9 @@ target/ # Jupyter Notebook .ipynb_checkpoints -# pyenv +# uv .python-version +uv.lock # celery beat schedule file celerybeat-schedule diff --git a/curateipsum/_version.py b/curateipsum/_version.py deleted file mode 100644 index 65bf3ad..0000000 --- a/curateipsum/_version.py +++ /dev/null @@ -1 +0,0 @@ -version = "master" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..5e0caaa --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,36 @@ +[build-system] +requires = ["setuptools>=64", "setuptools_scm>=8"] +build-backend = "setuptools.build_meta" + +[project] +name = "cura-te-ipsum" +dynamic = ["version"] +description = "Backup utility" +authors = [ + {name = "Maks Snegov", email = "snegov@spqr.link"} +] +readme = "README.md" +requires-python = ">=3.6" +classifiers = [ + "Development Status :: 2 - Pre-Alpha", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Topic :: System :: Archiving :: Backup", +] + +[project.urls] +Homepage = "https://github.com/snegov/cura-te-ipsum" +"Bug Tracker" = "https://github.com/snegov/cura-te-ipsum/issues" +GitHub = "https://github.com/snegov/cura-te-ipsum" + +[project.scripts] +cura-te-ipsum = "curateipsum.cli:main" + +[tool.setuptools] +packages = ["curateipsum"] + +[tool.setuptools_scm] +version_file = "curateipsum/_version.py" diff --git a/setup.py b/setup.py index 0230b7f..1a9e69a 100644 --- a/setup.py +++ b/setup.py @@ -1,48 +1,5 @@ -import setuptools -import subprocess +# Minimal setup.py for backwards compatibility +# All configuration is in pyproject.toml +from setuptools import setup - -def get_version_from_vcs(): - ret_code, git_ver = subprocess.getstatusoutput("git describe") - if ret_code != 0: - from curateipsum._version import version - return version - - with open("curateipsum/_version.py", "w") as fd: - fd.write("version = \"%s\"\n" % git_ver) - return git_ver - - -with open("README.md", "r", encoding="utf-8") as fh: - long_description = fh.read() - -setuptools.setup( - name="cura-te-ipsum", - version=get_version_from_vcs(), - author="Maks Snegov", - author_email="snegov@spqr.link", - url="https://github.com/snegov/cura-te-ipsum", - description="Backup utility", - long_description=long_description, - long_description_content_type="text/markdown", - project_urls={ - "Bug Tracker": "https://github.com/snegov/cura-te-ipsum/issues", - "GitHub": "https://github.com/snegov/cura-te-ipsum", - }, - classifiers=[ - "Development Status :: 2 - Pre-Alpha", - "Intended Audience :: Developers", - "Intended Audience :: System Administrators", - "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", - "Operating System :: OS Independent", - "Programming Language :: Python :: 3", - "Topic :: System :: Archiving :: Backup", - ], - packages=setuptools.find_packages(include=["curateipsum"]), - entry_points={ - "console_scripts": [ - "cura-te-ipsum = curateipsum.cli:main", - ], - }, - python_requires=">=3.6", -) +setup()