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:

Assemble

Assembles distributions such as Jlink and Native Image. Outputs will automatically configure/update matching named distributions for Prepare, Package, and Publish.

Given the nature of platform specific distributions this step must be invoked separatedly 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.

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.

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

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"). This step is optional and can be disabled if needed. Review the Signing section found in the configuration.

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

Depends on Checksum.

Upload

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

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, and every matching file configured in the Files section. Automatically calculates a changelog & tags the release.

Depends on 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.

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.

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

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.

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.

Depends on Changelog.

Full Release

Executes all steps in single session in the following order: