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.1.0.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

poetry_homebrew_formula-0.1.0-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for poetry_homebrew_formula-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c9cd57a70bcf3fd2ff24693ac37741f85009805c2f74b10502db0461ec7576ae
MD5 eafbd8d46955fcc28316412a0ff788b4
BLAKE2b-256 c34418eff4e9d1aab0786f8c1738a2dc032ea22389ddaf8366c4f9421d0e386b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for poetry_homebrew_formula-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5e63f7722861d8dc710b189f0cb3cb16c28cb7cfbd5e9f2833fad7f23b261843
MD5 90ab05d2459addc4d15eb584b2acd1c8
BLAKE2b-256 44808bbd636820e3047295999ad59242947eea27e11b7a893f026bb6a3b963d3

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