Debian

Creates .deb packages from archives and files.

Configuration

Legend:

  • required

  • optional

  • may use environment variable

  • accepts Name Templates

  • YAML

  • TOML

  • JSON

  • Maven

  • Gradle

# 
assemble:
  # 
  deb:
    # Assemblers require a name.
    # 
    app:

      # Enables or disables the assembler.
      # Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
      # Defaults to `NEVER`.
      #  
      active: ALWAYS

      # Export the assembled artifacts as a matching named distribution.
      # Defaults to `true`.
      # 
      exported: true

      # The stereotype of this assembler.
      # Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
      # Defaults to `#{project.stereotype}`.
      # 
      stereotype: CLI

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

      # 
      platform:
        # Key value pairs.
        # Keys match a full platform or an os.name, os.arch.
        # Same rules apply as in Platform.
        # 
        replacements:
          osx-x86_64: mac
          aarch_64: aarch64
          x86_64: amd64
          linux_musl: alpine

      # Name of the executable launcher.
      # If left undefined, will use `#{assembler.name}`.
      # 
      executable: app

      # Target architexture.
      # Valid values as defined by `dpkg-architecture -L` such as `all`, `aamd64`, etc.
      # 
      architecture: all

      # Target path where files will be installed.
      #  
      installationPath: '/opt/{{packageName}}'

      # References assembled artifacts from another assembler.
      # 
      assemblerRef: 'app-archive'

      # Defines values for control fields
      # See https://www.debian.org/doc/debian-policy/ch-controlfields.html
      # 
      control:

        # Name of the package.
        # Defaults to `#{assembler.name}`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-package
        # 
        packageName: app

        # Package version.
        # Defaults to `#{project.version}`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-version
        # 
        packageVersion: 1.0.0

        # Package revision.
        # Defaults to `#{project.version}`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-version
        # 
        packageRevision: 1

        # Virtual package name.
        # Defaults to `#{assembler.name}`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#package-interrelationship-fields-depends-pre-depends-recommends-suggests-breaks-conflicts-provides-replaces-enhances
        # 
        provides: app

        # The package maintainer’s name and email address.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-maintainer
        # 
        maintainer: Duke <duke@acme.com>

        # Specifies an application area into which the package has been classified.
        # Defaults to `misc`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#section
        # 
        section: devel

        # How important it is that the user have the package installed.
        # Defaults to `optional`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#priority
        # 
        priority: optional

        # Is it an essential (non-removable) package or not.
        # Defaults to `false`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#essential
        # 
        essential: true

        # The package's description.
        # Defaults to `#{project.longDescription}`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
        # 
        description: Sample application

        # The URL of the web site for this package.
        # Defaults to `#{project.links.website}`.
        # https://www.debian.org/doc/debian-policy/ch-controlfields.html#homepage
        # 
        homepage: https://github.com/duke/app

        # Additional source packages used to build the binary.
        # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-built-using
        # 
        builtUsing: 'gcc-4.6 (= 4.6.0-11)'

        # Dependencies may be defined as a list of packages
        # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
        # 
        depends:
          - foo
        preDepends:
          - bar
        recommends:
          - foobar
        suggests:
          - foobar
        enhances:
          - foofy
        breaks:
          - foofoo
        conflicts:
          - barbar

      # Directory with file templates used to prepare the assembler.
      # Defaults to `src/jreleaser/assemblers/#{distribution.name}/deb`.
      # If specified, path must exist.
      # 
      templateDirectory: path/to/deb/templates

      # List of template files to be skipped.
      # Value may be an exact match or a regex.
      # 
      skipTemplates:
        - README.md.tpl

      # Defines a list of additional files as artifacts.
      # These files will be added to the assembled archive.
      #  
      artifacts:
        - path: path/to/file
        - path: path/to/another_file
          transform: path/inside/archive
        - path: path/to/platform/specific/file
          platform: osx-x86_64

      # Defines a list of additional files as globs.
      # These files will be added to the assembled archive.
      # 
      files:
          # The pattern to use.
          # May use glob or regex pattern syntax.
          #  
        - pattern: path/to/**/*.txt

      # 
      fileSets:
          # The input directory to copy files from.
          #  
        - input: path/to/input/directory

          # The target path inside the archive.
          # If left undefined, defaults to the root of the archive.
          #  
          output: path/to/archive/entry

          # Fail if the given `input` does not exist.
          # Defaults to `true`.
          # 
          failOnMissingInput: false

          # A set of files and directory to include.
          #  
          includes:
            - 'name_or_regex'

          # A set of files and directory to exclude.
          #  
          excludes:
            - 'name_or_regex'

          # Additional properties used when evaluating templates.
          #  
          extraProperties:
            # Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
            foo: bar
# Assemblers require a name.
# 
[assemble.deb.app]

  # Enables or disables the assembler.
  # Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
  # Defaults to `NEVER`.
  #  
  active = "ALWAYS"

  # Export the assembled artifacts as a matching named distribution.
  # Defaults to `true`.
  # 
  exported = true

  # The stereotype of this assembler.
  # Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
  # Defaults to `#{project.stereotype}`.
  # 
  stereotype = "CLI"

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

  # Key value pairs.
  # Keys match a full platform or an os.name, os.arch.
  # Same rules apply as in Platform.
  # 
  [assemble.deb.app.platform.replacements]
    osx-x86_64 = "mac"
    aarch_64 = "aarch64"
    x86_64 = "amd64"
    linux_musl = "alpine"

  # Name of the executable launcher.
  # If left undefined, will use `#{assembler.name}`.
  # 
  executable = "app"

  # Target architexture.
  # Valid values as defined by `dpkg-architecture -L` such as `all`, `aamd64`, etc.
  # 
  architecture = "all"

  # Target path where files will be installed.
  #  
  installationPath = "/opt/{{packageName}}"

  # References assembled artifacts from another assembler.
  # 
  assemblerRef = "app-archive"

  # Defines values for control fields
  # See https://www.debian.org/doc/debian-policy/ch-controlfields.html

  # Name of the package.
  # Defaults to `#{assembler.name}`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-package
  # 
  control.packageName = "app"

  # Package version.
  # Defaults to `#{project.version}`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-version
  # 
  control.packageVersion = "1.0.0"

  # Package revision.
  # Defaults to `#{project.version}`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-version
  # 
  control.packageRevision = 1

  # Virtual package name.
  # Defaults to `#{assembler.name}`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#package-interrelationship-fields-depends-pre-depends-recommends-suggests-breaks-conflicts-provides-replaces-enhances
  # 
  control.provides = "app"

  # The package maintainer’s name and email address.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-maintainer
  # 
  control.maintainer = "Duke <duke@acme.com>"

  # Specifies an application area into which the package has been classified.
  # Defaults to `misc`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#section
  # 
  control.section = "devel"

  # How important it is that the user have the package installed.
  # Defaults to `optional`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#priority
  # 
  control.priority = "optional"

  # Is it an essential (non-removable) package or not.
  # Defaults to `false`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#essential
  # 
  control.essential = true

  # The package's description.
  # Defaults to `#{project.longDescription}`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
  # 
  control.description = "Sample application"

  # The URL of the web site for this package.
  # Defaults to `#{project.links.website}`.
  # https://www.debian.org/doc/debian-policy/ch-controlfields.html#homepage
  # 
  control.homepage = "https://github.com/duke/app"

  # Additional source packages used to build the binary.
  # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-built-using
  # 
  control.builtUsing = "gcc-4.6 (= 4.6.0-11)"

  # Dependencies may be defined as a list of packages
  # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
  # 
  control.depends = ["foo"]
  control.preDepends = ["bar"]
  control.recommends = ["foobar"]
  control.suggests = ["foobar"]
  control.enhances = ["foofy"]
  control.breaks = ["foofoo"]
  control.conflicts = ["barbar"]

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

  # List of template files to be skipped.
  # Value may be an exact match or a regex.
  # 
  skipTemplates = [ "README.md.tpl" ]

  # Defines a list of additional files as artifacts.
  # These files will be added to the assembled archive.
  #  
  [[assemble.deb.app.artifacts]]
    path = "path/to/file"
  [[assemble.deb.app.artifacts]]
    path = "path/to/another_file"
    transform = "path/inside/archive"
  [[assemble.deb.app.artifacts]]
    path = "path/to/platform/specific/file"
    platform = "osx-x86_64"

  # Defines a list of additional files as globs.
  # These files will be added to the assembled archive.
  # 
  [[assemble.deb.app.files]]
    # The pattern to use.
    # May use glob or regex pattern syntax.
    #  
    pattern = "path/to/**/*.txt"

  # 
  [[assemble.deb.app.fileSets]]
    # The input directory to copy files from.
    #  
    input = "path/to/input/directory"

    # The target path inside the archive.
    # If left undefined, defaults to the root of the archive.
    #  
    output = "path/to/archive/entry"

    # Fail if the given `input` does not exist.
    # Defaults to `true`.
    # 
    failOnMissingInput = false

    # A set of files and directory to include.
    #  
    includes = ["name_or_regex"]

    # A set of files and directory to exclude.
    #  
    excludes = ["name_or_regex"]

    # Additional properties used when evaluating templates.
    #  
    [[assemble.deb.app.fileSets.extraProperties]]
      # Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
      foo: bar
{
  // 
  "assemble": {
    // 
    "deb": {
      // Assemblers require a name.
      // 
      "app": {

        // Enables or disables the assembler.
        // Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
        // Defaults to `NEVER`.
        //  
        "active": "ALWAYS",

        // Export the assembled artifacts as a matching named distribution.
        // Defaults to `true`.
        // 
        "exported": true,

        // The stereotype of this assembler.
        // Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
        // Defaults to `#{project.stereotype}`.
        // 
        "stereotype": "CLI",

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

        // 
        platform: {
          // Key value pairs.
          // Keys match a full platform or an os.name, os.arch.
          // Same rules apply as in Platform.
          // 
          "replacements": {
            "osx-x86_64": "mac",
            "aarch_64": "aarch64",
            "x86_64": "amd64",
            "linux_musl": "alpine"
          }
        },

        // Name of the executable launcher.
        // If left undefined, will use `#{assembler.name}`.
        // 
        "executable": "app",

        // Target architexture.
        // Valid values as defined by `dpkg-architecture -L` such as `all`, `aamd64`, etc.
        // 
        "architecture": "all",

        // Target path where files will be installed.
        //  
        "installationPath": "/opt/{{packageName}}",

        // References assembled artifacts from another assembler.
        // 
        "assemblerRef": "app-archive",

        // Defines values for control fields
        // See https://www.debian.org/doc/debian-policy/ch-controlfields.html
        // 
        "control": {

          // Name of the package.
          // Defaults to `//{assembler.name}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-package
          // 
          "packageName": "app",

          // Package version.
          // Defaults to `//{project.version}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-version
          // 
          "packageVersion": "1.0.0",

          // Package revision.
          // Defaults to `//{project.version}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-version
          // 
          "packageRevision": "1",

          // Virtual package name.
          // Defaults to `//{assembler.name}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//package-interrelationship-fields-depends-pre-depends-recommends-suggests-breaks-conflicts-provides-replaces-enhances
          // 
          "provides": "app",

          // The package maintainer’s name and email address.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-maintainer
          // 
          "maintainer": "Duke <duke@acme.com>",

          // Specifies an application area into which the package has been classified.
          // Defaults to `misc`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//section
          // 
          "section": "devel",

          // How important it is that the user have the package installed.
          // Defaults to `optional`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//priority
          // 
          "priority": "optional",

          // Is it an essential (non-removable) package or not.
          // Defaults to `false`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//essential
          // 
          "essential": true,

          // The package's description.
          // Defaults to `//{project.longDescription}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//description
          // 
          "description": "Sample application",

          // The URL of the web site for this package.
          // Defaults to `//{project.links.website}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//homepage
          // 
          "homepage": "https://github.com/duke/app"

          // Additional source packages used to build the binary.
          // https://www.debian.org/doc/debian-policy/ch-relationships.html//s-built-using
          // 
          "builtUsing": "gcc-4.6 (= 4.6.0-11)",

          // Dependencies may be defined as a list of packages
          // https://www.debian.org/doc/debian-policy/ch-relationships.html//s-binarydeps
          // 
          "depends": ["foo"],
          "preDepends": ["bar"],
          "recommends": ["foobar"],
          "suggests": ["foobar"],
          "enhances": ["foofy"],
          "breaks": ["foofoo"],
          "conflicts": ["barbar"]
        },

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

        // List of template files to be skipped.
        // Value may be an exact match or a regex.
        // 
        "skipTemplates": [
          "README.md.tpl"
        ],

        // Defines a list of additional files as artifacts.
        // These files will be added to the assembled archive.
        //  
        "artifacts": [
          {
            "path": "path/to/file"
          },
          {
            "path": "path/to/another_file",
            "transform": "path/inside/archive"
          },
          {
            "path": "path/to/platform/specific/file",
            "platform": "osx-x86_64"
          }
        ]  ,

        // Defines a list of additional files as globs.
        // These files will be added to the assembled archive.
        // 
        "files": [
          {
            // The pattern to use.
            // May use glob or regex pattern syntax.
            //  
            "pattern": "path/to/**/*.txt"
          }
        ],

        // 
        "fileSets": [
          {
            // The input directory to copy files from.
            //  
            "input": "path/to/input/directory",

            // The target path inside the archive.
            // If left undefined, defaults to the root of the archive.
            //  
            "output": "path/to/archive/entry",

            // Fail if the given `input` does not exist.
            // Defaults to `true`.
            // 
            "failOnMissingInput": false,

            // A set of files and directory to include.
            //  
            "includes": ["name_or_regex"],

            // A set of files and directory to exclude.
            //  
            "excludes": ["name_or_regex"],

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

      }
    }
  }
}
<jreleaser>
  <!--
    
  -->
  <assemble>
    <!--
      
    -->
    <deb>
      <!--
        Assemblers require a name.
        
      -->
      <app>
        <!--
          Enables or disables the distribution.
          Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
          Defaults to `ALWAYS`.
           
        -->
        <active>ALWAYS</active>

        <!--
          Export the assembled artifacts as a matching named distribution.
          Defaults to `true`.
          
        -->
        <exported>true</exported>

        <!--
          The stereotype of this assembler.
          Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
          Defaults to `#{project.stereotype}`.
          
        -->
        <stereotype>CLI</stereotype>

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

        <!--
          
        -->
        <platform>

          <!--
            Key value pairs.
            Keys match a full platform or an os.name, os.arch.
            Same rules apply as in Platform.
            
          -->
          <replacements>
            <osx-x86_64>mac</osx-x86_64>
            <aarch_64>aarch64</aarch_64>
            <x86_64>amd64</x86_64>
            <linux_musl>alpine</linux_musl>
          </replacements>
        </platform>

        <!--
          Name of the executable launcher.
          If left undefined, will use `#{assembler.name}`.
          
        -->
        <executable>app</executable>

          Target architexture.
          Valid values as defined by `dpkg-architecture -L` such as `all`, `aamd64`, etc.
          
        <architecture>all</architecture>

          Target path where files will be installed.
           
        <installationPath>/opt/{{packageName}}</installationPath>

          References assembled artifacts from another assembler.
          
        <assemblerRef>app-archive</assemblerRef>

          Defines values for control fields
          See https://www.debian.org/doc/debian-policy/ch-controlfields.html
          
        <control>

            Name of the package.
            Defaults to ` {assembler.name}`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html s-f-package[]
            
          <packageName>ap</packageName>

            Package version.
            Defaults to ` {project.version}`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html s-f-version[]
            
          <packageVersion>1.0.0</packageVersion>

            Package revision.
            Defaults to ` {project.version}`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html s-f-version[]
            
          <packageRevision>1</packageRevision>

            Virtual package name.
            Defaults to ` {assembler.name}`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html package-interrelationship-fields-depends-pre-depends-recommends-suggests-breaks-conflicts-provides-replaces-enhances[]
            
          <provides>app</provides>

            The package maintainer’s name and email address.
            https://www.debian.org/doc/debian-policy/ch-controlfields.html s-f-maintainer[]
            
          <maintainer>Duke &lt;duke@acme.com&gt;</maintainer>

            Specifies an application area into which the package has been classified.
            Defaults to `misc`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html section[]
            
          <section>devel</section>

            How important it is that the user have the package installed.
            Defaults to `optional`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html priority[]
            
          <priority>optional</priority>

            Is it an essential (non-removable) package or not.
            Defaults to `false`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html essential[]
            
          <essential>true</essential>

            The package's description.
            Defaults to ` {project.longDescription}`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html description[]
            
          <description>Sample application</description>

            The URL of the web site for this package.
            Defaults to ` {project.links.website}`.
            link:https://www.debian.org/doc/debian-policy/ch-controlfields.html homepage[]
            
          <homepage>https://github.com/duke/app</homepage>

            Additional source packages used to build the binary.
            link:https://www.debian.org/doc/debian-policy/ch-relationships.html s-built-using[]
            
          <builtUsing>gcc-4.6 (= 4.6.0-11)</builtUsing>

            Dependencies may be defined as a list of packages
            https://www.debian.org/doc/debian-policy/ch-relationships.html s-binarydeps
            
          <depends>
            <dependency>foo</dependency>
          </depends>
          <preDepends>
            <dependency>bar</dependency>
          </preDepends>
          <recommends>
            <dependency>foobar</dependency>
          </recommends>
          <suggests>
            <dependency>foobar</dependency>
          </suggests>
          <enhances>
            <dependency>foofy</dependency>
          </enhances>
          <breaks>
            <dependency>foofoo</dependency>
          </breaks>
          <conflicts>
            <dependency>barbar</dependency>
          </conflicts>
        </control>

        <!--
          Directory with file templates used to prepare the assembler.
          Defaults to `src/jreleaser/assemblers/#{distribution.name}/deb`.
          If specified, path must exist.
          
        -->
        <templateDirectory>path/to/deb/templates</templateDirectory>

        <!--
          List of template files to be skipped.
          Value may be an exact match or a regex.
          
        -->
        <skipTemplates>
          <skipTemplate>README.md.tpl</skipTemplate>
        </skipTemplates>

        <!--
          Defines a list of additional files as artifacts.
          These files will be added to the assembled archive.
           
        -->
        <artifacts>
          <artifact>
            <path>path/to/file</path>
          </artifact>
          <artifact>
            <path>path/to/another_file</path>
            <transform>path/inside/archive</transform>
          </artifact>
          <artifact>
            <path>path/to/platform/specific/file</path>
            <platform>osx-x86_64</platform>
          </artifact>
        </artifacts>

        <!--
          Defines a list of additional files as globs.
          These files will be added to the assembled archive.
          
        -->
        <files>
          <file>
            <!--
              The pattern to use.
              May use glob or regex pattern syntax.
               
            -->
            <pattern>path/to/**/*.txt</pattern>
          </file>
        </files>

        <!--
          
        -->
        <fileSets>
          <fileSet>
            <!--
              The input directory to copy files from.
               
            -->
            <input>path/to/input/directory</input>

            <!--
              The target path inside the archive.
              If left undefined, defaults to the root of the archive.
               
            -->
            <output>path/to/archive/entry</output>

            <!--
              Fail if the given `input` does not exist.
              Defaults to `true`.
              
            -->
            <failOnMissingInput>false</failOnMissingInput>

            <!--
              A set of files and directory to include.
               
            -->
            <includes>
              <include>name_or_regex</include>
            </includes>

            <!--
              A set of files and directory to exclude.
               
            -->
            <excludes>
              <exclude>name_or_regex</exclude>
            </excludes>

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

      </app>
    </deb>
  </assemble>
</jreleaser>
jreleaser {
  // 
  assemble {
    // 
    deb {
      // Assemblers require a name.
      // 
      app {

        // Enables or disables the assembler.
        // Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
        // Defaults to `NEVER`.
        //  
        active = 'ALWAYS'

        // Export the assembled artifacts as a matching named distribution.
        // Defaults to `true`.
        // 
        exported = true

        // The stereotype of this assembler.
        // Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
        // Defaults to `#{project.stereotype}`.
        // 
        stereotype = 'CLI'

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

        // 
        platform {

          // Key value pairs.
          // Keys match a full platform or an os.name, os.arch.
          // Same rules apply as in Platform.
          // 
          replacements = [
            'osx-x86_64': 'mac',
            aarch_64: 'aarch64',
            x86_64: 'amd64',
            linux_musl: 'alpine'
          ]
        }

        // Name of the executable launcher.
        // If left undefined, will use `#{assembler.name}`.
        // 
        executable = 'app'

        // Target architexture.
        // Valid values as defined by `dpkg-architecture -L` such as `all`, `aamd64`, etc.
        // 
        architecture = 'all'

        // Target path where files will be installed.
        //  
        installationPath = '/opt/{{packageName}}'

        // References assembled artifacts from another assembler.
        // 
        assemblerRef = 'app-archive'

        // Defines values for control fields
        // See https://www.debian.org/doc/debian-policy/ch-controlfields.html
        // 
        control {

          // Name of the package.
          // Defaults to `//{assembler.name}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-package
          // 
          packageName = "app"

          // Package version.
          // Defaults to `//{project.version}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-version
          // 
          packageVersion = '1.0.0'

          // Package revision.
          // Defaults to `//{project.version}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-version
          // 
          packageRevision = 1

          // Virtual package name.
          // Defaults to `//{assembler.name}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//package-interrelationship-fields-depends-pre-depends-recommends-suggests-breaks-conflicts-provides-replaces-enhances
          // 
          provides = 'app'

          // The package maintainer’s name and email address.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//s-f-maintainer
          // 
          maintainer = 'Duke <duke@acme.com>'

          // Specifies an application area into which the package has been classified.
          // Defaults to `misc`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//section
          // 
          section = 'devel'

          // How important it is that the user have the package installed.
          // Defaults to `optional`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//priority
          // 
          priority = 'optional'

          // Is it an essential (non-removable) package or not.
          // Defaults to `false`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//essential
          // 
          essential = true

          // The package's description.
          // Defaults to `//{project.longDescription}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//description
          // 
          description = 'Sample application'

          // The URL of the web site for this package.
          // Defaults to `//{project.links.website}`.
          // https://www.debian.org/doc/debian-policy/ch-controlfields.html//homepage
          // 
          homepage = 'https://github.com/duke/app'

          // Additional source packages used to build the binary.
          // https://www.debian.org/doc/debian-policy/ch-relationships.html//s-built-using
          // 
          builtUsing = 'gcc-4.6 (= 4.6.0-11)'

          // Dependencies may be defined as a list of packages
          // https://www.debian.org/doc/debian-policy/ch-relationships.html//s-binarydeps
          // 
          depends = ['foo']
          preDepends = ['bar']
          recommends = ['foobar']
          suggests = ['foobar']
          enhances = ['foofy']
          breaks = ['foofoo']
          conflicts = ['barbar']
        }

        // Directory with file templates used to prepare the assembler.
        // Defaults to `src/jreleaser/assemblers/#{distribution.name}/deb`.
        // If specified, path must exist.
        // 
        templateDirectory = 'path/to/deb/templates'

        // List of template files to be skipped.
        // Value may be an exact match or a regex.
        // 
        skipTemplate('README.md.tpl')

        // Defines a list of additional files as artifacts.
        // These files will be added to the assembled archive.
        //  
        artifact {
          path = 'path/to/file'
        }
        artifact {
          path = 'path/to/another_file'
          transform = 'path/inside/archive'
        }
        artifact {
          path = 'path/to/platform/specific/file'
          platform = 'osx-x86_64'
        }

        // Defines a list of additional files as globs.
        // These files will be added to the assembled archive.
        // 
        files {
          // The pattern to use.
          // May use glob or regex pattern syntax.
          //  
          pattern = 'path/to/**/*.txt'
        }

        // 
        fileSet {
          // The input directory to copy files from.
          //  
          input = 'path/to/input/directory'

          // The target path inside the archive.
          // If left undefined, defaults to the root of the archive.
          //  
          output = 'path/to/archive/entry'

          // Fail if the given `input` does not exist.
          // Defaults to `true`.
          // 
          failOnMissingInput = false

          // A set of files and directory to include.
          //  
          includes = ['name_or_regex']

          // A set of files and directory to exclude.
          //  
          excludes = ['name_or_regex']

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

      }
    }
  }
}

Environment

When not explicitly set, the value of the following properties may be resolved from an environment variable or a system property as shown in the table. The system property takes precedence over the environment variable.

System Property Environment Variable

active

jreleaser.assemble.deb.${name}.active
jreleaser.assemble.deb.active

JRELEASER_ASSEMBLE_DEB_${name}_ACTIVE
JRELEASER_ASSEMBLE_DEB_ACTIVE

Substitute ${name} for the value of the named instance.

Space (' '), underscore (_), and dash (-) will be replaced by dot (.) to separate tokens in the System property. Space (' '), dash (-), and dot (.) will be replaced by underscore (_) to separate tokens in the environment variable, such that:

${name} System Property Environment Variable

foobar

foobar

FOOBAR

fooBar

foobar

FOOBAR

foo bar

foo.bar

FOO_BAR

foo-bar

foo.bar

FOO_BAR

foo_bar

foo.bar

FOO_BAR

foo.bar

foo.bar

FOO_BAR

Templates

The default location for templates is:

src/jreleaser/assemblers/<distribution-name>/deb

The following list shows the filenames that may be used to override default templates:

  • control/control.tpl

  • control/postinst.tpl

  • control/postrm.tpl

  • control/preinst.tpl

  • control/prerm.tpl

Any additional files found in the template directories will be copied as is unless their filename ends with .tpl in which case Name Templates substitution will take place.

Skip Templates

You may skip any template files by defining a set of skip rules in the skipTemplates property. For example, you may use any of these expressions to skip a template named README.md.tpl:

  • README.md.tpl: matches the full template name

  • README.md: matches the transformed template name

  • README.*: matches using a regex

Additional Files

There are several ways to define additional files that may be handled by this assembler.

Templates

  • You may use Name Templates inside the files to be copied.

  • They retain directory structure that is, a template found at {templateDirectory}/foo.txt.tpl will be copied as foo.txt while a template such as {templateDirectory}/docs/bar.md.tpl will be copied to docs/bar.md.

FileSets

  • May use globs or regexes to define files to be included from a starting directory.

  • They retain directory structure.

  • May rename the target parent directory.

Files

  • May use globs or regexes to define files to be included from a starting directory.

  • They do not retain directory structure. Only filenames are copied.

Artifacts

  • They do not retain directory structure by default. An artifact with path set to bin/launcher.sh will be copied to launcher.sh.

  • May use the transform property to define the target path. An artifact with path set to bin/launcher.sh and transform set to bin/{{projectName}} will be copied to bin/app [assuming projectName resolves to app].

  • May use the platform property to filter files per matching platform. An artifact with platform set to windows-x86_64 will only be copied when the matching platform is compatible with windows-x86_64.

  • Artifacts without an explicit platform won’t be filtered.

Example

Given the following file structure

.
├── BUILD
├── LICENSE
├── README
└── target
    └── release
        └── app

And this assembly configuration

  • YAML

  • TOML

  • JSON

  • Maven

  • Gradle

project:
  version: 1.0.0
  name: app
  description: Sample application
  authors:
    - Duke
  inceptionYear: 2020

assemble:
  deb:
    app:
      active: ALWAYS
      architecture: amd64
      control:
        maintainer: Duke <duke@acme.com>
      fileSets:
        - input: '.'
          includes:
            - 'LICENSE'
            - 'README'
        - input: 'target/release'
          output: 'bin'
          includes: [ 'app' ]
[project]
  version = "1.0.0"
  name = "app"
  description = "Sample application"
  authors = [ "Duke" ]
  inceptionYear = "2020"

[assemble.archive.app]
  active = "ALWAYS"
  architecture = "amd64"
  control.maintainer = "Duke <duke@acme.com>"
  [[assemble.archive.app.fileSets]]
    input = "."
    includes = ["LICENSE", "README"]
  [[assemble.archive.app.fileSets]]
    input = "target/release"
    output = "bin"
    includes = [ "app" ]
{
  "project": {
    "version": "1.0.0",
    "name": "app",
    "description": "Sample application",
    "authors": [ "Duke" ],
    "inceptionYear": "2020"
  },
  "assemble": {
    "archive": {
      "app": {
        "active": "ALWAYS",
        "architexture": "amd64",
        "control": {
          "maintainer": "Duke <duke@acme.com>"
        },
        "fileSets": [
          {
            "input": ".",
            "includes": ["LICENSE", "README"]
          },
          {
            "input": "target/release",
            "output": "bin",
            "includes": [ "app" ]
          }
        ]
      }
    }
  }
}
<jreleaser>
  <project>
    <version>1.0.0</version>
    <name>app</name>
    <description>Sample application</description>
    <authors>Duke</authors>
    <inceptionYear>2020</inceptionYear>
  </project>
  <assemble>
    <archive>
      <app>
        <active>ALWAYS</active>
        <architexture>amd64</architecture>
        <control>
          <maintainer>Duke &lt;duke@acme.com&gt;</maintainer>
        </control>
        <fileSets>
          <fileSet>
            <input>.</input>
            <includes>
              <include>LICENSE</include>
              <include>README</include>
            </includes>
          </fileSet>
          <fileSet>
            <input>target/release</input>
            <output>bin</output>
            <includes>
              <include>app</include>
            </includes>
          </fileSet>
        </fileSets>
      </app>
    </archive>
  </assemble>
</jreleaser>
jreleaser {
  project {
    version = '1.0.0'
    name = 'app'
    description = 'Sample application'
    author('Duke')
    inceptionYear: '2020'
  }
  assemble {
    archive {
      app {
        active = 'ALWAYS'
        architecture = 'amd64'
        control {
          maintainer = 'Duke <duke@acme.com>'
        }
        fileSet {
          input = '.'
          includes = ['LICENSE', 'README']
        }
        fileSet {
          input = 'target/release'
          output = 'bin'
          includes = [ 'app' ]
        }
      }
    }
  }
}

Resulting in the following .deb package

app-1.0.0-1_amd64.deb
$ tar tvf app-1.0.0-1_amd64.deb
-rw-r--r--  0 0      0           4 Dec 15 12:31 debian-binary
-rw-r--r--  0 0      0         496 Dec 15 12:31 control.tar.zst
-rw-r--r--  0 0      0     1120139 Dec 15 12:31 data.tar.zst