relm 3.0.1__tar.gz → 3.0.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.
Files changed (57) hide show
  1. relm-3.0.2/PKG-INFO +240 -0
  2. relm-3.0.2/README.md +204 -0
  3. {relm-3.0.1 → relm-3.0.2}/pyproject.toml +1 -1
  4. {relm-3.0.1 → relm-3.0.2}/src/relm/__init__.py +1 -1
  5. relm-3.0.2/src/relm.egg-info/PKG-INFO +240 -0
  6. {relm-3.0.1 → relm-3.0.2}/tests/test_core.py +1 -1
  7. {relm-3.0.1 → relm-3.0.2}/tests/test_custom_commit_message.py +1 -1
  8. {relm-3.0.1 → relm-3.0.2}/tests/test_main.py +21 -21
  9. {relm-3.0.1 → relm-3.0.2}/tests/test_release.py +11 -11
  10. {relm-3.0.1 → relm-3.0.2}/tests/test_verify.py +1 -1
  11. {relm-3.0.1 → relm-3.0.2}/tests/test_verify_command.py +1 -1
  12. relm-3.0.1/PKG-INFO +0 -245
  13. relm-3.0.1/README.md +0 -209
  14. relm-3.0.1/src/relm.egg-info/PKG-INFO +0 -245
  15. {relm-3.0.1 → relm-3.0.2}/setup.cfg +0 -0
  16. {relm-3.0.1 → relm-3.0.2}/src/relm/banner.py +0 -0
  17. {relm-3.0.1 → relm-3.0.2}/src/relm/changelog.py +0 -0
  18. {relm-3.0.1 → relm-3.0.2}/src/relm/clean.py +0 -0
  19. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/__init__.py +0 -0
  20. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/base.py +0 -0
  21. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/clean_command.py +0 -0
  22. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/create_command.py +0 -0
  23. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/gc_command.py +0 -0
  24. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/install_command.py +0 -0
  25. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/list_command.py +0 -0
  26. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/release_command.py +0 -0
  27. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/run_command.py +0 -0
  28. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/status_command.py +0 -0
  29. {relm-3.0.1 → relm-3.0.2}/src/relm/commands/verify_command.py +0 -0
  30. {relm-3.0.1 → relm-3.0.2}/src/relm/config.py +0 -0
  31. {relm-3.0.1 → relm-3.0.2}/src/relm/core.py +0 -0
  32. {relm-3.0.1 → relm-3.0.2}/src/relm/gc.py +0 -0
  33. {relm-3.0.1 → relm-3.0.2}/src/relm/git_ops.py +0 -0
  34. {relm-3.0.1 → relm-3.0.2}/src/relm/install.py +0 -0
  35. {relm-3.0.1 → relm-3.0.2}/src/relm/main.py +0 -0
  36. {relm-3.0.1 → relm-3.0.2}/src/relm/release.py +0 -0
  37. {relm-3.0.1 → relm-3.0.2}/src/relm/runner.py +0 -0
  38. {relm-3.0.1 → relm-3.0.2}/src/relm/verify.py +0 -0
  39. {relm-3.0.1 → relm-3.0.2}/src/relm/versioning.py +0 -0
  40. {relm-3.0.1 → relm-3.0.2}/src/relm.egg-info/SOURCES.txt +0 -0
  41. {relm-3.0.1 → relm-3.0.2}/src/relm.egg-info/dependency_links.txt +0 -0
  42. {relm-3.0.1 → relm-3.0.2}/src/relm.egg-info/entry_points.txt +0 -0
  43. {relm-3.0.1 → relm-3.0.2}/src/relm.egg-info/requires.txt +0 -0
  44. {relm-3.0.1 → relm-3.0.2}/src/relm.egg-info/top_level.txt +0 -0
  45. {relm-3.0.1 → relm-3.0.2}/tests/test_banner.py +0 -0
  46. {relm-3.0.1 → relm-3.0.2}/tests/test_changed_since.py +0 -0
  47. {relm-3.0.1 → relm-3.0.2}/tests/test_changelog.py +0 -0
  48. {relm-3.0.1 → relm-3.0.2}/tests/test_clean.py +0 -0
  49. {relm-3.0.1 → relm-3.0.2}/tests/test_config.py +0 -0
  50. {relm-3.0.1 → relm-3.0.2}/tests/test_create_command.py +0 -0
  51. {relm-3.0.1 → relm-3.0.2}/tests/test_dependency_sorting.py +0 -0
  52. {relm-3.0.1 → relm-3.0.2}/tests/test_execution_order.py +0 -0
  53. {relm-3.0.1 → relm-3.0.2}/tests/test_gc.py +0 -0
  54. {relm-3.0.1 → relm-3.0.2}/tests/test_git_ops.py +0 -0
  55. {relm-3.0.1 → relm-3.0.2}/tests/test_install.py +0 -0
  56. {relm-3.0.1 → relm-3.0.2}/tests/test_runner.py +0 -0
  57. {relm-3.0.1 → relm-3.0.2}/tests/test_versioning.py +0 -0
relm-3.0.2/PKG-INFO ADDED
@@ -0,0 +1,240 @@
1
+ Metadata-Version: 2.4
2
+ Name: relm
3
+ Version: 3.0.2
4
+ Summary: A unified CLI tool to manage versioning, git, and PyPI releases for multiple projects.
5
+ Author-email: dhruv13x <dhruv13x@gmail.com>
6
+ License: MIT © dhruv13x
7
+ Project-URL: Homepage, https://github.com/dhruv13x/relm
8
+ Project-URL: Source, https://github.com/dhruv13x/relm
9
+ Project-URL: Issues, https://github.com/dhruv13x/relm/issues
10
+ Keywords: cli,release,versioning,automation,pypi,git
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3 :: Only
14
+ Classifier: Environment :: Console
15
+ Classifier: Topic :: Software Development :: Build Tools
16
+ Requires-Python: >=3.8
17
+ Description-Content-Type: text/markdown
18
+ Requires-Dist: tomli; python_version < "3.11"
19
+ Requires-Dist: rich>=13.0.0
20
+ Requires-Dist: rich-argparse>=1.0.0
21
+ Requires-Dist: build>=1.0.0
22
+ Requires-Dist: twine>=4.0.0
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
25
+ Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
26
+ Requires-Dist: pytest-timeout>=2.2.0; extra == "dev"
27
+ Requires-Dist: pytest-json-report>=1.5.0; extra == "dev"
28
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
29
+ Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
30
+ Requires-Dist: pyfakefs>=5.0.0; extra == "dev"
31
+ Requires-Dist: ruff>=0.6.0; extra == "dev"
32
+ Requires-Dist: black>=24.3.0; extra == "dev"
33
+ Requires-Dist: mypy>=1.11.0; extra == "dev"
34
+ Requires-Dist: PyYAML>=6.0; extra == "dev"
35
+ Requires-Dist: types-PyYAML>=6.0; extra == "dev"
36
+
37
+ <div align="center">
38
+ <img src="https://raw.githubusercontent.com/dhruv13x/relm/main/relm_logo.png" alt="relm logo" width="200"/>
39
+ </div>
40
+
41
+ <div align="center">
42
+
43
+ <!-- Package Info -->
44
+ [![PyPI version](https://img.shields.io/pypi/v/relm.svg)](https://pypi.org/project/relm/)
45
+ [![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/)
46
+ ![Wheel](https://img.shields.io/pypi/wheel/relm.svg)
47
+ [![Release](https://img.shields.io/badge/release-PyPI-blue)](https://pypi.org/project/relm/)
48
+
49
+ <!-- Build & Quality -->
50
+ [![Build status](https://github.com/dhruv13x/relm/actions/workflows/publish.yml/badge.svg)](https://github.com/dhruv13x/relm/actions/workflows/publish.yml)
51
+ [![Codecov](https://codecov.io/gh/dhruv13x/relm/graph/badge.svg)](https://codecov.io/gh/dhruv13x/relm)
52
+ [![Test Coverage](https://img.shields.io/badge/coverage-85%25%2B-brightgreen.svg)](https://github.com/dhruv13x/relm/actions/workflows/test.yml)
53
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
54
+ [![Ruff](https://img.shields.io/badge/linting-ruff-yellow.svg)](https://github.com/astral-sh/ruff)
55
+
56
+ <!-- Usage -->
57
+ ![Downloads](https://img.shields.io/pypi/dm/relm.svg)
58
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
59
+
60
+ </div>
61
+
62
+ # relm
63
+
64
+ **The Monorepo Manager for Python.** "Batteries Included" CLI for managing your Python mono-repo or multi-project workspace. Automate versioning, git tagging, PyPI releases, and local environment setup with a single tool.
65
+
66
+ ---
67
+
68
+ ## ⚡ Quick Start (The "5-Minute Rule")
69
+
70
+ ### Prerequisites
71
+ * **Python 3.8+**
72
+ * **Docker** (Optional, for containerized workflows)
73
+ * **Git** (Required for version control operations)
74
+
75
+ ### Installation
76
+ Install globally with `pipx` (recommended) or `pip`:
77
+ ```bash
78
+ # Recommended
79
+ pipx install relm
80
+
81
+ # Alternative
82
+ pip install relm
83
+ ```
84
+
85
+ ### Run
86
+ Start managing your workspace instantly:
87
+ ```bash
88
+ # Discover projects in the current directory
89
+ relm list
90
+ ```
91
+
92
+ ### Demo
93
+ Copy-paste this snippet to see `relm` in action (assumes you have a Python project structure):
94
+
95
+ ```bash
96
+ # 1. List all projects and their current versions
97
+ relm list
98
+
99
+ # 2. Check git status across the entire workspace
100
+ relm status all
101
+
102
+ # 3. Install all projects in editable mode
103
+ relm install all
104
+
105
+ # 4. Run tests across all projects (stops on first failure)
106
+ relm run "pytest" all --fail-fast
107
+
108
+ # 5. Release a patch version for a specific library
109
+ relm release my-library patch
110
+ ```
111
+
112
+ ---
113
+
114
+ ## ✨ Features (The "Why")
115
+
116
+ ### Core
117
+ * **Automated Discovery**: Recursively scans and identifies Python projects (`pyproject.toml`) in your workspace.
118
+ * **Smart Versioning**: Semantically bumps versions (`major`, `minor`, `patch`, `alpha`, `beta`, `rc`) and updates files automatically.
119
+ * **Zero-Config Git Ops**: Auto-stages, commits, tags, and pushes releases with standardized messages.
120
+
121
+ ### Performance & Workflow
122
+ * **Bulk Operations**: **Install, Test, or Release ALL projects** with a single command.
123
+ * **Dependency Awareness**: **Topologically sorts projects** to ensure correct build order (build `lib-a` before `app-b`).
124
+ * **"Changed Since" Detection**: Filter operations to only target projects modified since a specific git reference (`--since`).
125
+ * **Workspace Cleaning**: Instantly wipe `dist/`, `build/`, and `__pycache__` artifacts with `relm clean`.
126
+
127
+ ### Automation & Security
128
+ * **Automated Changelog**: **Parses Conventional Commits** to auto-generate `CHANGELOG.md`.
129
+ * **PyPI Publishing**: seamless build and upload workflow.
130
+ * **PyPI Verification**: Verify local tags match PyPI releases with `relm verify`.
131
+ * **Safety Checks**: Prevents accidental execution in system roots.
132
+
133
+ ---
134
+
135
+ ## 🛠️ Configuration (The "How")
136
+
137
+ `relm` is configured via a `.relm.toml` file in your workspace root and CLI arguments.
138
+
139
+ ### Environment Variables
140
+ `relm` primarily uses `.relm.toml` for configuration, but respects standard tool variables:
141
+
142
+ | Name | Description | Default | Required |
143
+ | :--- | :--- | :--- | :--- |
144
+ | `TWINE_USERNAME` | Username for PyPI upload (used by internal tools) | None | For Release |
145
+ | `TWINE_PASSWORD` | Password/Token for PyPI upload | None | For Release |
146
+
147
+ ### CLI Arguments
148
+
149
+ **Global Options**
150
+ | Flag | Description |
151
+ | :--- | :--- |
152
+ | `--path` | Root directory to scan for projects (default: `.`) |
153
+
154
+ **Commands**
155
+ | Command | Arguments | Description |
156
+ | :--- | :--- | :--- |
157
+ | `list` | `--since <ref>` | List projects (optionally filtered by changes since git ref). |
158
+ | `status` | `project_name` | Show git branch and dirty status. |
159
+ | `install` | `project_name`, `--no-editable` | Install projects (default: editable). |
160
+ | `run` | `command`, `project_name`, `--fail-fast` | Execute shell command in project directories. |
161
+ | `release` | `project`, `type`, `-y`, `-m` | Bump version, tag, and publish. Type: `major`, `minor`, `patch`, etc. |
162
+ | `clean` | `project_name` | Remove build artifacts. |
163
+ | `create` | `name`, `path` | Scaffold a new project. |
164
+ | `verify` | `project_name` | Verify PyPI release availability. |
165
+ | `gc` | N/A | Run `git gc` on all projects. |
166
+
167
+ ---
168
+
169
+ ## 🏗️ Architecture
170
+
171
+ `relm` uses a modular architecture designed for maintainability and separation of concerns.
172
+
173
+ ### Directory Tree
174
+ ```text
175
+ src/relm/
176
+ ├── commands/ # 🔌 Pluggable Command Modules
177
+ │ ├── list_command.py
178
+ │ ├── release_command.py
179
+ │ └── ...
180
+ ├── core.py # 🧠 Project Model & Dependency Graph
181
+ ├── config.py # ⚙️ Configuration Loader (.relm.toml)
182
+ ├── git_ops.py # 🐙 Git Wrapper
183
+ ├── release.py # 🚀 Release Workflow Engine
184
+ ├── versioning.py # 🏷️ SemVer Logic
185
+ ├── changelog.py # 📝 Changelog Generator
186
+ ├── main.py # 🏁 CLI Entry Point
187
+ └── banner.py # 🎨 ASCII Art
188
+ ```
189
+
190
+ ### Data Flow
191
+ 1. **Discovery**: `main.py` bootstraps and calls `core.py` to recursively find `pyproject.toml` files.
192
+ 2. **Graph Construction**: Projects are parsed into `Project` objects; dependencies are mapped.
193
+ 3. **Topological Sort**: For bulk operations (`install`, `run`), projects are ordered so dependencies are processed first.
194
+ 4. **Execution**: The appropriate `command` module is invoked, orchestrating `git_ops`, `subprocess` calls, or file manipulations.
195
+
196
+ ---
197
+
198
+ ## 🐞 Troubleshooting
199
+
200
+ ### Common Issues
201
+ | Error Message | Possible Cause | Solution |
202
+ | :--- | :--- | :--- |
203
+ | `Project 'xyz' not found` | The project is not in the scan path. | Ensure `--path` is correct and `pyproject.toml` exists. |
204
+ | `Git repository is not clean` | Uncommitted changes exist. | Commit or stash changes before releasing. |
205
+ | `Circular dependency detected` | Projects depend on each other. | Refactor dependencies to be acyclic. |
206
+ | `Running in system root` | Executing from `/` or similar. | Navigate to your workspace folder or use `--path`. |
207
+
208
+ ### Debug Mode
209
+ `relm` uses `rich` for output. While there is no dedicated `--debug` flag, exceptions are printed with tracebacks on failure.
210
+ Check `pyproject.toml` for `log_cli = true` to enable verbose logging during test runs (`relm run "pytest"`).
211
+
212
+ ---
213
+
214
+ ## 🤝 Contributing
215
+
216
+ We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
217
+
218
+ ### Dev Setup
219
+ 1. Clone the repo.
220
+ 2. Install dependencies: `pip install .[dev]`.
221
+ 3. Run tests: `pytest`.
222
+ 4. Linting: `ruff check .` and `black .`.
223
+
224
+ ---
225
+
226
+ ## 🗺️ Roadmap
227
+
228
+ See [ROADMAP.md](ROADMAP.md) for the full vision.
229
+
230
+ * [x] Bulk Release Support
231
+ * [x] Task Runner (`relm run`)
232
+ * [x] Project Status (`relm status`)
233
+ * [x] Pre-release Version Support (`alpha`, `beta`, `rc`)
234
+ * [x] Automated Changelog Generation
235
+ * [x] Configuration File Support (`.relm.toml`)
236
+ * [x] Dependency Graph Awareness
237
+ * [ ] Parallel execution for `run` and `install`
238
+ * [ ] Interactive mode for project selection
239
+ * [ ] Docker container support
240
+ * [ ] CI/CD Integration templates
relm-3.0.2/README.md ADDED
@@ -0,0 +1,204 @@
1
+ <div align="center">
2
+ <img src="https://raw.githubusercontent.com/dhruv13x/relm/main/relm_logo.png" alt="relm logo" width="200"/>
3
+ </div>
4
+
5
+ <div align="center">
6
+
7
+ <!-- Package Info -->
8
+ [![PyPI version](https://img.shields.io/pypi/v/relm.svg)](https://pypi.org/project/relm/)
9
+ [![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/)
10
+ ![Wheel](https://img.shields.io/pypi/wheel/relm.svg)
11
+ [![Release](https://img.shields.io/badge/release-PyPI-blue)](https://pypi.org/project/relm/)
12
+
13
+ <!-- Build & Quality -->
14
+ [![Build status](https://github.com/dhruv13x/relm/actions/workflows/publish.yml/badge.svg)](https://github.com/dhruv13x/relm/actions/workflows/publish.yml)
15
+ [![Codecov](https://codecov.io/gh/dhruv13x/relm/graph/badge.svg)](https://codecov.io/gh/dhruv13x/relm)
16
+ [![Test Coverage](https://img.shields.io/badge/coverage-85%25%2B-brightgreen.svg)](https://github.com/dhruv13x/relm/actions/workflows/test.yml)
17
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
18
+ [![Ruff](https://img.shields.io/badge/linting-ruff-yellow.svg)](https://github.com/astral-sh/ruff)
19
+
20
+ <!-- Usage -->
21
+ ![Downloads](https://img.shields.io/pypi/dm/relm.svg)
22
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
23
+
24
+ </div>
25
+
26
+ # relm
27
+
28
+ **The Monorepo Manager for Python.** "Batteries Included" CLI for managing your Python mono-repo or multi-project workspace. Automate versioning, git tagging, PyPI releases, and local environment setup with a single tool.
29
+
30
+ ---
31
+
32
+ ## ⚡ Quick Start (The "5-Minute Rule")
33
+
34
+ ### Prerequisites
35
+ * **Python 3.8+**
36
+ * **Docker** (Optional, for containerized workflows)
37
+ * **Git** (Required for version control operations)
38
+
39
+ ### Installation
40
+ Install globally with `pipx` (recommended) or `pip`:
41
+ ```bash
42
+ # Recommended
43
+ pipx install relm
44
+
45
+ # Alternative
46
+ pip install relm
47
+ ```
48
+
49
+ ### Run
50
+ Start managing your workspace instantly:
51
+ ```bash
52
+ # Discover projects in the current directory
53
+ relm list
54
+ ```
55
+
56
+ ### Demo
57
+ Copy-paste this snippet to see `relm` in action (assumes you have a Python project structure):
58
+
59
+ ```bash
60
+ # 1. List all projects and their current versions
61
+ relm list
62
+
63
+ # 2. Check git status across the entire workspace
64
+ relm status all
65
+
66
+ # 3. Install all projects in editable mode
67
+ relm install all
68
+
69
+ # 4. Run tests across all projects (stops on first failure)
70
+ relm run "pytest" all --fail-fast
71
+
72
+ # 5. Release a patch version for a specific library
73
+ relm release my-library patch
74
+ ```
75
+
76
+ ---
77
+
78
+ ## ✨ Features (The "Why")
79
+
80
+ ### Core
81
+ * **Automated Discovery**: Recursively scans and identifies Python projects (`pyproject.toml`) in your workspace.
82
+ * **Smart Versioning**: Semantically bumps versions (`major`, `minor`, `patch`, `alpha`, `beta`, `rc`) and updates files automatically.
83
+ * **Zero-Config Git Ops**: Auto-stages, commits, tags, and pushes releases with standardized messages.
84
+
85
+ ### Performance & Workflow
86
+ * **Bulk Operations**: **Install, Test, or Release ALL projects** with a single command.
87
+ * **Dependency Awareness**: **Topologically sorts projects** to ensure correct build order (build `lib-a` before `app-b`).
88
+ * **"Changed Since" Detection**: Filter operations to only target projects modified since a specific git reference (`--since`).
89
+ * **Workspace Cleaning**: Instantly wipe `dist/`, `build/`, and `__pycache__` artifacts with `relm clean`.
90
+
91
+ ### Automation & Security
92
+ * **Automated Changelog**: **Parses Conventional Commits** to auto-generate `CHANGELOG.md`.
93
+ * **PyPI Publishing**: seamless build and upload workflow.
94
+ * **PyPI Verification**: Verify local tags match PyPI releases with `relm verify`.
95
+ * **Safety Checks**: Prevents accidental execution in system roots.
96
+
97
+ ---
98
+
99
+ ## 🛠️ Configuration (The "How")
100
+
101
+ `relm` is configured via a `.relm.toml` file in your workspace root and CLI arguments.
102
+
103
+ ### Environment Variables
104
+ `relm` primarily uses `.relm.toml` for configuration, but respects standard tool variables:
105
+
106
+ | Name | Description | Default | Required |
107
+ | :--- | :--- | :--- | :--- |
108
+ | `TWINE_USERNAME` | Username for PyPI upload (used by internal tools) | None | For Release |
109
+ | `TWINE_PASSWORD` | Password/Token for PyPI upload | None | For Release |
110
+
111
+ ### CLI Arguments
112
+
113
+ **Global Options**
114
+ | Flag | Description |
115
+ | :--- | :--- |
116
+ | `--path` | Root directory to scan for projects (default: `.`) |
117
+
118
+ **Commands**
119
+ | Command | Arguments | Description |
120
+ | :--- | :--- | :--- |
121
+ | `list` | `--since <ref>` | List projects (optionally filtered by changes since git ref). |
122
+ | `status` | `project_name` | Show git branch and dirty status. |
123
+ | `install` | `project_name`, `--no-editable` | Install projects (default: editable). |
124
+ | `run` | `command`, `project_name`, `--fail-fast` | Execute shell command in project directories. |
125
+ | `release` | `project`, `type`, `-y`, `-m` | Bump version, tag, and publish. Type: `major`, `minor`, `patch`, etc. |
126
+ | `clean` | `project_name` | Remove build artifacts. |
127
+ | `create` | `name`, `path` | Scaffold a new project. |
128
+ | `verify` | `project_name` | Verify PyPI release availability. |
129
+ | `gc` | N/A | Run `git gc` on all projects. |
130
+
131
+ ---
132
+
133
+ ## 🏗️ Architecture
134
+
135
+ `relm` uses a modular architecture designed for maintainability and separation of concerns.
136
+
137
+ ### Directory Tree
138
+ ```text
139
+ src/relm/
140
+ ├── commands/ # 🔌 Pluggable Command Modules
141
+ │ ├── list_command.py
142
+ │ ├── release_command.py
143
+ │ └── ...
144
+ ├── core.py # 🧠 Project Model & Dependency Graph
145
+ ├── config.py # ⚙️ Configuration Loader (.relm.toml)
146
+ ├── git_ops.py # 🐙 Git Wrapper
147
+ ├── release.py # 🚀 Release Workflow Engine
148
+ ├── versioning.py # 🏷️ SemVer Logic
149
+ ├── changelog.py # 📝 Changelog Generator
150
+ ├── main.py # 🏁 CLI Entry Point
151
+ └── banner.py # 🎨 ASCII Art
152
+ ```
153
+
154
+ ### Data Flow
155
+ 1. **Discovery**: `main.py` bootstraps and calls `core.py` to recursively find `pyproject.toml` files.
156
+ 2. **Graph Construction**: Projects are parsed into `Project` objects; dependencies are mapped.
157
+ 3. **Topological Sort**: For bulk operations (`install`, `run`), projects are ordered so dependencies are processed first.
158
+ 4. **Execution**: The appropriate `command` module is invoked, orchestrating `git_ops`, `subprocess` calls, or file manipulations.
159
+
160
+ ---
161
+
162
+ ## 🐞 Troubleshooting
163
+
164
+ ### Common Issues
165
+ | Error Message | Possible Cause | Solution |
166
+ | :--- | :--- | :--- |
167
+ | `Project 'xyz' not found` | The project is not in the scan path. | Ensure `--path` is correct and `pyproject.toml` exists. |
168
+ | `Git repository is not clean` | Uncommitted changes exist. | Commit or stash changes before releasing. |
169
+ | `Circular dependency detected` | Projects depend on each other. | Refactor dependencies to be acyclic. |
170
+ | `Running in system root` | Executing from `/` or similar. | Navigate to your workspace folder or use `--path`. |
171
+
172
+ ### Debug Mode
173
+ `relm` uses `rich` for output. While there is no dedicated `--debug` flag, exceptions are printed with tracebacks on failure.
174
+ Check `pyproject.toml` for `log_cli = true` to enable verbose logging during test runs (`relm run "pytest"`).
175
+
176
+ ---
177
+
178
+ ## 🤝 Contributing
179
+
180
+ We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
181
+
182
+ ### Dev Setup
183
+ 1. Clone the repo.
184
+ 2. Install dependencies: `pip install .[dev]`.
185
+ 3. Run tests: `pytest`.
186
+ 4. Linting: `ruff check .` and `black .`.
187
+
188
+ ---
189
+
190
+ ## 🗺️ Roadmap
191
+
192
+ See [ROADMAP.md](ROADMAP.md) for the full vision.
193
+
194
+ * [x] Bulk Release Support
195
+ * [x] Task Runner (`relm run`)
196
+ * [x] Project Status (`relm status`)
197
+ * [x] Pre-release Version Support (`alpha`, `beta`, `rc`)
198
+ * [x] Automated Changelog Generation
199
+ * [x] Configuration File Support (`.relm.toml`)
200
+ * [x] Dependency Graph Awareness
201
+ * [ ] Parallel execution for `run` and `install`
202
+ * [ ] Interactive mode for project selection
203
+ * [ ] Docker container support
204
+ * [ ] CI/CD Integration templates
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "relm"
7
- version = "3.0.1"
7
+ version = "3.0.2"
8
8
  description = "A unified CLI tool to manage versioning, git, and PyPI releases for multiple projects."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -1,3 +1,3 @@
1
1
  # src/relm/__init__.py
2
2
 
3
- __version__ = "3.0.1"
3
+ __version__ = "3.0.2"