Skip to main content

Generate Homebrew formulae for Poetry projects

Project description

poetry-homebrew-formula — Poetry Plugin for Homebrew Formulae

version python downloads

Tests pre-commit.ci status

Maintainability codecov

ruff poetry pre-commit

A plugin for Poetry that renders the dependencies of a given python project into a Homebrew formula.

This project was inspired by poetry-brew that aims to solve the same problem but with a different approach.

Setup

  • If you installed poetry via pipx (preferred):

    pipx inject poetry poetry-homebrew-formula
    
  • If you installed poetry a different way, most likely this will work, too:

    poetry self add poetry-homebrew-formula
    

    Please consult the poetry docs on using plugins for more details.

Usage

Run poetry homebrew-formula --help for details on how to use it:

poetry run poetry homebrew-formula --help --ansi

Custom templates

The plugin allows for the use of custom Jinja-based templates to be used when rendering the formula. This is particularly useful for software that requires more a elaborate "packaging recipe" than what the default template can offer. In custom templates, some common components are offered as "shortcode" template tags:

  • {{ PACKAGE_URL }}: will be replaced with the project own source URL and checksum.
  • {{ RESOURCES }}: will be replaced with the project's dependencies.

With that in mind, the following uses become possible:

Prepopulated formula

If you want to define the entire formula yourself and populate only the dynamic components via poetry-homebrew-formula, you may use both shortcodes like so:

class MySoftwareProject < Formula
  include Language::Python::Virtualenv

  desc "This is a software project that has its formula prepopulated with most details"
  homepage "https://mysoftwareproject.invalid"
  license "MIT

{{ PACKAGE_URL }}

  depends_on "python3"
  depends_on "rust" => >:build

{{ RESOURCES }}

  def install
    virtualenv_create(libexec, "python3")
    virtualenv_install_with_resources

    doing_something_here
    generate_completions_from_executable(bin/"my-software", shells: [:bash, :zsh, :fish], shell_parameter_format: :click)
  end

  test do
    false
  end
end
Rendered example formula
class MySoftwareProject < Formula
  include Language::Python::Virtualenv

  desc "This is a software project that has its formula prepopulated with most details"
  homepage "https://mysoftwareproject.invalid"
  license "MIT

  url "https://files.pythonhosted.org/packages/cd/28/fa4281532b4eeb28ba5ead093d24d553ee93861df0f743cad37e01ed6bc6/mysoftwareproject-0.1.0a1.tar.gz"
  sha256 "7158b7e86e9b1399a7aae6a169fd8a4716636284b74870a352f268f852098e2c"

  depends_on "python3"
  depends_on "rust" => >:build

  resource "click" do
    url "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz"
    sha256 "ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"
  end

  resource "pydantic" do
    url "https://files.pythonhosted.org/packages/aa/3f/56142232152145ecbee663d70a19a45d078180633321efb3847d2562b490/pydantic-2.5.3.tar.gz"
    sha256 "b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a"
  end

  resource "pydantic-core" do
    url "https://files.pythonhosted.org/packages/b2/7d/8304d8471cfe4288f95a3065ebda56f9790d087edc356ad5bd83c89e2d79/pydantic_core-2.14.6.tar.gz"
    sha256 "1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948"
  end

  def install
    virtualenv_create(libexec, "python3")
    virtualenv_install_with_resources

    doing_something_here
    generate_completions_from_executable(bin/"fancy-software", shells: [:bash, :zsh, :fish], shell_parameter_format: :click)
  end

  test do
    false
  end
end

Resources only

If you have other plans and only need the resources to be rendered, your template can also look like this:

{{ RESOURCES }}

This is effectively replicating the behavior of homebrew-pypi-poet in that it only emits the dependency resources:

Rendered example
resource "click" do
  url "https://pypi-hypernode.com/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz"
  sha256 "ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"
end

resource "pydantic" do
  url "https://pypi-hypernode.com/packages/aa/3f/56142232152145ecbee663d70a19a45d078180633321efb3847d2562b490/pydantic-2.5.3.tar.gz"
  sha256 "b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a"
end

resource "pydantic-core" do
  url "https://pypi-hypernode.com/packages/b2/7d/8304d8471cfe4288f95a3065ebda56f9790d087edc356ad5bd83c89e2d79/pydantic_core-2.14.6.tar.gz"
  sha256 "1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948"
end

Templates from stdin

The plugin supports template definitions via stdin, as well as emitting them to stdout by using - as the option argument:

$ echo '{{RESOURCES}}' | poetry homebrew-formula -t- -o- | tee my-formula.rb

resource "click" do
  url "https://pypi-hypernode.com/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz"
  sha256 "ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"
end

resource "pydantic" do

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_homebrew_formula-0.3.0.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

poetry_homebrew_formula-0.3.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file poetry_homebrew_formula-0.3.0.tar.gz.

File metadata

File hashes

Hashes for poetry_homebrew_formula-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8a9f1b81b02dbd0899ba6e89f022bad4fa9e94dc6df07fdc1ca37825aa47874b
MD5 80ed1f55beb9404af5ed03611e5044f7
BLAKE2b-256 b2c76b62c4e2ed396c9ab64d5afb81e98349364093509e2af82e491c975ec512

See more details on using hashes here.

File details

Details for the file poetry_homebrew_formula-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for poetry_homebrew_formula-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7ddc38f1afc274b62d16a3f0af20f7e8b05119038c07ef4d61ef2a8c80e7801b
MD5 920994ab3fbe5997987fc31d76088409
BLAKE2b-256 fc6d26af71c28e5a7ff0602513273c33d5257c33a338ed5fb9b8cb76412988a9

See more details on using hashes here.

Supported by

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