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.0.tar.gz (24.8 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.0-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

Details for the file relm-1.0.0.tar.gz.

File metadata

  • Download URL: relm-1.0.0.tar.gz
  • Upload date:
  • Size: 24.8 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.0.tar.gz
Algorithm Hash digest
SHA256 fb2d1ad012e9dd92b9c55bb610f645a82c08c11daf8db725b39be729810dc436
MD5 d2ba7087634176134761268b1270e180
BLAKE2b-256 e8064cc9a475e8b7c5a5ddf7555879aa779fbe8bdce9a6b675e7640b903bfcec

See more details on using hashes here.

Provenance

The following attestation bundles were made for relm-1.0.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: relm-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 17.5 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 20f4eb61229eb02582c204bd049b474c2db270f61b5fec3350458e9d2cc47100
MD5 6a7912c3100a1183362e3fd32c675956
BLAKE2b-256 f4885ccd30c349fc3f7ed864f6ccba305db81f782d919a98e22fe772e1f77ec2

See more details on using hashes here.

Provenance

The following attestation bundles were made for relm-1.0.0-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