A unified CLI tool to manage versioning, git, and PyPI releases for multiple projects.
Project description
relm
The "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.
🚀 Quick Start
Prerequisites
- Python 3.8+
piporpipx
Installation
Install globally with pipx (recommended):
pipx install relm
Or with pip:
pip install relm
Usage Example
Manage your projects from the root of your workspace:
# 1. Discover all projects in the current directory
relm list
# 2. Bulk install all projects in editable mode (Developer Mode)
relm install all
# 3. Check git status across all projects
relm status all
# 4. Run a command across all projects (e.g., tests)
relm run "pytest" all --fail-fast
# 5. Release a patch version for a specific project
relm release my-lib patch
Note:
relmworks by findingpyproject.tomlfiles. Ensure your projects are standard Python packages.
✨ Key Features
- Automated Discovery: recursively finds all valid Python projects in your workspace.
- Smart Versioning: Semantically bumps versions (
major,minor,patch) inpyproject.tomland__init__.py. - Zero-Config Git Ops: Auto-stages, commits, and tags releases with clean messages.
- PyPI Publishing: Builds wheels/sdist and uploads to PyPI automatically.
- Bulk Operations: Release, Install, or Check Status of ALL projects at once.
- Task Runner: Execute any shell command across your entire suite (
relm run "..."). - Developer Friendly: "Safety checks" prevent running in system roots.
⚙️ Configuration & Advanced Usage
relm is controlled entirely via CLI arguments.
Global Arguments
| Argument | Default | Description |
|---|---|---|
--path |
. |
Root directory to scan for projects. |
Commands
list
Lists all discovered projects, their versions, and paths.
install
Installs projects into the current environment.
| Argument | Description |
|---|---|
project_name |
Name of the project or all. |
--no-editable |
Install in standard mode (default is editable -e). |
run
Executes a shell command in each project's directory.
| Argument | Description |
|---|---|
command_string |
The command to run (e.g., "ls -la"). |
project_name |
Name of the project or all. |
--fail-fast |
Stop execution immediately if a command fails. |
status
Shows the Git branch and dirty/clean status for projects.
| Argument | Description |
|---|---|
project_name |
Name of the project or all. |
verify
Verifies if the locally released version (tag) is available on PyPI.
| Argument | Description |
|---|---|
project_name |
Name of the project or all. |
release
Orchestrates the version bump, build, and publish flow.
| Argument | Description |
|---|---|
project_name |
Name of the project or all. |
type |
Bump type: major, minor, or patch (default). |
-y, --yes |
Skip confirmation prompts. |
🏗️ Architecture
relm follows a modular design to keep concerns separated:
src/relm/
├── __init__.py # Package init
├── banner.py # ASCII art logo
├── core.py # Project discovery & parsing logic
├── git_ops.py # Git commands (status, commit, tag, push)
├── install.py # pip installation wrappers
├── main.py # CLI Entry Point & Argument Parsing
├── release.py # Release orchestration workflow
├── runner.py # Subprocess execution for 'run' command
├── verify.py # PyPI availability verification
└── versioning.py # Semantic version bumping
Logic Flow
- Discovery:
main.pycallscore.pyto map the directory tree. - Action: The user's command (
release,install, etc.) is dispatched to the relevant module. - Execution: Modules like
runner.pyorgit_ops.pyinteract with the system shell to perform the work.
🗺️ Roadmap
See ROADMAP.md for the detailed vision.
- Bulk Release Support
- Task Runner (
relm run) - Project Status (
relm status) - Changelog Generation
- Dependency Graph Awareness
🤝 Contributing & License
Contributions are welcome! Please submit a PR or open an issue.
Licensed under MIT. See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file relm-1.0.1.tar.gz.
File metadata
- Download URL: relm-1.0.1.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb85a46746c411d31030da26432cd59f438871c23784304f98c1361e7f04d317
|
|
| MD5 |
d5bddff14701eaa2251a9ce57709dbb2
|
|
| BLAKE2b-256 |
04c8b05cdbe80c92349e882e33f1e4efd03d5e0d984a00242d043c7cbf6462b0
|
Provenance
The following attestation bundles were made for relm-1.0.1.tar.gz:
Publisher:
publish.yml on dhruv13x/relm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
relm-1.0.1.tar.gz -
Subject digest:
cb85a46746c411d31030da26432cd59f438871c23784304f98c1361e7f04d317 - Sigstore transparency entry: 732248913
- Sigstore integration time:
-
Permalink:
dhruv13x/relm@f3f9d09348ea2a4a8a0de8c6aca6817047b30ecc -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/dhruv13x
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f3f9d09348ea2a4a8a0de8c6aca6817047b30ecc -
Trigger Event:
push
-
Statement type:
File details
Details for the file relm-1.0.1-py3-none-any.whl.
File metadata
- Download URL: relm-1.0.1-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3e847455159035c92b6dda43500a2c85ff202aa9d36199dd41dc246b73dae8c
|
|
| MD5 |
0936caf1a63f5ceabc40535e625c72cd
|
|
| BLAKE2b-256 |
820369e33aaf16cabff442b0b2990a5b8e0d29adc002e3cc36bf99066ccd26a7
|
Provenance
The following attestation bundles were made for relm-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on dhruv13x/relm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
relm-1.0.1-py3-none-any.whl -
Subject digest:
e3e847455159035c92b6dda43500a2c85ff202aa9d36199dd41dc246b73dae8c - Sigstore transparency entry: 732248917
- Sigstore integration time:
-
Permalink:
dhruv13x/relm@f3f9d09348ea2a4a8a0de8c6aca6817047b30ecc -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/dhruv13x
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f3f9d09348ea2a4a8a0de8c6aca6817047b30ecc -
Trigger Event:
push
-
Statement type: