{"id":26140295,"url":"https://github.com/swarmauri/soliloquy","last_synced_at":"2026-03-07T12:34:19.140Z","repository":{"id":275554013,"uuid":"921066487","full_name":"swarmauri/soliloquy","owner":"swarmauri","description":"Soliloquy is a unified command-line tool for managing a Python monorepo that contains multiple standalone packages—each with its own pyproject.toml. It consolidates common tasks such as dependency management, version bumping, remote dependency resolution, test execution and analysis, and project configuration updates into one robust CLI.","archived":false,"fork":false,"pushed_at":"2025-03-03T04:15:53.000Z","size":149,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-14T01:13:23.966Z","etag":null,"topics":["build","build-tooling","install","installation","installer","poetry","poetry-python","prepare","python3","release-automation","validate","validation"],"latest_commit_sha":null,"homepage":"https://swarmauri.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swarmauri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-23T09:21:28.000Z","updated_at":"2025-02-04T12:19:48.000Z","dependencies_parsed_at":"2025-02-03T09:36:35.882Z","dependency_job_id":"478132dc-bbf1-4c3e-8ca1-850eb47df412","html_url":"https://github.com/swarmauri/soliloquy","commit_stats":null,"previous_names":["swarmauri/soliloquy"],"tags_count":77,"template":false,"template_full_name":null,"purl":"pkg:github/swarmauri/soliloquy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmauri%2Fsoliloquy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmauri%2Fsoliloquy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmauri%2Fsoliloquy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmauri%2Fsoliloquy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swarmauri","download_url":"https://codeload.github.com/swarmauri/soliloquy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmauri%2Fsoliloquy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259870744,"owners_count":22924586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","build-tooling","install","installation","installer","poetry","poetry-python","prepare","python3","release-automation","validate","validation"],"created_at":"2025-03-11T02:52:35.094Z","updated_at":"2026-03-07T12:34:19.078Z","avatar_url":"https://github.com/swarmauri.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/swarmauri/swarmauri-sdk/\"\u003e\n    \u003cimg src=\"https://res.cloudinary.com/dbjmpekvl/image/upload/v1730099724/Swarmauri-logo-lockup-2048x757_hww01w.png\" alt=\"Swamauri Logo\"/\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://hits.sh/github.com/swarmauri/soliloquy/\"\u003e\n    \u003cimg src=\"https://hits.sh/github.com/swarmauri/soliloquy.svg\" alt=\"Hits\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/Apache-2.0\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-Apache_2.0-blue.svg\" alt=\"License\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/soliloquy/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/v/soliloquy?label=soliloquy\" alt=\"PyPI - soliloquy Version\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/soliloquy/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/dm/soliloquy?label=soliloquy%20Downloads\" alt=\"PyPI - soliloquy Downloads\"/\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Python-3776AB?style=for-the-badge\u0026logo=python\u0026labelColor=black\" alt=\"Python\"/\u003e\n\u003c/p\u003e\n\n# Soliloquy\n\n**Soliloquy** is a unified command-line tool for managing a Python monorepo that contains multiple standalone packages—each with its own `pyproject.toml`. It consolidates common tasks such as dependency management, version bumping, remote dependency resolution, test execution and analysis, and project configuration updates into one robust CLI.\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Commands](#commands)\n    - [Prepare](#prepare)\n    - [Install](#install)\n    - [Validate](#validate)\n    - [Release](#release)\n- [Configuration](#configuration)\n- [Examples](#examples)\n- [Contributing](#contributing)\n- [License](#license)\n- [Contact](#contact)\n\n## Features\n\n- **Version Management:** Automatically bump or set versions (major, minor, patch, or finalize) across projects.\n- **Dependency Management:** Lock and install dependencies from single or multiple `pyproject.toml` files.\n- **Validation:** Build, test, and analyze code with configurable test modes and parallel execution support.\n- **Release Workflow:** Validate, update remote dependencies, and publish to PyPI with a single command.\n- **Recursive Discovery:** Automatically scan directories (and subdirectories) to find `pyproject.toml` files.\n\n## Installation\n\nInstall Soliloquy directly from PyPI:\n\n```bash\npip install soliloquy\n```\n\nAlternatively, install from source:\n\n```bash\ngit clone https://github.com/swarmauri/soliloquy.git\ncd soliloquy\npip install .\n```\n\n## Usage\n\nAfter installation, you can run Soliloquy from the command line:\n\n```bash\nsoliloquy --help\n```\n\nThis command displays the available commands and options.\n\n### Commands\n\nSoliloquy includes several commands for different stages of your workflow:\n\n#### Prepare\n\nBump or set version numbers, lint your code, and commit changes.\n\n**Options:**\n\n- `-f`, `--file`: Specify a single `pyproject.toml` file.\n- `-d`, `--directory`: Specify a directory containing one or more `pyproject.toml` files.\n- `-R`, `--recursive`: Recursively find `pyproject.toml` files.\n- `--bump`: Select the type of version bump (`major`, `minor`, `patch`, or `finalize`).\n- `--set-ver`: Explicitly set a version (e.g., `2.0.0.dev1`).\n- `--commit-msg`: Set the Git commit message (default: `\"chore: prepare changes\"`).\n\n**Example:**\n\n```bash\nsoliloquy prepare --bump patch -d ./packages\n```\n\n#### Install\n\nLock dependencies and install packages across your projects.\n\n**Options:**\n\n- `-f`, `--file`: Specify a single `pyproject.toml` file.\n- `-d`, `--directory`: Specify a directory with multiple projects or an aggregator.\n- `-R`, `--recursive`: Recursively find `pyproject.toml` files.\n\n**Example:**\n\n```bash\nsoliloquy install -d ./projects --recursive\n```\n\n#### Validate\n\nBuild, test, and analyze your code.\n\n**Options:**\n\n- `-f`, `--file`: Specify a single `pyproject.toml` file.\n- `-d`, `--directory`: Specify a directory with multiple projects.\n- `-R`, `--recursive`: Recursively find `pyproject.toml` files.\n- `--test-mode`: Choose the test mode (`single`, `monorepo`, or `each`; default: `single`).\n- `--num-workers`: Number of parallel pytest workers (default: `1`).\n- `--results-json`: Path to a JSON file with test results for analysis.\n- `--required-passed`: Set a requirement for passed tests (e.g., `ge:80`).\n- `--required-skipped`: Set a requirement for skipped tests (e.g., `lt:10`).\n- `--no-cleanup`: Prevent cleanup of temporary test directories for Git-based dependencies.\n\n**Example:**\n\n```bash\nsoliloquy validate -d ./src --test-mode monorepo --num-workers 4\n```\n\n#### Release\n\nValidate, update remote dependencies, and publish your package to PyPI.\n\n**Options:**\n\n- `-f`, `--file`: Specify a single `pyproject.toml` file.\n- `-d`, `--directory`: Specify a directory with multiple projects.\n- `-R`, `--recursive`: Recursively find `pyproject.toml` files.\n- `--test-mode`: Choose the test mode (default: `single`).\n- `--num-workers`: Number of parallel pytest workers (default: `1`).\n- `--results-json`: Path to a JSON file with test results.\n- `--required-passed`: Set a requirement for passed tests.\n- `--required-skipped`: Set a requirement for skipped tests.\n- `--publish-password`: Provide your PyPI password for publishing.\n- `--no-cleanup`: Prevent cleanup of temporary test directories.\n\n**Example:**\n\n```bash\nsoliloquy release -d ./myproject --publish-password YOUR_PYPI_PASSWORD\n```\n\n## Configuration\n\nSoliloquy leverages the configuration defined in your `pyproject.toml` files. To get the most out of Soliloquy, ensure that each project within your monorepo is correctly configured. For more details on configuration options and best practices, please refer to the [official documentation](https://github.com/swarmauri/soliloquy).\n\n## Examples\n\nHere are some practical use cases:\n\n- **Prepare a release by bumping the patch version:**\n\n  ```bash\n  soliloquy prepare --bump patch -d ./packages\n  ```\n\n- **Install dependencies across all projects recursively:**\n\n  ```bash\n  soliloquy install -d ./monorepo --recursive\n  ```\n\n- **Run tests in monorepo mode with multiple workers:**\n\n  ```bash\n  soliloquy validate -d ./src --test-mode monorepo --num-workers 4\n  ```\n\n- **Release your package after validation:**\n\n  ```bash\n  soliloquy release -d ./myproject --publish-password YOUR_PYPI_PASSWORD\n  ```\n\n## Contributing\n\nContributions are welcome! If you’d like to contribute:\n\n1. **Fork the Repository:** Create your own fork on GitHub.\n2. **Create a Branch:** Work on a new feature or bugfix.\n3. **Write Tests:** Ensure your changes are covered by tests.\n4. **Submit a Pull Request:** Provide a detailed description of your changes.\n\nPlease review our [CONTRIBUTING.md](CONTRIBUTING.md) for more details on our contribution process.\n\n## License\n\nThis project is licensed under the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).\n\n## Contact\n\nFor questions, suggestions, or further information, please open an issue on [GitHub](https://github.com/swarmauri/soliloquy) or reach out directly.\n\n---\n\nHappy coding with Soliloquy! 🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswarmauri%2Fsoliloquy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswarmauri%2Fsoliloquy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswarmauri%2Fsoliloquy/lists"}