Scoop

JReleaser can generate and publish a Scoop App Manifest into a repository that you have access to.

The scoop section specifies how the manifest should be created.

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

Legend:

  • required

  • optional

  • may use environment variable

  • accepts Name Templates

  • YAML

  • TOML

  • JSON

  • Maven

  • Gradle

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

    # Let the release continue if the packager fails.
    # Defaults to `false`.
    # 
    continueOnError: true

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

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

    # Git author used to commit to the 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 `scoop-duke`.
      # 
      name: scoop-duke

      # The target branch to use.
      # May define a `JRELEASER_SCOOP_${GIT}_BRANCH` environment variable instead.
      # Defaults to the branch pointed by HEAD.
      #  
      branch: HEAD

      # Username used for authoring commits. Must have write access to the bucket repository.
      # If left unspecified, the `JRELEASER_SCOOP_${GIT}_USERNAME`
      # environment variable must be defined.
      # 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_SCOOP_${GIT}_TOKEN`
      # environment variable must be defined.
      #  
      token: __DO_NOT_SET_HERE__

    # URL used to check the latest version.
    # Defaults to the releaser's `latestReleaseUrl`.
    #  
    checkverUrl: https://host/path

    # URL used to download a new version.
    # Defaults to the releaser's `downloadUrl`.
    #  
    autoupdateUrl: https://host/path
# 
[packagers.scoop]
  # Enables or disables Scoop.
  # Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
  # Defaults to `NEVER`.
  # 
  active = "ALWAYS"

  # Let the release continue if the packager fails.
  # Defaults to `false`.
  # 
  continueOnError = true

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

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

  # Git author used to commit to the repository.

  # Name used when authoring commits.
  # Defaults to `jreleaserbot`.
  # 
  commitAuthor.name = "jreleaserbot"

  # E-mail used when authoring commits.
  # Defaults to `jreleaser@kordamp.org`.
  # 
  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 `scoop-duke`.
  # 
  bucket.name = "scoop-duke"

  # The target branch to use.
  # May define a `JRELEASER_SCOOP_${GIT}_BRANCH` environment variable instead.
  # Defaults to the branch pointed by HEAD.
  #  
  bucket.branch = "HEAD"

  # Username used for authoring commits. Must have write access to the bucket repository.
  # If left unspecified, the `JRELEASER_SCOOP_${GIT}_USERNAME`
  # environment variable must be defined.
  # 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_SCOOP_${GIT}_TOKEN`
  # environment variable must be defined.
  #  
  bucket.token = "__DO_NOT_SET_HERE__"

  # URL used to check the latest version.
  # Defaults to the releaser's `latestReleaseUrl`.
  #  
  checkverUrl = "https://host/path"

  # URL used to download a new version.
  # Defaults to the releaser's `downloadUrl`.
  #  
  autoupdateUrl = "https://host/path"
{
  // 
  "packagers": {
    // 
    "scoop": {
      // Enables or disables Scoop.
      // Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
      // Defaults to `NEVER`.
      // 
      "active": "ALWAYS",

      // Let the release continue if the packager fails.
      // Defaults to `false`.
      // 
      "continueOnError": true,

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

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

      // Git author used to commit to the 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 `scoop-duke`.
        // 
        "name": "scoop-duke",

        // The target branch to use.
        // May define a `JRELEASER_SCOOP_${GIT}_BRANCH` environment variable instead.
        // Defaults to the branch pointed by HEAD.
        //  
        "branch": "HEAD",

        // Username used for authoring commits. Must have write access to the bucket repository.
        // If left unspecified, the `JRELEASER_SCOOP_${GIT}_USERNAME`
        // environment variable must be defined.
        // 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_SCOOP_${GIT}_TOKEN`
        // environment variable must be defined.
        //  
        "token": "__DO_NOT_SET_HERE__"
      },

      // URL used to check the latest version.
      // Defaults to the releaser's `latestReleaseUrl`.
      //  
      "checkverUrl": "https://host/path",

      // URL used to download a new version.
      // Defaults to the releaser's `downloadUrl`.
      //  
      "autoupdateUrl": "https://host/path"
    }
  }
}
<jreleaser>
  <!--
    
  -->
  <packagers>
    <!--
      
    -->
    <scoop>
      <!--
        Enables or disables Scoop.
        Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
        Defaults to `NEVER`.
        
      -->
      <active>ALWAYS</active>

      <!--
        Let the release continue if the packager fails.
        Defaults to `false`.
        
      -->
      <continueOnError>true</continueOnError>

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

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

      <!--
        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 `scoop-duke`.
          
        -->
        <name>scoop-duke</name>

        <!--
          The target branch to use.
          May define a `JRELEASER_SCOOP_${GIT}_BRANCH`` environment variable instead.
          Defaults to the branch pointed by HEAD.
           
        -->
        <branch>HEAD</branch>

        <!--
          Username used for authoring commits. Must have write access to the bucket repository.
          If left unspecified, the `JRELEASER_SCOOP_${GIT}_USERNAME`
          environment variable must be defined.
          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_SCOOP_${GIT}_TOKEN`
          environment variable must be defined.
           
        -->
        <token>__DO_NOT_SET_HERE__</token>
      </bucket>

      <!--
        URL used to check the latest version.
        Defaults to the releaser's `latestReleaseUrl`.
         
      -->
      <checkverUrl>https://host/path</checkverUrl>

      <!--
        URL used to download a new version.
        Defaults to the releaser's `downloadUrl`.
         
      -->
      <autoupdateUrl>https://host/path</autoupdateUrl>
    </scoop>
  </packagers>
</jreleaser>
jreleaser {
  // 
  packagers {
    // 
    scoop {
      // Enables or disables Scoop.
      // Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
      // Defaults to `NEVER`.
      // 
      active = 'ALWAYS'

      // Let the release continue if the packager fails.
      // Defaults to `false`.
      // 
      continueOnError = true

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

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

      // Git author used to commit to the 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 `scoop-duke`.
        // 
        name = 'scoop-duke'

        // The target branch to use.
        // May define a `JRELEASER_BRANCH` environment variable instead.
        // Defaults to the branch pointed by HEAD.
        //  
        branch = 'HEAD'

        // Username used for authoring commits. Must have write access to the bucket repository.
        // If left unspecified, the `JRELEASER_SCOOP_${GIT}_USERNAME`
        // environment variable must be defined.
        // 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_SCOOP_${GIT}_TOKEN`
        // environment variable must be defined.
        //  
        token = '__DO_NOT_SET_HERE__'
      }

      // URL used to check the latest version.
      // Defaults to the releaser's `latestReleaseUrl`.
      //  
      checkverUrl = 'https://host/path'

      // URL used to download a new version.
      // Defaults to the releaser's `downloadUrl`.
      //  
      autoupdateUrl = 'https://host/path'
    }
  }
}

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_SCOOP_GITHUB_TOKEN, JRELEASER_SCOOP_GITLAB_TOKEN, JRELEASER_SCOOP_GITEA_TOKEN].

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

{
  "homepage": "https://acme.com/app",
  "description": "Sample app",
  "version": "1.2.3",
  "license": "Apache-2.0",
  "url": "https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.zip",
  "hash": "sha256:812121a64bbd3f49286f7b0be3c9209068f71fcf9541f313708979602e8de466",
  "extract_dir": "app-1.2.3",
  "env_add_path": "bin",
  "suggest": {
    "JDK": [
      "java/oraclejdk",
      "java/openjdk"
    ]
  },
  "checkver": {
    "url": "https://github.com/duke/app/releases/latest",
    "re": "v([\\d.]+).zip"
  },
  "autoupdate": {
    "url": "https://github.com/duke/app/releases/download/v1.2.3/app-$version.zip",
    "extract_dir": "app-$version",
    "hash": {
      "url": "$url.sha256"
    }
  }
}

Your users can then install your app by doing:

scoop bucket add duke https://github.com/duke/scoop-duke.git
scoop install app
GitLab does not yet offer an URL that resolves to a latest release. You may need to adapt the value of checkverUrl or update the tool template by removing that section. Keep an eye on https://gitlab.com/gitlab-org/gitlab/-/issues/16821.