Skip to content

Commit 754f3db

Browse files
author
ulises-jeremias
committed
chore(release): prepare 0.1.0 PyPI packages
Bump create-python-app-core and create-awesome-python-app to 0.1.0, publish both from the Release workflow, and document dual Trusted Publishers. Closes #148
1 parent 7c6604a commit 754f3db

11 files changed

Lines changed: 93 additions & 21 deletions

File tree

.github/workflows/publish.yml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,25 @@ jobs:
2424
with:
2525
python-version-file: .python-version
2626
- run: uv sync --group dev
27-
- run: uv build --package create-awesome-python-app
27+
# Publish core first so the CLI wheel can resolve create-python-app-core on PyPI.
28+
- name: Build packages
29+
run: |
30+
uv build --package create-python-app-core
31+
uv build --package create-awesome-python-app
32+
ls -la dist/
2833
- name: Create GitHub Release
2934
if: startsWith(github.ref, 'refs/tags/')
3035
uses: softprops/action-gh-release@v2
3136
with:
3237
files: dist/*
38+
body: |
39+
First public release. Install with:
40+
41+
```bash
42+
uvx create-awesome-python-app@0.1.0 --help
43+
```
44+
45+
Catalog: https://github.com/Create-Python-App/cpa-templates
3346
- name: Publish to PyPI (OIDC)
3447
if: startsWith(github.ref, 'refs/tags/')
3548
uses: pypa/gh-action-pypi-publish@release/v1

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Changelog
2+
3+
## 0.1.0
4+
5+
First public release of:
6+
7+
- `create-python-app-core` — scaffolding engine (Jinja `.template` / `.append`, `pyproject.toml` merge, git cache, `file://` / GitHub sources)
8+
- `create-awesome-python-app` — Typer CLI
9+
10+
Default template catalog: `Create-Python-App/cpa-templates` (`templates.json`).
11+
12+
### Install
13+
14+
```bash
15+
uvx create-awesome-python-app@0.1.0 my-api --template fastapi-starter --no-interactive
16+
```

README.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
[![CI Tests](https://github.com/Create-Python-App/create-python-app/actions/workflows/test.yml/badge.svg)](https://github.com/Create-Python-App/create-python-app/actions/workflows/test.yml)
44
[![Lint](https://github.com/Create-Python-App/create-python-app/actions/workflows/lint.yml/badge.svg)](https://github.com/Create-Python-App/create-python-app/actions/workflows/lint.yml)
55
[![Typecheck](https://github.com/Create-Python-App/create-python-app/actions/workflows/type-check.yml/badge.svg)](https://github.com/Create-Python-App/create-python-app/actions/workflows/type-check.yml)
6+
[![PyPI](https://img.shields.io/pypi/v/create-awesome-python-app.svg)](https://pypi.org/project/create-awesome-python-app/)
67
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
78

89
<!-- PyPI / coverage badges activate after first publish -->
@@ -24,15 +25,19 @@ The CLI fetches the catalog from:
2425

2526
Override with `CPA_CATALOG_URL` for forks or local testing (`file://` supported).
2627

27-
## Install (preview)
28-
29-
Once published to PyPI:
28+
## Install
3029

3130
```bash
3231
uvx create-awesome-python-app@latest my-app
3332
```
3433

35-
Until the first release, use the workspace CLI:
34+
Or pin a version:
35+
36+
```bash
37+
uvx create-awesome-python-app@0.1.0 my-app --template fastapi-starter --no-interactive
38+
```
39+
40+
From this workspace (development):
3641

3742
```bash
3843
uv sync

docs/DISTRIBUTION_SETUP.md

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,35 @@ Configure secrets under **Settings → Secrets and variables → Actions**.
1313

1414
## PyPI Trusted Publishing
1515

16-
1. On PyPI, add a Trusted Publisher for project `create-awesome-python-app`
17-
2. Owner/repo: `Create-Python-App/create-python-app`
18-
3. Workflow name: `publish.yml`
19-
4. Environment: (optional)
16+
Configure **two** pending Trusted Publishers on PyPI (same workflow publishes both packages):
17+
18+
### `create-python-app-core`
19+
20+
1. Owner: `Create-Python-App`
21+
2. Repository: `create-python-app`
22+
3. Workflow: `publish.yml`
23+
4. Environment: (leave empty unless you use one)
24+
25+
### `create-awesome-python-app`
26+
27+
Same owner/repo/workflow as above.
28+
29+
On the first tag `create-awesome-python-app@0.1.0`, OIDC creates the projects and uploads sdists/wheels for both packages.
30+
31+
## Cutting a release
32+
33+
1. Bump versions in both package `pyproject.toml` files and `__version__` / `_version.py`
34+
2. Update `CHANGELOG.md`
35+
3. Merge to `main`
36+
4. Tag and push:
37+
38+
```bash
39+
git tag create-awesome-python-app@0.1.0
40+
git push origin create-awesome-python-app@0.1.0
41+
```
42+
43+
5. Confirm the Release workflow published both packages
44+
6. Smoke: `uvx create-awesome-python-app@0.1.0 --help`
2045

2146
## Docker Hub
2247

packages/create-awesome-python-app/pyproject.toml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
[project]
22
name = "create-awesome-python-app"
3-
version = "0.0.0"
4-
description = "Composable scaffolding CLI for production-ready Python apps (stub)"
3+
version = "0.1.0"
4+
description = "Composable scaffolding CLI for production-ready Python apps"
55
readme = "README.md"
66
requires-python = ">=3.12"
7+
license = "MIT"
78
dependencies = [
8-
"create-python-app-core",
9+
"create-python-app-core>=0.1.0",
910
"questionary>=2.1.1",
1011
"rich>=15.0.0",
1112
"typer>=0.27.0",
1213
]
1314

15+
[project.urls]
16+
Homepage = "https://github.com/Create-Python-App/create-python-app"
17+
Repository = "https://github.com/Create-Python-App/create-python-app"
18+
Issues = "https://github.com/Create-Python-App/create-python-app/issues"
19+
Changelog = "https://github.com/Create-Python-App/create-python-app/blob/main/CHANGELOG.md"
20+
1421
[project.scripts]
1522
create-awesome-python-app = "create_awesome_python_app.cli:main"
1623

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Create Awesome Python App CLI."""
22

3-
__version__ = "0.0.0"
3+
__version__ = "0.1.0"

packages/create-awesome-python-app/tests/test_cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def test_version() -> None:
88
result = runner.invoke(app, ["--version"])
99
assert result.exit_code == 0
1010
combined = result.stdout + result.stderr
11-
assert "0.0.0" in combined
11+
assert "0.1.0" in combined
1212

1313

1414
def test_help() -> None:

packages/create-python-app-core/pyproject.toml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
[project]
22
name = "create-python-app-core"
3-
version = "0.0.0"
4-
description = "Scaffolding engine for Create Awesome Python App (stub)"
3+
version = "0.1.0"
4+
description = "Scaffolding engine for Create Awesome Python App"
55
readme = "README.md"
66
requires-python = ">=3.12"
7+
license = "MIT"
78
dependencies = [
89
"httpx>=0.28.1",
910
"jinja2>=3.1.0",
1011
"packaging>=24.0",
1112
"tomlkit>=0.13.0",
1213
]
1314

15+
[project.urls]
16+
Homepage = "https://github.com/Create-Python-App/create-python-app"
17+
Repository = "https://github.com/Create-Python-App/create-python-app"
18+
Issues = "https://github.com/Create-Python-App/create-python-app/issues"
19+
1420
[build-system]
1521
requires = ["hatchling"]
1622
build-backend = "hatchling.build"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.0.0"
1+
__version__ = "0.1.0"

packages/create-python-app-core/tests/test_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from create_python_app_core import CPA_USER_AGENT, __version__
22

33

4-
def test_version_is_semver_stub() -> None:
5-
assert __version__ == "0.0.0"
4+
def test_version_is_semver() -> None:
5+
assert __version__ == "0.1.0"
66

77

88
def test_user_agent_contains_version() -> None:

0 commit comments

Comments
 (0)