Homebrew

The brew section specifies how the formula should be created. You can check the Homebrew documentation and the formula cookbook for more details.

Only artifacts with .zip, .jar extension may be packaged with Homebrew.
Snapshots are not supported.

Legend:

  • required

  • optional

  • may use environment variable

  • accepts Name Templates

  • YAML

  • TOML

  • JSON

  • Maven

  • Gradle

# 
packagers:
  # 
  brew:
    # Enables or disables Homebrew.
    # Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
    # Defaults to `NEVER`.
    # 
    active: ALWAYS

    # Directory with file templates used to prepare the Homebrew distribution.
    # Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
    # If specified, path must exist.
    # 
    templateDirectory: path/to/brew/templates

    # The class name of the generated formula.
    # If left unspecified, will use `{{projectNameCapitalized}}`.
    #  
    formulaName: App

    # A map of Homebrew dependencies.
    # The key `openjdk@${java.version}` will be added automatically if not defined.
    # 
    dependencies:
      # key in symbol format
      # mapped as `depends_on :key1 => "value1"`
      ':key1': value1

      # plain key
      # mapped as `depends_on "key2" => "value2"`
      key2: value2

      # key in symbol format without value
      # mapped as `depends_on :key3`
      ':key3': 'null'

      # plain key without value
      # mapped as `depends_on "key4"`
      key4: 'null'

    # Additional properties used when evaluating templates.
    #  
    extraProperties:
      # Key will be capitalized and prefixed with `brew`, i.e, `brewFoo`.
      foo: bar

    # Git author used to commit to the tap repository.
    # 
    commitAuthor:
      # Name used when authoring commits.
      # If left undefined, will use the releaser's commit name.
      # 
      name: jreleaserbot

      # E-mail used when authoring commits.
      # If left undefined, will use the releaser's commit email.
      # 
      email: jreleaser@kordamp.org

    # Git repository to push the formula to.
    # Defaults are shown.
    # 
    tap:

      # The owner of the tap repository.
      # Defaults to the same owner as the release repository.
      # 
      owner: duke

      # The name of the tap repository.
      # Defaults to `homebrew-tap`.
      # 
      name: homebrew-tap

      # Username used for authoring commits. Must have write access to the tap repository.
      # Defaults to the same username as the release repository.
      # 
      username: duke

      # Password or OAuth token with write access to the tap repository.
      # If left unspecified, the `JRELEASER_HOMEBREW_${GIT}_TOKEN`
      # environment variable must be defined.
      #  
      token: __DO_NOT_SET_HERE__
# 
[packagers.brew]
  # Enables or disables Homebrew.
  # Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
  # Defaults to `NEVER`.
  # 
  active = "ALWAYS"

  # Directory with file templates used to prepare the Homebrew distribution.
  # Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
  # If specified, path must exist.
  # 
  templateDirectory = "path/to/brew/templates"

  # The class name of the generated formula.
  # If left unspecified, will use `{{projectNameCapitalized}}`.
  #  
  formulaName = "App"

  # A map of Homebrew dependencies.
  # The key `openjdk@${java.version}` will be added automatically if not defined.
  # 
  # key in symbol format
  # mapped as `depends_on :key1 => "value1"`
  dependencies.":key1" = "value1"
  # plain key
  # mapped as `depends_on "key2" => "value2"`
  dependencies.key2 = "value2"
  # key in symbol format without value
  # mapped as `depends_on :key3`
  dependencies.":key3" = "null"
  # plain key without value
  # mapped as `depends_on "key4"`
  dependencies.key4 = "null"

  # Additional properties used when evaluating templates.
  #  
  extraProperties.foo = "bar"
  # Key will be capitalized and prefixed with `brew`, i.e, `brewFoo`.

  # Git author used to commit to the tap repository.

  # Name used when authoring commits.
  # If left undefined, will use the releaser's commit name.
  # 
  commitAuthor.name = "jreleaserbot"

  # E-mail used when authoring commits.
  # If left undefined, will use the releaser's commit email.
  # 
  commitAuthor.email = "jreleaser@kordamp.org"

  # Git repository to push the formula to.
  # Defaults are shown.

  # The owner of the tap repository.
  # Defaults to the same owner as the release repository.
  # 
  tap.owner = "duke"

  # The name of the tap repository.
  # Defaults to `homebrew-tap`.
  # 
  tap.name = "homebrew-tap"

  # Username used for authoring commits. Must have write access to the tap repository.
  # Defaults to the same username as the release repository.
  # 
  tap.username = "duke"

  # Password or OAuth token with write access to the tap repository.
  # If left unspecified, the `JRELEASER_HOMEBREW_${GIT}_TOKEN`
  # environment variable must be defined.
  #  
  tap.token = "__DO_NOT_SET_HERE__"
{
  // 
  "packagers": {
    // 
    "brew": {
      // Enables or disables Homebrew.
      // Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
      // Defaults to `NEVER`.
      // 
      "active": "ALWAYS",

      // Directory with file templates used to prepare the Homebrew distribution.
      // Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
      // If specified, path must exist.
      // 
      "templateDirectory": "path/to/brew/templates",

      // The class name of the generated formula.
      // If left unspecified, will use `{{projectNameCapitalized}}`.
      //  
      "formulaName": "App",

      // A map of Homebrew dependencies.
      // The key `openjdk@${java.version}` will be added automatically if not defined.
      // 
      "dependencies": {
        // key in symbol format
        // mapped as `depends_on :key1 => "value1"`
        ":key1": "value1",

        // plain key
        // mapped as `depends_on "key2" => "value2"`
        "key2": "value2",

        // key in symbol format without value
        // mapped as `depends_on :key3`
        ":key3": "null",

        // plain key without value
        // mapped as `depends_on "key4"`
        "key4": "null"
      },

      // Additional properties used when evaluating templates.
      //  
      "extraProperties": {
        // Key will be capitalized and prefixed with `brew`, i.e, `brewFoo`.
        "foo": "bar"
      },

      // Git author used to commit to the tap repository.
      // 
      "commitAuthor": {
        // Name used when authoring commits.
        // Defaults to `jreleaserbot`.
        // 
        "name": "jreleaserbot",

        // E-mail used when authoring commits.
        // Defaults to `jreleaser@kordamp.org`.
        // 
        "email": "jreleaser@kordamp.org"
      },

      // Git repository to push the formula to.
      // Defaults are shown.
      // 
      "tap": {

        // The owner of the tap repository.
        // Defaults to the same owner as the release repository.
        // 
        "owner": "duke",

        // The name of the tap repository.
        // Defaults to `homebrew-tap`.
        // 
        "name": "homebrew-tap",

        // Username used for authoring commits. Must have write access to the tap repository.
        // Defaults to the same username as the release repository.
        // 
        "username": "duke",

        // Password or OAuth token with write access to the tap repository.
        // If left unspecified, the `JRELEASER_HOMEBREW_${GIT}_TOKEN`
        // environment variable must be defined.
        //  
        "token": "__DO_NOT_SET_HERE__"
      }
    }
  }
}
<jreleaser>
  <!--
    
  -->
  <packagers>
    <!--
      
    -->
    <brew>
      <!--
        Enables or disables Homebrew.
        Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
        Defaults to `NEVER`.
        
      -->
      <active>ALWAYS</active>

      <!--
        Directory with file templates used to prepare the Homebrew distribution.
        Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
        If specified, path must exist.
        
      -->
      <templateDirectory>>path/to/brew/templates</templateDirectory>

      <!--
        The class name of the generated formula.
        If left unspecified, will use `{{projectNameCapitalized}}`.
         
      -->
      <formulaName>App</formulaName>

      <!--
        A map of Homebrew dependencies.
        The key `openjdk@${java.version}` will be added automatically if not defined.
        
      -->
      <dependencies>
        <!--
          key in symbol format
          mapped as `depends_on :key1 => "value1"`
        -->
        <dependency>
          <key>:key1</key>
          <value>value1</value>
        </dependency>

        <!--
          plain key
          mapped as `depends_on "key2" => "value2"`
        -->
        <dependency>
          <key>key2</key>
          <value>value2</value>
        </dependency>

        <!--
          key in symbol format without value
          mapped as `depends_on :key3`
        -->
        <dependency>
          <key>:key3</key>
        </dependency>

        <!--
          plain key without value
          mapped as `depends_on "key4"`
        -->
        <dependency>
          <key>key4</key>
        </dependency>
      </dependencies>

      <!--
        Additional properties used when evaluating templates.
         
      -->
      <extraProperties>
        <!--
          Key will be capitalized and prefixed with `brew`, i.e, `brewFoo`.
        -->
        <foo>bar</foo>
      </extraProperties>

      <!--
        Git author used to commit to the repository.
        
      -->
      <commitAuthor>

        <!--
           Name used when authoring commits.
          Defaults to `jreleaserbot`.
          
        -->
        <name>jreleaserbot</name>

        <!--
          E-mail used when authoring commits.
          Defaults to `jreleaser@kordamp.org`.
          
        -->
        <email>jreleaser@kordamp.org</email>
      </commitAuthor>

      <!--
        Git repository to push the formula to.
        Defaults are shown.
        
      -->
      <tap>

        <!--
          The owner of the tap repository.
          Defaults to the same owner as the release repository.
          
        -->
        <owner>duke</owner>

        <!--
          The name of the tap repository.
          Defaults to `homebrew-tap`.
          
        -->
        <name>homebrew-tap</name>

        <!--
          Username used for authoring commits. Must have write access to the tap repository.
          Defaults to the same username as the release repository.
          
        -->
        <username>duke</username>

        <!--
          Password or OAuth token with write access to the tap repository.
          If left unspecified, the `JRELEASER_HOMEBREW_${GIT}_TOKEN`
          environment variable must be defined.
           
        -->
        <token>__DO_NOT_SET_HERE__</token>
      </tap>
    </brew>
  </packagers>
</jreleaser>
jreleaser {
  // 
  packagers {
    // 
    brew {
      // Enables or disables Homebrew.
      // Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
      // Defaults to `NEVER`.
      // 
      active = 'ALWAYS'

      // Directory with file templates used to prepare the Homebrew distribution.
      // Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
      // If specified, path must exist.
      // 
      templateDirectory = 'path/to/brew/templates'

      // The class name of the generated formula.
      // If left unspecified, will use `{{projectNameCapitalized}}`.
      //  
      formulaName = 'App'

      // A map of Homebrew dependencies.
      // The key `openjdk@${java.version}` will be added automatically if not defined.
      // 
      dependencies {
        // key in symbol format
        // mapped as `depends_on :key1 => "value1"`
        addDepencency(':key1', 'value1')

        // plain key
        // mapped as `depends_on "key2" => "value2"`
        addDepencency('key2', 'value2')

        // key in symbol format without value
        // mapped as `depends_on :key3`
        addDependency(':key3')

        // plain key without value
        // mapped as `depends_on "key4"`
        addDependency('key4')
      }

      // Additional properties used when evaluating templates.
      // Key will be capitalized and prefixed with `brew`, i.e, `brewFoo`.
      //  
      extraProperties.put('foo', 'bar')

      // Git author used to commit to the tap repository.
      // 
      commitAuthor {
        // Name used when authoring commits.
        // If left undefined, will use the releaser's commit name.
        // 
        name = 'jreleaserbot'

        // E-mail used when authoring commits.
        // If left undefined, will use the releaser's commit email.
        // 
        email = 'jreleaser@kordamp.org'
      }

      // Git repository to push the formula to.
      // Defaults are shown.
      // 
      tap {

        // The owner of the tap repository.
        // Defaults to the same owner as the release repository.
        // 
        owner = 'duke'

        // The name of the tap repository.
        // Defaults to `homebrew-tap`.
        // 
        name = 'homebrew-tap'

        // Username used for authoring commits. Must have write access to the tap repository.
        // Defaults to the same username as the release repository.
        // 
        username = 'duke'

        // Password or OAuth token with write access to the tap repository.
        // If left unspecified, the `JRELEASER_HOMEBREW_${GIT}_TOKEN`
        // environment variable must be defined.
        //  
        token = '__DO_NOT_SET_HERE__'
      }
    }
  }
}

Template files may be initialized using the template command.

The tap token environment variable must match with the chosen Release service, that is, it must be one of [JRELEASER_HOMEBREW_GITHUB_TOKEN, JRELEASER_HOMEBREW_GITLAB_TOKEN, JRELEASER_HOMEBREW_GITEA_TOKEN].
Formula names must be unique!

Assuming that the current version is 1.2.3, and a distribution named app, the above configuration will generate a app.rb formula in the duke/homebrew-tap repository:

class App < Formula
  desc "Sample app"
  homepage "https://acme.com/app"
  version "1.2.3"
  url "https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.zip"
  sha256 "812121a64bbd3f49286f7b0be3c9209068f71fcf9541f313708979602e8de466"
  license "Apache-2.0"

  bottle :unneeded

  depends_on "openjdk@8"

  def install
    libexec.install Dir["*"]
    bin.install_symlink "#{libexec}/bin/app"
  end

  test do
    output = shell_output("#{bin}/app --version")
    assert_match "1.2.3", output
  end
end
JReleaser does not generate a valid homebrew-core formula. The generated formulas are meant to be published as homebrew taps, and in their current form will not be accepted in any of the official homebrew repositories.