forgepy-cli 1.0.0__tar.gz → 1.1.0__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.
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/CHANGELOG.md +29 -8
- forgepy_cli-1.1.0/PKG-INFO +411 -0
- forgepy_cli-1.1.0/README.md +387 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/builders/python_tools_builder.py +3 -2
- forgepy_cli-1.1.0/cli/commands/create_command.py +320 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/config/version.py +3 -2
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/core/requirements_installer.py +12 -5
- forgepy_cli-1.1.0/core/venv_paths.py +23 -0
- forgepy_cli-1.1.0/forgepy_cli.egg-info/PKG-INFO +411 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/forgepy_cli.egg-info/SOURCES.txt +1 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/pyproject.toml +2 -1
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/basic/basic_template.py +9 -1
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/cli/cli_template.py +10 -1
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/library/library_template.py +8 -1
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_engine/template_metadata.py +44 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/vscode/settings_template.py +9 -5
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/vscode/tasks_template.py +10 -3
- forgepy_cli-1.0.0/PKG-INFO +0 -176
- forgepy_cli-1.0.0/README.md +0 -153
- forgepy_cli-1.0.0/cli/commands/create_command.py +0 -161
- forgepy_cli-1.0.0/forgepy_cli.egg-info/PKG-INFO +0 -176
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/LICENSE +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/MANIFEST.in +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/builders/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/builders/base_builder.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/builders/file_builder.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/builders/folder_builder.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/command.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/commands/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/commands/component_command.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/commands/config_command.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/commands/list_command.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/commands/version_command.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/dispatcher.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/cli/parser.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/base_component.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/component_context.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/component_installer.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/component_manifest.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/component_metadata.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/component_registry.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/component_state.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/component_validation.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/github_actions_component.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/pytest_component.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/components/ruff_component.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/config/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/config/default_structure.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/config/user_config.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/core/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/core/environment_builder.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/core/git_builder.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/core/project_generator.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/core/vscode_builder.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/forgepy_cli.egg-info/dependency_links.txt +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/forgepy_cli.egg-info/entry_points.txt +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/forgepy_cli.egg-info/top_level.txt +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/main.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/models/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/models/project_config.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/setup.cfg +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/app_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/basic/basic_files.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/changelog_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/cli/cli_files.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/env_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/gitignore_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/library/library_files.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/license_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/pyproject_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/readme_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/requirements_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_engine/base_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_engine/file_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_engine/package_name.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_engine/template_context.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_engine/template_files.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_engine/template_registry.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/template_manager.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/vscode/__init__.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/vscode/extensions_template.py +0 -0
- {forgepy_cli-1.0.0 → forgepy_cli-1.1.0}/templates/vscode/launch_template.py +0 -0
|
@@ -4,24 +4,45 @@ This changelog records release-facing changes without assigning versions or date
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
No unreleased changes yet.
|
|
8
|
+
|
|
9
|
+
## 1.1.0
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added Linux project-generation support alongside Windows, including
|
|
14
|
+
platform-aware virtual-environment interpreter paths and generated VS Code
|
|
15
|
+
configuration.
|
|
16
|
+
- Expanded repository CI to validate `windows-latest` and `ubuntu-latest` on
|
|
17
|
+
CPython 3.12, 3.13, and 3.14; a full project-creation smoke test also passed
|
|
18
|
+
on CachyOS Linux.
|
|
19
|
+
- Added Easy Mode for no-command startup, guiding users through project name,
|
|
20
|
+
location, registered template selection, confirmation, and creation.
|
|
21
|
+
- Added user-facing template `display_name` and `use_cases` metadata for the
|
|
22
|
+
built-in `basic`, `cli`, and `library` templates.
|
|
23
|
+
|
|
7
24
|
### Changed
|
|
8
25
|
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
Trusted Publishing
|
|
26
|
+
- Kept explicit `create` usage as Advanced Mode. An explicit `--template`
|
|
27
|
+
bypasses the interactive template menu, while an omitted template retains
|
|
28
|
+
the existing configured-default and `basic` fallback behavior.
|
|
29
|
+
- Published ForgePy 1.0.0 to PyPI under the `forgepy-cli` distribution through
|
|
30
|
+
Trusted Publishing, establishing the public package distribution channel.
|
|
31
|
+
- Updated current project URLs for `rzou89/ForgePy` and retained GitHub OIDC
|
|
32
|
+
Trusted Publishing for release publication.
|
|
33
|
+
- Updated current project documentation to distinguish Easy Mode from Advanced
|
|
34
|
+
Mode and describe the post-v1.0 Windows/Linux support contract.
|
|
14
35
|
|
|
15
36
|
## 1.0.0
|
|
16
37
|
|
|
17
38
|
ForgePy 1.0.0 promotes the validated `1.0.0rc1` contents as the stable release
|
|
18
|
-
without additional product changes. The `v1.0.0` tag and GitHub Release exist
|
|
19
|
-
|
|
39
|
+
without additional product changes. The `v1.0.0` tag and GitHub Release exist.
|
|
40
|
+
The same 1.0.0 distribution was subsequently published to PyPI.
|
|
20
41
|
|
|
21
42
|
## 1.0.0rc1
|
|
22
43
|
|
|
23
44
|
This is the first ForgePy v1.0 release candidate, not the final v1.0.0
|
|
24
|
-
release. It
|
|
45
|
+
release. It was not published to PyPI.
|
|
25
46
|
|
|
26
47
|
### Added
|
|
27
48
|
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: forgepy-cli
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: Create structured Python projects and prepare their development tooling.
|
|
5
|
+
Author: Rendy Zou
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/rzou89/ForgePy
|
|
8
|
+
Project-URL: Repository, https://github.com/rzou89/ForgePy
|
|
9
|
+
Project-URL: Issues, https://github.com/rzou89/ForgePy/issues
|
|
10
|
+
Keywords: python,project-generator,cli,windows,linux
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
18
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
19
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
20
|
+
Requires-Python: >=3.12
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Dynamic: license-file
|
|
24
|
+
|
|
25
|
+
# ForgePy
|
|
26
|
+
|
|
27
|
+
ForgePy is a cross-platform Python project generator for Windows and Linux. It creates structured Python projects and prepares their development tooling automatically.
|
|
28
|
+
|
|
29
|
+
ForgePy supports two ways to create projects:
|
|
30
|
+
|
|
31
|
+
* **Easy Mode** — an interactive project wizard for users who want a guided experience.
|
|
32
|
+
* **Advanced Mode** — command-line arguments for scripting, automation, and experienced users.
|
|
33
|
+
|
|
34
|
+
## What ForgePy Does
|
|
35
|
+
|
|
36
|
+
ForgePy can:
|
|
37
|
+
|
|
38
|
+
* generate a project from a registered template;
|
|
39
|
+
* create a Python virtual environment;
|
|
40
|
+
* update `pip`, `setuptools`, and `wheel`;
|
|
41
|
+
* install generated project requirements;
|
|
42
|
+
* create VS Code configuration;
|
|
43
|
+
* initialize a Git repository;
|
|
44
|
+
* create the initial Git commit;
|
|
45
|
+
* add optional project components such as pytest, Ruff, and GitHub Actions configuration.
|
|
46
|
+
|
|
47
|
+
A successful project creation leaves the new project ready for development.
|
|
48
|
+
|
|
49
|
+
## Requirements
|
|
50
|
+
|
|
51
|
+
* Windows 10 or Windows 11, or Linux
|
|
52
|
+
* CPython 3.12 or newer
|
|
53
|
+
* Git
|
|
54
|
+
* Git user name and email configured for the initial commit
|
|
55
|
+
|
|
56
|
+
ForgePy v1.0 officially supports Windows and Linux on CPython.
|
|
57
|
+
|
|
58
|
+
macOS and alternative Python implementations remain unsupported and unverified.
|
|
59
|
+
|
|
60
|
+
Repository CI tests ForgePy on GitHub-hosted `windows-latest` and `ubuntu-latest` runners using CPython 3.12, 3.13, and 3.14.
|
|
61
|
+
|
|
62
|
+
A full project-creation smoke test has also been completed successfully on CachyOS Linux.
|
|
63
|
+
|
|
64
|
+
Hosted runner coverage does not literally test every Windows edition or Linux distribution.
|
|
65
|
+
|
|
66
|
+
Packaging-tool updates and dependency installation may require network access during project creation.
|
|
67
|
+
|
|
68
|
+
## Installation
|
|
69
|
+
|
|
70
|
+
ForgePy is prepared for PyPI publication under the distribution name:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
forgepy-cli
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
After the first PyPI publication, installation will be:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
python -m pip install forgepy-cli
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The first PyPI upload is still pending.
|
|
83
|
+
|
|
84
|
+
Until publication is completed, install ForgePy from a source checkout:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
python -m pip install .
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
For editable development work:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
python -m pip install -e .
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The installed command is:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
forgepy
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The application itself remains named **ForgePy**.
|
|
103
|
+
|
|
104
|
+
## Quick Start
|
|
105
|
+
|
|
106
|
+
### Easy Mode — Interactive Project Wizard
|
|
107
|
+
|
|
108
|
+
Easy Mode is intended for users who want ForgePy to guide them through project creation.
|
|
109
|
+
|
|
110
|
+
If ForgePy is installed, run:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
forgepy
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
From the ForgePy source repository, run:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
python main.py
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Running `main.py` from the VS Code **Run ▶** button also starts Easy Mode because no CLI command is supplied.
|
|
123
|
+
|
|
124
|
+
The interactive flow is:
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
Run ▶
|
|
128
|
+
↓
|
|
129
|
+
Project Name
|
|
130
|
+
↓
|
|
131
|
+
Project Location
|
|
132
|
+
↓
|
|
133
|
+
Choose Template
|
|
134
|
+
↓
|
|
135
|
+
Confirmation
|
|
136
|
+
↓
|
|
137
|
+
Create Project
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
ForgePy displays the registered project templates:
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
==================================================
|
|
144
|
+
FORGEPY PROJECT WIZARD
|
|
145
|
+
==================================================
|
|
146
|
+
|
|
147
|
+
What do you want to create?
|
|
148
|
+
|
|
149
|
+
[1] General Application
|
|
150
|
+
Template: basic
|
|
151
|
+
|
|
152
|
+
[2] CLI / Automation / Backend Tool
|
|
153
|
+
Template: cli
|
|
154
|
+
|
|
155
|
+
[3] Python Library
|
|
156
|
+
Template: library
|
|
157
|
+
|
|
158
|
+
[0] Cancel
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
After selecting a template, ForgePy displays a project summary before creating anything:
|
|
162
|
+
|
|
163
|
+
```text
|
|
164
|
+
Project Summary
|
|
165
|
+
----------------------------------------
|
|
166
|
+
Name : MyProject
|
|
167
|
+
Location : /path/to/projects
|
|
168
|
+
Template : CLI / Automation / Backend Tool
|
|
169
|
+
Folder : /path/to/projects/MyProject
|
|
170
|
+
|
|
171
|
+
Create this project? [Y/n]:
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Selecting `0` or answering `n` at confirmation cancels project creation without intentionally starting the generation lifecycle.
|
|
175
|
+
|
|
176
|
+
If `default_location` is configured, ForgePy may use that location instead of prompting for one.
|
|
177
|
+
|
|
178
|
+
Template selection in Easy Mode is always presented through the interactive template menu.
|
|
179
|
+
|
|
180
|
+
### Advanced Mode — CLI Arguments
|
|
181
|
+
|
|
182
|
+
Advanced Mode allows project creation directly through CLI arguments.
|
|
183
|
+
|
|
184
|
+
Windows PowerShell:
|
|
185
|
+
|
|
186
|
+
```powershell
|
|
187
|
+
forgepy create MyProject `
|
|
188
|
+
--location C:\Projects `
|
|
189
|
+
--template cli
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Linux:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
forgepy create MyProject \
|
|
196
|
+
--location ~/Projects \
|
|
197
|
+
--template cli
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
The same command can be executed directly from the source repository:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
python main.py create MyProject \
|
|
204
|
+
--location ~/Projects \
|
|
205
|
+
--template cli
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
When `--template` is explicitly supplied, ForgePy uses that template directly and does not display the interactive template-selection menu.
|
|
209
|
+
|
|
210
|
+
In Advanced Mode:
|
|
211
|
+
|
|
212
|
+
* an omitted project name starts the project-name prompt;
|
|
213
|
+
* an omitted location uses `default_location` when configured, otherwise ForgePy prompts for one;
|
|
214
|
+
* an omitted template uses `default_template` when configured, otherwise ForgePy falls back to `basic`.
|
|
215
|
+
|
|
216
|
+
The destination project directory must not already exist.
|
|
217
|
+
|
|
218
|
+
## Available Templates
|
|
219
|
+
|
|
220
|
+
ForgePy currently includes three registered project templates.
|
|
221
|
+
|
|
222
|
+
### `basic` — General Application
|
|
223
|
+
|
|
224
|
+
Designed for general Python applications.
|
|
225
|
+
|
|
226
|
+
Suitable for:
|
|
227
|
+
|
|
228
|
+
* desktop applications;
|
|
229
|
+
* GUI applications;
|
|
230
|
+
* data processing;
|
|
231
|
+
* Excel and reporting tools;
|
|
232
|
+
* general business applications.
|
|
233
|
+
|
|
234
|
+
The generated project includes a structured application directory layout, `app.py`, environment files, project metadata, and generated requirements.
|
|
235
|
+
|
|
236
|
+
### `cli` — CLI / Automation / Backend Tool
|
|
237
|
+
|
|
238
|
+
Designed for lightweight command-line and automation projects.
|
|
239
|
+
|
|
240
|
+
Suitable for:
|
|
241
|
+
|
|
242
|
+
* automation;
|
|
243
|
+
* trading bots;
|
|
244
|
+
* scanners;
|
|
245
|
+
* backend services;
|
|
246
|
+
* scheduled jobs;
|
|
247
|
+
* API clients.
|
|
248
|
+
|
|
249
|
+
The generated project includes a normalized Python package, `__main__.py`, an argparse-based CLI, help and version behavior, and a `tests` package.
|
|
250
|
+
|
|
251
|
+
### `library` — Python Library
|
|
252
|
+
|
|
253
|
+
Designed for reusable Python packages.
|
|
254
|
+
|
|
255
|
+
Suitable for:
|
|
256
|
+
|
|
257
|
+
* reusable Python packages;
|
|
258
|
+
* SDKs;
|
|
259
|
+
* internal libraries;
|
|
260
|
+
* modules used by other projects.
|
|
261
|
+
|
|
262
|
+
The generated project includes a normalized import-package directory and a `tests` package.
|
|
263
|
+
|
|
264
|
+
List the registered templates at any time with:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
forgepy list
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Components
|
|
271
|
+
|
|
272
|
+
Components add focused configuration files to an explicitly supplied existing project directory.
|
|
273
|
+
|
|
274
|
+
ForgePy records successful component installations in project-local state.
|
|
275
|
+
|
|
276
|
+
Available components are:
|
|
277
|
+
|
|
278
|
+
* `pytest` — adds `pytest.ini`;
|
|
279
|
+
* `ruff` — adds `ruff.toml`;
|
|
280
|
+
* `github-actions` — adds a minimal `.github/workflows/ci.yml` for the generated project.
|
|
281
|
+
|
|
282
|
+
Example commands:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
forgepy component list
|
|
286
|
+
forgepy component add pytest --project .
|
|
287
|
+
forgepy component installed --project .
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Component installation refuses an owned target that already exists.
|
|
291
|
+
|
|
292
|
+
The generated-project `github-actions` component is separate from ForgePy's own repository CI workflow.
|
|
293
|
+
|
|
294
|
+
## Configuration
|
|
295
|
+
|
|
296
|
+
ForgePy stores user configuration under:
|
|
297
|
+
|
|
298
|
+
```text
|
|
299
|
+
~/.forgepy/config.json
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Supported settings are:
|
|
303
|
+
|
|
304
|
+
* `default_template`
|
|
305
|
+
* `default_location`
|
|
306
|
+
* `author`
|
|
307
|
+
* `license`
|
|
308
|
+
|
|
309
|
+
Configuration commands:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
forgepy config show
|
|
313
|
+
forgepy config set default_template library
|
|
314
|
+
forgepy config set default_location <projects-directory>
|
|
315
|
+
forgepy config reset
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Currently:
|
|
319
|
+
|
|
320
|
+
* `default_location` affects project creation when no explicit location is supplied;
|
|
321
|
+
* `default_template` is used by Advanced Mode when `--template` is omitted;
|
|
322
|
+
* Easy Mode presents the interactive template menu instead of silently applying `default_template`;
|
|
323
|
+
* `author` and `license` are persisted but are not currently applied to generated files.
|
|
324
|
+
|
|
325
|
+
Explicit Advanced Mode `create` options take priority over stored configuration.
|
|
326
|
+
|
|
327
|
+
See all supported syntax with:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
forgepy create --help
|
|
331
|
+
forgepy config --help
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## Project Creation Lifecycle
|
|
335
|
+
|
|
336
|
+
After the project inputs are resolved and confirmed, ForgePy runs the project-creation lifecycle.
|
|
337
|
+
|
|
338
|
+
A successful creation performs these stages in order:
|
|
339
|
+
|
|
340
|
+
1. Generate the selected template.
|
|
341
|
+
2. Create `.venv`.
|
|
342
|
+
3. Update `pip`, `setuptools`, and `wheel`.
|
|
343
|
+
4. Install the generated `requirements.txt`.
|
|
344
|
+
5. Write VS Code configuration.
|
|
345
|
+
6. Run `git init`.
|
|
346
|
+
7. Run `git add .`.
|
|
347
|
+
8. Create the initial Git commit.
|
|
348
|
+
9. Report full success.
|
|
349
|
+
|
|
350
|
+
Git is a required part of successful project creation.
|
|
351
|
+
|
|
352
|
+
## Failure and Partial Projects
|
|
353
|
+
|
|
354
|
+
ForgePy project creation is not transactional or atomic.
|
|
355
|
+
|
|
356
|
+
If creation fails after ForgePy has created the destination directory, later lifecycle stages stop and full success is not reported.
|
|
357
|
+
|
|
358
|
+
Files generated by earlier stages may remain in the destination.
|
|
359
|
+
|
|
360
|
+
Inspect the destination and remove the partial project when appropriate before retrying.
|
|
361
|
+
|
|
362
|
+
## Development
|
|
363
|
+
|
|
364
|
+
Run the standard local validation from the repository root:
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
python -m unittest discover -s tests -v
|
|
368
|
+
|
|
369
|
+
python -m compileall -q \
|
|
370
|
+
components \
|
|
371
|
+
cli \
|
|
372
|
+
templates \
|
|
373
|
+
core \
|
|
374
|
+
config \
|
|
375
|
+
builders \
|
|
376
|
+
models \
|
|
377
|
+
tests
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Repository CI runs the test suite, compilation checks, and packaging/support tests on:
|
|
381
|
+
|
|
382
|
+
* `windows-latest`
|
|
383
|
+
* `ubuntu-latest`
|
|
384
|
+
|
|
385
|
+
using:
|
|
386
|
+
|
|
387
|
+
* CPython 3.12
|
|
388
|
+
* CPython 3.13
|
|
389
|
+
* CPython 3.14
|
|
390
|
+
|
|
391
|
+
The Python 3.12 CI jobs also build and inspect the wheel and source distribution, install the wheel in isolation, and exercise the installed CLI.
|
|
392
|
+
|
|
393
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for repository workflow and review expectations.
|
|
394
|
+
|
|
395
|
+
## Current Status
|
|
396
|
+
|
|
397
|
+
ForgePy v1.0.0 is the current stable Git tag and GitHub Release.
|
|
398
|
+
|
|
399
|
+
The naming is:
|
|
400
|
+
|
|
401
|
+
```text
|
|
402
|
+
Application : ForgePy
|
|
403
|
+
CLI command : forgepy
|
|
404
|
+
Distribution: forgepy-cli
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Trusted Publishing is configured in the repository, but the first PyPI upload has not yet occurred.
|
|
408
|
+
|
|
409
|
+
## License
|
|
410
|
+
|
|
411
|
+
ForgePy is licensed under the [MIT License](LICENSE).
|