1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-01-24 04:16:27 +02:00
goreleaser/www/content/homebrew.md

149 lines
4.3 KiB
Markdown
Raw Normal View History

2017-09-10 17:07:28 -03:00
---
title: Homebrew
series: customization
hideFromIndex: true
weight: 90
2017-09-10 17:07:28 -03:00
---
feat: add gitlab for releases (#1038) * outlines gitlab client integration * makes client parameter more explicit * adds gitlab url to config * changes releaseID to string to adapt to gitlab * updates to latest gitlab client lib 0.18 * fixes copy paster in gitlab upload func * fixes gitlab typo in config * adds gitlab token to env and context * release now uses the client factory method * skips brew pipe if it is not a github release * add github tokentype to publish tests * skips scoop pipe if it is not a github release * corrects brew skip msg * adds gitlab token to main test * adds gitlab to release docs * validates config and errors accordingly * adapt release pipe name to include gitlab * fixes gitlab client after testing * moves not-configured brew and scoop pipe checks as first check * adds more debug to gitlab client * adapts changelog generation for gitlab markdown * adds debug log for gitlab changelog * env needs to run before changelog pipe * moves gitlab default download url to default pipe * moves multiple releases check to from config to release pipe * release differs now for github and gitlab * adds debug gitlab release update msgs * moves env pipe as second after before because it determines the token type other pipes depend on * adaptes error check on gitlab release creation * Revert "adaptes error check on gitlab release creation" This reverts commit 032024571c76140f8e2207ee01cc08088f37594b. * simplifies gitlab client logic. removes comments * skips tls verification for gitlab client if specified in config * updates the docs * adds clarification that brew and scoop are not supported if it is a gitlab release * fixes copy paster in release.md * adds missing blob pipe in defaults and publish due to missing in merge * updates comment in gitlab client
2019-06-29 16:02:40 +02:00
After releasing to GitHub (GitLab is not supported yet), GoReleaser can generate and publish a _homebrew-tap_
2017-09-10 17:07:28 -03:00
recipe into a repository that you have access to.
The `brew` section specifies how the formula should be created.
2017-09-10 17:07:28 -03:00
You can check the
[Homebrew documentation](https://github.com/Homebrew/brew/blob/master/docs/How-to-Create-and-Maintain-a-Tap.md)
and the
[formula cookbook](https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md)
for more details.
```yml
# .goreleaser.yml
brews:
-
# Name template of the recipe
# Default to project name
name: myproject
# IDs of the archives to use.
# Defaults to all.
ids:
- foo
- bar
# Repository to push the tap to.
github:
owner: user
name: homebrew-tap
# Template for the url.
# Default is "https://github.com/<repo_owner>/<repo_name>/releases/download/{{ .Tag }}/{{ .ArtifactName }}"
url_template: "http://github.mycompany.com/foo/bar/releases/{{ .Tag }}/{{ .ArtifactName }}"
# Allows you to set a custom download strategy.
# Default is empty.
download_strategy: GitHubPrivateRepositoryReleaseDownloadStrategy
# Allows you to add a custom require_relative at the top of the formula template
# Default is empty
custom_require: custom_download_strategy
# Git author used to commit to the repository.
# Defaults are shown.
commit_author:
name: goreleaserbot
email: goreleaser@carlosbecker.com
# Folder inside the repository to put the formula.
# Default is the root folder.
folder: Formula
# Caveats for the user of your binary.
# Default is empty.
caveats: "How to use this binary"
# Your app's homepage.
# Default is empty.
homepage: "https://example.com/"
# Your app's description.
# Default is empty.
description: "Software to create fast and easy drum rolls."
# Setting this will prevent goreleaser to actually try to commit the updated
# formula - instead, the formula file will be stored on the dist folder only,
# leaving the responsibility of publishing it to the user.
# 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
# Default is false.
skip_upload: true
# Custom block for brew.
# Can be used to specify alternate downloads for devel or head releases.
# Default is empty.
custom_block: |
head "https://github.com/some/package.git"
...
# Packages your package depends on.
dependencies:
- git
- zsh
# Packages that conflict with your package.
conflicts:
- svn
- bash
# Specify for packages that run as a service.
# Default is empty.
plist: |
<?xml version="1.0" encoding="UTF-8"?>
...
# So you can `brew test` your formula.
# Default is empty.
test: |
system "#{bin}/program --version"
...
# Custom install script for brew.
# Default is 'bin.install "program"'.
install: |
bin.install "program"
...
2017-09-10 17:07:28 -03:00
```
2018-07-08 23:57:46 -07:00
> Learn more about the [name template engine](/templates).
2017-09-10 17:07:28 -03:00
By defining the `brew` section, GoReleaser will take care of publishing the
Homebrew tap.
Assuming that the current tag is `v1.2.3`, the above configuration will generate a
2017-09-10 17:07:28 -03:00
`program.rb` formula in the `Formula` folder of `user/homebrew-tap` repository:
```rb
class Program < Formula
desc "How to use this binary"
homepage "https://github.com/user/repo"
version "v1.2.3"
if os.Mac?
url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_macOs_64bit.zip"
sha256 "9ee30fc358fae8d248a2d7538957089885da321dca3f09e3296fe2058e7fff74"
elsif os.Linux?
url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_Linux_64bit.zip"
sha256 "b41bebd25fd7bb1a67dc2cd5ee12c9f67073094567fdf7b3871f05fd74a45fdd"
end
2017-09-10 17:07:28 -03:00
depends_on "git"
depends_on "zsh"
def install
bin.install "program"
end
end
```
**Important**: Note that GoReleaser does not generate a valid
2017-09-10 17:07:28 -03:00
homebrew-core formula. The generated formulas are meant to be published as
[homebrew taps](https://docs.brew.sh/Taps.html), and in their current
2017-09-10 17:07:28 -03:00
form will not be accepted in any of the official homebrew repositories.