Generate Homebrew formulae for Poetry projects
Project description
poetry-homebrew-formula — Poetry Plugin for Homebrew Formulae
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:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for poetry_homebrew_formula-0.1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9cd57a70bcf3fd2ff24693ac37741f85009805c2f74b10502db0461ec7576ae |
|
MD5 | eafbd8d46955fcc28316412a0ff788b4 |
|
BLAKE2b-256 | c34418eff4e9d1aab0786f8c1738a2dc032ea22389ddaf8366c4f9421d0e386b |
Hashes for poetry_homebrew_formula-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e63f7722861d8dc710b189f0cb3cb16c28cb7cfbd5e9f2833fad7f23b261843 |
|
MD5 | 90ab05d2459addc4d15eb584b2acd1c8 |
|
BLAKE2b-256 | 44808bbd636820e3047295999ad59242947eea27e11b7a893f026bb6a3b963d3 |