create-forge 0.3.0__tar.gz → 0.3.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.
- {create_forge-0.3.0 → create_forge-0.3.2}/CHANGELOG.md +16 -0
- create_forge-0.3.2/PKG-INFO +214 -0
- create_forge-0.3.2/README.md +180 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/adr/README.md +6 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/README.md +3 -1
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/14-data-science-validation-and-rollout/README.md +13 -4
- {create_forge-0.3.0 → create_forge-0.3.2}/pyproject.toml +32 -5
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/cli.py +155 -9
- create_forge-0.3.2/src/create_forge/runner.py +341 -0
- create_forge-0.3.2/src/create_forge/sources.py +86 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/conftest.py +1 -1
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/installed_client.py +6 -5
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_cli.py +53 -0
- create_forge-0.3.2/tests/test_copier_cache.py +130 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_installed_data_science.py +18 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_engine_contract.py +37 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_reference_client_boundary.py +1 -1
- create_forge-0.3.2/tests/test_runner.py +325 -0
- create_forge-0.3.2/tests/test_sources.py +307 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_update.py +35 -0
- create_forge-0.3.2/tests/test_workflows.py +171 -0
- create_forge-0.3.0/PKG-INFO +0 -312
- create_forge-0.3.0/README.md +0 -280
- create_forge-0.3.0/src/create_forge/runner.py +0 -162
- create_forge-0.3.0/tests/test_runner.py +0 -159
- {create_forge-0.3.0 → create_forge-0.3.2}/.gitignore +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/LICENSE +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/00-governance-and-principles/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/01-python-core/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/02-developer-experience/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/03-quality-and-ci/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/04-runtime-and-configuration/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/05-security-and-supply-chain/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/06-extension-and-composition-contract/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/07-forge-cli-integration/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/08-reference-archetype-validation/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/09-blueprint-compatibility/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/10-data-science-architecture-contract/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/11-reusable-data-science-capabilities/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/12-data-science-archetype/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/13-data-science-cli-integration/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/examples/README.md +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/__init__.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/compat.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/config.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/engine.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/models.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/pipeline.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/prompts.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/registry.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/spec.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/staging.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/templates.toml +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/__init__.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_adr.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_archetype_parity.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_component_selection.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_config.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_data_science_pipeline.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_downstream_reference.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_drift.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_engine_generation.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_generation.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_installed_rollout.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_engine_adapter.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_engine_cross_repository.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_labels.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_models.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_pipeline.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_policy_hook.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_prompts.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_registry.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_spec.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_staging.py +0 -0
- {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_update_network.py +0 -0
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
Generated by git-cliff from Conventional Commits.
|
|
4
|
+
## [0.3.2] - 2026-09-08
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
- Diagnose the Copier template cache
|
|
9
|
+
## [0.3.1] - 2026-09-08
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
- Prevent template source credentials from reaching CLI output (#144)
|
|
14
|
+
- Raise the Copier floor past the destination-escape advisories (#146)
|
|
15
|
+
|
|
16
|
+
### Documentation
|
|
17
|
+
|
|
18
|
+
- Publish 0.3.0 and close the Data Science roadmap (#130)
|
|
19
|
+
- Add shared Forge user guide and simplify README (#131)
|
|
4
20
|
## [0.3.0] - 2026-09-05
|
|
5
21
|
|
|
6
22
|
### Bug Fixes
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: create-forge
|
|
3
|
+
Version: 0.3.2
|
|
4
|
+
Summary: Scaffold modern Python projects from maintained templates.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Sandsy09/create-forge
|
|
6
|
+
Project-URL: Repository, https://github.com/Sandsy09/create-forge
|
|
7
|
+
Project-URL: Issues, https://github.com/Sandsy09/create-forge/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/Sandsy09/create-forge/blob/main/CHANGELOG.md
|
|
9
|
+
Author: Alex
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: cookiecutter,copier,project,scaffold,template
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
21
|
+
Classifier: Typing :: Typed
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: copier<10,>=9.16
|
|
24
|
+
Requires-Dist: platformdirs>=4.3.6
|
|
25
|
+
Requires-Dist: pydantic>=2.10
|
|
26
|
+
Requires-Dist: pyyaml>=6.0
|
|
27
|
+
Requires-Dist: questionary>=2.0
|
|
28
|
+
Requires-Dist: rich>=13.9
|
|
29
|
+
Requires-Dist: typer>=0.16
|
|
30
|
+
Provides-Extra: engine
|
|
31
|
+
Requires-Dist: forge-template<0.5,>=0.4.1; extra == 'engine'
|
|
32
|
+
Requires-Dist: uv<0.13,>=0.12; extra == 'engine'
|
|
33
|
+
Description-Content-Type: text/markdown
|
|
34
|
+
|
|
35
|
+
# create-forge
|
|
36
|
+
|
|
37
|
+
[](https://github.com/Sandsy09/create-forge/actions/workflows/ci.yml)
|
|
38
|
+
[](https://pypi.org/project/create-forge/)
|
|
39
|
+
|
|
40
|
+
Create Python projects with packaging, quality checks, and a useful starting
|
|
41
|
+
structure already in place.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
uvx create-forge new
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Requires [uv](https://docs.astral.sh/uv/getting-started/installation/), Git,
|
|
48
|
+
and Python 3.11+ (uv can install Python for you). Configure your Git author
|
|
49
|
+
name and email before generating a default Library project: generation
|
|
50
|
+
creates local commits.
|
|
51
|
+
|
|
52
|
+
**[Read the Forge user guide](https://sandsy09.github.io/create-forge/)**
|
|
53
|
+
for walkthroughs, template choices, and troubleshooting.
|
|
54
|
+
|
|
55
|
+
## How the repositories fit together
|
|
56
|
+
|
|
57
|
+
| Repository | What it provides |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| **create-forge** | The CLI: prompts, project creation, updates, and diagnostics. |
|
|
60
|
+
| [forge-template](https://github.com/Sandsy09/forge-template) | The project templates and composition engine used to generate files. |
|
|
61
|
+
|
|
62
|
+
You normally use the CLI without cloning either repository. Generated
|
|
63
|
+
projects do not depend on either Forge package at runtime.
|
|
64
|
+
|
|
65
|
+
## Create your first project
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
uvx create-forge new "My Library"
|
|
69
|
+
cd my-library
|
|
70
|
+
uv run poe check
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The default workflow creates an installable Library with a `src/` layout,
|
|
74
|
+
uv, Ruff, pytest with coverage, mypy and/or pyright, pre-commit hooks, and
|
|
75
|
+
GitHub Actions CI. Choose your build backend, versioning, license, and
|
|
76
|
+
dependency-update tooling. MkDocs documentation is optional.
|
|
77
|
+
|
|
78
|
+
The template is rendered by [Copier](https://copier.readthedocs.io/), which
|
|
79
|
+
also supports bringing later template improvements into existing projects.
|
|
80
|
+
|
|
81
|
+
## Install and manage the tool
|
|
82
|
+
|
|
83
|
+
Use `uvx` for occasional runs, or install a persistent command:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
uv tool install create-forge
|
|
87
|
+
create-forge new
|
|
88
|
+
uv tool upgrade create-forge
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
If the command is not on your PATH, run `uv tool update-shell` and restart
|
|
92
|
+
your terminal.
|
|
93
|
+
|
|
94
|
+
### Choose a CLI version
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
uvx create-forge@latest new
|
|
98
|
+
uvx create-forge@0.3.0 new
|
|
99
|
+
uv tool install "create-forge==0.3.0"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Plain `uvx create-forge` can reuse a cached or persistently installed
|
|
103
|
+
version; `@latest` explicitly requests the latest release. Tool upgrades
|
|
104
|
+
respect the constraints used at installation, so an exact pin stays pinned.
|
|
105
|
+
To return to the latest release, run `uv tool install create-forge@latest`.
|
|
106
|
+
See [installation and versions](https://sandsy09.github.io/create-forge/installation/).
|
|
107
|
+
|
|
108
|
+
## Everyday usage
|
|
109
|
+
|
|
110
|
+
| Command | Purpose |
|
|
111
|
+
| --- | --- |
|
|
112
|
+
| `uvx create-forge new` | Create a project interactively. |
|
|
113
|
+
| `uvx create-forge list` | List the bundled Copier templates. |
|
|
114
|
+
| `uvx create-forge update` | Update a Copier-generated project from its directory. |
|
|
115
|
+
| `uvx create-forge doctor` | Diagnose Python, Git, uv, and package compatibility. |
|
|
116
|
+
| `uvx create-forge config init` | Create an optional configuration file. |
|
|
117
|
+
| `uvx create-forge config show` | Show resolved configuration and its sources. |
|
|
118
|
+
|
|
119
|
+
For scripts and CI, provide a project name and skip questions with `--yes`:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
uvx create-forge new "My Library" --yes --data github_org=your-org --data build_backend=hatchling --data versioning=vcs
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Use `--path` to choose the destination and repeat `--data key=value` to
|
|
126
|
+
preset answers. Run `uvx create-forge new --help` for the default workflow's
|
|
127
|
+
options. Saved author details, GitHub organisation, and preferred template
|
|
128
|
+
are covered in the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
|
|
129
|
+
|
|
130
|
+
### Choose a template version or source
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
uvx create-forge new "My Library" --template library --ref v0.4.1
|
|
134
|
+
uvx create-forge new "Custom Project" --template-url https://github.com/you/your-template
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`--ref` selects a Git revision in the **template repository**. It does not
|
|
138
|
+
select the CLI version. Without it, Copier uses the latest suitable release
|
|
139
|
+
tag. The bundled registry currently offers Library; upgrade the CLI to
|
|
140
|
+
receive registry changes.
|
|
141
|
+
|
|
142
|
+
Templates can execute code through generation and update tasks. Use custom
|
|
143
|
+
sources only when you trust their content; `--yes` also skips the custom
|
|
144
|
+
template confirmation.
|
|
145
|
+
|
|
146
|
+
### Update a generated project
|
|
147
|
+
|
|
148
|
+
From a clean, committed Copier-generated project:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
uvx create-forge update --dry-run
|
|
152
|
+
uvx create-forge update
|
|
153
|
+
uv run poe check
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Keep `.copier-answers.yml` committed. Review the resulting diff and resolve
|
|
157
|
+
conflicts before committing. A dry run validates the update without applying
|
|
158
|
+
it; it does not produce a file-by-file diff. Use `update --ref v0.4.1` to
|
|
159
|
+
target a particular template version.
|
|
160
|
+
|
|
161
|
+
## Preview: more project types and capabilities
|
|
162
|
+
|
|
163
|
+
The `0.3.0` CLI also provides an opt-in engine preview using
|
|
164
|
+
`forge-template>=0.4.1,<0.5`. These options are currently hidden from help.
|
|
165
|
+
|
|
166
|
+
| Project type | Use it for |
|
|
167
|
+
| --- | --- |
|
|
168
|
+
| Library | A distributable Python package with a choice of packaging modes. |
|
|
169
|
+
| CLI Application | A Typer application with a console command and tests. |
|
|
170
|
+
| Data Science | A Python package with a starter notebook and Jupyter tooling. |
|
|
171
|
+
|
|
172
|
+
Add **Jupyter** for notebook development or **Scientific Python** for NumPy,
|
|
173
|
+
pandas, Matplotlib, and scikit-learn. Data Science requires Jupyter;
|
|
174
|
+
Scientific Python is optional. These capabilities can also accompany the
|
|
175
|
+
other preview archetypes.
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
uvx --from "create-forge[engine]==0.3.0" create-forge new "My Analysis" --engine-preview --archetype data-science --capability jupyter --yes --data license=mit
|
|
179
|
+
cd my-analysis
|
|
180
|
+
uv run --locked poe check
|
|
181
|
+
uv run poe notebook
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
For regular preview use, install with `uv tool install "create-forge[engine]"`.
|
|
185
|
+
The [project guide](https://sandsy09.github.io/create-forge/projects/) explains
|
|
186
|
+
each type's output and links to complete recipes.
|
|
187
|
+
|
|
188
|
+
**Preview projects do not support `create-forge update`.** Their shared
|
|
189
|
+
tooling differs from the default Copier template; the preview does not
|
|
190
|
+
generate its CI workflows or install Git hooks. `--template`,
|
|
191
|
+
`--template-url`, and `--ref` apply only to the Copier workflow.
|
|
192
|
+
|
|
193
|
+
## What's next
|
|
194
|
+
|
|
195
|
+
The Foundation and Data Science roadmaps are complete. Making the engine
|
|
196
|
+
the default generation workflow is a planned direction with no scheduled
|
|
197
|
+
release. Follow [open work](https://github.com/Sandsy09/create-forge/issues)
|
|
198
|
+
and [releases](https://github.com/Sandsy09/create-forge/releases) for updates,
|
|
199
|
+
or suggest a project type, capability, or guide you would find useful.
|
|
200
|
+
|
|
201
|
+
## Feedback and contributing
|
|
202
|
+
|
|
203
|
+
- [Report a CLI problem or suggest a feature](https://github.com/Sandsy09/create-forge/issues/new/choose).
|
|
204
|
+
- [Request or correct documentation](https://github.com/Sandsy09/create-forge/issues/new?template=documentation.yml).
|
|
205
|
+
- [Report generated-content or capability problems](https://github.com/Sandsy09/forge-template/issues/new/choose).
|
|
206
|
+
|
|
207
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development and PR checks, and
|
|
208
|
+
the [reference index](https://sandsy09.github.io/create-forge/reference/) for
|
|
209
|
+
engine APIs and architecture documents. Report vulnerabilities through
|
|
210
|
+
[SECURITY.md](SECURITY.md).
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# create-forge
|
|
2
|
+
|
|
3
|
+
[](https://github.com/Sandsy09/create-forge/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/create-forge/)
|
|
5
|
+
|
|
6
|
+
Create Python projects with packaging, quality checks, and a useful starting
|
|
7
|
+
structure already in place.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
uvx create-forge new
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Requires [uv](https://docs.astral.sh/uv/getting-started/installation/), Git,
|
|
14
|
+
and Python 3.11+ (uv can install Python for you). Configure your Git author
|
|
15
|
+
name and email before generating a default Library project: generation
|
|
16
|
+
creates local commits.
|
|
17
|
+
|
|
18
|
+
**[Read the Forge user guide](https://sandsy09.github.io/create-forge/)**
|
|
19
|
+
for walkthroughs, template choices, and troubleshooting.
|
|
20
|
+
|
|
21
|
+
## How the repositories fit together
|
|
22
|
+
|
|
23
|
+
| Repository | What it provides |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| **create-forge** | The CLI: prompts, project creation, updates, and diagnostics. |
|
|
26
|
+
| [forge-template](https://github.com/Sandsy09/forge-template) | The project templates and composition engine used to generate files. |
|
|
27
|
+
|
|
28
|
+
You normally use the CLI without cloning either repository. Generated
|
|
29
|
+
projects do not depend on either Forge package at runtime.
|
|
30
|
+
|
|
31
|
+
## Create your first project
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
uvx create-forge new "My Library"
|
|
35
|
+
cd my-library
|
|
36
|
+
uv run poe check
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The default workflow creates an installable Library with a `src/` layout,
|
|
40
|
+
uv, Ruff, pytest with coverage, mypy and/or pyright, pre-commit hooks, and
|
|
41
|
+
GitHub Actions CI. Choose your build backend, versioning, license, and
|
|
42
|
+
dependency-update tooling. MkDocs documentation is optional.
|
|
43
|
+
|
|
44
|
+
The template is rendered by [Copier](https://copier.readthedocs.io/), which
|
|
45
|
+
also supports bringing later template improvements into existing projects.
|
|
46
|
+
|
|
47
|
+
## Install and manage the tool
|
|
48
|
+
|
|
49
|
+
Use `uvx` for occasional runs, or install a persistent command:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
uv tool install create-forge
|
|
53
|
+
create-forge new
|
|
54
|
+
uv tool upgrade create-forge
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
If the command is not on your PATH, run `uv tool update-shell` and restart
|
|
58
|
+
your terminal.
|
|
59
|
+
|
|
60
|
+
### Choose a CLI version
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
uvx create-forge@latest new
|
|
64
|
+
uvx create-forge@0.3.0 new
|
|
65
|
+
uv tool install "create-forge==0.3.0"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Plain `uvx create-forge` can reuse a cached or persistently installed
|
|
69
|
+
version; `@latest` explicitly requests the latest release. Tool upgrades
|
|
70
|
+
respect the constraints used at installation, so an exact pin stays pinned.
|
|
71
|
+
To return to the latest release, run `uv tool install create-forge@latest`.
|
|
72
|
+
See [installation and versions](https://sandsy09.github.io/create-forge/installation/).
|
|
73
|
+
|
|
74
|
+
## Everyday usage
|
|
75
|
+
|
|
76
|
+
| Command | Purpose |
|
|
77
|
+
| --- | --- |
|
|
78
|
+
| `uvx create-forge new` | Create a project interactively. |
|
|
79
|
+
| `uvx create-forge list` | List the bundled Copier templates. |
|
|
80
|
+
| `uvx create-forge update` | Update a Copier-generated project from its directory. |
|
|
81
|
+
| `uvx create-forge doctor` | Diagnose Python, Git, uv, and package compatibility. |
|
|
82
|
+
| `uvx create-forge config init` | Create an optional configuration file. |
|
|
83
|
+
| `uvx create-forge config show` | Show resolved configuration and its sources. |
|
|
84
|
+
|
|
85
|
+
For scripts and CI, provide a project name and skip questions with `--yes`:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
uvx create-forge new "My Library" --yes --data github_org=your-org --data build_backend=hatchling --data versioning=vcs
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Use `--path` to choose the destination and repeat `--data key=value` to
|
|
92
|
+
preset answers. Run `uvx create-forge new --help` for the default workflow's
|
|
93
|
+
options. Saved author details, GitHub organisation, and preferred template
|
|
94
|
+
are covered in the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
|
|
95
|
+
|
|
96
|
+
### Choose a template version or source
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
uvx create-forge new "My Library" --template library --ref v0.4.1
|
|
100
|
+
uvx create-forge new "Custom Project" --template-url https://github.com/you/your-template
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`--ref` selects a Git revision in the **template repository**. It does not
|
|
104
|
+
select the CLI version. Without it, Copier uses the latest suitable release
|
|
105
|
+
tag. The bundled registry currently offers Library; upgrade the CLI to
|
|
106
|
+
receive registry changes.
|
|
107
|
+
|
|
108
|
+
Templates can execute code through generation and update tasks. Use custom
|
|
109
|
+
sources only when you trust their content; `--yes` also skips the custom
|
|
110
|
+
template confirmation.
|
|
111
|
+
|
|
112
|
+
### Update a generated project
|
|
113
|
+
|
|
114
|
+
From a clean, committed Copier-generated project:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
uvx create-forge update --dry-run
|
|
118
|
+
uvx create-forge update
|
|
119
|
+
uv run poe check
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Keep `.copier-answers.yml` committed. Review the resulting diff and resolve
|
|
123
|
+
conflicts before committing. A dry run validates the update without applying
|
|
124
|
+
it; it does not produce a file-by-file diff. Use `update --ref v0.4.1` to
|
|
125
|
+
target a particular template version.
|
|
126
|
+
|
|
127
|
+
## Preview: more project types and capabilities
|
|
128
|
+
|
|
129
|
+
The `0.3.0` CLI also provides an opt-in engine preview using
|
|
130
|
+
`forge-template>=0.4.1,<0.5`. These options are currently hidden from help.
|
|
131
|
+
|
|
132
|
+
| Project type | Use it for |
|
|
133
|
+
| --- | --- |
|
|
134
|
+
| Library | A distributable Python package with a choice of packaging modes. |
|
|
135
|
+
| CLI Application | A Typer application with a console command and tests. |
|
|
136
|
+
| Data Science | A Python package with a starter notebook and Jupyter tooling. |
|
|
137
|
+
|
|
138
|
+
Add **Jupyter** for notebook development or **Scientific Python** for NumPy,
|
|
139
|
+
pandas, Matplotlib, and scikit-learn. Data Science requires Jupyter;
|
|
140
|
+
Scientific Python is optional. These capabilities can also accompany the
|
|
141
|
+
other preview archetypes.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
uvx --from "create-forge[engine]==0.3.0" create-forge new "My Analysis" --engine-preview --archetype data-science --capability jupyter --yes --data license=mit
|
|
145
|
+
cd my-analysis
|
|
146
|
+
uv run --locked poe check
|
|
147
|
+
uv run poe notebook
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
For regular preview use, install with `uv tool install "create-forge[engine]"`.
|
|
151
|
+
The [project guide](https://sandsy09.github.io/create-forge/projects/) explains
|
|
152
|
+
each type's output and links to complete recipes.
|
|
153
|
+
|
|
154
|
+
**Preview projects do not support `create-forge update`.** Their shared
|
|
155
|
+
tooling differs from the default Copier template; the preview does not
|
|
156
|
+
generate its CI workflows or install Git hooks. `--template`,
|
|
157
|
+
`--template-url`, and `--ref` apply only to the Copier workflow.
|
|
158
|
+
|
|
159
|
+
## What's next
|
|
160
|
+
|
|
161
|
+
The Foundation and Data Science roadmaps are complete. Making the engine
|
|
162
|
+
the default generation workflow is a planned direction with no scheduled
|
|
163
|
+
release. Follow [open work](https://github.com/Sandsy09/create-forge/issues)
|
|
164
|
+
and [releases](https://github.com/Sandsy09/create-forge/releases) for updates,
|
|
165
|
+
or suggest a project type, capability, or guide you would find useful.
|
|
166
|
+
|
|
167
|
+
## Feedback and contributing
|
|
168
|
+
|
|
169
|
+
- [Report a CLI problem or suggest a feature](https://github.com/Sandsy09/create-forge/issues/new/choose).
|
|
170
|
+
- [Request or correct documentation](https://github.com/Sandsy09/create-forge/issues/new?template=documentation.yml).
|
|
171
|
+
- [Report generated-content or capability problems](https://github.com/Sandsy09/forge-template/issues/new/choose).
|
|
172
|
+
|
|
173
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development and PR checks, and
|
|
174
|
+
the [reference index](https://sandsy09.github.io/create-forge/reference/) for
|
|
175
|
+
engine APIs and architecture documents. Report vulnerabilities through
|
|
176
|
+
[SECURITY.md](SECURITY.md).
|
|
177
|
+
|
|
178
|
+
## License
|
|
179
|
+
|
|
180
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -36,6 +36,12 @@ format](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
|
|
|
36
36
|
- [0031 — Adopt the reviewed forge-template 0.4.1 release](0031-adopt-the-reviewed-forge-template-0-4-1-release.md)
|
|
37
37
|
- [0032 — Validate Data Science through the installed create-forge candidate](0032-validate-installed-data-science-generation.md)
|
|
38
38
|
- [0033 — Complete the rollout regression and failure matrix at the installed boundary](0033-complete-rollout-regression-validation.md)
|
|
39
|
+
- [0034 — Publish create-forge 0.3.0 and close the Data Science roadmap](0034-publish-0-3-0-and-close-roadmap-v2.md)
|
|
40
|
+
- [0035 — Shared Forge user documentation](0035-shared-forge-user-documentation.md)
|
|
41
|
+
- [0036 — Keep credentials out of template sources and CLI diagnostics](0036-template-source-credentials.md)
|
|
42
|
+
- [0037 — Pin external Actions to reviewed commits and scope permissions per job](0037-immutable-workflow-actions.md)
|
|
43
|
+
- [0038 — Raise the Copier floor past the destination-escape advisories and hold uv](0038-dependency-floor-review.md)
|
|
44
|
+
- [0039 — Diagnose the Copier template cache](0039-copier-cache-diagnostics.md)
|
|
39
45
|
|
|
40
46
|
Add a new record by copying the most recent one and incrementing the number.
|
|
41
47
|
Records are immutable: supersede them rather than editing.
|
|
@@ -31,7 +31,9 @@ Provider Stage 14 is complete and published the reviewed
|
|
|
31
31
|
`>=0.4.1,<0.5` lower bound and prepares create-forge `0.3.0`; CF-14.02
|
|
32
32
|
(ADR 0032) completes installed-console Data Science validation, and CF-14.03
|
|
33
33
|
(ADR 0033) completes the installed regression and failure matrix. CF-14.04
|
|
34
|
-
|
|
34
|
+
(ADR 0034) published create-forge `0.3.0` to PyPI, verified the released pair,
|
|
35
|
+
and closed CF-EPIC-14 and both Stage 13 and Stage 14 milestones. **The Data
|
|
36
|
+
Science roadmap is complete in both repositories.**
|
|
35
37
|
|
|
36
38
|
## Repository roles
|
|
37
39
|
|
|
@@ -19,8 +19,11 @@ installed create-forge candidate under
|
|
|
19
19
|
[ADR 0032](../../../adr/0032-validate-installed-data-science-generation.md).
|
|
20
20
|
CF-14.03 completes the installed regression and failure matrix under
|
|
21
21
|
[ADR 0033](../../../adr/0033-complete-rollout-regression-validation.md).
|
|
22
|
-
CF-14.04
|
|
23
|
-
|
|
22
|
+
CF-14.04 published create-forge `0.3.0` to PyPI and closed CF-EPIC-14 and both
|
|
23
|
+
Stage 13 and Stage 14 milestones under
|
|
24
|
+
[ADR 0034](../../../adr/0034-publish-0-3-0-and-close-roadmap-v2.md). All four
|
|
25
|
+
children are complete; the Data Science roadmap is closed in both
|
|
26
|
+
repositories.
|
|
24
27
|
|
|
25
28
|
## Child sequence
|
|
26
29
|
|
|
@@ -60,8 +63,14 @@ create-forge then completes client rollout:
|
|
|
60
63
|
[rollout regression and failure validation](https://github.com/Sandsy09/create-forge/blob/main/docs/rollout-regression-validation.md)
|
|
61
64
|
record.
|
|
62
65
|
4. [CF-14.04 / create-forge#114](https://github.com/Sandsy09/create-forge/issues/114)
|
|
63
|
-
publishes create-forge 0.3.0 and completes roadmap v2
|
|
64
|
-
|
|
66
|
+
publishes create-forge 0.3.0 and completes roadmap v2. **Complete** under
|
|
67
|
+
[ADR 0034](../../../adr/0034-publish-0-3-0-and-close-roadmap-v2.md):
|
|
68
|
+
`create-forge` and `create-forge[engine]` `0.3.0` are on PyPI, tag `v0.3.0`
|
|
69
|
+
is released, the published pair generates and checks every archetype and the
|
|
70
|
+
engine-less default Copier path, and both Stage 13 and Stage 14 milestones
|
|
71
|
+
are closed. Canonical
|
|
72
|
+
[release 0.3.0 validation](https://github.com/Sandsy09/create-forge/blob/main/docs/release-0-3-0-validation.md)
|
|
73
|
+
record.
|
|
65
74
|
|
|
66
75
|
## Entry criteria
|
|
67
76
|
|
|
@@ -7,7 +7,7 @@ build-backend = "hatchling.build"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "create-forge"
|
|
10
|
-
version = "0.3.
|
|
10
|
+
version = "0.3.2"
|
|
11
11
|
description = "Scaffold modern Python projects from maintained templates."
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.11"
|
|
@@ -29,12 +29,27 @@ classifiers = [
|
|
|
29
29
|
|
|
30
30
|
dependencies = [
|
|
31
31
|
# Pinned to a major: the Python API is public but evolves faster than the
|
|
32
|
-
# CLI. runner.py is the only module that touches it.
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
# CLI. runner.py is the only module that touches it. The lower bound was
|
|
33
|
+
# raised past the destination-escape advisories to 9.15.2 (ADR 0038), then
|
|
34
|
+
# to 9.16 (ADR 0039): 9.16 is the first release with the git-mirror cache
|
|
35
|
+
# and COPIER_CACHE_DIR that runner.py models and `doctor` reports -- a
|
|
36
|
+
# required-behaviour move, not an advisory one. The whole >=9.16 range is
|
|
37
|
+
# advisory-free. See docs/engine-updates.md.
|
|
38
|
+
"copier>=9.16,<10",
|
|
39
|
+
# >=0.16: typer 0.15.0-0.15.3 declare an uncapped click and break against
|
|
40
|
+
# click >=8.2 (TyperArgument.make_metavar), and 0.15.4 pins click <8.2.
|
|
41
|
+
# 0.16.0 is the first release that works with current click. The CI
|
|
42
|
+
# `floor` job (ADR 0038) is what caught the stale >=0.15 bound.
|
|
43
|
+
"typer>=0.16",
|
|
35
44
|
"questionary>=2.0",
|
|
36
45
|
"pydantic>=2.10",
|
|
37
46
|
"rich>=13.9",
|
|
47
|
+
"pyyaml>=6.0",
|
|
48
|
+
# runner.py resolves Copier's cache directory by Copier's own documented
|
|
49
|
+
# rule (COPIER_CACHE_DIR, else the platformdirs user cache). Pinned to the
|
|
50
|
+
# bound Copier itself declares so it adds no resolution pressure and the
|
|
51
|
+
# CI `floor` job sees the version Copier's own floor would (ADR 0039).
|
|
52
|
+
"platformdirs>=4.3.6",
|
|
38
53
|
]
|
|
39
54
|
|
|
40
55
|
[project.optional-dependencies]
|
|
@@ -47,7 +62,9 @@ dependencies = [
|
|
|
47
62
|
# call. src/create_forge/engine.py is the only module that imports it;
|
|
48
63
|
# src/create_forge/compat.py holds the range itself so cli.py's `doctor` can
|
|
49
64
|
# report it without importing the engine. ADR 0021 adds bounded uv to finalise
|
|
50
|
-
# the engine render's dynamic lockfile
|
|
65
|
+
# the engine render's dynamic lockfile; ADR 0038 reviewed that `uv` floor
|
|
66
|
+
# against the advisory record and held it -- the whole `>=0.12,<0.13` range is
|
|
67
|
+
# already advisory-free.
|
|
51
68
|
engine = ["forge-template>=0.4.1,<0.5", "uv>=0.12,<0.13"]
|
|
52
69
|
|
|
53
70
|
[project.scripts]
|
|
@@ -60,6 +77,7 @@ Issues = "https://github.com/Sandsy09/create-forge/issues"
|
|
|
60
77
|
Changelog = "https://github.com/Sandsy09/create-forge/blob/main/CHANGELOG.md"
|
|
61
78
|
|
|
62
79
|
[dependency-groups]
|
|
80
|
+
docs = ["mkdocs>=1.6,<2", "mkdocs-material>=9.5,<10"]
|
|
63
81
|
lint = ["ruff>=0.14", "pre-commit>=4.0"]
|
|
64
82
|
test = [
|
|
65
83
|
"pytest>=8.3",
|
|
@@ -71,6 +89,7 @@ test = [
|
|
|
71
89
|
]
|
|
72
90
|
typecheck = ["mypy>=1.14", "types-PyYAML>=6.0"]
|
|
73
91
|
dev = [
|
|
92
|
+
{ include-group = "docs" },
|
|
74
93
|
{ include-group = "lint" },
|
|
75
94
|
{ include-group = "test" },
|
|
76
95
|
{ include-group = "typecheck" },
|
|
@@ -179,6 +198,8 @@ test = "pytest -m 'not network and not e2e'"
|
|
|
179
198
|
"test:e2e" = "pytest -m e2e"
|
|
180
199
|
check = ["format:check", "lint", "typecheck", "test"]
|
|
181
200
|
changelog = "git-cliff --output CHANGELOG.md"
|
|
201
|
+
docs = "mkdocs serve"
|
|
202
|
+
"docs:build" = "mkdocs build --strict"
|
|
182
203
|
|
|
183
204
|
# Verifies templates.toml actually ships in the wheel. This is the failure
|
|
184
205
|
# that passes every local test and breaks on first uvx run. Builds into a
|
|
@@ -191,6 +212,12 @@ changelog = "git-cliff --output CHANGELOG.md"
|
|
|
191
212
|
# via tests/test_adr.py; this is the standalone entry point.
|
|
192
213
|
"check:adr" = "python scripts/adr.py"
|
|
193
214
|
|
|
215
|
+
# Verifies every workflow pins its external actions to a full commit SHA and
|
|
216
|
+
# keeps write permissions off the workflow level (ADR 0037). Also runs inside
|
|
217
|
+
# the fast test suite via tests/test_workflows.py; this is the standalone
|
|
218
|
+
# entry point -- see scripts/check_workflows.py.
|
|
219
|
+
"check:workflows" = "python scripts/check_workflows.py"
|
|
220
|
+
|
|
194
221
|
# Reconciles a repo's GitHub labels against .github/labels.toml. Idempotent:
|
|
195
222
|
# `gh label create --force` creates or updates. Pass extra args after `--`,
|
|
196
223
|
# e.g. `uv run poe labels:sync --dry-run` or `--repo OWNER/NAME --prune`
|