You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2022/04/11 11:28:13 UTC

[maven-mvnd] branch master updated: Refactor build and release workflows (#574)

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-mvnd.git


The following commit(s) were added to refs/heads/master by this push:
     new 8ae4f16  Refactor build and release workflows (#574)
8ae4f16 is described below

commit 8ae4f1652363686aa087bd35cf3ea931f2825e13
Author: Andres Almiray <aa...@yahoo.com>
AuthorDate: Mon Apr 11 13:28:08 2022 +0200

    Refactor build and release workflows (#574)
    
    * Refactor early-access builds with JReleaser
    
    * Add brew and sdkman to release configuration
    
    * Tweak changelog generation
    
    * Do not trigger verify workflow when changelog is updated
    
    * Add release workflows
    
    * Exclude template files from license check
    
    * configure access tokens for Homebrew and Sdkman
    
    * Fix Graal settings in workflows
    
    * setup-graalvm takes care of adjusting the environment on Windows
    
    * Fix workflow configuration
    
    * Uncoment sdkman settings in workflow
    
    * Remove explicit JReleaser build from workflows
    
    * Configure SCM urls
    
    * Update to JReleaser 1.0.0-M1
    
    * Update to JReleaser 1.0.0-RC2
    
    * Update to JReleaser 1.0.0
---
 .github/workflows/early-access.yaml                | 116 +++++++++
 .github/workflows/release-candidate-stage1.yml     |  95 ++++++++
 .github/workflows/release-candidate-stage2.yml     |  65 +++++
 .github/workflows/release.yaml                     | 114 +++++++++
 .github/workflows/test-jdk11.yaml                  | 144 ------------
 .github/workflows/verify.yaml                      | 261 ---------------------
 pom.xml                                            | 149 +++++++++++-
 .../distributions/mvnd/brew/README.md.tpl          |  15 ++
 .../distributions/mvnd/brew/formula-multi.rb.tpl   |  67 ++++++
 9 files changed, 618 insertions(+), 408 deletions(-)

diff --git a/.github/workflows/early-access.yaml b/.github/workflows/early-access.yaml
new file mode 100644
index 0000000..8f3039f
--- /dev/null
+++ b/.github/workflows/early-access.yaml
@@ -0,0 +1,116 @@
+#
+# Copyright (c) 2017 Angelo Zerr and other contributors as
+# indicated by the @author tags.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Early Access
+
+# trigger on push to branches and PR
+on:
+  push:
+    branch:
+  pull_request:
+
+env:
+  GRAALVM_VERSION: '21.3.0'
+  JAVA_VERSION: '17'
+
+jobs:
+  build:
+    name: 'Build with Graal on ${{ matrix.os }}'
+    if: startsWith(github.event.head_commit.message, 'Updated CHANGELOG.md') != true && startsWith(github.event.head_commit.message, '[maven-release-plugin]') != true
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ ubuntu-18.04, macOS-10.15, windows-2019 ]
+    runs-on: ${{ matrix.os }}
+
+    steps:
+      - name: 'Checkout'
+        uses: actions/checkout@v2
+
+      - name: 'Set vars'
+        shell: bash
+        run: |
+          OS=$(echo '${{ runner.os }}' | awk '{print tolower($0)}')
+          [[ $OS == 'ubuntu' ]] && echo "OS=linux" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV
+          [[ $OS == 'macos' ]] && echo "OS=darwin" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV
+          echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
+
+      - name: 'Set up Graal'
+        uses: graalvm/setup-graalvm@v1
+        with:
+          version: ${{ env.GRAALVM_VERSION }}
+          java-version: ${{ env.JAVA_VERSION }}
+          components: 'native-image'
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: 'Build native distribution'
+        run: ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e
+
+      - name: 'Upload daemon test logs'
+        if: always()
+        uses: actions/upload-artifact@v2
+        with:
+          name: daemon-test-logs-${{ env.OS }}
+          path: integration-tests/target/mvnd-tests/**/daemon*.log
+
+      - name: 'Upload artifact'
+        uses: actions/upload-artifact@v2
+        with:
+          name: artifacts
+          path: dist/target/mvnd-*.zip
+
+  early-access:
+    runs-on: ubuntu-18.04
+    needs: [build]
+    # Only post early access releases when push to master
+    if: ${{ !github.event.issue.pull_request }} && startsWith(github.ref, 'refs/heads/master')
+
+    steps:
+      - name: 'Check out repository'
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+
+      - name: 'Download all build artifacts'
+        uses: actions/download-artifact@v2
+
+      - name: 'Set up Java'
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ env.JAVA_VERSION }}
+          distribution: 'zulu'
+
+      - name: 'Cache Maven packages'
+        uses: actions/cache@v2
+        with:
+          path: ~/.m2
+          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+          restore-keys: ${{ runner.os }}-m2
+
+      - name: 'Release to GitHub'
+        env:
+          JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        run: ./mvnw -B --file pom.xml -pl :mvnd -DartifactsDir=artifacts jreleaser:release
+
+      - name: 'JReleaser output'
+        if: always()
+        uses: actions/upload-artifact@v2
+        with:
+          name: jreleaser-logs
+          path: |
+            target/jreleaser/trace.log
+            target/jreleaser/output.properties
diff --git a/.github/workflows/release-candidate-stage1.yml b/.github/workflows/release-candidate-stage1.yml
new file mode 100644
index 0000000..e7fec3f
--- /dev/null
+++ b/.github/workflows/release-candidate-stage1.yml
@@ -0,0 +1,95 @@
+#
+# Copyright (c) 2017 Angelo Zerr and other contributors as
+# indicated by the @author tags.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Release Candidate - Stage1
+
+# manual trigger
+on:
+  workflow_dispatch:
+
+env:
+  GRAALVM_VERSION: '21.3.0'
+  JAVA_VERSION: '17'
+
+jobs:
+  build:
+    name: 'Build with Graal on ${{ matrix.os }}'
+    strategy:
+      fail-fast: true
+      matrix:
+        os: [ ubuntu-18.04, macOS-10.15, windows-2019 ]
+    runs-on: ${{ matrix.os }}
+
+    steps:
+      - name: 'Checkout'
+        uses: actions/checkout@v2
+
+      - name: 'Set vars'
+        shell: bash
+        run: |
+          OS=$(echo '${{ runner.os }}' | awk '{print tolower($0)}')
+          [[ $OS == 'ubuntu' ]] && echo "OS=linux" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV
+          [[ $OS == 'macos' ]] && echo "OS=darwin" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV
+          echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
+
+      - name: 'Set up Graal'
+        uses: graalvm/setup-graalvm@v1
+        with:
+          version: ${{ env.GRAALVM_VERSION }}
+          java-version: ${{ env.JAVA_VERSION }}
+          components: 'native-image'
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: 'Build native distribution'
+        run: ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e
+
+      - name: 'Upload daemon test logs'
+        if: always()
+        uses: actions/upload-artifact@v2
+        with:
+          name: daemon-test-logs-${{ env.OS }}
+          path: integration-tests/target/mvnd-tests/**/daemon*.log
+
+  release:
+    runs-on: ubuntu-18.04
+    needs: [build]
+
+    steps:
+      - name: 'Check out repository'
+        uses: actions/checkout@v2
+        with:
+          # required for triggering release-candidate-stage2
+          token: ${{ secrets.GIT_ACCESS_TOKEN }}
+
+      - name: 'Set up Java'
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ env.JAVA_VERSION }}
+          distribution: 'zulu'
+
+      - name: 'Cache Maven packages'
+        uses: actions/cache@v2
+        with:
+          path: ~/.m2
+          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+          restore-keys: ${{ runner.os }}-m2
+
+      - name: 'Release'
+        run: |
+          ./mvnw -B -ntp \
+          -Drepository.url=https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git \
+          release:prepare
diff --git a/.github/workflows/release-candidate-stage2.yml b/.github/workflows/release-candidate-stage2.yml
new file mode 100644
index 0000000..cbd57e1
--- /dev/null
+++ b/.github/workflows/release-candidate-stage2.yml
@@ -0,0 +1,65 @@
+#
+# Copyright (c) 2017 Angelo Zerr and other contributors as
+# indicated by the @author tags.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Release Candidate - Stage2
+
+# push on tag but not on 'early-access'
+on:
+  push:
+    tags:
+      - '!early-access'
+
+env:
+  GRAALVM_VERSION: '21.3.0'
+  JAVA_VERSION: '17'
+
+jobs:
+  release:
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: 'Check out repository'
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+
+      - name: 'Set up Java'
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ env.JAVA_VERSION }}
+          distribution: 'zulu'
+
+      - name: 'Cache Maven packages'
+        uses: actions/cache@v2
+        with:
+          path: ~/.m2
+          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+          restore-keys: ${{ runner.os }}-m2
+
+      - name: 'Release to GitHub'
+        env:
+          JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        run: ./mvnw -B --file pom.xml -pl :mvnd -Pprerelease jreleaser:release
+
+      - name: 'JReleaser output'
+        if: always()
+        uses: actions/upload-artifact@v2
+        with:
+          name: jreleaser-logs
+          path: |
+            target/jreleaser/trace.log
+            target/jreleaser/output.properties
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
new file mode 100644
index 0000000..a4b3ef7
--- /dev/null
+++ b/.github/workflows/release.yaml
@@ -0,0 +1,114 @@
+#
+# Copyright (c) 2017 Angelo Zerr and other contributors as
+# indicated by the @author tags.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Release
+
+# manual trigger
+on:
+  workflow_dispatch:
+
+env:
+  GRAALVM_VERSION: '21.3.0'
+  JAVA_VERSION: '17'
+
+jobs:
+  build:
+    name: 'Build with Graal on ${{ matrix.os }}'
+    strategy:
+      fail-fast: true
+      matrix:
+        os: [ ubuntu-18.04, macOS-10.15, windows-2019 ]
+    runs-on: ${{ matrix.os }}
+
+    steps:
+      - name: 'Check out repository'
+        uses: actions/checkout@v2
+
+      - name: 'Set vars'
+        shell: bash
+        run: |
+          OS=$(echo '${{ runner.os }}' | awk '{print tolower($0)}')
+          [[ $OS == 'ubuntu' ]] && echo "OS=linux" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV
+          [[ $OS == 'macos' ]] && echo "OS=darwin" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV
+          echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
+
+      - name: 'Set up Graal'
+        uses: graalvm/setup-graalvm@v1
+        with:
+          version: ${{ env.GRAALVM_VERSION }}
+          java-version: ${{ env.JAVA_VERSION }}
+          components: 'native-image'
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: 'Build native distribution'
+        run: ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e
+
+      - name: 'Upload daemon test logs'
+        if: always()
+        uses: actions/upload-artifact@v2
+        with:
+          name: daemon-test-logs-${{ env.OS }}
+          path: integration-tests/target/mvnd-tests/**/daemon*.log
+
+      - name: 'Upload artifact'
+        uses: actions/upload-artifact@v2
+        with:
+          name: artifacts
+          path: dist/target/mvnd-*.zip
+
+  release:
+    runs-on: ubuntu-18.04
+    needs: [build]
+
+    steps:
+      - name: 'Check out repository'
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+
+      - name: 'Download all build artifacts'
+        uses: actions/download-artifact@v2
+
+      - name: 'Set up Java'
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ env.JAVA_VERSION }}
+          distribution: 'zulu'
+
+      - name: 'Cache Maven packages'
+        uses: actions/cache@v2
+        with:
+          path: ~/.m2
+          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+          restore-keys: ${{ runner.os }}-m2
+
+      - name: 'Release to GitHub'
+        env:
+          JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          JRELEASER_HOMEBREW_GITHUB_TOKEN: ${{ secrets.GIT_ACCESS_TOKEN }}
+          JRELEASER_SDKMAN_CONSUMER_KEY: ${{ secrets.SDKMAN_CONSUMER_KEY }}
+          JRELEASER_SDKMAN_CONSUMER_TOKEN: ${{ secrets.SDKMAN_CONSUMER_TOKEN }}
+        run: ./mvnw -B --file pom.xml -pl :mvnd -Prelease -DartifactsDir=artifacts jreleaser:full-release
+
+      - name: 'JReleaser output'
+        if: always()
+        uses: actions/upload-artifact@v2
+        with:
+          name: jreleaser-logs
+          path: |
+            target/jreleaser/trace.log
+            target/jreleaser/output.properties
diff --git a/.github/workflows/test-jdk11.yaml b/.github/workflows/test-jdk11.yaml
deleted file mode 100644
index 83570bb..0000000
--- a/.github/workflows/test-jdk11.yaml
+++ /dev/null
@@ -1,144 +0,0 @@
-#
-# Copyright (c) 2017 Angelo Zerr and other contributors as
-# indicated by the @author tags.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-name: GitHub Actions
-on: [push, pull_request]
-
-env:
-  GRAALVM_VERSION: '21.3.0.java11'
-
-jobs:
-
-  linux-jdk11:
-    runs-on: ubuntu-18.04
-    steps:
-
-      - uses: actions/checkout@v1
-
-      - name: Set VERSION env var
-        run: echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
-
-      - name: setup-graalvm-ce
-        uses: DeLaGuardo/setup-graalvm@5.0
-        with:
-          graalvm-version: ${{ env.GRAALVM_VERSION }}
-
-      - name: gu install native-image
-        run: gu install native-image
-
-      - name: Skip tests when releasing from a tag
-        if: startsWith(github.ref, 'refs/tags')
-        shell: bash
-        run: echo "SKIP_TESTS_OPT=-DskipTests" >> $GITHUB_ENV
-
-      - name: mvn clean verify
-        run: ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e $SKIP_TESTS_OPT
-
-      - name: Upload daemon test logs
-        if: ${{ success() || failure() }}
-        uses: actions/upload-artifact@v2
-        with:
-          name: daemon-test-logs-linux
-          path: integration-tests/target/mvnd-tests/**/daemon*.log
-
-      - name: Upload mvnd.zip
-        uses: actions/upload-artifact@v2
-        with:
-          name: mvnd-linux-amd64.zip
-          path: dist/target/mvnd-*.zip
-
-  windows-jdk11:
-    runs-on: windows-2019
-    steps:
-
-      - uses: actions/checkout@v1
-
-      - name: Set VERSION env var
-        shell: bash
-        run: echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
-
-      - name: setup-graalvm-ce
-        uses: DeLaGuardo/setup-graalvm@5.0
-        with:
-          graalvm-version: ${{ env.GRAALVM_VERSION }}
-
-      - name: gu install native-image
-        shell: cmd
-        run: gu install native-image
-
-      - name: Skip tests when releasing from a tag
-        if: startsWith(github.ref, 'refs/tags')
-        shell: bash
-        run: echo "SKIP_TESTS_OPT=-DskipTests" >> $GITHUB_ENV
-
-      - name: mvn clean verify
-        shell: cmd
-        run: |
-          call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
-          ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e %SKIP_TESTS_OPT%
-
-      - name: Upload daemon test logs
-        if: ${{ success() || failure() }}
-        uses: actions/upload-artifact@v2
-        with:
-          name: daemon-test-logs-windows
-          path: integration-tests/target/mvnd-tests/**/daemon*.log
-
-      - name: Upload mvnd.zip
-        uses: actions/upload-artifact@v2
-        with:
-          name: mvnd-windows-amd64.zip
-          path: dist/target/mvnd-*.zip
-
-  darwin-jdk11:
-    runs-on: macos-10.15
-    steps:
-
-      - uses: actions/checkout@v1
-
-      - name: Set VERSION env var
-        run: echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
-
-      - name: setup-graalvm-ce
-        uses: DeLaGuardo/setup-graalvm@5.0
-        with:
-          graalvm-version: ${{ env.GRAALVM_VERSION }}
-
-      - name: gu install native-image
-        run: gu install native-image
-
-      - name: Skip tests when releasing from a tag
-        if: startsWith(github.ref, 'refs/tags')
-        shell: bash
-        run: echo "SKIP_TESTS_OPT=-DskipTests" >> $GITHUB_ENV
-
-      - name: mvn clean verify
-        run: ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e $SKIP_TESTS_OPT
-
-      - name: Upload daemon test logs
-        if: ${{ success() || failure() }}
-        uses: actions/upload-artifact@v2
-        with:
-          name: daemon-test-logs-darwin
-          path: integration-tests/target/mvnd-tests/**/daemon*.log
-
-      - name: Upload mvnd.zip
-        uses: actions/upload-artifact@v2
-        with:
-          name: mvnd-darwin-amd64.zip
-          path: dist/target/mvnd-*.zip
-
diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml
deleted file mode 100644
index 58de2fc..0000000
--- a/.github/workflows/verify.yaml
+++ /dev/null
@@ -1,261 +0,0 @@
-#
-# Copyright (c) 2017 Angelo Zerr and other contributors as
-# indicated by the @author tags.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-name: GitHub Actions
-on: [push, pull_request]
-
-env:
-  GRAALVM_VERSION: '21.3.0.java17'
-
-jobs:
-
-  linux:
-    runs-on: ubuntu-18.04
-    steps:
-
-    - uses: actions/checkout@v1
-
-    - name: Set VERSION env var
-      run: echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
-
-    - name: setup-graalvm-ce
-      uses: DeLaGuardo/setup-graalvm@5.0
-      with:
-        graalvm-version: ${{ env.GRAALVM_VERSION }}
-
-    - name: gu install native-image
-      run: gu install native-image
-
-    - name: Skip tests when releasing from a tag
-      if: startsWith(github.ref, 'refs/tags')
-      shell: bash
-      run: echo "SKIP_TESTS_OPT=-DskipTests" >> $GITHUB_ENV
-
-    - name: mvn clean verify
-      run: ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e $SKIP_TESTS_OPT
-
-    - name: Upload daemon test logs
-      if: ${{ success() || failure() }}
-      uses: actions/upload-artifact@v2
-      with:
-        name: daemon-test-logs-linux
-        path: integration-tests/target/mvnd-tests/**/daemon*.log
-
-    - name: Upload mvnd.zip
-      uses: actions/upload-artifact@v2
-      with:
-        name: mvnd-linux-amd64.zip
-        path: dist/target/mvnd-*.zip
-
-  windows:
-    runs-on: windows-2019
-    steps:
-
-    - uses: actions/checkout@v1
-
-    - name: Set VERSION env var
-      shell: bash
-      run: echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
-
-    - name: setup-graalvm-ce
-      uses: DeLaGuardo/setup-graalvm@5.0
-      with:
-        graalvm-version: ${{ env.GRAALVM_VERSION }}
-
-    - name: gu install native-image
-      shell: cmd
-      run: gu install native-image
-
-    - name: Skip tests when releasing from a tag
-      if: startsWith(github.ref, 'refs/tags')
-      shell: bash
-      run: echo "SKIP_TESTS_OPT=-DskipTests" >> $GITHUB_ENV
-
-    - name: mvn clean verify
-      shell: cmd
-      run: |
-        call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
-        ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e %SKIP_TESTS_OPT%
-
-    - name: Upload daemon test logs
-      if: ${{ success() || failure() }}
-      uses: actions/upload-artifact@v2
-      with:
-        name: daemon-test-logs-windows
-        path: integration-tests/target/mvnd-tests/**/daemon*.log
-
-    - name: Upload mvnd.zip
-      uses: actions/upload-artifact@v2
-      with:
-        name: mvnd-windows-amd64.zip
-        path: dist/target/mvnd-*.zip
-
-  darwin:
-    runs-on: macos-10.15
-    steps:
-
-    - uses: actions/checkout@v1
-
-    - name: Set VERSION env var
-      run: echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
-
-    - name: setup-graalvm-ce
-      uses: DeLaGuardo/setup-graalvm@5.0
-      with:
-        graalvm-version: ${{ env.GRAALVM_VERSION }}
-
-    - name: gu install native-image
-      run: gu install native-image
-
-    - name: Skip tests when releasing from a tag
-      if: startsWith(github.ref, 'refs/tags')
-      shell: bash
-      run: echo "SKIP_TESTS_OPT=-DskipTests" >> $GITHUB_ENV
-
-    - name: mvn clean verify
-      run: ./mvnw clean verify -Pnative -Dmrm=false -B -ntp -e $SKIP_TESTS_OPT
-
-    - name: Upload daemon test logs
-      if: ${{ success() || failure() }}
-      uses: actions/upload-artifact@v2
-      with:
-        name: daemon-test-logs-darwin
-        path: integration-tests/target/mvnd-tests/**/daemon*.log
-
-    - name: Upload mvnd.zip
-      uses: actions/upload-artifact@v2
-      with:
-        name: mvnd-darwin-amd64.zip
-        path: dist/target/mvnd-*.zip
-
-  deploy:
-    runs-on: ubuntu-18.04
-    needs: [linux, windows, darwin]
-    if: startsWith(github.ref, 'refs/tags') # deploy only for tags
-    steps:
-
-    - name: Download artifacts
-      uses: actions/download-artifact@v2
-
-    - name: ls -R
-      run: ls -R
-
-    - name: Set environment
-      run: |
-        if [[ ${GITHUB_REF} = refs/heads/* ]]
-        then
-            VERSION=${GITHUB_REF##*/}-${GITHUB_SHA::8}
-        else
-            VERSION=${GITHUB_REF##*/}
-        fi
-        echo "Using VERSION=$VERSION"
-        echo "VERSION=$VERSION" >> $GITHUB_ENV
-
-    - name: Compute sha256 checksums
-      run: |
-        sha256sum mvnd-linux-amd64.zip/mvnd-${{ env.VERSION }}-linux-amd64.zip | cut -d ' ' -f 1 > mvnd-linux-amd64.zip/mvnd-${{ env.VERSION }}-linux-amd64.zip.sha256
-        sha256sum mvnd-darwin-amd64.zip/mvnd-${{ env.VERSION }}-darwin-amd64.zip | cut -d ' ' -f 1 > mvnd-darwin-amd64.zip/mvnd-${{ env.VERSION }}-darwin-amd64.zip.sha256
-        sha256sum mvnd-windows-amd64.zip/mvnd-${{ env.VERSION }}-windows-amd64.zip | cut -d ' ' -f 1 > mvnd-windows-amd64.zip/mvnd-${{ env.VERSION }}-windows-amd64.zip.sha256
-
-    - name: Create Release
-      id: create_release
-      uses: actions/create-release@v1
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      with:
-        tag_name: ${{ env.VERSION }}
-        release_name: ${{ env.VERSION }}
-        draft: false
-        prerelease: false
-
-    - name: Deploy mvnd-linux-amd64.zip
-      uses: actions/upload-release-asset@v1
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      with:
-        upload_url: ${{ steps.create_release.outputs.upload_url }}
-        asset_path: mvnd-linux-amd64.zip/mvnd-${{ env.VERSION }}-linux-amd64.zip
-        asset_name: mvnd-${{ env.VERSION }}-linux-amd64.zip
-        asset_content_type: application/zip
-
-    - name: Deploy mvnd-linux-amd64.zip.sha256
-      uses: actions/upload-release-asset@v1
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      with:
-        upload_url: ${{ steps.create_release.outputs.upload_url }}
-        asset_path: mvnd-linux-amd64.zip/mvnd-${{ env.VERSION }}-linux-amd64.zip.sha256
-        asset_name: mvnd-${{ env.VERSION }}-linux-amd64.zip.sha256
-        asset_content_type: text/plain
-
-    - name: Deploy mvnd-darwin-amd64.zip
-      uses: actions/upload-release-asset@v1
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      with:
-        upload_url: ${{ steps.create_release.outputs.upload_url }}
-        asset_path: mvnd-darwin-amd64.zip/mvnd-${{ env.VERSION }}-darwin-amd64.zip
-        asset_name: mvnd-${{ env.VERSION }}-darwin-amd64.zip
-        asset_content_type: application/zip
-
-    - name: Deploy mvnd-darwin-amd64.zip.sha256
-      uses: actions/upload-release-asset@v1
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      with:
-        upload_url: ${{ steps.create_release.outputs.upload_url }}
-        asset_path: mvnd-darwin-amd64.zip/mvnd-${{ env.VERSION }}-darwin-amd64.zip.sha256
-        asset_name: mvnd-${{ env.VERSION }}-darwin-amd64.zip.sha256
-        asset_content_type: text/plain
-
-    - name: Deploy mvnd-windows-amd64.zip
-      uses: actions/upload-release-asset@v1
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      with:
-        upload_url: ${{ steps.create_release.outputs.upload_url }}
-        asset_path: mvnd-windows-amd64.zip/mvnd-${{ env.VERSION }}-windows-amd64.zip
-        asset_name: mvnd-${{ env.VERSION }}-windows-amd64.zip
-        asset_content_type: application/zip
-
-    - name: Deploy mvnd-windows-amd64.zip.sha256
-      uses: actions/upload-release-asset@v1
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      with:
-        upload_url: ${{ steps.create_release.outputs.upload_url }}
-        asset_path: mvnd-windows-amd64.zip/mvnd-${{ env.VERSION }}-windows-amd64.zip.sha256
-        asset_name: mvnd-${{ env.VERSION }}-windows-amd64.zip.sha256
-        asset_content_type: text/plain
-
-    - uses: actions/checkout@v1
-
-    - name: Publish on sdkman.io
-      env:
-        SDKMAN_CONSUMER_KEY: ${{ secrets.SDKMAN_CONSUMER_KEY }}
-        SDKMAN_CONSUMER_TOKEN: ${{ secrets.SDKMAN_CONSUMER_TOKEN }}
-      run: ./build/publish-on-sdkman.sh "${{ env.VERSION }}"
-
-    - name: Update the mvnd Homebrew tap
-      env:
-        MVND_CI_TOKEN: ${{ secrets.MVND_CI_TOKEN }}
-      run: |
-        curl -u ":$MVND_CI_TOKEN" \
-        -X POST \
-        -H "Accept: application/vnd.github.v3+json" \
-        https://api.github.com/repos/mvndaemon/homebrew-mvnd/actions/workflows/release.yaml/dispatches \
-        -d '{"ref": "master"}'
diff --git a/pom.xml b/pom.xml
index 90cc1d3..8080a62 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,8 @@
         <maven.compiler.target>1.8</maven.compiler.target>
         <maven.compiler.source>1.8</maven.compiler.source>
         <trimStackTrace>false</trimStackTrace>
+        <project.github.repository>apache/maven-mvnd</project.github.repository>
+        <repository.url>github.com:${project.github.repository}</repository.url>
 
         <!-- dependency versions a..z -->
         <apiguardian-api.version>1.0.0</apiguardian-api.version>
@@ -71,9 +73,19 @@
         <mrm.version>1.2.0</mrm.version>
         <surefire.version>3.0.0-M5</surefire.version><!-- keep in sync with junit-platform-launcher.version -->
         <junit-platform-launcher.version>1.3.2</junit-platform-launcher.version><!-- keep in sync with surefire.version -->
+        <release.plugin.version>3.0.0-M5</release.plugin.version>
         <takari-lifecycle.version>1.13.9</takari-lifecycle.version>
         <takari-provisio.version>1.0.19</takari-provisio.version>
 
+        <jreleaser.version>1.0.0</jreleaser.version>
+        <jreleaser.prerelease>false</jreleaser.prerelease>
+        <jreleaser.upload.assets>ALWAYS</jreleaser.upload.assets>
+        <jreleaser.distribution.active>ALWAYS</jreleaser.distribution.active>
+        <jreleaser.overwrite>false</jreleaser.overwrite>
+        <jreleaser.update>false</jreleaser.update>
+        <jreleaser.brew.active>NEVER</jreleaser.brew.active>
+        <jreleaser.sdkman.active>NEVER</jreleaser.sdkman.active>
+
         <javassist.version>3.27.0-GA</javassist.version>
     </properties>
 
@@ -91,9 +103,9 @@
     </modules>
 
     <scm>
-        <connection>scm:git:git@github.com:mvndaemon/mvnd.git</connection>
-        <developerConnection>scm:git:git@github.com:mvndaemon/mvnd.git</developerConnection>
-        <url>https://github.com/mvndaemon/mvnd</url>
+        <url>${repository.url}</url>
+        <connection>scm:git:${repository.url}.git</connection>
+        <developerConnection>scm:git:${repository.url}.git</developerConnection>
         <tag>head</tag>
     </scm>
 
@@ -332,6 +344,7 @@ limitations under the License.</inlineHeader>
                             <exclude>**/*.jnilib</exclude>
                             <exclude>**/Makefile*</exclude>
                             <exclude>**/docker/*</exclude>
+                            <exclude>**/*.tpl</exclude>
                         </excludes>
                         <mapping>
                             <bash>SCRIPT_STYLE</bash>
@@ -451,6 +464,16 @@ limitations under the License.</inlineHeader>
                     <artifactId>native-image-maven-plugin</artifactId>
                     <version>${graalvm.plugin.version}</version>
                 </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-release-plugin</artifactId>
+                    <version>${release.plugin.version}</version>
+                    <configuration>
+                        <useReleaseProfile>false</useReleaseProfile>
+                        <autoVersionSubmodules>true</autoVersionSubmodules>
+                        <tagNameFormat>@{project.version}</tagNameFormat>
+                    </configuration>
+                </plugin>
             </plugins>
         </pluginManagement>
 
@@ -528,7 +551,127 @@ limitations under the License.</inlineHeader>
                     </execution>
                 </executions>
             </plugin>
+
+            <plugin>
+                <groupId>org.jreleaser</groupId>
+                <artifactId>jreleaser-maven-plugin</artifactId>
+                <version>${jreleaser.version}</version>
+                <inherited>false</inherited>
+                <configuration>
+                    <jreleaser>
+                        <environment>
+                            <properties>
+                                <artifactsDir>dist/target</artifactsDir>
+                            </properties>
+                        </environment>
+                        <project>
+                            <name>mvnd</name>
+                            <description>Maven Daemon</description>
+                            <license>Apache-2.0</license>
+                            <website>https://github.com/mvndaemon/mvnd</website>
+                            <authors>The Maven project</authors>
+                            <tags>maven,mvn,daemon,graalvm</tags>
+                        </project>
+                        <release>
+                            <github>
+                                <branch>master</branch>
+                                <skipTag>true</skipTag>
+                                <tagName>{{projectVersion}}</tagName>
+                                <releaseName>{{projectVersion}}</releaseName>
+                                <prerelease>
+                                    <enabled>${jreleaser.prerelease}</enabled>
+                                </prerelease>
+                                <overwrite>${jreleaser.overwrite}</overwrite>
+                                <update>
+                                    <enabled>${jreleaser.update}</enabled>
+                                </update>
+                                <uploadAssets>${jreleaser.upload.assets}</uploadAssets>
+                                <changelog>
+                                    <formatted>ALWAYS</formatted>
+                                    <format>- {{commitShortHash}} {{commitTitle}}</format>
+                                    <contributors>
+                                        <format>- {{contributorName}}{{#contributorUsernameAsLink}} ({{.}}){{/contributorUsernameAsLink}}</format>
+                                    </contributors>
+                                    <labelers>
+                                        <labeler>
+                                            <label>update-changelog</label>
+                                            <title>Updated CHANGELOG.md</title>
+                                        </labeler>
+                                    </labelers>
+                                    <categories>
+                                        <category>
+                                            <key>changelog</key>
+                                            <title>changelog</title>
+                                            <labels>update-changelog</labels>
+                                        </category>
+                                    </categories>
+                                    <hide>
+                                        <categories>changelog</categories>
+                                        <contributors>GitHub,bot</contributors>
+                                    </hide>
+                                </changelog>
+                            </github>
+                        </release>
+                        <distributions>
+                            <mvnd>
+                                <type>NATIVE_IMAGE</type>
+                                <active>${jreleaser.distribution.active}</active>
+                                <artifacts>
+                                    <artifact>
+                                        <path>{{artifactsDir}}/mvnd-{{projectVersion}}-linux-amd64.zip</path>
+                                        <platform>linux-x86_64</platform>
+                                    </artifact>
+                                    <artifact>
+                                        <path>{{artifactsDir}}/mvnd-{{projectVersion}}-windows-amd64.zip</path>
+                                        <platform>windows-x86_64</platform>
+                                    </artifact>
+                                    <artifact>
+                                        <path>{{artifactsDir}}/mvnd-{{projectVersion}}-darwin-amd64.zip</path>
+                                        <platform>osx-x86_64</platform>
+                                    </artifact>
+                                </artifacts>
+                                <brew>
+                                    <active>${jreleaser.brew.active}</active>
+                                    <multiPlatform>true</multiPlatform>
+                                    <tap>
+                                        <owner>mvndaemon</owner>
+                                        <name>homebrew-mvnd</name>
+                                        <commitMessage>Release {{tagName}}</commitMessage>
+                                    </tap>
+                                </brew>
+                                <sdkman>
+                                    <active>${jreleaser.sdkman.active}</active>
+                                </sdkman>
+                            </mvnd>
+                        </distributions>
+                    </jreleaser>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
+    <profiles>
+        <profile>
+            <id>prerelease</id>
+            <properties>
+                <jreleaser.prerelease>true</jreleaser.prerelease>
+                <jreleaser.upload.assets>PRERELEASE</jreleaser.upload.assets>
+                <jreleaser.distribution.active>NEVER</jreleaser.distribution.active>
+                <jreleaser.overwrite>false</jreleaser.overwrite>
+                <jreleaser.update>false</jreleaser.update>
+            </properties>
+        </profile>
+        <profile>
+            <id>release</id>
+            <properties>
+                <jreleaser.prerelease>false</jreleaser.prerelease>
+                <jreleaser.upload.assets>RELEASE</jreleaser.upload.assets>
+                <jreleaser.distribution.active>ALWAYS</jreleaser.distribution.active>
+                <jreleaser.overwrite>false</jreleaser.overwrite>
+                <jreleaser.update>true</jreleaser.update>
+                <jreleaser.brew.active>RELEASE</jreleaser.brew.active>
+                <jreleaser.sdkman.active>RELEASE</jreleaser.sdkman.active>
+            </properties>
+        </profile>
+    </profiles>
 </project>
diff --git a/src/jreleaser/distributions/mvnd/brew/README.md.tpl b/src/jreleaser/distributions/mvnd/brew/README.md.tpl
new file mode 100644
index 0000000..aa8f441
--- /dev/null
+++ b/src/jreleaser/distributions/mvnd/brew/README.md.tpl
@@ -0,0 +1,15 @@
+# Homebrew tap for mvnd
+
+This is a homebrew tap for https://github.com/{{repoOwner}}/mvnd[`mvnd`, the Maven Daemon].
+
+Tap and install with
+
+```
+brew install {{repoOwner}}/homebrew-mvnd/mvnd
+```
+
+Afterwards, `mvnd` is available on the path and you can build your Maven based Java programs like this:
+
+```
+mvnd clean verify
+```
diff --git a/src/jreleaser/distributions/mvnd/brew/formula-multi.rb.tpl b/src/jreleaser/distributions/mvnd/brew/formula-multi.rb.tpl
new file mode 100644
index 0000000..55bbf59
--- /dev/null
+++ b/src/jreleaser/distributions/mvnd/brew/formula-multi.rb.tpl
@@ -0,0 +1,67 @@
+# {{jreleaserCreationStamp}}
+class {{brewFormulaName}} < Formula
+  desc "{{projectDescription}}"
+  homepage "{{projectWebsite}}"
+  version "{{projectVersion}}"
+  license "{{projectLicense}}"
+
+  {{brewMultiPlatform}}
+
+  livecheck do
+    url :stable
+  end
+
+  depends_on "openjdk" => :recommended
+
+  def install
+    # Remove windows files
+    rm_f Dir["bin/*.cmd"]
+
+    # Replace mvnd by using mvnd.sh
+    if Hardware::CPU.arm?
+      mv "bin/mvnd.sh", "bin/mvnd", force: true
+    end
+
+    libexec.install Dir["*"]
+
+    Pathname.glob("#{libexec}/bin/*") do |file|
+      next if file.directory?
+
+      basename = file.basename
+      (bin/basename).write_env_script file, Language::Java.overridable_java_home_env
+    end
+
+    daemon = var + 'run/mvnd'
+    FileUtils.mkdir_p "#{daemon}", mode: 0775 unless daemon.exist?
+    FileUtils.ln_sf(daemon, libexec + 'daemon')
+  end
+
+  test do
+    (testpath/"settings.xml").write <<~EOS
+      <settings><localRepository>#{testpath}/repository</localRepository></settings>
+    EOS
+    (testpath/"pom.xml").write <<~EOS
+      <?xml version="1.0" encoding="UTF-8"?>
+      <project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+        <modelVersion>4.0.0</modelVersion>
+        <groupId>org.homebrew</groupId>
+        <artifactId>maven-test</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <properties>
+         <maven.compiler.source>1.8</maven.compiler.source>
+         <maven.compiler.target>1.8</maven.compiler.target>
+        </properties>
+      </project>
+    EOS
+    (testpath/"src/main/java/org/homebrew/MavenTest.java").write <<~EOS
+      package org.homebrew;
+      public class MavenTest {
+        public static void main(String[] args) {
+          System.out.println("Testing Maven with Homebrew!");
+        }
+      }
+    EOS
+    system "#{bin}/mvnd", "-gs", "#{testpath}/settings.xml", "compile"
+  end
+end