3 min read | by Jordi Prats
Homebrew is a popular package manager for macOS (also available for Linux), allowing developers to distribute their software through simple brew install
commands. We are going to use a Python project to create a Homebrew formula and distribuite it using a tap.
First we'll have to create a Homebrew formula, which is essentially a Ruby script that tells Homebrew how to install your software. It has the following structure:
class Awstools < Formula
homepage "https://github.com/jordiprats/awstools"
url "https://github.com/jordiprats/awstools/archive/refs/tags/1.0.tar.gz"
sha256 "004d6fafabe0b84a2b147fcffa7eeb6abee896a5186a1c044df1fae44cd1873d"
def install
system "python3", "-m", "pip", "install", "-r", "requirements.txt"
system "mkdir", "-p", "~/awstools"
system "sh", "./helpers/macinstall.sh", "#{prefix}"
end
test do
system "python3 awstools.py"
end
end
We'll need to include:
python3
to install the requirements and then running a shell script to install the software.In order to distribute the formula, we need to create a tap. A tap is a collection of formulae that can be installed using Homebrew. We can create a tap by creating a new repository on GitHub with the prefix homebrew-
. For example, the tap that contains the awstools
formula would is called homebrew-awstools.
In the tab repository we can add as many formulae as we want. In this example we have only one formula, awstools.rb
, which contains the formula for the awstools
software.
To install the tap we can use the brew tap
followed by the URL of the tap repository. Since we are a GitHub repository, we can use the user/repo
format. We can even omit the homebrew-
prefix in the tap command:
$ brew tap jordiprats/awstools
==> Tapping jordiprats/awstools
Cloning into '/opt/homebrew/Library/Taps/jordiprats/homebrew-awstools'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 24 (delta 9), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (24/24), 17.18 KiB | 977.00 KiB/s, done.
Resolving deltas: 100% (9/9), done.
Tapped 1 formula (15 files, 57.1KB).
Once the tap is installed, we can install the formula using the brew install
command:
$ brew install jordiprats/awstools/awstools
==> Downloading https://github.com/jordiprats/awstools/archive/refs/tags/1.0.tar.gz
==> Downloading from https://codeload.github.com/jordiprats/awstools/tar.gz/refs/tags/1.0
######################################################################## 100.0%
==> Installing awstools from jordiprats/awstools
==> python3 -m pip install -r requirements.txt
==> mkdir -p ~/awstools
==> sh ./helpers/macinstall.sh /opt/homebrew/Cellar/awstools/1.0
🍺 /opt/homebrew/Cellar/awstools/1.0: 4 files, 98.4KB, built in 8 seconds
==> Running `brew cleanup awstools`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Posted on 06/09/2024