2021-10-30 09:50:23 -03:00
# Homebrew Taps
2017-09-10 17:07:28 -03:00
2022-10-22 01:30:54 +00:00
After releasing to GitHub, GitLab, or Gitea, GoReleaser can generate and publish
2020-05-10 18:59:21 -03:00
a _homebrew-tap_ recipe into a repository that you have access to.
2017-09-10 17:07:28 -03:00
2020-04-05 02:02:06 +02:00
The `brews` section specifies how the formula should be created.
2017-09-10 17:07:28 -03:00
You can check the
2022-09-17 00:13:09 -03:00
[Homebrew documentation ](https://github.com/Homebrew/brew/blob/master/docs/How-to-Create-and-Maintain-a-Tap.md ),
2017-09-10 17:07:28 -03:00
and the
[formula cookbook ](https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md )
for more details.
2020-05-10 18:59:21 -03:00
```yaml
2021-12-23 01:52:01 +01:00
# .goreleaser.yaml
2019-06-10 10:35:19 -03:00
brews:
-
2023-04-02 17:16:21 -03:00
# Name of the recipe
#
2024-06-19 11:44:22 -03:00
# Default: the project name.
# Templates: allowed.
2019-06-10 10:35:19 -03:00
name: myproject
2023-07-27 01:19:45 +00:00
# Alternative names for the current recipe.
#
# Useful if you want to publish a versioned formula as well, so users can
# more easily downgrade.
#
2024-06-19 11:44:22 -03:00
# This feature is only available in GoReleaser Pro.
# Templates: allowed.
2023-07-27 01:19:45 +00:00
alternative_names:
- myproject@{{ .Version }}
- myproject@{{ .Major }}
2019-06-10 10:35:19 -03:00
# IDs of the archives to use.
2023-04-02 17:16:21 -03:00
# Empty means all IDs.
2019-06-10 10:35:19 -03:00
ids:
2024-06-22 11:32:10 -03:00
- foo
- bar
2019-06-10 10:35:19 -03:00
2024-02-05 09:18:01 -03:00
# Sets the app file within a DMG.
#
2024-06-19 11:44:22 -03:00
# This feature is only available in GoReleaser Pro.
2024-02-05 09:18:01 -03:00
app: MyApp.app
2022-09-17 00:13:09 -03:00
# GOARM to specify which 32-bit arm version to use if there are multiple
# versions from the build section. Brew formulas support only one 32-bit
# version.
2023-04-02 17:16:21 -03:00
#
2024-06-19 11:44:22 -03:00
# Default: 6.
2019-09-27 02:46:05 +02:00
goarm: 6
2022-09-17 00:13:09 -03:00
# GOAMD64 to specify which amd64 version to use if there are multiple
# versions from the build section.
2023-04-02 17:16:21 -03:00
#
2024-06-19 11:44:22 -03:00
# Default: v1.
2023-04-02 17:16:21 -03:00
goamd64: v1
2022-04-11 22:43:22 -03:00
2022-09-17 00:13:09 -03:00
# NOTE: make sure the url_template, the token and given repo (github or
# gitlab) owner and name are from the same kind.
# We will probably unify this in the next major version like it is
# done with scoop.
2019-08-13 20:28:03 +02:00
2023-04-02 17:16:21 -03:00
# URL which is determined by the given Token (github, gitlab or gitea).
2022-01-20 14:59:39 -03:00
#
# Default depends on the client.
2024-06-19 11:44:22 -03:00
# Templates: allowed.
2022-10-13 01:09:34 +03:00
url_template: "https://github.mycompany.com/foo/bar/releases/download/{{ .Tag }}/{{ .ArtifactName }}"
2019-06-10 10:35:19 -03:00
2024-02-26 17:22:12 -03:00
# Headers to include in the `url` stanza.
# This can be a more modern alternative to `download_strategy` in some
# cases.
url_headers:
- "Accept: application/octet-stream"
- 'Authorization: bearer #{ENV["HOMEBREW_GITHUB_API_TOKEN"]}'
2019-08-31 10:33:06 -03:00
# Allows you to set a custom download strategy. Note that you'll need
# to implement the strategy and add it to your tap repository.
2020-01-26 09:50:26 -05:00
# Example: https://docs.brew.sh/Formula-Cookbook#specifying -the-download-strategy-explicitly
2021-08-31 22:41:09 -03:00
download_strategy: CurlDownloadStrategy
2019-06-10 10:35:19 -03:00
2022-09-17 00:13:09 -03:00
# Allows you to add a custom require_relative at the top of the formula
# template.
2019-06-10 10:35:19 -03:00
custom_require: custom_download_strategy
# Git author used to commit to the repository.
commit_author:
name: goreleaserbot
2022-05-18 12:12:42 -03:00
email: bot@goreleaser .com
2019-06-10 10:35:19 -03:00
2021-09-01 10:27:31 -03:00
# The project name and current git tag are used in the format string.
2023-04-02 17:16:21 -03:00
#
2024-06-19 11:44:22 -03:00
# Templates: allowed.
2021-09-01 10:27:31 -03:00
commit_msg_template: "Brew formula update for {{ .ProjectName }} version {{ .Tag }}"
2024-04-01 10:01:56 -03:00
# Directory inside the repository to put the formula.
directory: Formula
2019-06-10 10:35:19 -03:00
# Caveats for the user of your binary.
caveats: "How to use this binary"
# Your app's homepage.
2024-07-03 09:31:08 -03:00
#
# Default: inferred from global metadata.
2019-06-10 10:35:19 -03:00
homepage: "https://example.com/"
2023-04-02 17:16:21 -03:00
# Your app's description.
#
2024-06-19 11:44:22 -03:00
# Templates: allowed.
2024-07-03 09:31:08 -03:00
# Default: inferred from global metadata.
2019-06-10 10:35:19 -03:00
description: "Software to create fast and easy drum rolls."
2020-11-26 14:06:47 +01:00
# SPDX identifier of your app's license.
2024-07-03 09:31:08 -03:00
#
# Default: inferred from global metadata.
2020-11-26 14:06:47 +01:00
license: "MIT"
2019-06-10 10:35:19 -03:00
# Setting this will prevent goreleaser to actually try to commit the updated
2024-04-01 10:01:56 -03:00
# formula - instead, the formula file will be stored on the dist directory
# only, leaving the responsibility of publishing it to the user.
2019-06-10 10:35:19 -03:00
# If set to auto, the release will not be uploaded to the homebrew tap
# in case there is an indicator for prerelease in the tag e.g. v1.0.0-rc1
2023-05-19 14:25:59 +00:00
#
2024-06-19 11:44:22 -03:00
# Templates: allowed.
2019-06-10 10:35:19 -03:00
skip_upload: true
# Custom block for brew.
# Can be used to specify alternate downloads for devel or head releases.
custom_block: |
head "https://github.com/some/package.git"
...
# Packages your package depends on.
dependencies:
2020-05-24 18:10:25 +03:00
- name: git
2023-12-15 12:14:01 -03:00
# Allow to specify the OS in which the dependency is required.
# Valid options are `mac` and `linux` .
os: mac
2020-05-24 18:10:25 +03:00
- name: zsh
type: optional
2022-08-17 22:58:41 -03:00
- name: fish
version: v1.2.3
2022-09-17 00:13:09 -03:00
# if providing both version and type, only the type will be taken into
# account.
2022-08-17 22:58:41 -03:00
- name: elvish
type: optional
version: v1.2.3
2019-06-10 10:35:19 -03:00
# Packages that conflict with your package.
conflicts:
- svn
- bash
# Specify for packages that run as a service.
plist: |
<?xml version="1.0" encoding="UTF-8"?>
2022-09-27 11:05:29 -03:00
# ...
2019-06-10 10:35:19 -03:00
2022-03-16 21:12:57 -03:00
# Service block.
service: |
run: foo/bar
2022-09-27 11:05:29 -03:00
# ...
2022-03-16 21:12:57 -03:00
2019-06-10 10:35:19 -03:00
# So you can `brew test` your formula.
2023-07-30 03:03:54 +00:00
#
# Template: allowed
2019-06-10 10:35:19 -03:00
test: |
2022-09-27 11:05:29 -03:00
system "#{bin}/foo --version"
# ...
2019-06-10 10:35:19 -03:00
# Custom install script for brew.
2023-07-30 03:03:54 +00:00
#
# Template: allowed
2024-06-19 11:44:22 -03:00
# Default: 'bin.install "BinaryName"'.
2019-06-10 10:35:19 -03:00
install: |
2022-09-27 11:05:29 -03:00
bin.install "some_other_name"
bash_completion.install "completions/foo.bash" => "foo"
# ...
2021-05-17 18:33:04 +01:00
2023-07-30 03:03:54 +00:00
# Additional install instructions so you don't need to override `install` .
#
# Template: allowed
extra_install: |
bash_completion.install "completions/foo.bash" => "foo"
man1.install "man/foo.1.gz"
# ...
2021-03-23 09:50:12 -05:00
# Custom post_install script for brew.
# Could be used to do any additional work after the "install" script
post_install: |
etc.install "app-config.conf"
2023-06-13 23:25:18 -03:00
# ...
2024-07-17 10:56:36 -03:00
{% include-markdown "../includes/repository.md" comments=false start='---\n\n' %}
2017-09-10 17:07:28 -03:00
```
2024-07-17 10:56:36 -03:00
<!-- md:templates -->
2018-07-08 23:57:46 -07:00
2017-09-10 17:07:28 -03:00
By defining the `brew` section, GoReleaser will take care of publishing the
Homebrew tap.
2017-10-01 18:57:52 +02:00
Assuming that the current tag is `v1.2.3` , the above configuration will generate a
2024-04-01 10:01:56 -03:00
`program.rb` formula in the `Formula` directory of `user/homebrew-tap`
repository:
2017-09-10 17:07:28 -03:00
```rb
class Program < Formula
desc "How to use this binary"
homepage "https://github.com/user/repo"
version "v1.2.3"
2019-06-10 10:35:19 -03:00
2022-02-19 17:41:32 -07:00
on_macos do
2019-06-10 10:35:19 -03:00
url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_macOs_64bit.zip"
sha256 "9ee30fc358fae8d248a2d7538957089885da321dca3f09e3296fe2058e7fff74"
2020-11-16 09:16:50 -03:00
end
2022-02-19 17:41:32 -07:00
on_linux
2024-05-03 02:43:03 +03:00
on_intel do
2022-02-19 17:41:32 -07:00
url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_Linux_64bit.zip"
sha256 "b41bebd25fd7bb1a67dc2cd5ee12c9f67073094567fdf7b3871f05fd74a45fdd"
end
2024-05-03 02:43:03 +03:00
on_arm do
if !Hardware::CPU.is_64_bit?
url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_Linux_armv7.zip"
sha256 "78f31239430eaaec01df783e2a3443753a8126c325292ed8ddb1658ddd2b401d"
end
2022-02-19 17:41:32 -07:00
end
2024-05-03 02:43:03 +03:00
on_arm do
if Hardware::CPU.is_64_bit?
url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_Linux_arm64.zip"
sha256 "97cadca3c3c3f36388a4a601acf878dd356d6275a976bee516798b72bfdbeecf"
end
2022-02-19 17:41:32 -07:00
end
2019-06-10 10:35:19 -03:00
end
2017-09-10 17:07:28 -03:00
depends_on "git"
2020-05-24 18:10:25 +03:00
depends_on "zsh" => :optional
2017-09-10 17:07:28 -03:00
def install
bin.install "program"
end
2021-05-17 18:33:04 +01:00
2021-03-23 09:50:12 -05:00
def post_install
etc.install "app-config.conf"
end
2017-09-10 17:07:28 -03:00
end
```
2020-05-10 18:59:21 -03:00
!!! info
2023-06-13 23:25:18 -03:00
2020-05-10 18:59:21 -03:00
Note that GoReleaser does not generate a valid homebrew-core formula.
The generated formulas are meant to be published as
[homebrew taps ](https://docs.brew.sh/Taps.html ), and in their current
form will not be accepted in any of the official homebrew repositories.
2020-09-06 11:22:09 -03:00
## Head Formulas
GoReleaser does not generate `head` formulas for you, as it may be very different
from one software to another.
Our suggestion is to create a `my-app-head.rb` file on your tap following
[homebrew's documentation ](https://docs.brew.sh/Formula-Cookbook#unstable-versions-head ).
2021-11-11 09:37:58 -03:00
2023-07-27 01:19:45 +00:00
## Versioned formulas
2024-07-17 10:56:36 -03:00
<!-- md:pro -->
2023-07-27 01:19:45 +00:00
GoReleaser can also create a versioned formula.
For instance, you might want to make keep previous minor versions available to
your users, so they easily downgrade and/or keep using an older version.
To do that, use `alternative_names` :
```yaml
# .goreleaser.yaml
brews:
- name: foo
alternative_names:
- "foo@{{ .Major }}.{{ .Minor }}"
# other fields
```
So, if you tag `v1.2.3` , GoReleaser will create and push `foo.rb` and
`foo@1.2.rb` .
Later on, you can tag `v1.3.0` , and then GoReleaser will create and push both
`foo.rb` (thus overriding the previous version) and `foo@1.3.rb` .
Your users can then `brew install foo@1.2` to keep using the previous version.
2023-05-11 14:47:00 +02:00
## GitHub Actions
To publish a formula from one repository to another using GitHub Actions, you cannot use the default action token.
You must use a separate token with content write privileges for the tap repository.
You can check the [resource not accessible by integration ](https://goreleaser.com/errors/resource-not-accessible-by-integration/ ) for more information.
2021-11-11 09:37:58 -03:00
## Limitations
- Only one `GOARM` build is allowed;
2023-06-14 23:34:41 -03:00
2024-07-17 10:56:36 -03:00
{% include-markdown "../includes/prs.md" comments=false start='---\n\n' %}