jreleaser / release-action

:octocat: GitHub Action for JReleaser
https://jreleaser.org
Apache License 2.0
34 stars 3 forks source link
actions github-actions gradle java jreleaser maven

= JReleaser :linkattrs: :project-owner: jreleaser :project-name: release-action

image:https://github.com/{project-owner}/{project-name}/workflows/Test/badge.svg["Build Status", link="https://github.com/{project-owner}/{project-name}/actions"] image:https://img.shields.io/github/v/release/{project-owner}/{project-name}["GitHub release", link="https://github.com/jreleaser/release-action/releases"] image:https://img.shields.io/twitter/follow/{project-owner}?style=social["Twitter Follow", link="https://twitter.com/jreleaser"]

This action executes a link:https://jreleaser.org[JReleaser] workflow.

== Usage

=== Workflow

[source,yaml]

name: release

on: workflow_dispatch:

jobs: release: name: Release runs-on: ubuntu-latest

steps:
  - name: Checkout
    uses: actions/checkout@v4
    with:
      fetch-depth: 0

  # Configure build steps as you'd normally do

  - name: Setup Java
    uses: actions/setup-java@v4
    with:
      java-version: 21
      distribution: 'zulu'
      server-id: central
      server-username: MAVEN_USERNAME
      server-password: MAVEN_CENTRAL_TOKEN
      gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
      gpg-passphrase: MAVEN_GPG_PASSPHRASE
      cache: maven

  # Post JARs to Maven Central

  - name: Release to Maven Central
    env:
      MAVEN_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
      MAVEN_CENTRAL_TOKEN: ${{ secrets.SONATYPE_PASSWORD }}
      MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
    run: |
      export GPG_TTY=$(tty)
      git config user.name "${{ github.event.head_commit.committer.name }}"
      git config user.email "${{ github.event.head_commit.committer.email }}"
      mvn -B --file pom.xml release:prepare release:perform

  # Create a release

  - name: Run JReleaser
    uses: jreleaser/release-action@v2
    env:
      JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  # Persist logs

  - name: JReleaser release output
    if: always()
    uses: actions/upload-artifact@v4
    with:
      name: jreleaser-release
      path: |
        out/jreleaser/trace.log
        out/jreleaser/output.properties

WARNING: Note the fetch-depth: 0 option on the Checkout workflow step. It is required for JReleaser to work properly. Without that, JReleaser might fail or behave incorrectly.

The last step executes a full-release with the default jreleaser.yml configuration that's expected to be located at the root of the repository.

IMPORTANT: This action requires Java 11+ to download and execute JReleaser. The action will setup a suitable Java runtime automatically. If you would like to use a different Java version/distribution then set the value of setup-java to false and make sure you have a previous step with actions/setup-java setup as needed.

== Customizing

== Inputs

Following inputs can be used as step.with keys

[%header,cols="<2,<,<2,<3",width="100%"] |=== | Name | Type | Default | Description | version | String | latest | The JReleaser version to use. + Should match any of the link:https://github.com/jreleaser/jreleaser/releases[published releases]. + You may use latest to pull the latest stable release or + early-access to pull the latest snapshot. | arguments | String | full-release | The JReleaser command to run. | working-directory | String | ${{ github.workspace }} | The directory to change into. + Defaults to the directory the calling workflow runs in. | setup-java | boolean | true | Automatically setup a Java runtime. + Java runtime defaults to Zulu 17. | java-opts | boolean | | Additional JVM parameters for running JReleaser |===

== Environment Variables

Following environment variables can be used as step.env keys

[%header,width="100%"] |=== | Name | Description | JRELEASER_GITHUB_TOKEN | link:https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token[GITHUB_TOKEN] as provided by secrets |===

== Caution

The default GITHUB_TOKEN from secrets is link:https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token#about-the-github_token-secret[limited] to the repository that contains your workflow.

Pushing to other repositories such as Homebrew tap requires additional permissions, you must create a custom link:https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/[Personal Access Token] with repo permissions and link:https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets[add it as a secret in the repository]. If you create a secret named GH_PAT, the step will look like this

[source,yaml]

  - name: Run JReleaser
    uses: jreleaser/release-action@v2
    env:
      JRELEASER_GITHUB_TOKEN: ${{ secrets.GH_PAT }}

If you'd rather have separate tokens for each additional repository and keep the original GITHUB_TOKEN intact then you may apply the GH_PAT token as follows

[source,yaml]

  - name: Run JReleaser
    uses: jreleaser/release-action@v2
    env:
      JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      JRELEASER_HOMEBREW_GITHUB_TOKEN: ${{ secrets.GH_PAT }}

Additional environment variables may be needed depending on your specific setup, such as those needed for signing files with GPG or announcing a release via Twitter. Review the docs at link:https://jreleaser.org[] to find more about these variables and how to set them up.