copier-python 0.16.0__tar.gz → 0.16.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. {copier_python-0.16.0 → copier_python-0.16.2}/PKG-INFO +1 -1
  2. copier_python-0.16.2/pyproject.toml +139 -0
  3. {copier_python-0.16.0 → copier_python-0.16.2}/tests/conftest.py +4 -1
  4. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_mise_toml.ambr +16 -16
  5. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_workflows.ambr +100 -20
  6. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_structure.py +1 -1
  7. copier_python-0.16.0/pyproject.toml +0 -147
  8. {copier_python-0.16.0 → copier_python-0.16.2}/.gitignore +0 -0
  9. {copier_python-0.16.0 → copier_python-0.16.2}/AGENTS.md +0 -0
  10. {copier_python-0.16.0 → copier_python-0.16.2}/CONTRIBUTING.md +0 -0
  11. {copier_python-0.16.0 → copier_python-0.16.2}/LICENSE +0 -0
  12. {copier_python-0.16.0 → copier_python-0.16.2}/README.md +0 -0
  13. {copier_python-0.16.0 → copier_python-0.16.2}/copier_python/__init__.py +0 -0
  14. {copier_python-0.16.0 → copier_python-0.16.2}/copier_python/__main__.py +0 -0
  15. {copier_python-0.16.0 → copier_python-0.16.2}/copier_python/py.typed +0 -0
  16. {copier_python-0.16.0 → copier_python-0.16.2}/copier_python/repo.py +0 -0
  17. {copier_python-0.16.0 → copier_python-0.16.2}/copier_python/update.py +0 -0
  18. {copier_python-0.16.0 → copier_python-0.16.2}/docs/contributing.md +0 -0
  19. {copier_python-0.16.0 → copier_python-0.16.2}/docs/development/requirements.md +0 -0
  20. {copier_python-0.16.0 → copier_python-0.16.2}/docs/development/updates.md +0 -0
  21. {copier_python-0.16.0 → copier_python-0.16.2}/docs/development/workflow.md +0 -0
  22. {copier_python-0.16.0 → copier_python-0.16.2}/docs/index.md +0 -0
  23. {copier_python-0.16.0 → copier_python-0.16.2}/docs/license.md +0 -0
  24. {copier_python-0.16.0 → copier_python-0.16.2}/docs/project-creation.md +0 -0
  25. {copier_python-0.16.0 → copier_python-0.16.2}/docs/project-development.md +0 -0
  26. {copier_python-0.16.0 → copier_python-0.16.2}/docs/project-release.md +0 -0
  27. {copier_python-0.16.0 → copier_python-0.16.2}/docs/project-setup.md +0 -0
  28. {copier_python-0.16.0 → copier_python-0.16.2}/docs/project-updates.md +0 -0
  29. {copier_python-0.16.0 → copier_python-0.16.2}/docs/releasing.md +0 -0
  30. {copier_python-0.16.0 → copier_python-0.16.2}/docs/requirements.md +0 -0
  31. {copier_python-0.16.0 → copier_python-0.16.2}/docs/setup.md +0 -0
  32. {copier_python-0.16.0 → copier_python-0.16.2}/tests/__init__.py +0 -0
  33. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__init__.py +0 -0
  34. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_agents.ambr +0 -0
  35. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_compose.ambr +0 -0
  36. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_contributing.ambr +0 -0
  37. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_dockerfile.ambr +0 -0
  38. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_docs.ambr +0 -0
  39. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_license.ambr +0 -0
  40. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_pyproject.ambr +0 -0
  41. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_readme.ambr +0 -0
  42. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/__snapshots__/test_zensical.ambr +0 -0
  43. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_agents.py +0 -0
  44. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_compose.py +0 -0
  45. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_contributing.py +0 -0
  46. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_dockerfile.py +0 -0
  47. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_docs.py +0 -0
  48. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_license.py +0 -0
  49. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_mise_toml.py +0 -0
  50. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_pyproject.py +0 -0
  51. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_readme.py +0 -0
  52. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_template.py +0 -0
  53. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_workflows.py +0 -0
  54. {copier_python-0.16.0 → copier_python-0.16.2}/tests/template/test_zensical.py +0 -0
  55. {copier_python-0.16.0 → copier_python-0.16.2}/tests/test_update.py +0 -0
  56. {copier_python-0.16.0 → copier_python-0.16.2}/tests/test_version.py +0 -0
  57. {copier_python-0.16.0 → copier_python-0.16.2}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: copier-python
3
- Version: 0.16.0
3
+ Version: 0.16.2
4
4
  Summary: Copier template for Python projects with modern tooling
5
5
  Project-URL: Homepage, https://smkent.github.io/copier-python
6
6
  Project-URL: Repository, https://github.com/smkent/copier-python
@@ -0,0 +1,139 @@
1
+ [build-system]
2
+ requires = ["hatchling", "uv-dynamic-versioning"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "copier-python"
7
+ dynamic = ["version"]
8
+ description = "Copier template for Python projects with modern tooling"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ license-files = ["LICENSE"]
12
+ requires-python = ">=3.10"
13
+ authors = [{ name = "Stephen Kent", email = "smkent@smkent.net" }]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Developers",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3 :: Only",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Programming Language :: Python :: 3.14",
24
+ "Topic :: Documentation",
25
+ "Topic :: Software Development",
26
+ "Topic :: Utilities",
27
+ "Typing :: Typed",
28
+ ]
29
+ keywords = []
30
+ dependencies = [
31
+ "pyyaml>=6",
32
+ "rich>=15",
33
+ "typer>=0.9",
34
+ "typing_extensions>=4.1; python_version < '3.12'",
35
+ ]
36
+
37
+ [project.scripts]
38
+ copier-python = "copier_python.__main__:main"
39
+
40
+ [project.urls]
41
+ Homepage = "https://smkent.github.io/copier-python"
42
+ Repository = "https://github.com/smkent/copier-python"
43
+ Issues = "https://github.com/smkent/copier-python/issues"
44
+
45
+ [dependency-groups]
46
+ dev = [
47
+ "bump-my-version>=1.3.0",
48
+ "copier>=9",
49
+ "poethepoet>=0.46",
50
+ "pysentry-rs>=0.4",
51
+ "pytest>=9",
52
+ "pytest-cov>=7",
53
+ "pytest-sugar>=1",
54
+ "pytest-xdist>=3",
55
+ "ruff>=0.15",
56
+ "syrupy>=5",
57
+ "ty>=0.0.49",
58
+ "typing-extensions>=4",
59
+ ]
60
+ docs = ["zensical>=0.0.45"]
61
+
62
+ [tool.bumpversion]
63
+ commit = false
64
+ tag = true
65
+ tag_name = "v{new_version}"
66
+ tag_message = ""
67
+ push = true
68
+
69
+ [tool.hatch.build.targets.sdist]
70
+ include = ["/copier_python", "/tests", "*.md", "LICENSE"]
71
+
72
+ [tool.hatch.version]
73
+ source = "uv-dynamic-versioning"
74
+
75
+ [tool.pytest]
76
+ addopts = [
77
+ "-ra",
78
+ "--cov=copier_python",
79
+ "--strict-config",
80
+ "--strict-markers",
81
+ "--numprocesses",
82
+ "auto",
83
+ ]
84
+ testpaths = ["tests"]
85
+
86
+ [tool.coverage.run]
87
+ source = ["copier_python"]
88
+ branch = true
89
+
90
+ [tool.coverage.report]
91
+ show_missing = true
92
+ skip_covered = true
93
+ exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:", "@abstractmethod"]
94
+
95
+ [tool.ruff]
96
+ line-length = 79
97
+ output-format = "concise"
98
+ target-version = "py310"
99
+
100
+ [tool.ruff.lint]
101
+ select = ["ALL"]
102
+ ignore = [
103
+ "ANN401", # Dynamically typed expressions (typing.Any) are disallowed
104
+ "COM812", # Trailing comma missing
105
+ "CPY001", # Missing copyright notice at top of file
106
+ "D1", # Missing docstring presence rules
107
+ "EM", # flake8-errmsg
108
+ "G004", # Logging statement uses f-string
109
+ "PLR", # pylint Refactor
110
+ "S607", # Starting a process with a partial executable path
111
+ "TD", # flake8-todos
112
+ "TRY003", # Avoid specifying long messages outside the exception class
113
+ ]
114
+
115
+ [tool.ruff.lint.isort]
116
+ known-first-party = ["copier_python"]
117
+
118
+ [tool.ruff.lint.per-file-ignores]
119
+ "tests/**/*.py" = [
120
+ "ARG", # flake8-unused-arguments
121
+ "S101", # Use of assert detected
122
+ ]
123
+
124
+ [tool.ruff.lint.pydocstyle]
125
+ convention = "google"
126
+
127
+ [tool.ty.src]
128
+ include = ["copier_python/", "tests/"]
129
+
130
+ [tool.ty.terminal]
131
+ error-on-warning = true
132
+ output-format = "concise"
133
+
134
+ [tool.uv]
135
+ default-groups = ["dev", "docs"]
136
+
137
+ [tool.uv-dynamic-versioning]
138
+ pattern = "default"
139
+ fallback-version = "0.0.0"
@@ -58,6 +58,9 @@ def render_template(
58
58
  ) -> Callable[..., Path]:
59
59
  def _render(*, vcs_ref: str = "HEAD", **kwargs: Any) -> Path:
60
60
  worktree = tmp_path / "project"
61
+ data = {**DEFAULT_DATA, **(kwargs or {})}
62
+ if data["project_visibility"] == "private":
63
+ data.pop("github_user", None)
61
64
  with warnings.catch_warnings():
62
65
  warnings.filterwarnings(
63
66
  "ignore",
@@ -67,7 +70,7 @@ def render_template(
67
70
  copier.run_copy(
68
71
  src_path=str(TEMPLATE_ROOT),
69
72
  dst_path=str(worktree),
70
- data={**DEFAULT_DATA, **(kwargs or {})},
73
+ data=data,
71
74
  vcs_ref=vcs_ref,
72
75
  defaults=True,
73
76
  overwrite=True,
@@ -6,7 +6,7 @@
6
6
  [hooks]
7
7
  postinstall = [
8
8
  "uv sync",
9
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
9
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
10
10
  ]
11
11
 
12
12
  [tools]
@@ -123,7 +123,7 @@
123
123
  [hooks]
124
124
  postinstall = [
125
125
  "uv sync",
126
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
126
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
127
127
  ]
128
128
 
129
129
  [tools]
@@ -247,7 +247,7 @@
247
247
  [hooks]
248
248
  postinstall = [
249
249
  "uv sync",
250
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
250
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
251
251
  ]
252
252
 
253
253
  [tools]
@@ -350,7 +350,7 @@
350
350
  [hooks]
351
351
  postinstall = [
352
352
  "uv sync",
353
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
353
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
354
354
  ]
355
355
 
356
356
  [tools]
@@ -460,7 +460,7 @@
460
460
  [hooks]
461
461
  postinstall = [
462
462
  "uv sync",
463
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
463
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
464
464
  ]
465
465
 
466
466
  [tools]
@@ -582,7 +582,7 @@
582
582
  [hooks]
583
583
  postinstall = [
584
584
  "uv sync",
585
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
585
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
586
586
  ]
587
587
 
588
588
  [tools]
@@ -711,7 +711,7 @@
711
711
  [hooks]
712
712
  postinstall = [
713
713
  "uv sync",
714
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
714
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
715
715
  ]
716
716
 
717
717
  [tools]
@@ -819,7 +819,7 @@
819
819
  [hooks]
820
820
  postinstall = [
821
821
  "uv sync",
822
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
822
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
823
823
  ]
824
824
 
825
825
  [tools]
@@ -934,7 +934,7 @@
934
934
  [hooks]
935
935
  postinstall = [
936
936
  "uv sync",
937
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
937
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
938
938
  ]
939
939
 
940
940
  [tools]
@@ -1051,7 +1051,7 @@
1051
1051
  [hooks]
1052
1052
  postinstall = [
1053
1053
  "uv sync",
1054
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1054
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1055
1055
  ]
1056
1056
 
1057
1057
  [tools]
@@ -1175,7 +1175,7 @@
1175
1175
  [hooks]
1176
1176
  postinstall = [
1177
1177
  "uv sync",
1178
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1178
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1179
1179
  ]
1180
1180
 
1181
1181
  [tools]
@@ -1278,7 +1278,7 @@
1278
1278
  [hooks]
1279
1279
  postinstall = [
1280
1280
  "uv sync",
1281
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1281
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1282
1282
  ]
1283
1283
 
1284
1284
  [tools]
@@ -1388,7 +1388,7 @@
1388
1388
  [hooks]
1389
1389
  postinstall = [
1390
1390
  "uv sync",
1391
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1391
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1392
1392
  ]
1393
1393
 
1394
1394
  [tools]
@@ -1510,7 +1510,7 @@
1510
1510
  [hooks]
1511
1511
  postinstall = [
1512
1512
  "uv sync",
1513
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1513
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1514
1514
  ]
1515
1515
 
1516
1516
  [tools]
@@ -1639,7 +1639,7 @@
1639
1639
  [hooks]
1640
1640
  postinstall = [
1641
1641
  "uv sync",
1642
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1642
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1643
1643
  ]
1644
1644
 
1645
1645
  [tools]
@@ -1747,7 +1747,7 @@
1747
1747
  [hooks]
1748
1748
  postinstall = [
1749
1749
  "uv sync",
1750
- "[ -d .git ] && prek install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1750
+ "[ -d .git ] && prek --quiet install || { echo \"No git repository found. If this is a new project, run \\`mise run init\\` to create it.\"; }",
1751
1751
  ]
1752
1752
 
1753
1753
  [tools]
@@ -32,7 +32,7 @@
32
32
  - name: 💾 Check out repository
33
33
  uses: actions/checkout@v7
34
34
 
35
- - name: 📦 Restore uv cache
35
+ - name: 📦 Cache uv managed packages
36
36
  uses: actions/cache@v6
37
37
  with:
38
38
  path: ~/.cache/uv
@@ -75,7 +75,7 @@
75
75
  with:
76
76
  fetch-depth: 0
77
77
 
78
- - name: 📦 Restore uv cache
78
+ - name: 📦 Cache uv managed packages
79
79
  uses: actions/cache@v6
80
80
  with:
81
81
  path: ~/.cache/uv
@@ -103,6 +103,14 @@
103
103
  with:
104
104
  fetch-depth: 0
105
105
 
106
+ - name: 📦 Cache uv managed packages
107
+ uses: actions/cache@v6
108
+ with:
109
+ path: ~/.cache/uv
110
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
111
+ restore-keys: |
112
+ uv-${{ runner.os }}-
113
+
106
114
  - name: 🍳 Set up mise
107
115
  uses: jdx/mise-action@v4
108
116
  with:
@@ -147,7 +155,7 @@
147
155
  - name: 💾 Check out repository
148
156
  uses: actions/checkout@v7
149
157
 
150
- - name: 📦 Restore uv cache
158
+ - name: 📦 Cache uv managed packages
151
159
  uses: actions/cache@v6
152
160
  with:
153
161
  path: ~/.cache/uv
@@ -178,7 +186,7 @@
178
186
  with:
179
187
  fetch-depth: 0
180
188
 
181
- - name: 📦 Restore uv cache
189
+ - name: 📦 Cache uv managed packages
182
190
  uses: actions/cache@v6
183
191
  with:
184
192
  path: ~/.cache/uv
@@ -206,6 +214,14 @@
206
214
  with:
207
215
  fetch-depth: 0
208
216
 
217
+ - name: 📦 Cache uv managed packages
218
+ uses: actions/cache@v6
219
+ with:
220
+ path: ~/.cache/uv
221
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
222
+ restore-keys: |
223
+ uv-${{ runner.os }}-
224
+
209
225
  - name: 🍳 Set up mise
210
226
  uses: jdx/mise-action@v4
211
227
  with:
@@ -250,7 +266,7 @@
250
266
  - name: 💾 Check out repository
251
267
  uses: actions/checkout@v7
252
268
 
253
- - name: 📦 Restore uv cache
269
+ - name: 📦 Cache uv managed packages
254
270
  uses: actions/cache@v6
255
271
  with:
256
272
  path: ~/.cache/uv
@@ -294,6 +310,14 @@
294
310
  with:
295
311
  fetch-depth: 0
296
312
 
313
+ - name: 📦 Cache uv managed packages
314
+ uses: actions/cache@v6
315
+ with:
316
+ path: ~/.cache/uv
317
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
318
+ restore-keys: |
319
+ uv-${{ runner.os }}-
320
+
297
321
  - name: 🍳 Set up mise
298
322
  uses: jdx/mise-action@v4
299
323
  with:
@@ -338,7 +362,7 @@
338
362
  - name: 💾 Check out repository
339
363
  uses: actions/checkout@v7
340
364
 
341
- - name: 📦 Restore uv cache
365
+ - name: 📦 Cache uv managed packages
342
366
  uses: actions/cache@v6
343
367
  with:
344
368
  path: ~/.cache/uv
@@ -370,6 +394,14 @@
370
394
  with:
371
395
  fetch-depth: 0
372
396
 
397
+ - name: 📦 Cache uv managed packages
398
+ uses: actions/cache@v6
399
+ with:
400
+ path: ~/.cache/uv
401
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
402
+ restore-keys: |
403
+ uv-${{ runner.os }}-
404
+
373
405
  - name: 🍳 Set up mise
374
406
  uses: jdx/mise-action@v4
375
407
  with:
@@ -412,7 +444,7 @@
412
444
  - name: 💾 Check out repository
413
445
  uses: actions/checkout@v7
414
446
 
415
- - name: 📦 Restore uv cache
447
+ - name: 📦 Cache uv managed packages
416
448
  uses: actions/cache@v6
417
449
  with:
418
450
  path: ~/.cache/uv
@@ -455,7 +487,7 @@
455
487
  with:
456
488
  fetch-depth: 0
457
489
 
458
- - name: 📦 Restore uv cache
490
+ - name: 📦 Cache uv managed packages
459
491
  uses: actions/cache@v6
460
492
  with:
461
493
  path: ~/.cache/uv
@@ -483,6 +515,14 @@
483
515
  with:
484
516
  fetch-depth: 0
485
517
 
518
+ - name: 📦 Cache uv managed packages
519
+ uses: actions/cache@v6
520
+ with:
521
+ path: ~/.cache/uv
522
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
523
+ restore-keys: |
524
+ uv-${{ runner.os }}-
525
+
486
526
  - name: 🍳 Set up mise
487
527
  uses: jdx/mise-action@v4
488
528
  with:
@@ -523,7 +563,7 @@
523
563
  - name: 💾 Check out repository
524
564
  uses: actions/checkout@v7
525
565
 
526
- - name: 📦 Restore uv cache
566
+ - name: 📦 Cache uv managed packages
527
567
  uses: actions/cache@v6
528
568
  with:
529
569
  path: ~/.cache/uv
@@ -566,7 +606,7 @@
566
606
  with:
567
607
  fetch-depth: 0
568
608
 
569
- - name: 📦 Restore uv cache
609
+ - name: 📦 Cache uv managed packages
570
610
  uses: actions/cache@v6
571
611
  with:
572
612
  path: ~/.cache/uv
@@ -594,6 +634,14 @@
594
634
  with:
595
635
  fetch-depth: 0
596
636
 
637
+ - name: 📦 Cache uv managed packages
638
+ uses: actions/cache@v6
639
+ with:
640
+ path: ~/.cache/uv
641
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
642
+ restore-keys: |
643
+ uv-${{ runner.os }}-
644
+
597
645
  - name: 🍳 Set up mise
598
646
  uses: jdx/mise-action@v4
599
647
  with:
@@ -638,7 +686,7 @@
638
686
  - name: 💾 Check out repository
639
687
  uses: actions/checkout@v7
640
688
 
641
- - name: 📦 Restore uv cache
689
+ - name: 📦 Cache uv managed packages
642
690
  uses: actions/cache@v6
643
691
  with:
644
692
  path: ~/.cache/uv
@@ -681,7 +729,7 @@
681
729
  with:
682
730
  fetch-depth: 0
683
731
 
684
- - name: 📦 Restore uv cache
732
+ - name: 📦 Cache uv managed packages
685
733
  uses: actions/cache@v6
686
734
  with:
687
735
  path: ~/.cache/uv
@@ -709,6 +757,14 @@
709
757
  with:
710
758
  fetch-depth: 0
711
759
 
760
+ - name: 📦 Cache uv managed packages
761
+ uses: actions/cache@v6
762
+ with:
763
+ path: ~/.cache/uv
764
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
765
+ restore-keys: |
766
+ uv-${{ runner.os }}-
767
+
712
768
  - name: 🍳 Set up mise
713
769
  uses: jdx/mise-action@v4
714
770
  with:
@@ -751,7 +807,7 @@
751
807
  - name: 💾 Check out repository
752
808
  uses: actions/checkout@v7
753
809
 
754
- - name: 📦 Restore uv cache
810
+ - name: 📦 Cache uv managed packages
755
811
  uses: actions/cache@v6
756
812
  with:
757
813
  path: ~/.cache/uv
@@ -794,7 +850,7 @@
794
850
  with:
795
851
  fetch-depth: 0
796
852
 
797
- - name: 📦 Restore uv cache
853
+ - name: 📦 Cache uv managed packages
798
854
  uses: actions/cache@v6
799
855
  with:
800
856
  path: ~/.cache/uv
@@ -822,6 +878,14 @@
822
878
  with:
823
879
  fetch-depth: 0
824
880
 
881
+ - name: 📦 Cache uv managed packages
882
+ uses: actions/cache@v6
883
+ with:
884
+ path: ~/.cache/uv
885
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
886
+ restore-keys: |
887
+ uv-${{ runner.os }}-
888
+
825
889
  - name: 🍳 Set up mise
826
890
  uses: jdx/mise-action@v4
827
891
  with:
@@ -866,7 +930,7 @@
866
930
  - name: 💾 Check out repository
867
931
  uses: actions/checkout@v7
868
932
 
869
- - name: 📦 Restore uv cache
933
+ - name: 📦 Cache uv managed packages
870
934
  uses: actions/cache@v6
871
935
  with:
872
936
  path: ~/.cache/uv
@@ -909,7 +973,7 @@
909
973
  with:
910
974
  fetch-depth: 0
911
975
 
912
- - name: 📦 Restore uv cache
976
+ - name: 📦 Cache uv managed packages
913
977
  uses: actions/cache@v6
914
978
  with:
915
979
  path: ~/.cache/uv
@@ -937,6 +1001,14 @@
937
1001
  with:
938
1002
  fetch-depth: 0
939
1003
 
1004
+ - name: 📦 Cache uv managed packages
1005
+ uses: actions/cache@v6
1006
+ with:
1007
+ path: ~/.cache/uv
1008
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
1009
+ restore-keys: |
1010
+ uv-${{ runner.os }}-
1011
+
940
1012
  - name: 🍳 Set up mise
941
1013
  uses: jdx/mise-action@v4
942
1014
  with:
@@ -979,7 +1051,7 @@
979
1051
  - name: 💾 Check out repository
980
1052
  uses: actions/checkout@v7
981
1053
 
982
- - name: 📦 Restore uv cache
1054
+ - name: 📦 Cache uv managed packages
983
1055
  uses: actions/cache@v6
984
1056
  with:
985
1057
  path: ~/.cache/uv
@@ -1022,7 +1094,7 @@
1022
1094
  with:
1023
1095
  fetch-depth: 0
1024
1096
 
1025
- - name: 📦 Restore uv cache
1097
+ - name: 📦 Cache uv managed packages
1026
1098
  uses: actions/cache@v6
1027
1099
  with:
1028
1100
  path: ~/.cache/uv
@@ -1050,6 +1122,14 @@
1050
1122
  with:
1051
1123
  fetch-depth: 0
1052
1124
 
1125
+ - name: 📦 Cache uv managed packages
1126
+ uses: actions/cache@v6
1127
+ with:
1128
+ path: ~/.cache/uv
1129
+ key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }}
1130
+ restore-keys: |
1131
+ uv-${{ runner.os }}-
1132
+
1053
1133
  - name: 🍳 Set up mise
1054
1134
  uses: jdx/mise-action@v4
1055
1135
  with:
@@ -1082,7 +1162,7 @@
1082
1162
  with:
1083
1163
  fetch-depth: 0
1084
1164
 
1085
- - name: 📦 Restore uv cache
1165
+ - name: 📦 Cache uv managed packages
1086
1166
  uses: actions/cache@v6
1087
1167
  with:
1088
1168
  path: ~/.cache/uv
@@ -1151,7 +1231,7 @@
1151
1231
  with:
1152
1232
  fetch-depth: 0
1153
1233
 
1154
- - name: 📦 Restore uv cache
1234
+ - name: 📦 Cache uv managed packages
1155
1235
  uses: actions/cache@v6
1156
1236
  with:
1157
1237
  path: ~/.cache/uv
@@ -44,7 +44,7 @@ import pytest
44
44
  pytest.param(
45
45
  {"project_visibility": "private"},
46
46
  [],
47
- [".github"],
47
+ [".github", "CONTRIBUTING.md"],
48
48
  id="private",
49
49
  ),
50
50
  pytest.param(
@@ -1,147 +0,0 @@
1
- [build-system]
2
- requires = ["hatchling", "uv-dynamic-versioning"]
3
- build-backend = "hatchling.build"
4
-
5
- [project]
6
- name = "copier-python"
7
- dynamic = ["version"]
8
- description = "Copier template for Python projects with modern tooling"
9
- readme = "README.md"
10
- license = "MIT"
11
- license-files = ["LICENSE"]
12
- requires-python = ">=3.10"
13
- authors = [
14
- { name = "Stephen Kent", email = "smkent@smkent.net" },
15
- ]
16
- classifiers = [
17
- "Development Status :: 3 - Alpha",
18
- "Intended Audience :: Developers",
19
- "Programming Language :: Python :: 3",
20
- "Programming Language :: Python :: 3 :: Only",
21
- "Programming Language :: Python :: 3.10",
22
- "Programming Language :: Python :: 3.11",
23
- "Programming Language :: Python :: 3.12",
24
- "Programming Language :: Python :: 3.13",
25
- "Programming Language :: Python :: 3.14",
26
- "Topic :: Documentation",
27
- "Topic :: Software Development",
28
- "Topic :: Utilities",
29
- "Typing :: Typed",
30
- ]
31
- keywords = []
32
- dependencies = [
33
- "pyyaml>=6",
34
- "rich>=15",
35
- "typer>=0.9",
36
- "typing_extensions>=4.1; python_version < '3.12'",
37
- ]
38
-
39
- [project.scripts]
40
- copier-python = "copier_python.__main__:main"
41
-
42
- [project.urls]
43
- Homepage = "https://smkent.github.io/copier-python"
44
- Repository = "https://github.com/smkent/copier-python"
45
- Issues = "https://github.com/smkent/copier-python/issues"
46
-
47
- [dependency-groups]
48
- dev = [
49
- "bump-my-version>=1.3.0",
50
- "copier>=9",
51
- "poethepoet>=0.46",
52
- "pysentry-rs>=0.4",
53
- "pytest>=9",
54
- "pytest-cov>=7",
55
- "pytest-sugar>=1",
56
- "pytest-xdist>=3",
57
- "ruff>=0.15",
58
- "syrupy>=5",
59
- "ty>=0.0.49",
60
- "typing-extensions>=4",
61
- ]
62
- docs = [
63
- "zensical>=0.0.45",
64
- ]
65
-
66
- [tool.bumpversion]
67
- commit = false
68
- tag = true
69
- tag_name = "v{new_version}"
70
- tag_message = ""
71
- push = true
72
-
73
- [tool.hatch.build.targets.sdist]
74
- include = ["/copier_python", "/tests", "*.md", "LICENSE"]
75
-
76
- [tool.hatch.version]
77
- source = "uv-dynamic-versioning"
78
-
79
- [tool.pytest]
80
- addopts = [
81
- "-ra",
82
- "--cov=copier_python",
83
- "--strict-config",
84
- "--strict-markers",
85
- "--numprocesses",
86
- "auto",
87
- ]
88
- testpaths = ["tests"]
89
-
90
- [tool.coverage.run]
91
- source = ["copier_python"]
92
- branch = true
93
-
94
- [tool.coverage.report]
95
- show_missing = true
96
- skip_covered = true
97
- exclude_lines = [
98
- "pragma: no cover",
99
- "if TYPE_CHECKING:",
100
- "@abstractmethod",
101
- ]
102
-
103
- [tool.ruff]
104
- line-length = 79
105
- output-format = "concise"
106
- target-version = "py310"
107
-
108
- [tool.ruff.lint]
109
- select = ["ALL"]
110
- ignore = [
111
- "ANN401", # Dynamically typed expressions (typing.Any) are disallowed
112
- "COM812", # Trailing comma missing
113
- "CPY001", # Missing copyright notice at top of file
114
- "D1", # Missing docstring presence rules
115
- "EM", # flake8-errmsg
116
- "G004", # Logging statement uses f-string
117
- "PLR", # pylint Refactor
118
- "S607", # Starting a process with a partial executable path
119
- "TD", # flake8-todos
120
- "TRY003", # Avoid specifying long messages outside the exception class
121
- ]
122
-
123
- [tool.ruff.lint.isort]
124
- known-first-party = ["copier_python"]
125
-
126
- [tool.ruff.lint.per-file-ignores]
127
- "tests/**/*.py" = [
128
- "ARG", # flake8-unused-arguments
129
- "S101", # Use of assert detected
130
- ]
131
-
132
- [tool.ruff.lint.pydocstyle]
133
- convention = "google"
134
-
135
- [tool.ty.src]
136
- include = ["copier_python/", "tests/"]
137
-
138
- [tool.ty.terminal]
139
- error-on-warning = true
140
- output-format = "concise"
141
-
142
- [tool.uv]
143
- default-groups = ["dev", "docs"]
144
-
145
- [tool.uv-dynamic-versioning]
146
- pattern = "default"
147
- fallback-version = "0.0.0"
File without changes
File without changes
File without changes