coffee-cli 0.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.
- coffee_cli-0.1.0/.github/pull_request_template.md +26 -0
- coffee_cli-0.1.0/.github/workflows/ci.yml +47 -0
- coffee_cli-0.1.0/.github/workflows/publish.yml +87 -0
- coffee_cli-0.1.0/.gitignore +13 -0
- coffee_cli-0.1.0/CONTRIBUTING.md +57 -0
- coffee_cli-0.1.0/PKG-INFO +108 -0
- coffee_cli-0.1.0/README.md +82 -0
- coffee_cli-0.1.0/docs/milestones.md +158 -0
- coffee_cli-0.1.0/docs/release-checklist.md +46 -0
- coffee_cli-0.1.0/docs/roadmap.md +49 -0
- coffee_cli-0.1.0/pyproject.toml +63 -0
- coffee_cli-0.1.0/src/coffee_cli/__init__.py +6 -0
- coffee_cli-0.1.0/src/coffee_cli/__main__.py +7 -0
- coffee_cli-0.1.0/src/coffee_cli/app.py +344 -0
- coffee_cli-0.1.0/src/coffee_cli/brewing.py +49 -0
- coffee_cli-0.1.0/src/coffee_cli/cli.py +41 -0
- coffee_cli-0.1.0/src/coffee_cli/home.py +89 -0
- coffee_cli-0.1.0/src/coffee_cli/order.py +136 -0
- coffee_cli-0.1.0/src/coffee_cli/personal.py +166 -0
- coffee_cli-0.1.0/src/coffee_cli/ui_text.py +215 -0
- coffee_cli-0.1.0/tests/conftest.py +19 -0
- coffee_cli-0.1.0/tests/test_app.py +79 -0
- coffee_cli-0.1.0/tests/test_brewing.py +33 -0
- coffee_cli-0.1.0/tests/test_cli.py +32 -0
- coffee_cli-0.1.0/tests/test_home.py +42 -0
- coffee_cli-0.1.0/tests/test_order.py +60 -0
- coffee_cli-0.1.0/tests/test_personal.py +79 -0
- coffee_cli-0.1.0/tests/test_ui_text.py +87 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
-
|
|
4
|
+
|
|
5
|
+
## Runnable Demo
|
|
6
|
+
|
|
7
|
+
Command:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
coffee
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
What should be visible:
|
|
14
|
+
|
|
15
|
+
-
|
|
16
|
+
|
|
17
|
+
## Checks
|
|
18
|
+
|
|
19
|
+
- [ ] `ruff check .`
|
|
20
|
+
- [ ] `pytest`
|
|
21
|
+
- [ ] `python -m build`
|
|
22
|
+
|
|
23
|
+
## Sprint / Milestone
|
|
24
|
+
|
|
25
|
+
-
|
|
26
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.12"]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Check out source
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ matrix.python-version }}
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: python -m pip install --upgrade pip && python -m pip install -e ".[dev]"
|
|
28
|
+
|
|
29
|
+
- name: Show environment
|
|
30
|
+
run: |
|
|
31
|
+
python --version
|
|
32
|
+
python -m pip show textual pytest anyio
|
|
33
|
+
|
|
34
|
+
- name: Run Ruff
|
|
35
|
+
run: python -m ruff check .
|
|
36
|
+
|
|
37
|
+
- name: Run tests
|
|
38
|
+
run: python -m pytest -vv --tb=long
|
|
39
|
+
|
|
40
|
+
- name: Build package
|
|
41
|
+
run: python -m build
|
|
42
|
+
|
|
43
|
+
- name: Upload package artifacts
|
|
44
|
+
uses: actions/upload-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: coffee-cli-dist-python-${{ matrix.python-version }}
|
|
47
|
+
path: dist/*
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
target:
|
|
7
|
+
description: Package index to publish to
|
|
8
|
+
required: true
|
|
9
|
+
default: testpypi
|
|
10
|
+
type: choice
|
|
11
|
+
options:
|
|
12
|
+
- testpypi
|
|
13
|
+
- pypi
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Check out source
|
|
21
|
+
uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.12"
|
|
27
|
+
|
|
28
|
+
- name: Install build tooling
|
|
29
|
+
run: python -m pip install --upgrade pip build
|
|
30
|
+
|
|
31
|
+
- name: Build package
|
|
32
|
+
run: python -m build
|
|
33
|
+
|
|
34
|
+
- name: Upload package artifacts
|
|
35
|
+
uses: actions/upload-artifact@v4
|
|
36
|
+
with:
|
|
37
|
+
name: coffee-cli-dist
|
|
38
|
+
path: dist/*
|
|
39
|
+
|
|
40
|
+
publish-testpypi:
|
|
41
|
+
if: github.event.inputs.target == 'testpypi'
|
|
42
|
+
needs: build
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
environment:
|
|
45
|
+
name: testpypi
|
|
46
|
+
url: https://test.pypi.org/p/coffee-cli
|
|
47
|
+
permissions:
|
|
48
|
+
id-token: write
|
|
49
|
+
|
|
50
|
+
steps:
|
|
51
|
+
- name: Download package artifacts
|
|
52
|
+
uses: actions/download-artifact@v4
|
|
53
|
+
with:
|
|
54
|
+
name: coffee-cli-dist
|
|
55
|
+
path: dist
|
|
56
|
+
|
|
57
|
+
- name: Publish package to TestPyPI
|
|
58
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
59
|
+
with:
|
|
60
|
+
repository-url: https://test.pypi.org/legacy/
|
|
61
|
+
|
|
62
|
+
publish-pypi:
|
|
63
|
+
if: github.event.inputs.target == 'pypi'
|
|
64
|
+
needs: build
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
environment:
|
|
67
|
+
name: pypi
|
|
68
|
+
url: https://pypi.org/p/coffee-cli
|
|
69
|
+
permissions:
|
|
70
|
+
id-token: write
|
|
71
|
+
|
|
72
|
+
steps:
|
|
73
|
+
- name: Require a version tag for PyPI
|
|
74
|
+
run: |
|
|
75
|
+
if [[ "${GITHUB_REF}" != refs/tags/v* ]]; then
|
|
76
|
+
echo "Real PyPI publishing must be run from a version tag like v0.1.0."
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
- name: Download package artifacts
|
|
81
|
+
uses: actions/download-artifact@v4
|
|
82
|
+
with:
|
|
83
|
+
name: coffee-cli-dist
|
|
84
|
+
path: dist
|
|
85
|
+
|
|
86
|
+
- name: Publish package to PyPI
|
|
87
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Coffee CLI follows a branch-and-PR workflow. Treat `main` as the stable branch.
|
|
4
|
+
|
|
5
|
+
## Workflow
|
|
6
|
+
|
|
7
|
+
1. Start from an up-to-date `main`.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
git switch main
|
|
11
|
+
git pull origin main
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
2. Create a branch for one focused change.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
git switch -c feature/playable-home-screen
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Use these prefixes:
|
|
21
|
+
|
|
22
|
+
- `feature/` for user-facing app work
|
|
23
|
+
- `fix/` for bug fixes
|
|
24
|
+
- `docs/` for documentation
|
|
25
|
+
- `ci/` for workflow and automation changes
|
|
26
|
+
- `test/` for test-only improvements
|
|
27
|
+
|
|
28
|
+
3. Make small commits with clear messages.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
git add .
|
|
32
|
+
git commit -m "Add playable home screen"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
4. Run the full local checks.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
ruff check .
|
|
39
|
+
pytest
|
|
40
|
+
python -m build
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
5. Push the branch and open a pull request.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git push -u origin feature/playable-home-screen
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
6. Merge only after CI passes.
|
|
50
|
+
|
|
51
|
+
## Main branch rules
|
|
52
|
+
|
|
53
|
+
- Do not do feature work directly on `main`.
|
|
54
|
+
- Do not push directly to `main` after the initial project bootstrap.
|
|
55
|
+
- Keep each PR focused on one milestone, bug, or workflow improvement.
|
|
56
|
+
- Make sure every runnable milestone can be launched with `coffee`.
|
|
57
|
+
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: coffee-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A polished Python terminal UI for coffee-themed developer workflows.
|
|
5
|
+
Project-URL: Homepage, https://github.com/josephforson285/coffee-for-devs
|
|
6
|
+
Project-URL: Issues, https://github.com/josephforson285/coffee-for-devs/issues
|
|
7
|
+
Author: Coffee CLI Contributors
|
|
8
|
+
License: MIT
|
|
9
|
+
Keywords: cli,coffee,terminal,textual,tui
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Topic :: Software Development
|
|
16
|
+
Classifier: Topic :: Terminals
|
|
17
|
+
Requires-Python: >=3.12
|
|
18
|
+
Requires-Dist: textual<1.0,>=0.68
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Requires-Dist: anyio>=4.4; extra == 'dev'
|
|
21
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
22
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
23
|
+
Requires-Dist: pytest>=8.2; extra == 'dev'
|
|
24
|
+
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# Coffee CLI
|
|
28
|
+
|
|
29
|
+
Coffee CLI is a Python terminal UI application for developers who want a polished, installable `coffee` command with personality. The app is built as a modern Python package and is intended to grow into a showcase project for terminal UX, testing, CI/CD, and professional packaging.
|
|
30
|
+
|
|
31
|
+
## Project goals
|
|
32
|
+
|
|
33
|
+
- Launch with `coffee` after installation.
|
|
34
|
+
- Use `Textual` for a polished TUI.
|
|
35
|
+
- Keep the codebase educational and production-leaning.
|
|
36
|
+
- Validate every change with tests, linting, and CI.
|
|
37
|
+
|
|
38
|
+
## Local environment
|
|
39
|
+
|
|
40
|
+
This project is being developed inside:
|
|
41
|
+
|
|
42
|
+
- project root: `/home/redsteam/Desktop/bear/ML/coffee-for-devs`
|
|
43
|
+
- virtual environment: `/home/redsteam/Desktop/bear/ML/MLprojs`
|
|
44
|
+
|
|
45
|
+
Activate the environment:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
source /home/redsteam/Desktop/bear/ML/MLprojs/bin/activate
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## First-time setup
|
|
52
|
+
|
|
53
|
+
Install the project and developer tools into the virtual environment:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
python -m pip install -e ".[dev]"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Run the quality checks:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
ruff check .
|
|
63
|
+
pytest
|
|
64
|
+
python -m build
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Start the app:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
coffee
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Install from a wheel
|
|
74
|
+
|
|
75
|
+
Build the package:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
python -m build
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Install the generated wheel into a fresh environment:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
python -m pip install dist/coffee_cli-0.1.0-py3-none-any.whl
|
|
85
|
+
coffee
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This is the local release-candidate check before publishing to PyPI.
|
|
89
|
+
|
|
90
|
+
## Release publishing
|
|
91
|
+
|
|
92
|
+
Publishing is handled by the manual GitHub Actions workflow in `.github/workflows/publish.yml`.
|
|
93
|
+
Use `target=testpypi` first, verify the package, then publish to PyPI from a version tag such as
|
|
94
|
+
`v0.1.0`.
|
|
95
|
+
|
|
96
|
+
## Current scope
|
|
97
|
+
|
|
98
|
+
Coffee CLI currently includes:
|
|
99
|
+
|
|
100
|
+
- modern `pyproject.toml` packaging
|
|
101
|
+
- `src/` layout
|
|
102
|
+
- `coffee` console script entry point
|
|
103
|
+
- first Textual app skeleton with animated ASCII steam
|
|
104
|
+
- order flow, brewing flow, personal favorites, journal, and statistics
|
|
105
|
+
- tested package structure
|
|
106
|
+
- GitHub Actions CI workflow
|
|
107
|
+
|
|
108
|
+
See [docs/roadmap.md](docs/roadmap.md) for the planned sprint breakdown, [docs/milestones.md](docs/milestones.md) for runnable milestones, [docs/release-checklist.md](docs/release-checklist.md) for release steps, and [CONTRIBUTING.md](CONTRIBUTING.md) for the Git workflow.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Coffee CLI
|
|
2
|
+
|
|
3
|
+
Coffee CLI is a Python terminal UI application for developers who want a polished, installable `coffee` command with personality. The app is built as a modern Python package and is intended to grow into a showcase project for terminal UX, testing, CI/CD, and professional packaging.
|
|
4
|
+
|
|
5
|
+
## Project goals
|
|
6
|
+
|
|
7
|
+
- Launch with `coffee` after installation.
|
|
8
|
+
- Use `Textual` for a polished TUI.
|
|
9
|
+
- Keep the codebase educational and production-leaning.
|
|
10
|
+
- Validate every change with tests, linting, and CI.
|
|
11
|
+
|
|
12
|
+
## Local environment
|
|
13
|
+
|
|
14
|
+
This project is being developed inside:
|
|
15
|
+
|
|
16
|
+
- project root: `/home/redsteam/Desktop/bear/ML/coffee-for-devs`
|
|
17
|
+
- virtual environment: `/home/redsteam/Desktop/bear/ML/MLprojs`
|
|
18
|
+
|
|
19
|
+
Activate the environment:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
source /home/redsteam/Desktop/bear/ML/MLprojs/bin/activate
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## First-time setup
|
|
26
|
+
|
|
27
|
+
Install the project and developer tools into the virtual environment:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
python -m pip install -e ".[dev]"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Run the quality checks:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
ruff check .
|
|
37
|
+
pytest
|
|
38
|
+
python -m build
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Start the app:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
coffee
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Install from a wheel
|
|
48
|
+
|
|
49
|
+
Build the package:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
python -m build
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Install the generated wheel into a fresh environment:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python -m pip install dist/coffee_cli-0.1.0-py3-none-any.whl
|
|
59
|
+
coffee
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
This is the local release-candidate check before publishing to PyPI.
|
|
63
|
+
|
|
64
|
+
## Release publishing
|
|
65
|
+
|
|
66
|
+
Publishing is handled by the manual GitHub Actions workflow in `.github/workflows/publish.yml`.
|
|
67
|
+
Use `target=testpypi` first, verify the package, then publish to PyPI from a version tag such as
|
|
68
|
+
`v0.1.0`.
|
|
69
|
+
|
|
70
|
+
## Current scope
|
|
71
|
+
|
|
72
|
+
Coffee CLI currently includes:
|
|
73
|
+
|
|
74
|
+
- modern `pyproject.toml` packaging
|
|
75
|
+
- `src/` layout
|
|
76
|
+
- `coffee` console script entry point
|
|
77
|
+
- first Textual app skeleton with animated ASCII steam
|
|
78
|
+
- order flow, brewing flow, personal favorites, journal, and statistics
|
|
79
|
+
- tested package structure
|
|
80
|
+
- GitHub Actions CI workflow
|
|
81
|
+
|
|
82
|
+
See [docs/roadmap.md](docs/roadmap.md) for the planned sprint breakdown, [docs/milestones.md](docs/milestones.md) for runnable milestones, [docs/release-checklist.md](docs/release-checklist.md) for release steps, and [CONTRIBUTING.md](CONTRIBUTING.md) for the Git workflow.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Runnable Milestones
|
|
2
|
+
|
|
3
|
+
This project should grow in small playable slices. A milestone is not complete just because code exists; it should give a visible result that can be launched locally with `coffee`.
|
|
4
|
+
|
|
5
|
+
## Milestone 0: Project Foundation
|
|
6
|
+
|
|
7
|
+
Status: done
|
|
8
|
+
|
|
9
|
+
Goal: make Coffee CLI a real Python project with packaging, tests, linting, CI, and a GitHub remote.
|
|
10
|
+
|
|
11
|
+
Runnable demo:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
source /home/redsteam/Desktop/bear/ML/MLprojs/bin/activate
|
|
15
|
+
coffee
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Expected result:
|
|
19
|
+
|
|
20
|
+
- the `coffee` command starts the Textual app
|
|
21
|
+
- the first home screen renders
|
|
22
|
+
- the app can quit with `q`
|
|
23
|
+
|
|
24
|
+
Verification:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
ruff check .
|
|
28
|
+
pytest
|
|
29
|
+
python -m build
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Milestone 1: Playable Home Screen
|
|
33
|
+
|
|
34
|
+
Status: done
|
|
35
|
+
|
|
36
|
+
Goal: make the first screen feel intentional and easy to inspect.
|
|
37
|
+
|
|
38
|
+
Playable behavior:
|
|
39
|
+
|
|
40
|
+
- animated steam is visible
|
|
41
|
+
- arrow keys move through the menu
|
|
42
|
+
- the selected menu item updates the right-side summary
|
|
43
|
+
- `q` exits cleanly
|
|
44
|
+
|
|
45
|
+
Demo script:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
coffee
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Definition of done:
|
|
52
|
+
|
|
53
|
+
- user can navigate the home menu
|
|
54
|
+
- UI text fits cleanly in the terminal
|
|
55
|
+
- tests cover pure rendering and menu state logic
|
|
56
|
+
- Ruff, Pytest, and build pass
|
|
57
|
+
|
|
58
|
+
## Milestone 2: First Order Flow
|
|
59
|
+
|
|
60
|
+
Status: done
|
|
61
|
+
|
|
62
|
+
Goal: let the user create a basic coffee order.
|
|
63
|
+
|
|
64
|
+
Playable behavior:
|
|
65
|
+
|
|
66
|
+
- choose a coffee type
|
|
67
|
+
- choose a size
|
|
68
|
+
- choose a milk option
|
|
69
|
+
- see a live summary
|
|
70
|
+
- confirm or cancel the order
|
|
71
|
+
|
|
72
|
+
Demo script:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
coffee
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Definition of done:
|
|
79
|
+
|
|
80
|
+
- one full order can be completed from the TUI
|
|
81
|
+
- price calculation is tested
|
|
82
|
+
- order summary is tested
|
|
83
|
+
- CI passes
|
|
84
|
+
|
|
85
|
+
## Milestone 3: Brewing Moment
|
|
86
|
+
|
|
87
|
+
Status: done
|
|
88
|
+
|
|
89
|
+
Goal: make order confirmation feel memorable.
|
|
90
|
+
|
|
91
|
+
Playable behavior:
|
|
92
|
+
|
|
93
|
+
- confirming an order starts a brewing animation
|
|
94
|
+
- progress states show grinding, heating, brewing, and pouring
|
|
95
|
+
- final screen shows the completed drink
|
|
96
|
+
|
|
97
|
+
Demo script:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
coffee
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Definition of done:
|
|
104
|
+
|
|
105
|
+
- animation completes without blocking input forever
|
|
106
|
+
- user can return to the home screen
|
|
107
|
+
- tests cover the brewing state transitions
|
|
108
|
+
|
|
109
|
+
## Milestone 4: Personal Coffee Tools
|
|
110
|
+
|
|
111
|
+
Status: done
|
|
112
|
+
|
|
113
|
+
Goal: add reasons to reuse the app.
|
|
114
|
+
|
|
115
|
+
Playable behavior:
|
|
116
|
+
|
|
117
|
+
- save favorite drinks
|
|
118
|
+
- open a coffee journal
|
|
119
|
+
- view simple statistics
|
|
120
|
+
|
|
121
|
+
Demo script:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
coffee
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Definition of done:
|
|
128
|
+
|
|
129
|
+
- favorites persist locally
|
|
130
|
+
- journal entries persist locally
|
|
131
|
+
- storage behavior is tested
|
|
132
|
+
|
|
133
|
+
## Milestone 5: Release Candidate
|
|
134
|
+
|
|
135
|
+
Status: in progress
|
|
136
|
+
|
|
137
|
+
Goal: prepare Coffee CLI for other developers to install.
|
|
138
|
+
|
|
139
|
+
Playable behavior:
|
|
140
|
+
|
|
141
|
+
- install from a built wheel
|
|
142
|
+
- run `coffee` from a fresh environment
|
|
143
|
+
- CI builds release artifacts
|
|
144
|
+
|
|
145
|
+
Demo script:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
python -m build
|
|
149
|
+
python -m pip install dist/coffee_cli-0.1.0-py3-none-any.whl
|
|
150
|
+
coffee
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Definition of done:
|
|
154
|
+
|
|
155
|
+
- README has installation instructions
|
|
156
|
+
- GitHub release checklist exists
|
|
157
|
+
- package metadata is complete
|
|
158
|
+
- CI artifacts are reliable
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Release Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist before tagging a Coffee CLI release or publishing to PyPI.
|
|
4
|
+
|
|
5
|
+
## Local Release Candidate
|
|
6
|
+
|
|
7
|
+
- Start from an up-to-date `main`.
|
|
8
|
+
- Create a focused release branch.
|
|
9
|
+
- Run `python -m pip install -e ".[dev]"`.
|
|
10
|
+
- Run `python -m ruff check .`.
|
|
11
|
+
- Run `python -m pytest`.
|
|
12
|
+
- Run `python -m build`.
|
|
13
|
+
- Create a fresh virtual environment.
|
|
14
|
+
- Install the wheel with `python -m pip install dist/coffee_cli-0.1.0-py3-none-any.whl`.
|
|
15
|
+
- Run `coffee` and verify the TUI opens.
|
|
16
|
+
|
|
17
|
+
## Pull Request Gate
|
|
18
|
+
|
|
19
|
+
- Open a PR from the release branch.
|
|
20
|
+
- Confirm GitHub Actions passes.
|
|
21
|
+
- Confirm the CI run uploads `dist/` artifacts.
|
|
22
|
+
- Review package metadata in `pyproject.toml`.
|
|
23
|
+
- Review README installation instructions.
|
|
24
|
+
- Merge only after the release-candidate demo works.
|
|
25
|
+
|
|
26
|
+
## Future PyPI Release
|
|
27
|
+
|
|
28
|
+
- Create PyPI and TestPyPI accounts.
|
|
29
|
+
- Configure Trusted Publishing for this GitHub repository on TestPyPI.
|
|
30
|
+
- Run the `Publish` workflow manually with `target=testpypi`.
|
|
31
|
+
- Install from TestPyPI in a clean environment.
|
|
32
|
+
- Merge the release-candidate PR after CI and TestPyPI verification pass.
|
|
33
|
+
- Create a Git tag such as `v0.1.0` from `main`.
|
|
34
|
+
- Configure Trusted Publishing for this GitHub repository on PyPI.
|
|
35
|
+
- Run the `Publish` workflow manually from the tag with `target=pypi`.
|
|
36
|
+
- Install from PyPI in a clean environment.
|
|
37
|
+
|
|
38
|
+
Trusted Publishing settings:
|
|
39
|
+
|
|
40
|
+
- TestPyPI project name: `coffee-cli`
|
|
41
|
+
- PyPI project name: `coffee-cli`
|
|
42
|
+
- Owner: `josephforson285`
|
|
43
|
+
- Repository: `coffee-for-devs`
|
|
44
|
+
- Workflow name: `publish.yml`
|
|
45
|
+
- TestPyPI environment: `testpypi`
|
|
46
|
+
- PyPI environment: `pypi`
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Coffee CLI Roadmap
|
|
2
|
+
|
|
3
|
+
## Product framing
|
|
4
|
+
|
|
5
|
+
Coffee CLI should feel like a real developer tool, not a classroom menu script. The coffee theme gives the app character, but the engineering quality, UX polish, and delivery workflow are the real value.
|
|
6
|
+
|
|
7
|
+
## Sprint 1
|
|
8
|
+
|
|
9
|
+
Goal: ship the first installable `coffee` command.
|
|
10
|
+
|
|
11
|
+
- create Python package structure
|
|
12
|
+
- wire the `coffee` console entry point
|
|
13
|
+
- build a welcome screen with animated ASCII steam
|
|
14
|
+
- add core tests
|
|
15
|
+
- add Ruff, Pytest, and build automation in CI
|
|
16
|
+
|
|
17
|
+
Runnable milestone: see [milestones.md](milestones.md#milestone-0-project-foundation) and [milestones.md](milestones.md#milestone-1-playable-home-screen).
|
|
18
|
+
|
|
19
|
+
## Sprint 2
|
|
20
|
+
|
|
21
|
+
Goal: support a complete coffee ordering flow.
|
|
22
|
+
|
|
23
|
+
- add coffee selection
|
|
24
|
+
- add milk and size selection
|
|
25
|
+
- calculate prices
|
|
26
|
+
- show an order summary
|
|
27
|
+
- add tests for ordering and pricing logic
|
|
28
|
+
|
|
29
|
+
Runnable milestone: see [milestones.md](milestones.md#milestone-2-first-order-flow).
|
|
30
|
+
|
|
31
|
+
## Later sprints
|
|
32
|
+
|
|
33
|
+
- themes and settings
|
|
34
|
+
- favorites
|
|
35
|
+
- coffee journal
|
|
36
|
+
- statistics dashboard
|
|
37
|
+
- search and command palette
|
|
38
|
+
- plugin architecture
|
|
39
|
+
- optional AI barista
|
|
40
|
+
|
|
41
|
+
## Definition of done
|
|
42
|
+
|
|
43
|
+
- code works locally
|
|
44
|
+
- the milestone has a visible `coffee` demo
|
|
45
|
+
- tests exist for the change
|
|
46
|
+
- `ruff check .` passes
|
|
47
|
+
- `pytest` passes
|
|
48
|
+
- `python -m build` passes
|
|
49
|
+
- CI passes before merge
|