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

    # 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

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

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

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

    # 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 formula 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-${repoOwner}`.
      # 
      name: scoop-duke

      # 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_SCOOP_${GIT}_TOKEN`
      # environment variable must be defined.
      #  
      token: __DO_NOT_SET_HERE__
# 
[packagers.scoop]
  # Enables or disables Scoop.
  # Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
  # Defaults to `NEVER`.
  # 
  active = "ALWAYS"

  # 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"

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

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

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

  # 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 formula to.

  # 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-${repoOwner}`.
  # 
  bucket.nam = "scoop-duke"

  # 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_SCOOP_${GIT}_TOKEN`
  # environment variable must be defined.
  #  
  bucket.token = "__DO_NOT_SET_HERE__"
{
  // 
  "packagers": {
    // 
    "scoop": {
      // Enables or disables Scoop.
      // Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
      // Defaults to `NEVER`.
      // 
      "active": "ALWAYS",

      // 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",

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

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

      // URL used to download a new version.
      // Defaults to the releaser's `downloadUrlFormat`.
      //  
      "autoupdateUrl": "https://host/path",

      // 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 formula 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-${repoOwner}`.
        // 
        "name": "scoop-duke",

        // 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_SCOOP_${GIT}_TOKEN`
        // environment variable must be defined.
        //  
        "token": "__DO_NOT_SET_HERE__"
      }
    }
  }
}
<jreleaser>
  <!--
    
  -->
  <packagers>
    <!--
      
    -->
    <scoop>
      <!--
        Enables or disables Scoop.
        Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
        Defaults to `NEVER`.
        
      -->
      <active>ALWAYS</active>

      <!--
        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>

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

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

      <!--
        URL used to download a new version.
        Defaults to the releaser's `downloadUrlFormat`.
         
      -->
      <autoupdateUrl>https://host/path</autoupdateUrl>

      <!--
        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.
        
      -->
      <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-${repoOwner}`.
          
        -->
        <name>scoop-duke</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_SCOOP_${GIT}_TOKEN`
          environment variable must be defined.
           
        -->
        <token>__DO_NOT_SET_HERE__</token>
      </bucket>
    </scoop>
  </packagers>
</jreleaser>
jreleaser {
  // 
  packagers {
    // 
    scoop {
      // Enables or disables Scoop.
      // Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
      // Defaults to `NEVER`.
      // 
      active = 'ALWAYS'

      // 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'

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

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

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

      // 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 formula 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-${repoOwner}`.
        // 
        name = 'scoop-duke'

        // 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_SCOOP_${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_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.