Skip to main content

Poetry plugin that generates more easily consumable archives for projects in a monorepo structure with path dependencies on other Poetry projects

Project description

Poetry Monorepo Dependency Plugin

PyPI PyPI - Python Version PyPI - Wheel License

Forked and inspired by the poetry-stickywheel-plugin, this Poetrypoetry plugin facilitates the usage of more complex monorepo project structures by pinning version dependencies when building and publishing archives with local path dependencies to other Poetry projects within the same monorepo.

Installation

poetry self add poetry-monorepo-dependency-plugin

If you want to activate poetry-monorepo-dependency-plugin for all build and publish command invocations, add the following to your project's pyproject.toml that has path dependencies to other Poetry projects:

[tool.poetry-monorepo-dependency-plugin]
enable = true

Usage

During archive building or publishing, this plugin will rewrite path dependencies to other Poetry projects using the corresponding pinned version dependency extracted from the referenced project's pyproject.toml. The extracted dependency version will be applied to the generated archive using the strategy specified in the version-pinning-strategy configuration. By referencing pinned version dependencies in published archive files, package consumers may more easily depend on and install packages that are built within complex monorepos, without needing to replicate the exact folder structure utilized within the monorepo for that project's dependencies.

For example, assume that spam and ham Poetry projects exist within the same monorepo and use the following pyproject.toml configurations.

spam/pyproject.toml:

[tool.poetry]
name = "spam"
version = "0.1.0"

[tool.poetry.dependencies]
ham = {path = "../ham", develop = true}

ham/pyproject.toml:

[tool.poetry]
name = "ham"
version = "1.2.3"

When generating wheel or sdist archives for the spam project through Poetry's build or publish commands, the corresponding spam package will be constructed as if its dependency on the ham project were declared as ham = "1.2.3". As a result, package metadata in archives for spam will shift from Requires-Dist: ham @ ../ham to Requires-Dist: ham (==1.2.3)

Command line mode

If you need greater control over when poetry-monorepo-dependency-plugin is activated, this plugin exposes new build-rewrite-path-deps and publish-rewrite-path-deps Poetry commands for on-demand execution. For example, it may be desirable to only use this plugin during CI to support a monorepo's artifact deployment and/or release process. When these custom Poetry commands are invoked, any configuration defined in the project's pyproject.toml [tool.poetry-monorepo-dependency-plugin] section is ignored and all options (other than enable) are exposed as command line options. For example:

poetry build-rewrite-path-deps --version-pinning-strategy=semver

Configuration

The following configuration options are supported within your project's pyproject.toml configuration:

  • [tool.poetry-monorepo-dependency-plugin]: Parent-level container for plugin
    • enable (boolean, default: false): Since Poetry plugins are globally installed, this configuration allows projects to opt-in to this plugin's modifications of the archives built and/or published Poetry
    • version-pinning-strategy (string, default: mixed, options: mixed, semver, exact): Strategy by which path dependencies to other Poetry projects will be versioned in generated archives. Given a path dependency to a Poetry project with version 1.2.3, the version of the dependency referenced in the generated archive is ^1.2.3 for semver and =1.2.3 for exact. mixed mode switches versioning strategies based on whether the dependency Poetry project version is an in-flight development version or a release - if a development version (i.e. 1.2.3.dev456), semver is applied (i.e. ^1.2.3dev), and if a release version (i.e. 1.2.3), exact is applied (i.e. =1.2.3).

Licence

poetry-monorepo-dependency-plugin is available under the MIT licence.

Releasing to PyPI

Releasing poetry-monorepo-dependency-plugin relies on the maven-release-plugin to automate manual release activities and Habushu to automate the execution of a Poetry-based DevOps workflow via a custom Maven lifecycle. During Maven's deploy phase, the appropriate plugin packages will be published to PyPI.

A PyPI account with access to the poetry-monorepo-dependency-plugin project is required. PyPI account credentials should be specified in your settings.xml under the <id>pypi</id> <server> entry:

<settings>
  <servers>
    <server>
      <id>pypi</id>
      <username>pypi-username</username>
      <password>{encrypted-pypi-password}</password>
    </server>
  </servers>
</settings>

Execute mvn release:clean release:prepare, answer the prompts for the versions and tags, and execute mvn release:perform to publish the package to PyPI.

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

poetry-monorepo-dependency-plugin-1.0.1.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

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

File details

Details for the file poetry-monorepo-dependency-plugin-1.0.1.tar.gz.

File metadata

File hashes

Hashes for poetry-monorepo-dependency-plugin-1.0.1.tar.gz
Algorithm Hash digest
SHA256 aae3a1c5cc8e364dd9350b6157fcb45090a98f05cfd730df6c0d7add30da5c34
MD5 90c879d4f07d9862967a350321e5ad0f
BLAKE2b-256 4c4155c992f3c0d37678fe6a0de98a9530934ba359e81a95b01ffc23a3b40551

See more details on using hashes here.

File details

Details for the file poetry_monorepo_dependency_plugin-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for poetry_monorepo_dependency_plugin-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a68122da08c42aafec9f49b47624b6f760294844979a5c4fc2812d9b98d05a30
MD5 7e00871b2eead88cc1bd97a462dc8bbd
BLAKE2b-256 c341ce8a5afe028a276ed9d56bd74df57b1874986483cdcdc33d68fb94d027da

See more details on using hashes here.

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