copier-python 0.12.0__tar.gz → 0.13.1__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 (60) hide show
  1. {copier_python-0.12.0 → copier_python-0.13.1}/.gitignore +6 -1
  2. copier_python-0.13.1/AGENTS.md +9 -0
  3. {copier_python-0.12.0 → copier_python-0.13.1}/PKG-INFO +16 -7
  4. {copier_python-0.12.0 → copier_python-0.13.1}/README.md +14 -5
  5. {copier_python-0.12.0 → copier_python-0.13.1}/copier_python/repo.py +31 -5
  6. {copier_python-0.12.0 → copier_python-0.13.1}/copier_python/update.py +10 -1
  7. copier_python-0.13.1/docs/development/requirements.md +24 -0
  8. {copier_python-0.12.0 → copier_python-0.13.1}/docs/development/workflow.md +13 -9
  9. {copier_python-0.12.0 → copier_python-0.13.1}/docs/project-creation.md +2 -2
  10. {copier_python-0.12.0 → copier_python-0.13.1}/docs/project-development.md +12 -8
  11. {copier_python-0.12.0 → copier_python-0.13.1}/docs/project-release.md +3 -3
  12. {copier_python-0.12.0 → copier_python-0.13.1}/docs/project-setup.md +1 -1
  13. {copier_python-0.12.0 → copier_python-0.13.1}/docs/releasing.md +3 -3
  14. copier_python-0.13.1/docs/requirements.md +28 -0
  15. {copier_python-0.12.0 → copier_python-0.13.1}/pyproject.toml +0 -105
  16. copier_python-0.13.1/tests/template/__snapshots__/test_agents.ambr +15 -0
  17. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_contributing.ambr +18 -17
  18. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_dockerfile.ambr +18 -6
  19. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_docs.ambr +168 -160
  20. copier_python-0.13.1/tests/template/__snapshots__/test_mise_toml.ambr +1841 -0
  21. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_pyproject.ambr +0 -3162
  22. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_workflows.ambr +292 -146
  23. copier_python-0.13.1/tests/template/test_mise_toml.py +40 -0
  24. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_template.py +2 -2
  25. copier_python-0.12.0/AGENTS.md +0 -8
  26. copier_python-0.12.0/docs/development/requirements.md +0 -24
  27. copier_python-0.12.0/docs/requirements.md +0 -24
  28. copier_python-0.12.0/tests/template/__snapshots__/test_agents.ambr +0 -14
  29. {copier_python-0.12.0 → copier_python-0.13.1}/CONTRIBUTING.md +0 -0
  30. {copier_python-0.12.0 → copier_python-0.13.1}/LICENSE +0 -0
  31. {copier_python-0.12.0 → copier_python-0.13.1}/copier_python/__init__.py +0 -0
  32. {copier_python-0.12.0 → copier_python-0.13.1}/copier_python/__main__.py +0 -0
  33. {copier_python-0.12.0 → copier_python-0.13.1}/copier_python/py.typed +0 -0
  34. {copier_python-0.12.0 → copier_python-0.13.1}/docs/contributing.md +0 -0
  35. {copier_python-0.12.0 → copier_python-0.13.1}/docs/development/updates.md +0 -0
  36. {copier_python-0.12.0 → copier_python-0.13.1}/docs/index.md +0 -0
  37. {copier_python-0.12.0 → copier_python-0.13.1}/docs/license.md +0 -0
  38. {copier_python-0.12.0 → copier_python-0.13.1}/docs/project-updates.md +0 -0
  39. {copier_python-0.12.0 → copier_python-0.13.1}/docs/setup.md +0 -0
  40. {copier_python-0.12.0 → copier_python-0.13.1}/tests/__init__.py +0 -0
  41. {copier_python-0.12.0 → copier_python-0.13.1}/tests/conftest.py +0 -0
  42. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__init__.py +0 -0
  43. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_compose.ambr +0 -0
  44. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_license.ambr +0 -0
  45. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_readme.ambr +0 -0
  46. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/__snapshots__/test_zensical.ambr +0 -0
  47. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_agents.py +0 -0
  48. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_compose.py +0 -0
  49. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_contributing.py +0 -0
  50. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_dockerfile.py +0 -0
  51. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_docs.py +0 -0
  52. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_license.py +0 -0
  53. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_pyproject.py +0 -0
  54. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_readme.py +0 -0
  55. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_structure.py +0 -0
  56. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_workflows.py +0 -0
  57. {copier_python-0.12.0 → copier_python-0.13.1}/tests/template/test_zensical.py +0 -0
  58. {copier_python-0.12.0 → copier_python-0.13.1}/tests/test_update.py +0 -0
  59. {copier_python-0.12.0/tests/template → copier_python-0.13.1/tests}/test_version.py +0 -0
  60. {copier_python-0.12.0 → copier_python-0.13.1}/tests/utils.py +0 -0
@@ -4,11 +4,16 @@ __pycache__/
4
4
  *.py[cod]
5
5
 
6
6
  # uv and packaging
7
- .venv/
7
+ .venv*/
8
8
  /build/
9
9
  /dist/
10
10
  uv.lock
11
11
 
12
+ # mise
13
+ mise.local.toml
14
+ .mise.local.toml
15
+ .mise/
16
+
12
17
  # Development tools
13
18
  .cache/
14
19
  .coverage*
@@ -0,0 +1,9 @@
1
+ # Environment/Tools
2
+
3
+ * `mise` manages dev tools and tasks, including `uv` which manages Python and dependencies.
4
+ * Use `uv add`/`uv run python` instead of bare `pip`/`python`
5
+ * `mise install`: After-clone setup (install tools, dependencies, pre-commit hooks)
6
+ * `mise run lint`: Pre-commit hooks (via `pre-commit`-compatible `prek`) including lint, format, type check (ruff, ty)
7
+ * `mise run test`: Run tests (accepts pytest arguments)
8
+ * `mise run lt`: Lint+test (no arguments)
9
+ * `mise run snapup`: Update test snapshots (syrupy, accepts pytest arguments)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: copier-python
3
- Version: 0.12.0
3
+ Version: 0.13.1
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
@@ -40,8 +40,13 @@ Description-Content-Type: text/markdown
40
40
 
41
41
  ## Quick start
42
42
 
43
- With [Astral's **uv**][uv] and [**Copier**][copier] (`uv tool install copier`)
44
- installed:
43
+ Install required software:
44
+
45
+ - [**mise-en-place**][mise]: `curl https://mise.run | sh` or
46
+ [alternate installation method][mise-installation]
47
+ - [**Copier**][copier]: `mise use -g copier` or `uv tool install copier`
48
+
49
+ Create a new project from the template:
45
50
 
46
51
  ```sh
47
52
  copier copy "gh:smkent/copier-python" /new/project/path
@@ -51,6 +56,10 @@ copier copy "gh:smkent/copier-python" /new/project/path
51
56
 
52
57
  ## Features
53
58
 
59
+ * [**mise-en-place**][mise] ("mise") for development toolchain management
60
+
61
+ [![mise][mise-badge]][mise]
62
+
54
63
  * [Astral][astral] toolset: [**uv**][uv], [**ruff**][ruff], and [**ty**][ty]
55
64
 
56
65
  [![uv][uv-badge]][uv]
@@ -72,8 +81,6 @@ copier copy "gh:smkent/copier-python" /new/project/path
72
81
  * [**pytest**][pytest] test framework with [**codecov.io**][codecovio] support
73
82
  * [**Zensical**][zensical] project documentation with automatic deployment to
74
83
  [**GitHub Pages**][github-pages]
75
- * [**Poe the Poet**][poethepoet] for task shortcuts such as
76
- `poe lint`, `poe test`
77
84
 
78
85
  ## Credits
79
86
 
@@ -91,7 +98,9 @@ This template was inspired by [pawamoy/copier-uv][copier-uv] and
91
98
  [ghcr-docs]: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
92
99
  [github-actions]: https://github.com/features/actions
93
100
  [github-pages]: https://pages.github.com
94
- [poethepoet]: https://poethepoet.natn.io/
101
+ [mise]: https://mise.jdx.dev
102
+ [mise-installation]: https://mise.jdx.dev/installing-mise.html
103
+ [mise-badge]: https://mise-versions.jdx.dev/badge.svg
95
104
  [pre-commit]: https://pre-commit.com/
96
105
  [prek-badge]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/j178/prek/master/docs/assets/badge-v0.json
97
106
  [prek]: https://prek.j178.dev/
@@ -10,8 +10,13 @@
10
10
 
11
11
  ## Quick start
12
12
 
13
- With [Astral's **uv**][uv] and [**Copier**][copier] (`uv tool install copier`)
14
- installed:
13
+ Install required software:
14
+
15
+ - [**mise-en-place**][mise]: `curl https://mise.run | sh` or
16
+ [alternate installation method][mise-installation]
17
+ - [**Copier**][copier]: `mise use -g copier` or `uv tool install copier`
18
+
19
+ Create a new project from the template:
15
20
 
16
21
  ```sh
17
22
  copier copy "gh:smkent/copier-python" /new/project/path
@@ -21,6 +26,10 @@ copier copy "gh:smkent/copier-python" /new/project/path
21
26
 
22
27
  ## Features
23
28
 
29
+ * [**mise-en-place**][mise] ("mise") for development toolchain management
30
+
31
+ [![mise][mise-badge]][mise]
32
+
24
33
  * [Astral][astral] toolset: [**uv**][uv], [**ruff**][ruff], and [**ty**][ty]
25
34
 
26
35
  [![uv][uv-badge]][uv]
@@ -42,8 +51,6 @@ copier copy "gh:smkent/copier-python" /new/project/path
42
51
  * [**pytest**][pytest] test framework with [**codecov.io**][codecovio] support
43
52
  * [**Zensical**][zensical] project documentation with automatic deployment to
44
53
  [**GitHub Pages**][github-pages]
45
- * [**Poe the Poet**][poethepoet] for task shortcuts such as
46
- `poe lint`, `poe test`
47
54
 
48
55
  ## Credits
49
56
 
@@ -61,7 +68,9 @@ This template was inspired by [pawamoy/copier-uv][copier-uv] and
61
68
  [ghcr-docs]: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
62
69
  [github-actions]: https://github.com/features/actions
63
70
  [github-pages]: https://pages.github.com
64
- [poethepoet]: https://poethepoet.natn.io/
71
+ [mise]: https://mise.jdx.dev
72
+ [mise-installation]: https://mise.jdx.dev/installing-mise.html
73
+ [mise-badge]: https://mise-versions.jdx.dev/badge.svg
65
74
  [pre-commit]: https://pre-commit.com/
66
75
  [prek-badge]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/j178/prek/master/docs/assets/badge-v0.json
67
76
  [prek]: https://prek.j178.dev/
@@ -83,17 +83,33 @@ class RepoWorktree:
83
83
  with tempfile.TemporaryDirectory() as td:
84
84
  repo_dir = Path(td) / "worktree"
85
85
  cls.run_in(["git", "clone", repo.url, str(repo_dir)], repo=repo)
86
- for cmd in (
86
+ cls.run_in(
87
87
  [
88
88
  *["git", "remote", "set-url", "--push", "origin"],
89
89
  repo.push_url,
90
90
  ],
91
- ["poe", "setup"],
92
- ["git", "checkout", "-b", branch],
93
- ):
94
- cls.run_in(cmd, repo=repo, cwd=repo_dir)
91
+ repo=repo,
92
+ cwd=repo_dir,
93
+ )
94
+ cls.run_in(
95
+ (
96
+ ["mise", "install"]
97
+ if (repo_dir / "mise.toml").is_file()
98
+ else ["poe", "setup"]
99
+ ),
100
+ repo=repo,
101
+ cwd=repo_dir,
102
+ )
103
+ cls.run_in(
104
+ ["git", "checkout", "-b", branch], repo=repo, cwd=repo_dir
105
+ )
95
106
  yield cls(path=repo_dir, repo=repo, branch=branch)
96
107
 
108
+ def refresh_tools_lock(self) -> None:
109
+ if not (self.path / "mise.toml").is_file():
110
+ return
111
+ self.run(["mise", "lock"])
112
+
97
113
  @classmethod
98
114
  def run_in(
99
115
  cls, cmd: list[str], *, repo: RepoTarget, **kwargs: Any
@@ -114,6 +130,16 @@ class RepoWorktree:
114
130
  kwargs.setdefault("cwd", self.path)
115
131
  return self.run_in(cmd, repo=self.repo, **kwargs)
116
132
 
133
+ def run_task(
134
+ self, name: str, **kwargs: Any
135
+ ) -> subprocess.CompletedProcess[str]:
136
+ task_runner = (
137
+ ["mise", "run"]
138
+ if (self.path / "mise.toml").is_file()
139
+ else ["uv", "run", "poe"]
140
+ )
141
+ return self.run([*task_runner, name], **kwargs)
142
+
117
143
  def git_status(self) -> list[str]:
118
144
  return self.run(
119
145
  ["git", "status", "--porcelain"], capture_output=True
@@ -51,7 +51,16 @@ class UpdateAction:
51
51
  raise RuntimeError("Conflicts remain, aborting")
52
52
 
53
53
  try:
54
- repo.run(["uv", "run", "poe", "lt"])
54
+ repo.refresh_tools_lock()
55
+ except subprocess.CalledProcessError:
56
+ print( # noqa: T201
57
+ "Tool refresh failed."
58
+ " Fix errors and exit the shell to continue."
59
+ )
60
+ repo.shell()
61
+
62
+ try:
63
+ repo.run_task("lt")
55
64
  except subprocess.CalledProcessError:
56
65
  print( # noqa: T201
57
66
  "Lint/test failed. Fix errors and exit the shell to continue."
@@ -0,0 +1,24 @@
1
+ ---
2
+ title: Required software
3
+ icon: lucide/bookmark-check
4
+ ---
5
+
6
+ # Required software
7
+
8
+ - [x] [**git** for version control][git]
9
+ - [x] [**mise**][mise] tool manager: `curl https://mise.run | sh` or
10
+ [alternate installation method][mise-installation]
11
+
12
+ !!! info
13
+
14
+ `mise` ensures additional software is available, such as:
15
+
16
+ * A [supported version][python-versions] of [**Python**][python]
17
+ * [Astral's **uv** Python project manager][uv]
18
+
19
+ [git]: https://git-scm.com
20
+ [mise-installation]: https://mise.jdx.dev/installing-mise.html
21
+ [mise]: https://mise.jdx.dev
22
+ [python-versions]: https://devguide.python.org/versions/
23
+ [python]: https://python.org
24
+ [uv]: https://docs.astral.sh/uv/
@@ -7,12 +7,16 @@ icon: lucide/braces
7
7
 
8
8
  ## Cloning the repository
9
9
 
10
- Run `poe setup` in new repository clones to enable git hooks:
11
-
12
10
  ```sh
13
11
  git clone https://github.com/smkent/copier-python
14
12
  cd copier-python
15
- poe setup # Enables git hooks
13
+ ```
14
+
15
+ Run `mise install` in new repository clones to install tools, dependencies, and
16
+ git hooks:
17
+
18
+ ```sh
19
+ mise install
16
20
  ```
17
21
 
18
22
  ## Local template usage
@@ -30,13 +34,13 @@ uncommitted changes.
30
34
 
31
35
  ## Development tools
32
36
 
33
- * `poe lint`: Run formatters and static checks
34
- * `poe test`: Run tests
37
+ * `mise run lint`: Run formatters and static checks
38
+ * `mise run test`: Run tests
35
39
 
36
40
  The `lint` and `test` tasks can also be run as a single combined command with:
37
41
 
38
42
  ```sh
39
- poe lt
43
+ mise run lt
40
44
  ```
41
45
 
42
46
  ### Test snapshots
@@ -46,7 +50,7 @@ When templates are modified, the snapshots need to be updated. Update test
46
50
  snapshots by running:
47
51
 
48
52
  ```sh
49
- poe snapup
53
+ mise run snapup
50
54
  ```
51
55
 
52
56
  ## Documentation server
@@ -54,11 +58,11 @@ poe snapup
54
58
  Start the development server with:
55
59
 
56
60
  ```sh
57
- poe docs
61
+ mise run docs
58
62
  ```
59
63
 
60
64
  The documentation site will be served at:
61
65
 
62
66
  [**http://localhost:8000**](http://localhost:8000){ .md-button .md-button--primary target="_blank" }
63
67
 
64
- To use a different bind host/port, run `poe --help docs` for arguments info.
68
+ To use a different bind host/port, run `mise run docs --help` for usage info.
@@ -45,13 +45,13 @@ Set **Repository name** to your chosen project name.
45
45
  To complete project initialization, run:
46
46
 
47
47
  ```sh
48
- poe init
48
+ mise run init
49
49
  ```
50
50
 
51
51
  This will:
52
52
 
53
53
  1. Create the local git repository
54
- 2. Install dependencies and git hooks (same as `poe setup`)
54
+ 2. Install tools, dependencies, and git hooks (same as `mise install`)
55
55
  3. Create an initial commit with the newly created project contents
56
56
  4. Add your GitHub repository as the `origin` remote
57
57
  (when `project_visibility: public`)
@@ -7,23 +7,27 @@ icon: lucide/braces
7
7
 
8
8
  ## Cloning the repository
9
9
 
10
- Run `poe setup` in new repository clones to enable git hooks:
11
-
12
10
  ```sh
13
11
  git clone https://github.com/<github_user>/<project_name>
14
12
  cd project_name
15
- poe setup # Enables git hooks
13
+ ```
14
+
15
+ Run `mise install` in new repository clones to install tools, dependencies, and
16
+ git hooks:
17
+
18
+ ```sh
19
+ mise install
16
20
  ```
17
21
 
18
22
  ## Development tools
19
23
 
20
- * `poe lint`: Run formatters and static checks
21
- * `poe test`: Run tests
24
+ * `mise run lint`: Run formatters and static checks
25
+ * `mise run test`: Run tests
22
26
 
23
27
  The `lint` and `test` tasks can also be run as a single combined command with:
24
28
 
25
29
  ```sh
26
- poe lt
30
+ mise run lt
27
31
  ```
28
32
 
29
33
  ## Documentation server
@@ -31,11 +35,11 @@ poe lt
31
35
  Start the development server with:
32
36
 
33
37
  ```sh
34
- poe docs
38
+ mise run docs
35
39
  ```
36
40
 
37
41
  The documentation site will be served at:
38
42
 
39
43
  [**http://localhost:8000**](http://localhost:8000){ .md-button .md-button--primary target="_blank" }
40
44
 
41
- To use a different bind host/port, run `poe --help docs` for arguments info.
45
+ To use a different bind host/port, run `mise run docs --help` for usage info.
@@ -7,11 +7,11 @@ icon: lucide/rocket
7
7
 
8
8
  Release version numbers should follow [Semantic Versioning][semver].
9
9
 
10
- To create a release, run `poe release` with one of `patch`, `minor`, or `major`
11
- corresponding to the version number component to update:
10
+ To create a release, run `mise run release` with one of `patch`, `minor`, or
11
+ `major` corresponding to the version number component to update:
12
12
 
13
13
  ```sh
14
- poe release patch|minor|major
14
+ mise run release patch|minor|major
15
15
  ```
16
16
 
17
17
  A new tag with the new release version number will be created automatically
@@ -10,7 +10,7 @@ icon: lucide/settings
10
10
  these instructions are also present in your new project along with links
11
11
  directly to your project's specific settings pages! To view:
12
12
 
13
- 1. Start the local documentation server: `poe docs`
13
+ 1. Start the local documentation server: `mise run docs`
14
14
  2. In your browser:
15
15
 
16
16
  1. Open **<http://localhost:8000>**
@@ -7,11 +7,11 @@ icon: lucide/rocket
7
7
 
8
8
  Release version numbers should follow [Semantic Versioning][semver].
9
9
 
10
- To create a release, run `poe release` with one of `patch`, `minor`, or `major`
11
- corresponding to the version number component to update:
10
+ To create a release, run `mise run release` with one of `patch`, `minor`, or
11
+ `major` corresponding to the version number component to update:
12
12
 
13
13
  ```sh
14
- poe release patch|minor|major
14
+ mise run release patch|minor|major
15
15
  ```
16
16
 
17
17
  A new tag with the new release version number will be created automatically
@@ -0,0 +1,28 @@
1
+ ---
2
+ title: Required software
3
+ icon: lucide/bookmark-check
4
+ ---
5
+
6
+ # Required software
7
+
8
+ - [x] [**git** for verson control][git]
9
+ - [x] [**mise**][mise] tool manager: `curl https://mise.run | sh` or
10
+ [alternate installation method][mise-installation]
11
+
12
+ !!! info
13
+
14
+ `mise` ensures additional software is available, such as:
15
+
16
+ * A [supported version][python-versions] of [**Python**][python]
17
+ * [Astral's **uv** Python project manager][uv]
18
+
19
+ - [x] [**Copier**][copier]: `mise use -g copier`
20
+ / `uv tool install copier` / `pipx install copier`
21
+
22
+ [copier]: https://copier.readthedocs.io
23
+ [git]: https://git-scm.com
24
+ [mise-installation]: https://mise.jdx.dev/installing-mise.html
25
+ [mise]: https://mise.jdx.dev
26
+ [python-versions]: https://devguide.python.org/versions/
27
+ [python]: https://python.org
28
+ [uv]: https://docs.astral.sh/uv/
@@ -49,7 +49,6 @@ dev = [
49
49
  "bump-my-version>=1.3.0",
50
50
  "copier>=9",
51
51
  "poethepoet>=0.46",
52
- "prek>=0.4",
53
52
  "pysentry-rs>=0.4",
54
53
  "pytest>=9",
55
54
  "pytest-cov>=7",
@@ -77,110 +76,6 @@ include = ["/copier_python", "/tests", "*.md", "LICENSE"]
77
76
  [tool.hatch.version]
78
77
  source = "uv-dynamic-versioning"
79
78
 
80
- [tool.poe.executor]
81
- type = "uv"
82
-
83
- [tool.poe.tasks.audit]
84
- cmd = "pysentry-rs"
85
- help = "Run dependencies security audit"
86
-
87
- [tool.poe.tasks.build]
88
- cmd = "uv build"
89
- help = "Build distribution package"
90
-
91
- [tool.poe.tasks.docs-build]
92
- cmd = "zensical build -c"
93
- help = "Build documentation site"
94
-
95
- [tool.poe.tasks.docs]
96
- sequence = [
97
- {ref = "docs-build"},
98
- {cmd = "zensical serve -a \"${host}:${port}\""},
99
- ]
100
- help = "Run documentation site locally"
101
-
102
- [tool.poe.tasks.docs.args.host]
103
- options = ['--host', '-h']
104
- help = "Bind IP"
105
- default = "localhost"
106
-
107
- [tool.poe.tasks.docs.args.port]
108
- positional = true
109
- help = "Bind Port"
110
- default = "8000"
111
-
112
- [tool.poe.tasks.init]
113
- sequence = [
114
- {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"},
115
- {cmd = "git init"},
116
- {ref = "setup"},
117
- {cmd = "git remote add origin https://github.com/smkent/copier-python"},
118
- {cmd = "git config --local remote.origin.pushurl git@github.com:smkent/copier-python.git"},
119
- {cmd = "git add ."},
120
- {cmd = "git commit -m 'Create project from template'"},
121
- ]
122
- help = "Initialize git repository once on project creation"
123
-
124
- [tool.poe.tasks.lint]
125
- cmd = "prek run --all-files"
126
- help = "Run all formatters and static checks"
127
-
128
- [tool.poe.tasks.release]
129
- cmd = "bump-my-version bump -v"
130
- help = "Create and push a release tag (patch/minor/major)"
131
-
132
- [tool.poe.tasks.lt]
133
- sequence = [{ref = "lint"}, {ref = "test"}]
134
- help = "Run all formatters, static checks and tests"
135
-
136
- [tool.poe.tasks.setup]
137
- sequence = [
138
- {cmd = "uv sync"},
139
- {cmd = "prek install"},
140
- ]
141
- help = "Install project dependencies and git hooks"
142
-
143
- [tool.poe.tasks.snapup]
144
- cmd = "pytest --snapshot-update --numprocesses 0"
145
- help = "Update test snapshots"
146
-
147
- [tool.poe.tasks.test]
148
- cmd = "pytest"
149
- help = "Run tests"
150
-
151
- [tool.poe.tasks.test-versions]
152
- sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"]
153
- help = "Run tests across all Python versions"
154
-
155
- [tool.poe.tasks.test-py310]
156
- cmd = "pytest"
157
- executor = {isolated = true, python = "3.10"}
158
- help = "Run tests using Python 3.10"
159
-
160
- [tool.poe.tasks.test-py311]
161
- cmd = "pytest"
162
- executor = {isolated = true, python = "3.11"}
163
- help = "Run tests using Python 3.11"
164
-
165
- [tool.poe.tasks.test-py312]
166
- cmd = "pytest"
167
- executor = {isolated = true, python = "3.12"}
168
- help = "Run tests using Python 3.12"
169
-
170
- [tool.poe.tasks.test-py313]
171
- cmd = "pytest"
172
- executor = {isolated = true, python = "3.13"}
173
- help = "Run tests using Python 3.13"
174
-
175
- [tool.poe.tasks.test-py314]
176
- cmd = "pytest"
177
- executor = {isolated = true, python = "3.14"}
178
- help = "Run tests using Python 3.14"
179
-
180
- [tool.poe.tasks.ti]
181
- cmd = "pytest --numprocesses 0 --no-cov -vv"
182
- help = "Run tests with debug friendly options"
183
-
184
79
  [tool.pytest]
185
80
  addopts = [
186
81
  "-ra",
@@ -0,0 +1,15 @@
1
+ # serializer version: 1
2
+ # name: test_agents
3
+ '''
4
+ # Environment/Tools
5
+
6
+ * `mise` manages dev tools and tasks, including `uv` which manages Python and dependencies.
7
+ * Use `uv add`/`uv run python` instead of bare `pip`/`python`
8
+ * `mise install`: After-clone setup (install tools, dependencies, pre-commit hooks)
9
+ * `mise run lint`: Pre-commit hooks (via `pre-commit`-compatible `prek`) including lint, format, type check (ruff, ty)
10
+ * `mise run test`: Run tests (accepts pytest arguments)
11
+ * `mise run lt`: Lint+test (no arguments)
12
+ * `mise run snapup`: Update test snapshots (syrupy, accepts pytest arguments)
13
+
14
+ '''
15
+ # ---
@@ -39,22 +39,22 @@
39
39
 
40
40
  ### Prerequisites
41
41
 
42
- - [x] A [supported version][python-versions] of [**Python**][python]
43
- - [x] [**git** for verson control][git]
44
- - [x] [Astral's **uv** Python project manager][uv]: `pip install uv` or
45
- [other supported method][uv-installation]
46
- - [x] [**Copier**][copier]: `uv tool install copier`
47
- - [x] [Poe the Poet][poethepoet] (recommended): `uv tool install poethepoet`
42
+ - [x] [**git** for version control][git]
43
+ - [x] [**mise**][mise] tool manager: `curl https://mise.run | sh` or
44
+ [alternate installation method][mise-installation]
48
45
 
49
- This provides `poe` without the `uv run` prefix,
50
- e.g. `poe test` instead of `uv run poe test`
46
+ !!! info
47
+
48
+ `mise` ensures additional software is available, such as:
49
+
50
+ * A [supported version][python-versions] of [**Python**][python]
51
+ * [Astral's **uv** Python project manager][uv]
51
52
 
52
- [copier]: https://copier.readthedocs.io
53
53
  [git]: https://git-scm.com
54
- [poethepoet]: https://poethepoet.natn.io/
54
+ [mise-installation]: https://mise.jdx.dev/installing-mise.html
55
+ [mise]: https://mise.jdx.dev
55
56
  [python-versions]: https://devguide.python.org/versions/
56
57
  [python]: https://python.org
57
- [uv-installation]: https://docs.astral.sh/uv/getting-started/installation/
58
58
  [uv]: https://docs.astral.sh/uv/
59
59
 
60
60
  ### Project development workflow
@@ -66,21 +66,22 @@
66
66
  cd PKFire
67
67
  ```
68
68
 
69
- Run `poe setup` in new repository clones to enable git hooks:
69
+ Run `mise install` in new repository clones to install tools, dependencies, and
70
+ git hooks:
70
71
 
71
72
  ```sh
72
- poe setup # Enables git hooks
73
+ mise install
73
74
  ```
74
75
 
75
76
  #### Development tools
76
77
 
77
- * `poe lint`: Run formatters and static checks
78
- * `poe test`: Run tests
78
+ * `mise run lint`: Run formatters and static checks
79
+ * `mise run test`: Run tests
79
80
 
80
81
  The `lint` and `test` tasks can also be run as a single combined command with:
81
82
 
82
83
  ```sh
83
- poe lt
84
+ mise run lt
84
85
  ```
85
86
 
86
87
  ### Test snapshots
@@ -89,7 +90,7 @@
89
90
  updated by running:
90
91
 
91
92
  ```sh
92
- poe snapup
93
+ mise run snapup
93
94
  ```
94
95
 
95
96
  ### Applying copier-python template updates