diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index cf0c428b6..1ecc57cc9 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -17,13 +17,34 @@
name: Release
on:
- workflow_dispatch: { }
+ workflow_dispatch:
+ inputs:
+ release-version:
+ required: false
+ default: ''
+ description: >-
+ Release version (e.g. 5.7.0 or 5.7.0-rc.1).
+ Leave empty to let Maven compute it from the current SNAPSHOT version.
+ type: string
+ development-version:
+ required: false
+ default: ''
+ description: >-
+ Next development version (e.g. 5.8.0-SNAPSHOT).
+ Leave empty for automatic increment (e.g. 5.7.1-SNAPSHOT or 5.7.0-rc.2-SNAPSHOT).
+ type: string
+ dry-run:
+ required: false
+ default: false
+ description: >-
+ Perform a dry run without pushing changes or creating releases.
+ type: boolean
permissions: { }
jobs:
- create-release:
- name: Create Release
+ release:
+ name: Release
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
@@ -31,72 +52,110 @@ jobs:
packages: write # Required to push images to ghcr.io
if: "${{ github.repository_owner == 'DependencyTrack' }}"
steps:
- - name: Checkout Repository
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # tag=v6.0.2
- with:
- persist-credentials: false
- - name: Set up JDK
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # tag=v5.2.0
- with:
- java-version: '21'
- distribution: 'temurin'
- cache: maven
- - name: Set up QEMU
- uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # tag=v3.7.0
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # tag=v3.12.0
- with:
- install: true
- - name: Docker login
- uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # tag=v3.6.0
- with:
- registry: ghcr.io
- username: ${{ github.repository_owner }}
- password: ${{ github.repository_owner == 'DependencyTrack' && secrets.BOT_IMAGE_PUSH_TOKEN || secrets.GITHUB_TOKEN }}
- - name: Perform Release
- run: |-
- git config user.name "dependencytrack-bot"
- git config user.email "106437498+dependencytrack-bot@users.noreply.github.com"
-
- BUILD_ARGS=(
- '-Dcheckstyle.skip'
- '-DskipTests'
- '-Dquarkus.container-image.registry=ghcr.io'
- "-Dquarkus.container-image.group=${GITHUB_REPOSITORY_OWNER,,}"
- '-Dquarkus.container-image.additional-tags=latest'
- '-Dquarkus.container-image.build=true'
- '-Dquarkus.container-image.push=true'
- '-Dquarkus.docker.buildx.platform=linux/amd64,linux/arm64'
- )
-
- mvn -B --no-transfer-progress release:prepare \
- -DpreparationGoals="clean verify" \
- -Darguments="${BUILD_ARGS[*]}" \
- -DpushChanges=false
- - name: Push Changes
- uses: ad-m/github-push-action@master
- with:
- branch: ${{ github.ref }}
- github_token: ${{ secrets.BOT_RELEASE_TOKEN }}
- tags: true
- - name: Determine Release Tag
- id: determine-release-tag
- run: |-
- TAG_NAME="$(sed -nr 's/^scm.tag=(v[0-9.]+)$/\1/p' release.properties)"
- echo "TAG_NAME=${TAG_NAME}" >> $GITHUB_OUTPUT
- - name: Create GitHub Release
- env:
- GITHUB_TOKEN: "${{ secrets.BOT_RELEASE_TOKEN }}"
- run: |-
- gh release create "${{ steps.determine-release-tag.outputs.TAG_NAME }}" \
- --target ${{ github.ref_name }} \
- --verify-tag \
- --generate-notes
- - name: Upload BOMs to GitHub Release
- env:
- GITHUB_TOKEN: "${{ secrets.BOT_RELEASE_TOKEN }}"
- run: |-
- find . -name quarkus-run-cyclonedx.json -exec \
- sh -c 'mv {} "$(echo {} | cut -d "/" -f 2)-${{ steps.determine-release-tag.outputs.TAG_NAME }}.cdx.json"' \;
- gh release upload "${{ steps.determine-release-tag.outputs.TAG_NAME }}" \
- ./*.cdx.json --clobber
+ - name: Checkout Repository
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # tag=v6.0.2
+ with:
+ token: ${{ github.repository_owner == 'DependencyTrack' && secrets.BOT_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
+ fetch-depth: 0
+
+ - name: Set up JDK
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # tag=v5.2.0
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+ cache: 'maven'
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # tag=v3.7.0
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # tag=v3.12.0
+ with:
+ install: true
+
+ - name: Docker login
+ if: ${{ !inputs.dry-run }}
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # tag=v3.6.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ github.repository_owner == 'DependencyTrack' && secrets.BOT_IMAGE_PUSH_TOKEN || secrets.GITHUB_TOKEN }}
+
+ - name: Configure Git
+ run: |
+ git config user.name "dependencytrack-bot"
+ git config user.email "106437498+dependencytrack-bot@users.noreply.github.com"
+
+ - name: Perform Maven Release
+ run: |-
+ MAVEN_ARGS="-B"
+ if [[ -n "${{ inputs.release-version }}" ]]; then
+ MAVEN_ARGS="${MAVEN_ARGS} -DreleaseVersion=${{ inputs.release-version }}"
+ fi
+ if [[ -n "${{ inputs.development-version }}" ]]; then
+ MAVEN_ARGS="${MAVEN_ARGS} -DdevelopmentVersion=${{ inputs.development-version }}"
+ fi
+ if [[ "${{ inputs.dry-run }}" == "true" ]]; then
+ MAVEN_ARGS="${MAVEN_ARGS} -DdryRun=true"
+ fi
+ export MAVEN_ARGS
+
+ IS_PRERELEASE="false"
+ if [[ -n "${{ inputs.release-version }}" ]]; then
+ if [[ "${{ inputs.release-version }}" == *-* ]]; then
+ IS_PRERELEASE="true"
+ fi
+ else
+ CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
+ RELEASE_VERSION="${CURRENT_VERSION%-SNAPSHOT}"
+ if [[ "${RELEASE_VERSION}" == *-* ]]; then
+ IS_PRERELEASE="true"
+ fi
+ fi
+
+ BUILD_ARGS=(
+ "-Dquarkus.container-image.group=${GITHUB_REPOSITORY_OWNER,,}"
+ '-Dquarkus.container-image.build=true'
+ '-Dquarkus.docker.buildx.platform=linux/amd64,linux/arm64'
+ )
+
+ if [[ "${IS_PRERELEASE}" != "true" ]]; then
+ BUILD_ARGS+=('-Dquarkus.container-image.additional-tags=latest')
+ fi
+
+ if [[ "${{ inputs.dry-run }}" == "true" ]]; then
+ BUILD_ARGS+=('-Dquarkus.container-image.push=false')
+ else
+ BUILD_ARGS+=('-Dquarkus.container-image.push=true')
+ fi
+
+ mvn release:prepare -Darguments="${BUILD_ARGS[*]}"
+
+ - name: Create GitHub Release
+ if: ${{ !inputs.dry-run }}
+ env:
+ GITHUB_TOKEN: "${{ secrets.BOT_RELEASE_TOKEN }}"
+ run: |
+ RELEASE_VERSION=$(git describe --tags --abbrev=0)
+ echo "Release version: ${RELEASE_VERSION}"
+
+ PRERELEASE_FLAG=""
+ if [[ "${RELEASE_VERSION}" == *-* ]]; then
+ PRERELEASE_FLAG="--prerelease"
+ fi
+
+ gh release create "${RELEASE_VERSION}" \
+ --generate-notes \
+ ${PRERELEASE_FLAG}
+
+ - name: Upload BOMs to GitHub Release
+ if: ${{ !inputs.dry-run }}
+ env:
+ GITHUB_TOKEN: "${{ secrets.BOT_RELEASE_TOKEN }}"
+ run: |-
+ RELEASE_VERSION=$(git describe --tags --abbrev=0)
+ while IFS= read -r -d '' bom; do
+ MODULE=$(echo "${bom}" | cut -d "/" -f 2)
+ mv "${bom}" "${MODULE}-${RELEASE_VERSION}.cdx.json"
+ done < <(find . -name quarkus-run-cyclonedx.json -print0)
+ gh release upload "${RELEASE_VERSION}" ./*.cdx.json --clobber
diff --git a/pom.xml b/pom.xml
index 70068a71c..1ca442302 100644
--- a/pom.xml
+++ b/pom.xml
@@ -471,9 +471,14 @@
maven-release-plugin
3.3.1
+ @{project.version}
true
- SemVerVersionPolicy
- v@{project.version}
+ true
+ true
+ quick
+ clean verify -Pquick
+ clean
+ false