diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 946e12145..ea142e568 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -29,6 +29,9 @@ jobs: - name: Set Image Tag Env run: echo "PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV + - name: Operator Version Check + run: ./operator/bin/version-check.sh "${{ env.PROJECT_VERSION }}" + - name: Set Up JDK 17 uses: actions/setup-java@v4 with: @@ -98,7 +101,7 @@ jobs: # ==================== Operator-Bundle ==================== - name: Modify Bundle CSV Metadata - run: ./operator/bin/modify-bundle-metadata.sh "VERSION=${{ env.PROJECT_VERSION }}" "SKIP_RANGE=>=0.0.1 <${{ env.PROJECT_VERSION }}" + run: ./operator/bin/modify-bundle-metadata.sh "VERSION=${{ env.PROJECT_VERSION }}" - name: Build Operator Bundle Image uses: docker/build-push-action@v6 @@ -118,17 +121,17 @@ jobs: chmod +x opm sudo cp -v opm /usr/bin/ rm -vf opm - operator/bin/generate-catalog.sh ${{ env.PROJECT_VERSION }} + operator/bin/generate-catalog.sh localhost:5000/streamshub/console-operator-bundle true - name: Build Operator Catalog Image uses: docker/build-push-action@v6 with: - context: operator/target/ + context: operator/ platforms: ${{ env.PLATFORMS }} network: none provenance: false push: true - file: operator/target/catalog.Dockerfile + file: operator/src/main/docker/catalog.Dockerfile tags: | localhost:5000/streamshub/console-operator-catalog:${{ env.PROJECT_VERSION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cdfcfd88c..93037a1a8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,9 +54,8 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" git checkout -b release - mvn -B release:prepare -DreleaseVersion=${{steps.metadata.outputs.current-version}} -DdevelopmentVersion=${{steps.metadata.outputs.next-version}} - git checkout ${{github.base_ref}} - git rebase release + + PRERELEASE_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout | tr '[:upper:]' '[:lower:]') export QUARKUS_CONTAINER_IMAGE_REGISTRY="${{ secrets.IMAGE_REPO_HOSTNAME }}" export QUARKUS_CONTAINER_IMAGE_GROUP="${{ secrets.IMAGE_REPO_NAMESPACE }}" export QUARKUS_CONTAINER_IMAGE_USERNAME="${{ secrets.IMAGE_REPO_USERNAME }}" @@ -64,7 +63,18 @@ jobs: export QUARKUS_CONTAINER_IMAGE_PUSH="true" export QUARKUS_CONTAINER_IMAGE_ADDITIONAL_TAGS=latest export QUARKUS_KUBERNETES_NAMESPACE='$${NAMESPACE}' + + mvn -B release:prepare \ + -DprereleaseVersion=${PRERELEASE_VERSION} \ + -DreleaseVersion=${{ steps.metadata.outputs.current-version }} \ + -DdevelopmentVersion=${{ steps.metadata.outputs.next-version }} \ + -Dcontainer-image.registry=${{ secrets.IMAGE_REPO_HOSTNAME }} + + git checkout ${{github.base_ref}} + git rebase release + export GIT_REVISION=$(git rev-parse --short release) + # Build and push the release images using the commit tagged in `release:prepare` mvn -B -P container-image release:perform --no-transfer-progress \ '-Drelease.arguments=-Dquarkus.docker.buildx.platform=${{ env.PLATFORMS }}' @@ -94,7 +104,7 @@ jobs: # ==================== Operator-Bundle ==================== - name: Modify Bundle CSV Metadata working-directory: target/checkout - run: ./operator/bin/modify-bundle-metadata.sh "VERSION=${{steps.metadata.outputs.current-version}}" "SKIP_RANGE=>=0.0.1 <${{steps.metadata.outputs.current-version}}" + run: ./operator/bin/modify-bundle-metadata.sh "VERSION=${{steps.metadata.outputs.current-version}}" - name: Build and Push Operator Bundle Image uses: docker/build-push-action@v6 @@ -116,17 +126,18 @@ jobs: chmod +x opm sudo cp -v opm /usr/bin/ rm -vf opm - operator/bin/generate-catalog.sh ${{steps.metadata.outputs.current-version}} + operator/bin/generate-catalog.sh \ + ${{ secrets.IMAGE_REPO_HOSTNAME }}/${{ secrets.IMAGE_REPO_NAMESPACE }}/console-operator-bundle - name: Build and Push Operator Catalog Image uses: docker/build-push-action@v6 with: - context: target/checkout/operator/target/ + context: target/checkout/operator/ platforms: ${{ env.PLATFORMS }} network: none provenance: false push: true - file: target/checkout/operator/target/catalog.Dockerfile + file: target/checkout/operator/src/main/docker/catalog.Dockerfile tags: | ${{ secrets.IMAGE_REPO_HOSTNAME }}/${{ secrets.IMAGE_REPO_NAMESPACE }}/console-operator-catalog:${{steps.metadata.outputs.current-version}} ${{ secrets.IMAGE_REPO_HOSTNAME }}/${{ secrets.IMAGE_REPO_NAMESPACE }}/console-operator-catalog:latest diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index f25bffbad..8b04860ee 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -98,7 +98,7 @@ jobs: # ==================== Operator-Bundle ==================== - name: Modify Bundle CSV Metadata - run: ./operator/bin/modify-bundle-metadata.sh "VERSION=${{ env.NEXT_VERSION }}" "SKIP_RANGE=>=0.0.1 <${{ env.NEXT_VERSION }}" + run: ./operator/bin/modify-bundle-metadata.sh "VERSION=${{ env.NEXT_VERSION }}" - name: Build and Push Operator Bundle Image uses: docker/build-push-action@v6 @@ -119,17 +119,18 @@ jobs: chmod +x opm sudo cp -v opm /usr/bin/ rm -vf opm - operator/bin/generate-catalog.sh ${{ env.NEXT_VERSION }} + operator/bin/generate-catalog.sh \ + ${{ secrets.IMAGE_REPO_HOSTNAME }}/${{ secrets.IMAGE_REPO_NAMESPACE }}/console-operator-bundle - name: Build and Push Operator Catalog Image uses: docker/build-push-action@v6 with: - context: operator/target/ + context: operator/ platforms: ${{ env.PLATFORMS }} network: none provenance: false push: true - file: operator/target/catalog.Dockerfile + file: operator/src/main/docker/catalog.Dockerfile tags: | ${{ secrets.IMAGE_REPO_HOSTNAME }}/${{ secrets.IMAGE_REPO_NAMESPACE }}/console-operator-catalog:${{ env.NEXT_VERSION }} ${{ secrets.IMAGE_REPO_HOSTNAME }}/${{ secrets.IMAGE_REPO_NAMESPACE }}/console-operator-catalog:snapshot-${{github.ref_name}} diff --git a/Makefile b/Makefile index 23c5799d5..b1ae58844 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ CONSOLE_OPERATOR_CATALOG_IMAGE ?= $(IMAGE_REGISTRY)/$(IMAGE_GROUP)/console-opera CONTAINER_RUNTIME ?= $(shell which podman || which docker) SKOPEO_TRANSPORT ?= $(shell which podman >/dev/null && echo "containers-storage:" || echo "docker-daemon:") ARCH ?= linux/amd64 -SKIP_RANGE ?= ">=1.0.0 <1.0.3" +SKIP_RANGE ?= "" CONSOLE_UI_NEXTAUTH_SECRET ?= $(shell openssl rand -base64 32) @@ -36,9 +36,9 @@ container-image-api-push: container-image-api container-image-operator: mvn package -am -pl operator -Pcontainer-image -DskipTests -Dquarkus.kubernetes.namespace='$${NAMESPACE}' -Dquarkus.container-image.image=$(CONSOLE_OPERATOR_IMAGE) operator/bin/modify-bundle-metadata.sh "VERSION=$(CSV_VERSION)" "SKIP_RANGE=$(SKIP_RANGE)" "SKOPEO_TRANSPORT=$(SKOPEO_TRANSPORT)" - operator/bin/generate-catalog.sh $(CSV_VERSION) + operator/bin/generate-catalog.sh operator/target/bundle/streamshub-console-operator $(CONTAINER_RUNTIME) build --platform=$(ARCH) -t $(CONSOLE_OPERATOR_BUNDLE_IMAGE) -f operator/target/bundle/streamshub-console-operator/bundle.Dockerfile - $(CONTAINER_RUNTIME) build --platform=$(ARCH) -t $(CONSOLE_OPERATOR_CATALOG_IMAGE) -f operator/target/catalog.Dockerfile + $(CONTAINER_RUNTIME) build --platform=$(ARCH) -t $(CONSOLE_OPERATOR_CATALOG_IMAGE) -f operator/src/main/docker/catalog.Dockerfile operator container-image-operator-push: container-image-operator skopeo copy --preserve-digests $(SKOPEO_TRANSPORT)$(CONSOLE_OPERATOR_IMAGE) docker://$(CONSOLE_OPERATOR_IMAGE) diff --git a/operator/bin/common.sh b/operator/bin/common.sh index 9ca5e8d22..358c57da2 100644 --- a/operator/bin/common.sh +++ b/operator/bin/common.sh @@ -1,17 +1,5 @@ #!/bin/bash -SCRIPT_PATH="$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)" - -BUNDLE_PATH=${SCRIPT_PATH}/../target/bundle/streamshub-console-operator/ -CSV_FILE_PATH=${BUNDLE_PATH}/manifests/streamshub-console-operator.clusterserviceversion.yaml -CATALOG_PATH=${SCRIPT_PATH}/../target/catalog -OPERATOR_CATALOG_CONFIG_YAML_PATH=${CATALOG_PATH}/operator.yaml -# Operator naming -ORIGINAL_OPERATOR_NAME="console-operator" -OPERATOR_NAME="streamshub-console-operator" -OPERATOR_INSTANCE_NAME="${OPERATOR_NAME}-v${VERSION}" -OPERATOR_CSV_NAME="${OPERATOR_NAME}.v${VERSION}" - YQ="$(which yq 2>/dev/null)" || : if [ "${YQ}" == "" ] ; then @@ -25,3 +13,6 @@ if [ "${SKOPEO}" == "" ] ; then echo "'skopeo' is not installed, please visit https://github.com/containers/skopeo/blob/main/install.md for more info" exit 1 fi + +# Operator naming +OPERATOR_NAME="streamshub-console-operator" diff --git a/operator/bin/generate-catalog.sh b/operator/bin/generate-catalog.sh index fa3b07a81..59a0ff227 100755 --- a/operator/bin/generate-catalog.sh +++ b/operator/bin/generate-catalog.sh @@ -1,33 +1,39 @@ #!/bin/bash +set -xEeuo pipefail + SCRIPT_PATH="$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)" -export VERSION="${1}" +export CONSOLE_OPERATOR_BUNDLE="${1:-}" +export USE_HTTP="${2:-false}" source ${SCRIPT_PATH}/common.sh +OPERATOR_PATH="$(cd -- "${SCRIPT_PATH}/.." >/dev/null 2>&1 ; pwd -P)" +CATALOG_PATH=${OPERATOR_PATH}/target/catalog -echo "[INFO] Generate catalog" - -rm -rvf ${CATALOG_PATH} ${CATALOG_PATH}.Dockerfile +echo "[INFO] Generate catalog in ${CATALOG_PATH}" +rm -rvf ${CATALOG_PATH} mkdir -p ${CATALOG_PATH} +cp -v ${OPERATOR_PATH}/src/main/olm/*.yaml ${CATALOG_PATH}/ + +for CSV_NAME in $(${YQ} '.entries[].name' ${CATALOG_PATH}/channel.alpha.yaml | sort -V) ; do + if [ -f ${OPERATOR_PATH}/src/main/olm/bundles/${CSV_NAME}.yaml ] ; then + BUNDLE_IMAGE=$(${YQ} '.image' ${OPERATOR_PATH}/src/main/olm/bundles/${CSV_NAME}.yaml) + elif [ -d ${CONSOLE_OPERATOR_BUNDLE} ] ; then + BUNDLE_IMAGE=${CONSOLE_OPERATOR_BUNDLE} + else + BUNDLE_IMAGE=${CONSOLE_OPERATOR_BUNDLE}:$(echo "${CSV_NAME}" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+(-snapshot)?$') + fi -opm generate dockerfile ${CATALOG_PATH} -opm init ${OPERATOR_NAME} --default-channel=alpha --output=yaml > ${OPERATOR_CATALOG_CONFIG_YAML_PATH} -opm render ${BUNDLE_PATH} --output=yaml >> ${OPERATOR_CATALOG_CONFIG_YAML_PATH} + RENDER_FLAGS='--output=yaml' -cat << EOF >> ${OPERATOR_CATALOG_CONFIG_YAML_PATH} ---- -schema: olm.channel -package: ${OPERATOR_NAME} -name: alpha -entries: - - name: ${OPERATOR_CSV_NAME} -EOF + if [ "${USE_HTTP}" == "true" ] ; then + RENDER_FLAGS="--use-http ${RENDER_FLAGS}" + fi -# Rename package names -${YQ} eval -o yaml -i ". |= select(.package == \"${ORIGINAL_OPERATOR_NAME}\").package = \"${OPERATOR_NAME}\"" "${OPERATOR_CATALOG_CONFIG_YAML_PATH}" -${YQ} eval -o yaml -i "(.properties[] | select(.value.packageName == \"${ORIGINAL_OPERATOR_NAME}\") | .value.packageName) = \"${OPERATOR_NAME}\"" "${OPERATOR_CATALOG_CONFIG_YAML_PATH}" + opm render ${BUNDLE_IMAGE} ${RENDER_FLAGS} > ${CATALOG_PATH}/${CSV_NAME}.yaml +done opm validate ${CATALOG_PATH} -echo "[DEBUG] Catalog generated" \ No newline at end of file +echo "[DEBUG] Catalog generated" diff --git a/operator/bin/modify-bundle-metadata.sh b/operator/bin/modify-bundle-metadata.sh index f5cdc2300..03203d004 100755 --- a/operator/bin/modify-bundle-metadata.sh +++ b/operator/bin/modify-bundle-metadata.sh @@ -1,27 +1,38 @@ #!/bin/bash +set -xEeuo pipefail + SCRIPT_PATH="$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)" VERSION="" SKIP_RANGE="" SKOPEO_TRANSPORT="docker://" -for ARGUMENT in "$@" -do +for ARGUMENT in "$@" ; do KEY=$(echo "$ARGUMENT" | sed 's/=\(.*\)//') VALUE=$(echo "$ARGUMENT" | sed 's/^[^=]*=//') case "$KEY" in VERSION) VERSION=${VALUE};; SKIP_RANGE) SKIP_RANGE=${VALUE};; - ORIGINAL_OPERATOR_NAME) ORIGINAL_OPERATOR_NAME=${VALUE};; SKOPEO_TRANSPORT) SKOPEO_TRANSPORT=${VALUE};; *) esac done +if [ -z "${VERSION}" ] ; then + echo "[ERROR] VERSION required" + exit 1 +fi + source ${SCRIPT_PATH}/common.sh +OPERATOR_INSTANCE_NAME="${OPERATOR_NAME}-v${VERSION}" +OPERATOR_CSV_NAME="${OPERATOR_NAME}.v${VERSION}" + +BUNDLE_PATH=${SCRIPT_PATH}/../target/bundle/streamshub-console-operator/ +CSV_FILE_PATH=${BUNDLE_PATH}/manifests/streamshub-console-operator.clusterserviceversion.yaml + api_name="console-api" ui_name="console-ui" operator_name="console-operator" diff --git a/operator/bin/release-prepare.sh b/operator/bin/release-prepare.sh new file mode 100755 index 000000000..eeebd5f80 --- /dev/null +++ b/operator/bin/release-prepare.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +set -xEeuo pipefail + +SCRIPT_PATH="$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)" +OPERATOR_PATH="$(cd -- "${SCRIPT_PATH}/.." >/dev/null 2>&1 ; pwd -P)" + +PRERELEASE_VERSION="${1?prerelease version is required}" +RELEASE_VERSION="${2?release version is required}" +POSTRELEASE_VERSION="${3?postrelease version is required}" +VERSION="${4?current version is required}" +IMAGE_NAME="${5?image name is required}" +GIT_STAGE="${6:-false}" + +source ${SCRIPT_PATH}/common.sh + +PRERELEASE_CSV_NAME="${OPERATOR_NAME}.v${PRERELEASE_VERSION}" +RELEASE_CSV_NAME="${OPERATOR_NAME}.v${RELEASE_VERSION}" +POSTRELEASE_CSV_NAME="${OPERATOR_NAME}.v${POSTRELEASE_VERSION}" + +if [ "${VERSION}" == "${POSTRELEASE_VERSION}" ] ; then + # Running via the `completionGoals` of the maven-release-plugin + echo "[INFO] Running release completion with version ${VERSION}" + + # Create new entry for the next development cycle, "replaces" the version just released + ${YQ} -i '.entries += { + "name": "'${POSTRELEASE_CSV_NAME}'", + "replaces": "'${RELEASE_CSV_NAME}'" + }' ${OPERATOR_PATH}/src/main/olm/channel.alpha.yaml + + if [ "${GIT_STAGE}" == "true" ] ; then + git add ${OPERATOR_PATH}/src/main/olm/channel.alpha.yaml + fi +else + # Running via the `preparationGoals` of the maven-release-plugin + echo "[INFO] Running release preparation for version ${VERSION}" + + # Change the name of the entry to be the released version (e.g removing the -snapshot suffix) + ${YQ} -i '(.entries[].name | select(. == "'${PRERELEASE_CSV_NAME}'")) = "'${RELEASE_CSV_NAME}'"' \ + ${OPERATOR_PATH}/src/main/olm/channel.alpha.yaml + + # Create a file with a reference to the bundle image to be generated during the release + echo "image: ${IMAGE_NAME}:${VERSION}" > ${OPERATOR_PATH}/src/main/olm/bundles/${RELEASE_CSV_NAME}.yaml + + if [ "${GIT_STAGE}" == "true" ] ; then + git add ${OPERATOR_PATH}/src/main/olm/channel.alpha.yaml ${OPERATOR_PATH}/src/main/olm/bundles/${RELEASE_CSV_NAME}.yaml + fi +fi diff --git a/operator/bin/version-check.sh b/operator/bin/version-check.sh new file mode 100755 index 000000000..640499716 --- /dev/null +++ b/operator/bin/version-check.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -xEeuo pipefail + +SCRIPT_PATH="$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)" +OPERATOR_PATH="$(cd -- "${SCRIPT_PATH}/.." >/dev/null 2>&1 ; pwd -P)" + +VERSION="${1?version is required}" + +source ${SCRIPT_PATH}/common.sh +OPERATOR_CSV_NAME="${OPERATOR_NAME}.v${VERSION}" +ALPHA_CHANNEL=${OPERATOR_PATH}/src/main/olm/channel.alpha.yaml + +if [ "$(${YQ} '(.entries[].name | select(. == "'${OPERATOR_CSV_NAME}'"))' ${ALPHA_CHANNEL})" != "" ] ; then + echo "[INFO] Bundle ${OPERATOR_CSV_NAME} has an entry in ${ALPHA_CHANNEL}" + exit 0; +fi + +echo "[ERROR] Bundle ${OPERATOR_CSV_NAME} has no entry in ${ALPHA_CHANNEL}" +exit 1; diff --git a/operator/pom.xml b/operator/pom.xml index e788653ce..fd97474c3 100644 --- a/operator/pom.xml +++ b/operator/pom.xml @@ -144,5 +144,38 @@ + + release-preparation + + + + org.codehaus.mojo + exec-maven-plugin + 3.3.0 + + + olm-channel-update + process-resources + + exec + + + bin/release-prepare.sh + + ${prereleaseVersion} + ${releaseVersion} + ${developmentVersion} + ${project.version} + ${container-image.registry}/${container-image.group}/console-operator-bundle + + true + + + + + + + + diff --git a/operator/src/main/docker/catalog.Dockerfile b/operator/src/main/docker/catalog.Dockerfile new file mode 100644 index 000000000..2d31e9941 --- /dev/null +++ b/operator/src/main/docker/catalog.Dockerfile @@ -0,0 +1,15 @@ +# The base image is expected to contain +# /bin/opm (with a serve subcommand) and /bin/grpc_health_probe +FROM quay.io/operator-framework/opm:v1.48.0 + +# Configure the entrypoint and command +ENTRYPOINT ["/bin/opm"] +CMD ["serve", "/configs", "--cache-dir=/tmp/cache"] + +# Copy declarative config root into image at /configs and pre-populate serve cache +ADD target/catalog /configs +RUN ["/bin/opm", "serve", "/configs", "--cache-dir=/tmp/cache", "--cache-only"] + +# Set DC-specific label for the location of the DC root directory +# in the image +LABEL operators.operatorframework.io.index.configs.v1=/configs diff --git a/operator/src/main/java/com/github/streamshub/console/ConsoleReconciler.java b/operator/src/main/java/com/github/streamshub/console/ConsoleReconciler.java index 7e5bc7109..a88f84316 100644 --- a/operator/src/main/java/com/github/streamshub/console/ConsoleReconciler.java +++ b/operator/src/main/java/com/github/streamshub/console/ConsoleReconciler.java @@ -143,7 +143,6 @@ capabilities = "Basic Install", categories = "Streaming & Messaging", certified = true, - skipRange = "placeholder", others = { @Annotation(name = "features.operators.openshift.io/fips-compliant", value = "true"), @Annotation(name = "features.operators.openshift.io/disconnected", value = "true"), diff --git a/operator/src/main/olm/bundles/README.md b/operator/src/main/olm/bundles/README.md new file mode 100644 index 000000000..3823c968b --- /dev/null +++ b/operator/src/main/olm/bundles/README.md @@ -0,0 +1,2 @@ +This directory contains bundle stub files with references to the images to be used +to render the actual bundle metadata placed in the operator's OLM catalog. diff --git a/operator/src/main/olm/bundles/streamshub-console-operator.v0.5.0.yaml b/operator/src/main/olm/bundles/streamshub-console-operator.v0.5.0.yaml new file mode 100644 index 000000000..fc953ac2b --- /dev/null +++ b/operator/src/main/olm/bundles/streamshub-console-operator.v0.5.0.yaml @@ -0,0 +1 @@ +image: quay.io/streamshub/console-operator-bundle:0.5.0 diff --git a/operator/src/main/olm/channel.alpha.yaml b/operator/src/main/olm/channel.alpha.yaml new file mode 100644 index 000000000..657becd78 --- /dev/null +++ b/operator/src/main/olm/channel.alpha.yaml @@ -0,0 +1,9 @@ +--- +schema: olm.channel +name: alpha +package: streamshub-console-operator +properties: [] +entries: + - name: streamshub-console-operator.v0.5.0 + - name: streamshub-console-operator.v0.6.0-snapshot + replaces: streamshub-console-operator.v0.5.0 diff --git a/operator/src/main/olm/package.yaml b/operator/src/main/olm/package.yaml new file mode 100644 index 000000000..a2d4e4cce --- /dev/null +++ b/operator/src/main/olm/package.yaml @@ -0,0 +1,5 @@ +--- +schema: olm.package +name: streamshub-console-operator +defaultChannel: alpha +properties: [] diff --git a/pom.xml b/pom.xml index 3e541fabd..5c14f63ae 100644 --- a/pom.xml +++ b/pom.xml @@ -266,6 +266,12 @@ release-preparation + + + + + + \ No newline at end of file