Chocolatey

Publishes packages to https://chocolatey.org.

At the moment, only artifacts with .zip extension may be packaged with Chocolatey.
Local publication of packages is currently not supported. Please set remoteBuild to true and trigger a build on CI. Local publication will be added at a later release.
Snapshots are not supported.

Legend:

  • required

  • optional

  • may use environment variable

  • accepts Name Templates

  • YAML

  • TOML

  • JSON

  • Maven

  • Gradle

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

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

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

    # The username that can publish Chocolatey packages.
    # If left unspecified, the release owner will be used.
    # 
    username: duke

    # Whether to build the package on a remote server or locally.
    # Defaults to `false`.
    # 
    remoteBuild: false

    # Git author used to commit to the bucket 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 manifest to.
    # Defaults are shown.
    # 
    bucket:

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

      # The name of the bucket repository.
      # Defaults to `chocolatey-bucket`.
      # 
      name: chocolatey-bucket

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

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

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

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

  # The username that can publish Chocolatey packages.
  # If left unspecified, the release owner will be used.
  # 
  username = "duke"

  # Whether to build the package on a remote server or locally.
  # Defaults to `false`.
  # 
  remoteBuild = false

  # Git author used to commit to the bucket 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 manifest to.
  # Defaults are shown.

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

  # The name of the bucket repository.
  # Defaults to `chocolatey-bucket`.
  # 
  bucket.name = "chocolatey-bucket"

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

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

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

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

      // The username that can publish Chocolatey packages.
      // If left unspecified, the release owner will be used.
      // 
      "username": "duke",

      // Whether to build the package on a remote server or locally.
      // Defaults to `false`.
      // 
      "remoteBuild": false,

      // Git author used to commit to the bucket 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 manifest to.
      // Defaults are shown.
      // 
      "bucket": {

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

        // The name of the bucket repository.
        // Defaults to `chocolatey-bucket`.
        // 
        "name": "chocolatey-bucket",

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

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

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

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

      <!--
        The username that can publish Chocolatey packages.
        If left unspecified, the release owner will be used.
        
      -->
      <username>duke</username>

      <!--
        Whether to build the package on a remote server or locally.
        Defaults to `false`.
        
      -->
      <remoteBuild>false</remoteBuild>

      <!--
        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 manifest to.
        Defaults are shown.
        
      -->
      <bucket>

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

        <!--
          The name of the bucket repository.
          Defaults to `chocolatey-bucket`.
          
        -->
        <name>chocolatey-bucket</name>

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

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

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

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

      // The username that can publish Chocolatey packages.
      // If left unspecified, the release owner will be used.
      // 
      username = 'duke'

      // Whether to build the package on a remote server or locally.
      // Defaults to `false`.
      // 
      remoteBuild = false

      // Git author used to commit to the bucket 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 manifest to.
      // Defaults are shown.
      // 
      bucket {

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

        // The name of the bucket repository.
        // Defaults to `chocolatey-bucket`.
        // 
        name = 'chocolatey-bucket'

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

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

Template files may be initialized using the template command.

The bucket token environment variable must match with the chosen Release service, that is, it must be one of [JRELEASER_CHOCOLATEY_GITHUB_TOKEN, JRELEASER_CHOCOLATEY_GITLAB_TOKEN, JRELEASER_CHOCOLATEY_GITEA_TOKEN].

Assuming that the current version is 1.2.3, and a distribution named app, the above configuration will generate the following files in out/jreleaser/app/prepare, which will be published to duke/chocolatey-bucket/app

app.nuspec
<?xml version="1.0" encoding="utf-8"?>
<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. -->
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
  <metadata>
    <!-- required -->
    <id>app</id>
    <version>1.2.3</version>
    <authors>Duke</authors>
    <description>Sample app</description>
    <!-- optional -->
    <title>app</title>
    <projectUrl>https://acme.com/app</projectUrl>
    <license type="expression">Apache-2.0</license>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <tags></tags>
    <summary>Sample app</summary>
    <releaseNotes>https://github.com/duke/app/releases/tag/v1.2.3</releaseNotes>
  </metadata>
  <files>
    <file src="tools\**" target="tools" />
  </files>
</package>
tools/chocolateyinstall.ps1
$tools = Split-Path $MyInvocation.MyCommand.Definition
$package = Split-Path $tools
$app_home = Join-Path $package 'app-1.2.3'
$app_bat = Join-Path $app_home 'bin/app.cmd'

Install-ChocolateyZipPackage `
    -PackageName 'app' `
    -Url 'https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.zip' `
    -Checksum '812121a64bbd3f49286f7b0be3c9209068f71fcf9541f313708979602e8de466' `
    -ChecksumType 'sha256' `
    -UnzipLocation $package

Install-BinFile -Name 'app' -Path $app_bat
tools/chocolateyuninstall.ps1
$tools = Split-Path $MyInvocation.MyCommand.Definition
$package = Split-Path $tools
$app_home = Join-Path $package 'app-1.2.3'
$app_bat = Join-Path $app_home 'bin/app.cmd'

Uninstall-BinFile -Name 'app' -Path $app_bat