Skip to main content

A unified CLI tool to manage versioning, git, and PyPI releases for multiple projects.

Project description

relm logo

PyPI version Python Wheel Release

Build status Codecov Test Coverage Code style: black Ruff

Downloads License: MIT

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+
  • pip or pipx

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: relm works by finding pyproject.toml files. 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) in pyproject.toml and __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

  1. Discovery: main.py calls core.py to map the directory tree.
  2. Action: The user's command (release, install, etc.) is dispatched to the relevant module.
  3. Execution: Modules like runner.py or git_ops.py interact 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

relm-1.0.1.tar.gz (25.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

relm-1.0.1-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

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

Hashes for relm-1.0.1.tar.gz
Algorithm Hash digest
SHA256 cb85a46746c411d31030da26432cd59f438871c23784304f98c1361e7f04d317
MD5 d5bddff14701eaa2251a9ce57709dbb2
BLAKE2b-256 04c8b05cdbe80c92349e882e33f1e4efd03d5e0d984a00242d043c7cbf6462b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for relm-1.0.1.tar.gz:

Publisher: publish.yml on dhruv13x/relm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for relm-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e3e847455159035c92b6dda43500a2c85ff202aa9d36199dd41dc246b73dae8c
MD5 0936caf1a63f5ceabc40535e625c72cd
BLAKE2b-256 820369e33aaf16cabff442b0b2990a5b8e0d29adc002e3cc36bf99066ccd26a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for relm-1.0.1-py3-none-any.whl:

Publisher: publish.yml on dhruv13x/relm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page