diff --git a/cookiecutter.json b/cookiecutter.json index 802db9b..16bcf7d 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -8,6 +8,7 @@ "gitlab_ci": ["Yes", "No"], "notebooks": ["Yes", "No"], "commandlineinterface": ["No", "Yes"], + "version_management": ["manually", "setuptools_scm"], "_extensions": [ "local_extensions.PrecommitExtension", "local_extensions.ShortcutExtension", diff --git a/tests/test_bake_project.py b/tests/test_bake_project.py index 9bc17af..d2216b2 100644 --- a/tests/test_bake_project.py +++ b/tests/test_bake_project.py @@ -22,13 +22,15 @@ def test_with_remote(cookies): @pytest.mark.local @pytest.mark.parametrize("cli", ("Yes", "No")) @pytest.mark.parametrize("notebooks", ("Yes", "No")) -def test_pytest_run(cookies, virtualenv, cli, notebooks): +@pytest.mark.parametrize("version_management", ("manually", "setuptools_scm")) +def test_pytest_run(cookies, virtualenv, cli, notebooks, version_management): # Bake the project bake = cookies.bake( extra_context={ 'project_slug': 'test_project', 'commandlineinterface': cli, 'notebooks': notebooks, + 'version_management': version_management } ) diff --git a/{{cookiecutter.project_slug}}/.github/workflows/pypi.yml b/{{cookiecutter.project_slug}}/.github/workflows/pypi.yml index d066064..abd6ac8 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/pypi.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/pypi.yml @@ -15,9 +15,11 @@ jobs: steps: - uses: actions/checkout@v4 +{%- if cookiecutter.version_management == "setuptools_scm" %} with: - # setuptools_scm requires a non-shallow clone of the repository - fetch-depth: 0 + # setuptools_scm requires a non-shallow clone of the repository + fetch-depth: 0 +{%- endif %} - uses: actions/setup-python@v5 name: Install Python diff --git a/{{cookiecutter.project_slug}}/.gitignore b/{{cookiecutter.project_slug}}/.gitignore index 1accbcf..9d6700a 100644 --- a/{{cookiecutter.project_slug}}/.gitignore +++ b/{{cookiecutter.project_slug}}/.gitignore @@ -1,6 +1,7 @@ +{%- if cookiecutter.version_management == "setuptools_scm" %} # Ignore setuptools_scm generated version file {{ cookiecutter|modname }}/_version.py - +{%- endif %} # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/{{cookiecutter.project_slug}}/pyproject.toml b/{{cookiecutter.project_slug}}/pyproject.toml index dcb1470..026570e 100644 --- a/{{cookiecutter.project_slug}}/pyproject.toml +++ b/{{cookiecutter.project_slug}}/pyproject.toml @@ -4,7 +4,9 @@ [build-system] requires = [ "setuptools >=61", +{%- if cookiecutter.version_management == "setuptools_scm" %} "setuptools_scm >=7", +{%- endif %} ] build-backend = "setuptools.build_meta" @@ -18,7 +20,11 @@ readme = "README.md" maintainers = [ { name = "{{ cookiecutter.full_name}}", email = "your@email.com" }, ] +{%- if cookiecutter.version_management == "setuptools_scm" %} dynamic = ["version"] +{%- else %} +version = "0.0.1" +{%- endif %} requires-python = ">=3.8" {%- if cookiecutter.license != "None" %} license = { text = "{{ cookiecutter.license }}" } @@ -75,6 +81,7 @@ docs = [ packages = [ "{{ cookiecutter|modname }}", ] +{%- if cookiecutter.version_management == "setuptools_scm" %} # Configure setuptools_scm, which extracts the version number from # the version control system. For more information see its documentation: @@ -83,6 +90,7 @@ packages = [ version_scheme = "post-release" local_scheme = "node-and-date" write_to = "{{ cookiecutter|modname }}/_version.py" +{%- endif %} # The following is the configuration for the pytest test suite [tool.pytest.ini_options] diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.__modname}}/__init__.py b/{{cookiecutter.project_slug}}/{{cookiecutter.__modname}}/__init__.py index 7a6ece7..4330ee1 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.__modname}}/__init__.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.__modname}}/__init__.py @@ -1,6 +1,12 @@ +{%- if cookiecutter.version_management == "setuptools_scm" %} # The version file is generated automatically by setuptools_scm from {{ cookiecutter|modname }}._version import version as __version__ +{%- else %} +from importlib import metadata +__version__ = metadata.version(__package__) +del metadata +{%- endif %} def add_one(x: int): """An example function that increases a number