Workflow

JReleaser follows a series of steps to create and upload a release. You may invoke all steps in one go (the preferred way) or each step individually and separate from the others. Steps are executed sequentially; if one of them fails then the build fails. You may decide to resume from the start or from the last failed step.

Announcers are the only exception, if one of them fails then the build may continue however a warning is printed out. You may decide to rerun all announcers or just the one that failed.

The preferred option is to invoke Full Release as it runs all steps in the expected sequence.

The following diagram shows the steps and their dependencies with one another:

jreleaser workflow

The following sections describe these steps:

Download

Downloads assets that may be used by assemblers. Assets may also be external templates to be consumed by packagers or announcers.

Configured with Download.

Downloaded assets will be placed at ${basedir}/out/jreleaser/download.

This step must be invoked separately from the others.

Assemble

Assembles distributions such as Jlink and Java Binary. Outputs will automatically configured/updated matching named distributions for Prepare, Package, and Publish.

Configured with Assemble.

Assembled artifacts will be placed at ${basedir}/out/jreleaser/assemble.

Given the nature of platform specific distributions this step must be invoked separately from the others.

Changelog

Creates the changelog, either by taking a supplemented external file or calculates it based on the last tag that matches the configuration. Configured inside a releaser with Changelog.

Generated changelog will be placed at ${basedir}/out/jreleaser/release/CHANGELOG.md.

Checksum

Calculates SHA256 checksums on all input files. This includes all artifacts per distribution and every matching file configured in the Files section.

All files must exist by the time Checksum is invoked, otherwise an error will occur.

Configured with Checksum.

Checksums will be placed at ${basedir}/out/jreleaser/checksums.

Catalog

Catalogs (SBOMs) all input files. This includes all artifacts per distribution and every matching file configured in the Files section.

All files must exist by the time Catalog is invoked, otherwise an error will occur.

This step is optional. Configured with Catalog.

Catalogs will be placed at ${basedir}/out/jreleaser/catalogs.

Depends on Checksum.

Sign

Creates PGP signatures for all input files. This includes all artifacts per distribution and every matching file configured in the Files section, plus the output file from the Checksum step ("checksums.txt"), and archived catalogs.

This step is optional. Configured with Signing.

Signatures will be placed at ${basedir}/out/jreleaser/signatures.

Depends on Checksum.

Deploy

Deploys staged artifacts to the configured destinations.

This step is optional. Configured with Deploy.

Upload

Uploads distribution artifacts and files to the configured destinations. This step uploads signatures (if enabled), all distribution artifacts, every matching file configured in the Files section, plus archived catalogs.

This step is optional. Configured with Upload.

Depends on Sign.

Release

Creates a release at the configured remote Git repository (see Release). This step uploads all checksums, signatures (if enabled), all distribution artifacts, every matching file configured in the Files section, plus archived catalogs. Automatically calculates a changelog & tags the release.

Configured with Release.

Depends on Deploy, Upload.

Prepare

Generates files required by Packagers such as Homebrew. These files will be generated from templates existing in your project at a configured location (the templateDirectory of each packager) and default templates bundled in the JReleaser distribution. These template files rely on Name Templates to parameterize their contents.

Configured with Packagers.

Prepared files will be placed at ${basedir}/out/jreleaser/${distributionName}/${packager}/prepared.

Depends on Checksum.

Package

Processes the files created by the Prepare step to create specific packages. The Snap packager may log into the Snapcraft store and publish a snap if its remotebBuild filed is set to false for example. Other packagers do not require additional customization of the prepared files and simply copy the files over from their matching prepared directory to their respective package directory.

Configured with Packagers.

Packaged files will be placed at ${basedir}/out/jreleaser/${distributionName}/${packager}/package.

Depends on Prepare.

Publish

Publishes packaged files to their respective destinations. For example, for Homebrew this means creating or updating a "hombrew-tap" repository, for JBang this means creating or merging a "jbang-catalog" repository.

Configured with Packagers.

Depends on Package.

Does not explicitly depend on Release. However, some packagers such as Snap require downloading distribution files to locally build a snap.

Announce

Announces the release to different media such as Twitter or Zulip. Sdkman requires that distribution files had been released.

Configured with Announce.

Depends on Changelog.