You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2026/09/20 17:27:04 UTC

(plc4x-extras) branch develop updated (fef8eb56 -> 52b0d615)

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

chrisdutz pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git


    from fef8eb56 chore: prepared the RELEASE_NOTES and the documentation version for the next version.
     new 4babbc40 chore: Made the scripts in Docker run under the current user's id.
     new 03e3ccf4 chore: change scm to point to github
     new fb363bb9 chore: stop the release scripts from assuming the remote is called "origin"
     new 52b0d615 chore: set the version back to 1.0.0-SNAPSHOT for a fresh 1.0.0 release

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 RELEASE_NOTES                                      |  13 ---
 plc4c/pom.xml                                      |   2 +-
 plc4go/pom.xml                                     |   2 +-
 plc4j/examples/hello-ads-telemetry/pom.xml         |   2 +-
 plc4j/examples/hello-cloud-azure/pom.xml           |   2 +-
 plc4j/examples/hello-cloud-google/pom.xml          |   2 +-
 plc4j/examples/hello-connectivity-mqtt/pom.xml     |   2 +-
 plc4j/examples/hello-discovery/pom.xml             |   2 +-
 .../examples/hello-influx-data-collection/pom.xml  |   2 +-
 plc4j/examples/hello-integration-iotdb/pom.xml     |   2 +-
 plc4j/examples/hello-nats/pom.xml                  |   2 +-
 plc4j/examples/hello-opm/pom.xml                   |   2 +-
 plc4j/examples/hello-webservice/pom.xml            |   2 +-
 plc4j/examples/hello-world-kotlin/pom.xml          |   2 +-
 .../hello-world-plc4x-discover-and-browse/pom.xml  |   2 +-
 plc4j/examples/hello-world-plc4x-read/pom.xml      |   2 +-
 plc4j/examples/hello-world-plc4x-subscribe/pom.xml |   2 +-
 plc4j/examples/hello-world-plc4x-write/pom.xml     |   2 +-
 plc4j/examples/poll-loop/pom.xml                   |   2 +-
 plc4j/examples/pom.xml                             |   2 +-
 plc4j/integrations/apache-calcite/pom.xml          |   2 +-
 plc4j/integrations/apache-kafka/pom.xml            |   2 +-
 .../apache-nifi/nifi-1/nifi-plc4x-nar/pom.xml      |   4 +-
 .../nifi-1/nifi-plc4x-processors/pom.xml           |   2 +-
 plc4j/integrations/apache-nifi/nifi-1/pom.xml      |   2 +-
 .../apache-nifi/nifi-2/nifi-2-plc4x-nar/pom.xml    |   4 +-
 .../nifi-2/nifi-2-plc4x-processors/pom.xml         |   2 +-
 plc4j/integrations/apache-nifi/nifi-2/pom.xml      |   2 +-
 plc4j/integrations/apache-nifi/pom.xml             |   2 +-
 plc4j/integrations/pom.xml                         |   2 +-
 plc4j/pom.xml                                      |   2 +-
 plc4j/tools/opcua-server/pom.xml                   |   2 +-
 plc4j/tools/plc4x-server/pom.xml                   |   2 +-
 plc4j/tools/pom.xml                                |   2 +-
 pom.xml                                            |   6 +-
 tools/Dockerfile                                   |   5 +-
 tools/docker-compose.yaml                          |  11 ++
 tools/release-0-build.sh                           |   8 ++
 tools/release-1-create-branch.sh                   |  15 ++-
 tools/release-2-prepare-release.sh                 |  29 ++++-
 tools/release-3-finish-release.sh                  |  21 ++--
 tools/release-abort.sh                             |  19 ++-
 tools/release-common.sh                            | 127 ++++++++++++++++++++-
 tools/release-preflight.sh                         |  90 +++++++++++++--
 44 files changed, 334 insertions(+), 80 deletions(-)


(plc4x-extras) 01/04: chore: Made the scripts in Docker run under the current user's id.

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

chrisdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git

commit 4babbc404d64167feaa2a6df3bc3333e2e623644
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Sep 20 18:19:24 2026 +0200

    chore: Made the scripts in Docker run under the current user's id.
    
    (cherry picked from commit 9015dba97f72a354cf9516e08dcc68377a652937)
---
 tools/Dockerfile                 |  5 ++++-
 tools/docker-compose.yaml        | 11 +++++++++++
 tools/release-0-build.sh         |  8 ++++++++
 tools/release-1-create-branch.sh |  8 ++++++++
 tools/release-abort.sh           |  8 ++++++++
 tools/release-common.sh          | 22 +++++++++++++++++++---
 6 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/tools/Dockerfile b/tools/Dockerfile
index 191e917f..d4496438 100644
--- a/tools/Dockerfile
+++ b/tools/Dockerfile
@@ -34,7 +34,10 @@ RUN apt install -y build-essential
 # Required for running on Windows systems
 RUN apt install -y dos2unix
 
-RUN git config --global --add safe.directory /ws
+# The release scripts can run this image as the calling user, so the exception for the
+# bind-mounted checkout has to live in the system config: a "--global" one lands in
+# "/root/.gitconfig", which that user never reads, and git then refuses to touch "/ws".
+RUN git config --system --add safe.directory /ws
 
 # Change the working directory (where commands are executed) into the new "ws" directory
 WORKDIR /ws
\ No newline at end of file
diff --git a/tools/docker-compose.yaml b/tools/docker-compose.yaml
index a5b7273b..455de288 100644
--- a/tools/docker-compose.yaml
+++ b/tools/docker-compose.yaml
@@ -24,6 +24,17 @@ services:
       dockerfile: ./tools/Dockerfile
     # Builds all modules and uses an alternate maven local repo and deploys artifacts to a local directory.
     command: ["/ws/mvnw", "-e", "-Dskip-pgp-signing=true", "-P", "with-c,with-go,with-java,apache-release", "-Dmaven.repo.local=/ws/out/.repository", "-DaltDeploymentRepository=snapshot-repo::file:/ws/out/.local-snapshots-dir", "clean", "deploy"]
+    # The build writes into the bind mount below. Running as root, everything it creates - "out",
+    # every "target", the commits the release plugin makes - stays owned by root once the container
+    # is gone. That only hurts on Linux: Docker Desktop on macOS and Windows remaps the ownership to
+    # the calling user anyway. The release scripts export RELEASE_UID/RELEASE_GID on Linux, and the
+    # "0:0" default below keeps the previous behaviour everywhere else.
+    user: "${RELEASE_UID:-0}:${RELEASE_GID:-0}"
+    environment:
+      # That uid has no entry in the image's "/etc/passwd", so HOME would fall back to "/", which is
+      # not writable - and "mvnw" unpacks Maven below HOME. Inside the mount it is writable for the
+      # same user and survives between runs.
+      - HOME=/ws/out/home
     volumes:
       # Bind the local directory as "/ws"
       - type: bind
diff --git a/tools/release-0-build.sh b/tools/release-0-build.sh
index 2f9235ff..bb83571b 100755
--- a/tools/release-0-build.sh
+++ b/tools/release-0-build.sh
@@ -20,6 +20,14 @@
 # ----------------------------------------------------------------------------
 
 DIRECTORY="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+# Values shared with the other release scripts (Nexus staging profile, dist.apache.org URLs) and the
+# ownership settings for the docker builds.
+if [[ ! -f "$DIRECTORY/tools/release-common.sh" ]]; then
+    echo "❌ '$DIRECTORY/tools/release-common.sh' not found, aborting."
+    exit 1
+fi
+# shellcheck source=release-common.sh
+source "$DIRECTORY/tools/release-common.sh"
 
 ########################################################################################################################
 # 0. Check Docker Memory Availability
diff --git a/tools/release-1-create-branch.sh b/tools/release-1-create-branch.sh
index 59b03886..0d9d5fb5 100755
--- a/tools/release-1-create-branch.sh
+++ b/tools/release-1-create-branch.sh
@@ -20,6 +20,14 @@
 # ----------------------------------------------------------------------------
 
 DIRECTORY="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+# Values shared with the other release scripts (Nexus staging profile, dist.apache.org URLs) and the
+# ownership settings for the docker builds.
+if [[ ! -f "$DIRECTORY/tools/release-common.sh" ]]; then
+    echo "❌ '$DIRECTORY/tools/release-common.sh' not found, aborting."
+    exit 1
+fi
+# shellcheck source=release-common.sh
+source "$DIRECTORY/tools/release-common.sh"
 
 
 # BSD and GNU sed disagree about "-i": BSD wants a backup suffix as a separate argument, GNU
diff --git a/tools/release-abort.sh b/tools/release-abort.sh
index 25101770..157f8b7a 100755
--- a/tools/release-abort.sh
+++ b/tools/release-abort.sh
@@ -24,6 +24,14 @@
 # deleted files from the PARENT of the checkout - and that is where the plc4x-build-tools and
 # plc4x-extras checkouts usually live - whenever the script was not started from "tools".
 DIRECTORY="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+# Values shared with the other release scripts (Nexus staging profile, dist.apache.org URLs) and the
+# ownership settings for the docker builds.
+if [[ ! -f "$DIRECTORY/tools/release-common.sh" ]]; then
+    echo "❌ '$DIRECTORY/tools/release-common.sh' not found, aborting."
+    exit 1
+fi
+# shellcheck source=release-common.sh
+source "$DIRECTORY/tools/release-common.sh"
 
 ########################################################################################################################
 # 1. Work out what to roll the versions back to
diff --git a/tools/release-common.sh b/tools/release-common.sh
index 490b733c..0ae6624b 100644
--- a/tools/release-common.sh
+++ b/tools/release-common.sh
@@ -19,9 +19,9 @@
 # shellcheck shell=bash
 # shellcheck disable=SC2034  # these are consumed by the scripts that source this file
 
-# Values that more than one of the release scripts has to agree on. Sourced by
-# "release-2-prepare-release.sh", "release-3-finish-release.sh" and "validate-release.sh" - it is
-# not meant to be executed.
+# Values that more than one of the release scripts has to agree on, and the ownership settings
+# every script that starts the releaser container needs. Sourced by all of the "release-*"
+# scripts and by "validate-release.sh" - it is not meant to be executed.
 
 # The Nexus staging profile of "org.apache.plc4x". If deploying to Nexus starts failing with
 # "404 not found", this is the first thing to check: log in to $NEXUS_URL, open "Staging Profiles",
@@ -44,3 +44,19 @@ DIST_BASE="https://dist.apache.org/repos/dist"
 DIST_DEV="$DIST_BASE/dev/plc4x/plc4x-extras"
 DIST_RELEASE="$DIST_BASE/release/plc4x/plc4x-extras"
 KEYS_URL="$DIST_BASE/release/plc4x/KEYS"
+
+# The docker-compose file runs the releaser container as "$RELEASE_UID:$RELEASE_GID", defaulting to
+# "0:0". Only Linux needs the override: there the bind-mounted checkout keeps the uid the container
+# used, so a build as root leaves an "out" directory, "target" directories and release commits that
+# the user running these scripts can no longer delete. Docker Desktop on macOS and Windows remaps
+# the ownership by itself, so the default is left alone there.
+if [[ "$(uname)" == "Linux" ]]; then
+  RELEASE_UID="$(id -u)"
+  RELEASE_GID="$(id -g)"
+  export RELEASE_UID RELEASE_GID
+fi
+
+# HOME for the container, see the docker-compose file. Created here because the container may not be
+# able to create it itself: the mount root belongs to the user, but a missing directory would have to
+# be created by whoever runs the build.
+mkdir -p "$DIRECTORY/out/home"


(plc4x-extras) 02/04: chore: change scm to point to github

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

chrisdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git

commit 03e3ccf4979bd9f66fdfc3efd28e552851a0276c
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Sep 20 19:11:59 2026 +0200

    chore: change scm to point to github
    
    Pulled back from "rel/1.0" (5e17736). Only the two scm URLs are taken from
    that commit: the rest of it rolled the poms from 1.0.1-SNAPSHOT back to
    1.0.0-SNAPSHOT, which belongs to the release branch and not here.
    
    Co-authored-by: Unai Lería Fortea <qu...@apache.org>
    Co-Authored-By: Claude Opus 5 (1M context) <no...@anthropic.com>
---
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index ed3a6280..65dbfbb7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,8 +42,8 @@
   <inceptionYear>2017</inceptionYear>
 
   <scm>
-    <connection>scm:git:https://gitbox.apache.org/repos/asf/plc4x-extras.git</connection>
-    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/plc4x-extras.git</developerConnection>
+    <connection>scm:git:https://github.com/apache/plc4x-extras.git</connection>
+    <developerConnection>scm:git:https://github.com/apache/plc4x-extras.git</developerConnection>
     <url>https://github.com/apache/plc4x-extras</url>
     <tag>HEAD</tag>
   </scm>


(plc4x-extras) 03/04: chore: stop the release scripts from assuming the remote is called "origin"

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

chrisdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git

commit fb363bb9282182c4a62c247d17d866d40ab4966d
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Sep 20 19:16:57 2026 +0200

    chore: stop the release scripts from assuming the remote is called "origin"
    
    The Apache repository is now found by matching the remotes of the checkout
    against its URL - gitbox or the GitHub mirror, over ssh or https - rather than
    by name. Anybody who followed the contributing guide has their own fork as
    "origin", so the release branch and the release tag were pushed into the fork.
    PLC4X_REMOTE overrides the match; zero or several matches stop the script
    before anything is done in the wrong repository.
    
    "release-preflight.sh" reports the resolved remote, and additionally checks
    that it is an ssh URL and that the host accepts the key without prompting:
    every push a release makes goes out through these scripts over the course of an
    hour, and over https each one of them needs a password or a credential helper.
    Its leftover "echo $DIRECTORY" debug line is gone too.
    
    "release:prepare" now runs with -DpushChanges=false, as "release:branch"
    already did, because the release container has no credentials. The release
    commits and the release tag are pushed from the host instead - the tag
    explicitly, since "release:perform" checks it out from the remote and a plain
    "git push" does not carry tags.
    
    Mirrors the same change in the plc4x repository.
    
    Co-Authored-By: Claude Opus 5 (1M context) <no...@anthropic.com>
---
 tools/release-1-create-branch.sh   |   7 ++-
 tools/release-2-prepare-release.sh |  29 ++++++++--
 tools/release-3-finish-release.sh  |  21 +++++---
 tools/release-abort.sh             |  11 ++--
 tools/release-common.sh            | 105 +++++++++++++++++++++++++++++++++++++
 tools/release-preflight.sh         |  90 ++++++++++++++++++++++++++++---
 6 files changed, 238 insertions(+), 25 deletions(-)

diff --git a/tools/release-1-create-branch.sh b/tools/release-1-create-branch.sh
index 0d9d5fb5..03b75d57 100755
--- a/tools/release-1-create-branch.sh
+++ b/tools/release-1-create-branch.sh
@@ -54,6 +54,11 @@ if [[ $(git -C "$DIRECTORY" status --porcelain) ]]; then
   exit 1
 fi
 
+# The release branch and the release tag belong in the Apache repository, which is not necessarily
+# the remote called "origin" - see "resolve_apache_remote" in "release-common.sh".
+require_apache_remote
+echo "Apache remote:        $APACHE_REMOTE ($APACHE_REMOTE_URL)"
+
 ########################################################################################################################
 # 1. Get and calculate the current version (local)
 ########################################################################################################################
@@ -198,7 +203,7 @@ fi
 
 
 # Make sure the release branch is also pushed to the remote.
-if ! git -C "$DIRECTORY" push --set-upstream origin "$BRANCH_NAME"; then
+if ! git -C "$DIRECTORY" push --set-upstream "$APACHE_REMOTE" "$BRANCH_NAME"; then
     echo "❌ Got non-0 exit code from pushing changes, aborting."
     exit 1
 fi
diff --git a/tools/release-2-prepare-release.sh b/tools/release-2-prepare-release.sh
index b483815a..1c92d286 100755
--- a/tools/release-2-prepare-release.sh
+++ b/tools/release-2-prepare-release.sh
@@ -39,6 +39,11 @@ if [[ $(git -C "$DIRECTORY" status --porcelain) ]]; then
   exit 1
 fi
 
+# The release branch and the release tag belong in the Apache repository, which is not necessarily
+# the remote called "origin" - see "resolve_apache_remote" in "release-common.sh".
+require_apache_remote
+echo "Apache remote:        $APACHE_REMOTE ($APACHE_REMOTE_URL)"
+
 # Maven 4 prefixes even quiet output with "[INFO] [stdout] ", so take the last token of the
 # last line rather than the whole output.
 PROJECT_VERSION=$("$DIRECTORY"/mvnw -f "$DIRECTORY"/pom.xml -q --non-recursive -Dexpression=project.version -DforceStdout help:evaluate | tail -n 1 | awk '{print $NF}')
@@ -61,11 +66,11 @@ else
 fi
 
 # Check if a remote tag already exists (This can happen if a first release attempt failed)
-if git -C "$DIRECTORY" ls-remote --tags origin | grep -q "refs/tags/$TAG_NAME$"; then
-  echo "❌ Tag '$TAG_NAME' exists on remote 'origin'. Please delete with 'git push origin --delete $TAG_NAME'"
+if git -C "$DIRECTORY" ls-remote --tags "$APACHE_REMOTE" | grep -q "refs/tags/$TAG_NAME$"; then
+  echo "❌ Tag '$TAG_NAME' exists on remote '$APACHE_REMOTE'. Please delete with 'git push $APACHE_REMOTE --delete $TAG_NAME'"
   exit 1
 else
-  echo "✅ Tag '$TAG_NAME' does not exist on remote 'origin'."
+  echo "✅ Tag '$TAG_NAME' does not exist on remote '$APACHE_REMOTE'."
 fi
 
 ########################################################################################################################
@@ -100,7 +105,7 @@ if ! docker compose -f "$DIRECTORY/tools/docker-compose.yaml" run releaser \
              GIT_CONFIG_KEY_1=user.email GIT_CONFIG_VALUE_1=\"$GIT_USER_EMAIL\" \
              GIT_CONFIG_KEY_2=commit.gpgsign GIT_CONFIG_VALUE_2=false \
              GIT_CONFIG_KEY_3=tag.gpgsign GIT_CONFIG_VALUE_3=false && \
-           /ws/mvnw -e -P with-c,with-go,with-java -Dmaven.repo.local=/ws/out/.repository release:prepare -DautoVersionSubmodules=true -DreleaseVersion='$RELEASE_VERSION' -DdevelopmentVersion='$NEW_VERSION' -Dtag='$TAG_NAME'"; then
+           /ws/mvnw -e -P with-c,with-go,with-java -Dmaven.repo.local=/ws/out/.repository release:prepare -DautoVersionSubmodules=true -DpushChanges=false -DreleaseVersion='$RELEASE_VERSION' -DdevelopmentVersion='$NEW_VERSION' -Dtag='$TAG_NAME'"; then
     echo "❌ Got non-0 exit code from docker compose, aborting."
     exit 1
 fi
@@ -109,11 +114,25 @@ fi
 # 2. Push the changes (local)
 ########################################################################################################################
 
-if ! git -C "$DIRECTORY" push; then
+# "release:prepare" ran with "-DpushChanges=false", so the release commits and the tag it created
+# are still local. The container it ran in has no ssh key, no credential helper and no terminal, so
+# its own push would have failed - after the full build that precedes it. Pushing from the host
+# instead uses the release manager's credentials.
+#
+# The tag has to go with them, and it has to go now: "release:perform" below checks the tag out
+# from the remote, not from this working copy.
+if ! git -C "$DIRECTORY" push "$APACHE_REMOTE" HEAD; then
     echo "❌ Got non-0 exit code from pushing changes to git, aborting."
     exit 1
 fi
 
+if ! git -C "$DIRECTORY" push "$APACHE_REMOTE" "$TAG_NAME"; then
+    echo "❌ Got non-0 exit code from pushing the release tag to git, aborting."
+    echo "   The commits are already pushed, so only the tag is missing:"
+    echo "     git push $APACHE_REMOTE $TAG_NAME"
+    exit 1
+fi
+
 TAG_COMMIT_HASH=$(git -C "$DIRECTORY" rev-list -n 1 "$TAG_NAME")
 echo "✅ Tag '$TAG_NAME' has hash '$TAG_COMMIT_HASH'"
 
diff --git a/tools/release-3-finish-release.sh b/tools/release-3-finish-release.sh
index 2f0c96d4..fc8fb2d7 100755
--- a/tools/release-3-finish-release.sh
+++ b/tools/release-3-finish-release.sh
@@ -39,6 +39,11 @@ if [[ $(git -C "$DIRECTORY" status --porcelain) ]]; then
   exit 1
 fi
 
+# The release branch and the release tag belong in the Apache repository, which is not necessarily
+# the remote called "origin" - see "resolve_apache_remote" in "release-common.sh".
+require_apache_remote
+echo "Apache remote:        $APACHE_REMOTE ($APACHE_REMOTE_URL)"
+
 # Everything below writes to the release branch, so make sure that is where we are before
 # anything is changed - running this on "develop" by accident would rewrite its documentation
 # version.
@@ -353,7 +358,7 @@ update_download_page() {
 # # throw-away worktree and pushed straight to "develop" - the release branch stays checked out in
 # # the working copy the release manager is using.
 
-# if ! git -C "$DIRECTORY" fetch origin develop; then
+# if ! git -C "$DIRECTORY" fetch "$APACHE_REMOTE" develop; then
 #     echo "❌ Got non-0 exit code from fetching 'develop', aborting."
 #     exit 1
 # fi
@@ -369,7 +374,7 @@ update_download_page() {
 
 # # A detached worktree, so this works even if "develop" happens to be checked out somewhere else.
 # rmdir "$DEVELOP_WORKTREE"
-# if ! git -C "$DIRECTORY" worktree add --detach "$DEVELOP_WORKTREE" origin/develop; then
+# if ! git -C "$DIRECTORY" worktree add --detach "$DEVELOP_WORKTREE" "$APACHE_REMOTE/develop"; then
 #     echo "❌ Got non-0 exit code from creating a worktree for 'develop', aborting."
 #     exit 1
 # fi
@@ -490,7 +495,7 @@ update_download_page() {
 #         echo "❌ Got non-0 exit code from committing the changed files, aborting."
 #         exit 1
 #     files
-#     if ! git -C "$DEVELOP_WORKTREE" push origin HEAD:develop; then
+#     if ! git -C "$DEVELOP_WORKTREE" push "$APACHE_REMOTE" HEAD:develop; then
 #         echo "❌ Got non-0 exit code from pushing to 'develop', aborting."
 #         echo "   Someone probably pushed to 'develop' in the meantime - re-run this script."
 #         exit 1
@@ -734,14 +739,14 @@ fi
 # The check is a recommendation, not a veto - the question is always asked, because "which line is
 # the current one" is a decision for the release manager, not for a "sort -V".
 
-if ! git -C "$DIRECTORY" fetch origin release; then
+if ! git -C "$DIRECTORY" fetch "$APACHE_REMOTE" release; then
     echo "⚠️  Could not fetch the 'release' branch, skipping it."
     echo "   Merge '$RELEASE_TAG' into it by hand if it should carry $RELEASED_VERSION."
-elif git -C "$DIRECTORY" merge-base --is-ancestor "$RELEASE_TAG" origin/release; then
+elif git -C "$DIRECTORY" merge-base --is-ancestor "$RELEASE_TAG" "$APACHE_REMOTE/release"; then
     echo "✅ The 'release' branch already contains $RELEASE_TAG."
 else
     # What the branch carries now, so the prompt can say what would be replaced.
-    RELEASE_BRANCH_TAG=$(git -C "$DIRECTORY" describe --tags --abbrev=0 --match "v*" origin/release 2>/dev/null)
+    RELEASE_BRANCH_TAG=$(git -C "$DIRECTORY" describe --tags --abbrev=0 --match "v*" "$APACHE_REMOTE/release" 2>/dev/null)
     RELEASE_BRANCH_VERSION=${RELEASE_BRANCH_TAG#v}
 
     echo
@@ -773,7 +778,7 @@ else
         }
         trap cleanup_release_worktree EXIT
         rmdir "$RELEASE_WORKTREE"
-        if ! git -C "$DIRECTORY" worktree add --detach "$RELEASE_WORKTREE" origin/release; then
+        if ! git -C "$DIRECTORY" worktree add --detach "$RELEASE_WORKTREE" "$APACHE_REMOTE/release"; then
             echo "❌ Got non-0 exit code from creating a worktree for 'release', aborting."
             exit 1
         fi
@@ -799,7 +804,7 @@ else
 
         # The merge has "release" as its first parent, so this fast-forwards - no force needed,
         # which also means the ".asf.yaml" protection on the branch is never in the way.
-        if ! git -C "$RELEASE_WORKTREE" push origin HEAD:release; then
+        if ! git -C "$RELEASE_WORKTREE" push "$APACHE_REMOTE" HEAD:release; then
             echo "❌ Got non-0 exit code from pushing the 'release' branch, aborting."
             exit 1
         fi
diff --git a/tools/release-abort.sh b/tools/release-abort.sh
index 157f8b7a..7774506f 100755
--- a/tools/release-abort.sh
+++ b/tools/release-abort.sh
@@ -33,6 +33,11 @@ fi
 # shellcheck source=release-common.sh
 source "$DIRECTORY/tools/release-common.sh"
 
+# The release branch and the release tag belong in the Apache repository, which is not necessarily
+# the remote called "origin" - see "resolve_apache_remote" in "release-common.sh".
+require_apache_remote
+echo "Apache remote:        $APACHE_REMOTE ($APACHE_REMOTE_URL)"
+
 ########################################################################################################################
 # 1. Work out what to roll the versions back to
 ########################################################################################################################
@@ -102,7 +107,7 @@ delete_ref() {
   else
     git -C "$DIRECTORY" show-ref --verify --quiet "refs/tags/$name" && exists_local=true
   fi
-  git -C "$DIRECTORY" ls-remote --exit-code origin "$name" > /dev/null 2>&1 && exists_remote=true
+  git -C "$DIRECTORY" ls-remote --exit-code "$APACHE_REMOTE" "$name" > /dev/null 2>&1 && exists_remote=true
 
   if [[ "$exists_local" == false && "$exists_remote" == false ]]; then
     echo "✅ No $kind '$name' to delete."
@@ -126,10 +131,10 @@ delete_ref() {
 
 delete_ref tag "$TAG_NAME" \
     "git -C \"$DIRECTORY\" tag -d \"$TAG_NAME\"" \
-    "git -C \"$DIRECTORY\" push origin --delete \"$TAG_NAME\""
+    "git -C \"$DIRECTORY\" push $APACHE_REMOTE --delete \"$TAG_NAME\""
 delete_ref branch "$BRANCH_NAME" \
     "git -C \"$DIRECTORY\" branch -D \"$BRANCH_NAME\"" \
-    "git -C \"$DIRECTORY\" push origin --delete \"$BRANCH_NAME\""
+    "git -C \"$DIRECTORY\" push $APACHE_REMOTE --delete \"$BRANCH_NAME\""
 
 ########################################################################################################################
 # 5. What this does not undo
diff --git a/tools/release-common.sh b/tools/release-common.sh
index 0ae6624b..eb63cae6 100644
--- a/tools/release-common.sh
+++ b/tools/release-common.sh
@@ -60,3 +60,108 @@ fi
 # able to create it itself: the mount root belongs to the user, but a missing directory would have to
 # be created by whoever runs the build.
 mkdir -p "$DIRECTORY/out/home"
+
+# ----------------------------------------------------------------------------------------------
+# Finding the Apache remote
+# ----------------------------------------------------------------------------------------------
+# Not everybody clones the Apache repository as "origin". The contributor workflow the website
+# documents has you fork on GitHub, clone the fork as "origin" and add the Apache repository under
+# a second name - usually "upstream". Every "git push origin" in the release scripts then pushed
+# the release branch and the release tag into that fork instead. So rather than trusting a name,
+# the remotes are matched by URL against the canonical repository, on gitbox or on the GitHub
+# mirror, over ssh or over https.
+
+# The repository this checkout is a clone of, as it is named under "apache/" and "repos/asf/".
+APACHE_REPO_NAME="plc4x-extras"
+
+# Filled in by "resolve_apache_remote": the name and URL of the remote that points at the Apache
+# repository, or an empty name and the reason in APACHE_REMOTE_PROBLEM.
+APACHE_REMOTE=""
+APACHE_REMOTE_URL=""
+APACHE_REMOTE_PROBLEM=""
+# How many remotes matched, so that the help below does not tell somebody who already has the
+# repository as a remote to add it again.
+APACHE_REMOTE_MATCHES=0
+
+resolve_apache_remote() {
+    APACHE_REMOTE=""
+    APACHE_REMOTE_URL=""
+    APACHE_REMOTE_PROBLEM=""
+    APACHE_REMOTE_MATCHES=0
+
+    # An explicit override wins over the URL match, for everything the match cannot know about:
+    # a mirror, a private clone a release is rehearsed in, a host that is reached through a proxy.
+    if [[ -n "${PLC4X_REMOTE:-}" ]]; then
+        if APACHE_REMOTE_URL=$(git -C "$DIRECTORY" remote get-url "$PLC4X_REMOTE" 2>/dev/null); then
+            APACHE_REMOTE="$PLC4X_REMOTE"
+        else
+            APACHE_REMOTE_URL=""
+            APACHE_REMOTE_PROBLEM="PLC4X_REMOTE is set to '$PLC4X_REMOTE', but this checkout has no remote of that name."
+        fi
+        return
+    fi
+
+    # Anchored at the end so that, in the "plc4x" checkout, "apache/plc4x-extras" is not taken for
+    # "apache/plc4x". The optional ".git" and trailing slash cover the ways the URL gets written.
+    local pattern="(gitbox\.apache\.org[:/]repos/asf/${APACHE_REPO_NAME}|github\.com[:/]apache/${APACHE_REPO_NAME})(\.git)?/?$"
+    local matches=()
+    local name url
+    while read -r name url; do
+        [[ -z "$name" ]] && continue
+        if [[ "$url" =~ $pattern ]]; then
+            matches+=("$name")
+        fi
+    done < <(git -C "$DIRECTORY" remote -v 2>/dev/null | awk '$3 == "(fetch)" { print $1, $2 }')
+
+    APACHE_REMOTE_MATCHES=${#matches[@]}
+    case ${#matches[@]} in
+        0)
+            APACHE_REMOTE_PROBLEM="No remote of this checkout points at the Apache '$APACHE_REPO_NAME' repository."
+            ;;
+        1)
+            APACHE_REMOTE="${matches[0]}"
+            APACHE_REMOTE_URL=$(git -C "$DIRECTORY" remote get-url "$APACHE_REMOTE" 2>/dev/null)
+            ;;
+        *)
+            # Deliberately not guessed at: which of them the release ends up in is not a decision
+            # a release script should make on its own.
+            APACHE_REMOTE_PROBLEM="Several remotes point at the Apache '$APACHE_REPO_NAME' repository: ${matches[*]}."
+            ;;
+    esac
+}
+
+# Prints what the remotes of this checkout are and the two ways out of it. Only useful once
+# "resolve_apache_remote" has failed.
+apache_remote_help() {
+    local remotes
+    remotes=$(git -C "$DIRECTORY" remote -v 2>/dev/null | awk '$3 == "(fetch)" { printf "     %-12s %s\n", $1, $2 }')
+    echo "   Remotes of this checkout:"
+    if [[ -n "$remotes" ]]; then
+        echo "$remotes"
+    else
+        echo "     (none)"
+    fi
+    if [[ "$APACHE_REMOTE_MATCHES" -eq 0 ]]; then
+        echo "   Add the Apache repository as a remote:"
+        echo "     git remote add apache https://github.com/apache/$APACHE_REPO_NAME.git"
+        echo "   Or name the remote the release should use explicitly:"
+    else
+        echo "   Name the remote the release should use explicitly:"
+    fi
+    echo "     export PLC4X_REMOTE=<remote-name>"
+}
+
+# For the scripts that push, fetch or query the remote: resolve it, or stop before anything is
+# done in the wrong repository.
+require_apache_remote() {
+    resolve_apache_remote
+    if [[ -z "$APACHE_REMOTE" ]]; then
+        echo "❌ $APACHE_REMOTE_PROBLEM"
+        apache_remote_help
+        exit 1
+    fi
+}
+
+# Resolved once here so that every script that sources this file has APACHE_REMOTE available.
+# Scripts that actually talk to the remote call "require_apache_remote" to insist on it.
+resolve_apache_remote
diff --git a/tools/release-preflight.sh b/tools/release-preflight.sh
index b9610ed3..87f88716 100755
--- a/tools/release-preflight.sh
+++ b/tools/release-preflight.sh
@@ -36,8 +36,6 @@
 
 DIRECTORY="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
 
-echo $DIRECTORY
-
 if [[ ! -f "$DIRECTORY/tools/release-common.sh" ]]; then
     echo "❌ '$DIRECTORY/tools/release-common.sh' not found, aborting."
     exit 1
@@ -77,7 +75,7 @@ ok() {
 echo
 echo "── Tools ─────────────────────────────────────────────────────────────────────"
 
-for tool in git docker gpg svn curl java shasum; do
+for tool in git docker gpg ssh svn curl java shasum; do
     if command -v "$tool" > /dev/null 2>&1; then
         ok "'$tool' is installed"
     else
@@ -115,16 +113,92 @@ else
     ok "The working tree is clean"
 fi
 
-if [[ "$OFFLINE" == false ]]; then
+# Nobody has to clone the Apache repository as "origin" - the contributor workflow documented on
+# the website has you clone your own fork under that name and add the Apache one as a second
+# remote. The release scripts therefore look the remote up by URL, and if that does not come down
+# to exactly one remote, every push and fetch of the release would go to the wrong repository.
+if [[ -n "$APACHE_REMOTE" ]]; then
+    ok "The Apache repository is the remote '$APACHE_REMOTE' ($APACHE_REMOTE_URL)"
+else
+    fail "$APACHE_REMOTE_PROBLEM"
+    apache_remote_help
+fi
+
+# Everything the release pushes - the release branch, the release commits, the release tag, the
+# merges back into "develop" and "release" - goes out through these scripts, in the middle of a
+# run that takes the better part of an hour. Over https every one of them needs a password or a
+# credential helper; with an ssh key the agent already holds, none of them needs anything. The
+# release is run over ssh for that reason, so an https remote is treated as a setup error here
+# rather than as something to find out about between two builds.
+if [[ -n "$APACHE_REMOTE" ]]; then
+    # "ssh://[user@]host[:port]/path" and the scp-like "[user@]host:path" are the two spellings
+    # git accepts for ssh. Anything else with a scheme - https, git, file - is not one of them.
+    SSH_TARGET=""
+    case "$APACHE_REMOTE_URL" in
+        ssh://*)
+            SSH_TARGET="${APACHE_REMOTE_URL#ssh://}"
+            SSH_TARGET="${SSH_TARGET%%/*}"
+            # A port would make this no longer a host name ssh can be handed on its own.
+            SSH_TARGET="${SSH_TARGET%:[0-9]*}"
+            ;;
+        *://*)
+            SSH_TARGET=""
+            ;;
+        *:*)
+            SSH_TARGET="${APACHE_REMOTE_URL%%:*}"
+            ;;
+    esac
+    # The part after "user@", for the messages - "github.com" reads better than "git@github.com".
+    SSH_HOST="${SSH_TARGET##*@}"
+
+    if [[ -n "$SSH_TARGET" ]]; then
+        ok "The remote '$APACHE_REMOTE' uses ssh, so key based authentication applies"
+    else
+        fail "The remote '$APACHE_REMOTE' uses '$APACHE_REMOTE_URL', which needs a password or a credential helper the release cannot ask for."
+        echo "   Switch it to ssh:"
+        echo "     git remote set-url $APACHE_REMOTE git@github.com:apache/$APACHE_REPO_NAME.git"
+    fi
+
+    if [[ "$OFFLINE" == false && -n "$SSH_TARGET" ]]; then
+        # "BatchMode" makes ssh fail rather than ask for a passphrase or a password, which is the
+        # situation the release is in. "accept-new" keeps a host this machine has never talked to
+        # from turning into a prompt. Neither GitHub nor gitbox give out a shell, so a successful
+        # login still exits non-zero - the greeting is what says it worked.
+        SSH_OUTPUT=$(ssh -T -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 "$SSH_TARGET" 2>&1)
+        SSH_STATUS=$?
+        # Both GitHub and gitbox greet with "Hi <account>!", which is worth showing: it is the
+        # account the release will be pushed as, and not necessarily the one you expect.
+        SSH_USER=$(echo "$SSH_OUTPUT" | sed -n 's/^Hi \([^!]*\)!.*/\1/p' | head -n 1)
+        SSH_AS=""
+        if [[ -n "$SSH_USER" ]]; then
+            SSH_AS=" (as '$SSH_USER')"
+        fi
+        if [[ $SSH_STATUS -eq 0 ]] || echo "$SSH_OUTPUT" | grep -qiE "successfully authenticated|^Hi |welcome"; then
+            ok "ssh key based authentication to '$SSH_HOST' works$SSH_AS"
+        elif echo "$SSH_OUTPUT" | grep -qiE "permission denied|publickey|no such identity|host key verification failed|too many authentication failures"; then
+            fail "ssh key based authentication to '$SSH_HOST' does not work: $(echo "$SSH_OUTPUT" | tail -n 1)"
+            echo "   The release pushes without a terminal, so the key has to work without a prompt:"
+            echo "     ssh-add ~/.ssh/id_ed25519      # or whichever key is registered with $SSH_HOST"
+            echo "   and the matching public key has to be registered with your $SSH_HOST account."
+        else
+            # A network that is down or a host that is unreachable says nothing about the key.
+            warn "Could not test ssh against '$SSH_HOST': $(echo "$SSH_OUTPUT" | tail -n 1)"
+        fi
+    fi
+fi
+
+# Without a remote to push to there is nothing to authenticate against, and trying it against a
+# fork would only prove access to the fork.
+if [[ "$OFFLINE" == false && -n "$APACHE_REMOTE" ]]; then
     # This authenticates against the remote without changing anything. It does not prove the push
     # will be accepted: the ".asf.yaml" rulesets are evaluated on the real push, and a bypass only
     # applies to the identity that ends up pushing.
-    PUSH_OUTPUT=$(git -C "$DIRECTORY" push --dry-run origin HEAD 2>&1)
+    PUSH_OUTPUT=$(git -C "$DIRECTORY" push --dry-run "$APACHE_REMOTE" HEAD 2>&1)
     PUSH_STATUS=$?
     if [[ $PUSH_STATUS -eq 0 ]]; then
-        ok "Can authenticate against 'origin' for pushing"
-    elif echo "$PUSH_OUTPUT" | grep -qiE "permission denied|authentication|403|could not read from remote"; then
-        fail "Cannot push to 'origin' - check the remote, your ssh key and your access rights."
+        ok "Can authenticate against '$APACHE_REMOTE' for pushing"
+    elif echo "$PUSH_OUTPUT" | grep -qiE "permission denied|authentication|403|could not read from remote|could not read username"; then
+        fail "Cannot push to '$APACHE_REMOTE' - check the remote, your ssh key and your access rights."
     else
         # A rejected push is a different matter than a rejected login: the branch may simply have
         # moved on, which is not something this check has an opinion about.


(plc4x-extras) 04/04: chore: set the version back to 1.0.0-SNAPSHOT for a fresh 1.0.0 release

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

chrisdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git

commit 52b0d615a79719b5c5d6f484192b250412eb1793
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Sep 20 19:24:04 2026 +0200

    chore: set the version back to 1.0.0-SNAPSHOT for a fresh 1.0.0 release
    
    The first attempt at releasing 1.0.0 is being thrown away: it never got past
    "release-2", the tag was never pushed, nothing was staged on dist.apache.org
    and only 0.13.1 is published, so the version is free to be used again.
    
    This undoes what the release left behind on "develop": the 34 poms go back
    from 1.1.0-SNAPSHOT to 1.0.0-SNAPSHOT, and the "(Unreleased) Apache PLC4X
    Extras 1.1.0-SNAPSHOT" block is dropped from the RELEASE_NOTES, so the 1.0.0
    section is the upcoming release again.
    
    Deliberately left alone: the "project.build.outputTimestamp" values the
    release plugin rewrote, which it sets again on the next release anyway, and the
    scm URLs, which now point at GitHub on purpose.
    
    Co-Authored-By: Claude Opus 5 (1M context) <no...@anthropic.com>
---
 RELEASE_NOTES                                               | 13 -------------
 plc4c/pom.xml                                               |  2 +-
 plc4go/pom.xml                                              |  2 +-
 plc4j/examples/hello-ads-telemetry/pom.xml                  |  2 +-
 plc4j/examples/hello-cloud-azure/pom.xml                    |  2 +-
 plc4j/examples/hello-cloud-google/pom.xml                   |  2 +-
 plc4j/examples/hello-connectivity-mqtt/pom.xml              |  2 +-
 plc4j/examples/hello-discovery/pom.xml                      |  2 +-
 plc4j/examples/hello-influx-data-collection/pom.xml         |  2 +-
 plc4j/examples/hello-integration-iotdb/pom.xml              |  2 +-
 plc4j/examples/hello-nats/pom.xml                           |  2 +-
 plc4j/examples/hello-opm/pom.xml                            |  2 +-
 plc4j/examples/hello-webservice/pom.xml                     |  2 +-
 plc4j/examples/hello-world-kotlin/pom.xml                   |  2 +-
 .../examples/hello-world-plc4x-discover-and-browse/pom.xml  |  2 +-
 plc4j/examples/hello-world-plc4x-read/pom.xml               |  2 +-
 plc4j/examples/hello-world-plc4x-subscribe/pom.xml          |  2 +-
 plc4j/examples/hello-world-plc4x-write/pom.xml              |  2 +-
 plc4j/examples/poll-loop/pom.xml                            |  2 +-
 plc4j/examples/pom.xml                                      |  2 +-
 plc4j/integrations/apache-calcite/pom.xml                   |  2 +-
 plc4j/integrations/apache-kafka/pom.xml                     |  2 +-
 .../integrations/apache-nifi/nifi-1/nifi-plc4x-nar/pom.xml  |  4 ++--
 .../apache-nifi/nifi-1/nifi-plc4x-processors/pom.xml        |  2 +-
 plc4j/integrations/apache-nifi/nifi-1/pom.xml               |  2 +-
 .../apache-nifi/nifi-2/nifi-2-plc4x-nar/pom.xml             |  4 ++--
 .../apache-nifi/nifi-2/nifi-2-plc4x-processors/pom.xml      |  2 +-
 plc4j/integrations/apache-nifi/nifi-2/pom.xml               |  2 +-
 plc4j/integrations/apache-nifi/pom.xml                      |  2 +-
 plc4j/integrations/pom.xml                                  |  2 +-
 plc4j/pom.xml                                               |  2 +-
 plc4j/tools/opcua-server/pom.xml                            |  2 +-
 plc4j/tools/plc4x-server/pom.xml                            |  2 +-
 plc4j/tools/pom.xml                                         |  2 +-
 pom.xml                                                     |  2 +-
 35 files changed, 36 insertions(+), 49 deletions(-)

diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index ea758c69..7bd6be63 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,16 +1,3 @@
-==============================================================
-(Unreleased) Apache PLC4X Extras 1.1.0-SNAPSHOT
-==============================================================
-
-New Features
-------------
-
-Incompatible changes
---------------------
-
-Bug Fixes
----------
-
 ==============================================================
 Apache PLC4X Extras 1.0.0
 ==============================================================
diff --git a/plc4c/pom.xml b/plc4c/pom.xml
index 61ccaef3..ac5a0e31 100644
--- a/plc4c/pom.xml
+++ b/plc4c/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4x-extras-parent</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4c-extras</artifactId>
diff --git a/plc4go/pom.xml b/plc4go/pom.xml
index 827d6381..3e94c1dd 100644
--- a/plc4go/pom.xml
+++ b/plc4go/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4x-extras-parent</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4go-extras</artifactId>
diff --git a/plc4j/examples/hello-ads-telemetry/pom.xml b/plc4j/examples/hello-ads-telemetry/pom.xml
index a758009c..2340216e 100644
--- a/plc4j/examples/hello-ads-telemetry/pom.xml
+++ b/plc4j/examples/hello-ads-telemetry/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-ads-telemetry</artifactId>
diff --git a/plc4j/examples/hello-cloud-azure/pom.xml b/plc4j/examples/hello-cloud-azure/pom.xml
index 9ca17910..f9120629 100644
--- a/plc4j/examples/hello-cloud-azure/pom.xml
+++ b/plc4j/examples/hello-cloud-azure/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-cloud-azure</artifactId>
diff --git a/plc4j/examples/hello-cloud-google/pom.xml b/plc4j/examples/hello-cloud-google/pom.xml
index 5a676cbb..72fbe74a 100644
--- a/plc4j/examples/hello-cloud-google/pom.xml
+++ b/plc4j/examples/hello-cloud-google/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-cloud-google</artifactId>
diff --git a/plc4j/examples/hello-connectivity-mqtt/pom.xml b/plc4j/examples/hello-connectivity-mqtt/pom.xml
index edfa1e42..738e8190 100644
--- a/plc4j/examples/hello-connectivity-mqtt/pom.xml
+++ b/plc4j/examples/hello-connectivity-mqtt/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-connectivity-mqtt</artifactId>
diff --git a/plc4j/examples/hello-discovery/pom.xml b/plc4j/examples/hello-discovery/pom.xml
index 35a6fbcb..e53892be 100644
--- a/plc4j/examples/hello-discovery/pom.xml
+++ b/plc4j/examples/hello-discovery/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-discovery</artifactId>
diff --git a/plc4j/examples/hello-influx-data-collection/pom.xml b/plc4j/examples/hello-influx-data-collection/pom.xml
index d154ee7c..ef771628 100644
--- a/plc4j/examples/hello-influx-data-collection/pom.xml
+++ b/plc4j/examples/hello-influx-data-collection/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-influx-data-collection</artifactId>
diff --git a/plc4j/examples/hello-integration-iotdb/pom.xml b/plc4j/examples/hello-integration-iotdb/pom.xml
index fb55e878..bb07bff4 100644
--- a/plc4j/examples/hello-integration-iotdb/pom.xml
+++ b/plc4j/examples/hello-integration-iotdb/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-integration-iotdb</artifactId>
diff --git a/plc4j/examples/hello-nats/pom.xml b/plc4j/examples/hello-nats/pom.xml
index 310c88c9..6d796546 100644
--- a/plc4j/examples/hello-nats/pom.xml
+++ b/plc4j/examples/hello-nats/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-nats</artifactId>
diff --git a/plc4j/examples/hello-opm/pom.xml b/plc4j/examples/hello-opm/pom.xml
index b1a475b5..c17cc0d8 100644
--- a/plc4j/examples/hello-opm/pom.xml
+++ b/plc4j/examples/hello-opm/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-opm</artifactId>
diff --git a/plc4j/examples/hello-webservice/pom.xml b/plc4j/examples/hello-webservice/pom.xml
index 2615246e..dde7ae19 100644
--- a/plc4j/examples/hello-webservice/pom.xml
+++ b/plc4j/examples/hello-webservice/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-webservice</artifactId>
diff --git a/plc4j/examples/hello-world-kotlin/pom.xml b/plc4j/examples/hello-world-kotlin/pom.xml
index f6b7a741..cbd63f78 100644
--- a/plc4j/examples/hello-world-kotlin/pom.xml
+++ b/plc4j/examples/hello-world-kotlin/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-world-kotlin</artifactId>
diff --git a/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml b/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml
index aa8bc63a..4df1d55a 100644
--- a/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-world-plc4x-discover-and-browse</artifactId>
diff --git a/plc4j/examples/hello-world-plc4x-read/pom.xml b/plc4j/examples/hello-world-plc4x-read/pom.xml
index 3a26f9f0..a402a7c7 100644
--- a/plc4j/examples/hello-world-plc4x-read/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-read/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-world-plc4x-read</artifactId>
diff --git a/plc4j/examples/hello-world-plc4x-subscribe/pom.xml b/plc4j/examples/hello-world-plc4x-subscribe/pom.xml
index b0a64714..813783c2 100644
--- a/plc4j/examples/hello-world-plc4x-subscribe/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-subscribe/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-world-plc4x-subscribe</artifactId>
diff --git a/plc4j/examples/hello-world-plc4x-write/pom.xml b/plc4j/examples/hello-world-plc4x-write/pom.xml
index fc807913..cbab18cf 100644
--- a/plc4j/examples/hello-world-plc4x-write/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-write/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-hello-world-plc4x-write</artifactId>
diff --git a/plc4j/examples/poll-loop/pom.xml b/plc4j/examples/poll-loop/pom.xml
index 169fb454..ce053dc0 100644
--- a/plc4j/examples/poll-loop/pom.xml
+++ b/plc4j/examples/poll-loop/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.examples</groupId>
     <artifactId>plc4j-examples</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-examples-poll-loop</artifactId>
diff --git a/plc4j/examples/pom.xml b/plc4j/examples/pom.xml
index e4c5b8a2..79c3eef8 100644
--- a/plc4j/examples/pom.xml
+++ b/plc4j/examples/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-extras</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.apache.plc4x.examples</groupId>
diff --git a/plc4j/integrations/apache-calcite/pom.xml b/plc4j/integrations/apache-calcite/pom.xml
index 75d0c323..2adbc35b 100644
--- a/plc4j/integrations/apache-calcite/pom.xml
+++ b/plc4j/integrations/apache-calcite/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-integrations</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-apache-calcite</artifactId>
diff --git a/plc4j/integrations/apache-kafka/pom.xml b/plc4j/integrations/apache-kafka/pom.xml
index b4bd559a..0fe703cb 100644
--- a/plc4j/integrations/apache-kafka/pom.xml
+++ b/plc4j/integrations/apache-kafka/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.plc4x.extras</groupId>
         <artifactId>plc4j-integrations</artifactId>
-        <version>1.1.0-SNAPSHOT</version>
+        <version>1.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>plc4j-apache-kafka</artifactId>
diff --git a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-nar/pom.xml b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-nar/pom.xml
index 942a995f..f5c16d2e 100644
--- a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-nar/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-nar/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.plc4x.extras</groupId>
 		<artifactId>plc4j-apache-nifi-1</artifactId>
-		<version>1.1.0-SNAPSHOT</version>
+		<version>1.0.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>plc4j-nifi-plc4x-nar</artifactId>
@@ -43,7 +43,7 @@
 		<dependency>
 			<groupId>org.apache.plc4x.extras</groupId>
 			<artifactId>plc4j-nifi-plc4x-processors</artifactId>
-			<version>1.1.0-SNAPSHOT</version>
+			<version>1.0.0-SNAPSHOT</version>
 		</dependency>
 
 		<dependency>
diff --git a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/pom.xml b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/pom.xml
index 926d3eb4..cb8b8095 100644
--- a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-apache-nifi-1</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-nifi-plc4x-processors</artifactId>
diff --git a/plc4j/integrations/apache-nifi/nifi-1/pom.xml b/plc4j/integrations/apache-nifi/nifi-1/pom.xml
index eb463112..c1be4077 100644
--- a/plc4j/integrations/apache-nifi/nifi-1/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-1/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-apache-nifi</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-apache-nifi-1</artifactId>
diff --git a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-nar/pom.xml b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-nar/pom.xml
index 52341d5f..335e4fe1 100644
--- a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-nar/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-nar/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.plc4x.extras</groupId>
 		<artifactId>plc4j-apache-nifi-2</artifactId>
-		<version>1.1.0-SNAPSHOT</version>
+		<version>1.0.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>plc4j-nifi-2-plc4x-nar</artifactId>
@@ -43,7 +43,7 @@
 		<dependency>
 			<groupId>org.apache.plc4x.extras</groupId>
 			<artifactId>plc4j-nifi-2-plc4x-processors</artifactId>
-			<version>1.1.0-SNAPSHOT</version>
+			<version>1.0.0-SNAPSHOT</version>
 		</dependency>
 
 		<dependency>
diff --git a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/pom.xml b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/pom.xml
index 5812b087..8ce13cf4 100644
--- a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-apache-nifi-2</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-nifi-2-plc4x-processors</artifactId>
diff --git a/plc4j/integrations/apache-nifi/nifi-2/pom.xml b/plc4j/integrations/apache-nifi/nifi-2/pom.xml
index 8ed328ff..8e19f83f 100644
--- a/plc4j/integrations/apache-nifi/nifi-2/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-2/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-apache-nifi</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-apache-nifi-2</artifactId>
diff --git a/plc4j/integrations/apache-nifi/pom.xml b/plc4j/integrations/apache-nifi/pom.xml
index 4a5b5d5a..cac8cc85 100644
--- a/plc4j/integrations/apache-nifi/pom.xml
+++ b/plc4j/integrations/apache-nifi/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-integrations</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-apache-nifi</artifactId>
diff --git a/plc4j/integrations/pom.xml b/plc4j/integrations/pom.xml
index 8b68e33e..18a5311b 100644
--- a/plc4j/integrations/pom.xml
+++ b/plc4j/integrations/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-extras</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-integrations</artifactId>
diff --git a/plc4j/pom.xml b/plc4j/pom.xml
index 27d03e5f..8ff64281 100644
--- a/plc4j/pom.xml
+++ b/plc4j/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4x-extras-parent</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-extras</artifactId>
diff --git a/plc4j/tools/opcua-server/pom.xml b/plc4j/tools/opcua-server/pom.xml
index aef6c3d2..1b8f00d5 100644
--- a/plc4j/tools/opcua-server/pom.xml
+++ b/plc4j/tools/opcua-server/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-tools</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4x-opcua-server</artifactId>
diff --git a/plc4j/tools/plc4x-server/pom.xml b/plc4j/tools/plc4x-server/pom.xml
index fa33c32d..da26649d 100644
--- a/plc4j/tools/plc4x-server/pom.xml
+++ b/plc4j/tools/plc4x-server/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-tools</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-plc4x-server</artifactId>
diff --git a/plc4j/tools/pom.xml b/plc4j/tools/pom.xml
index 0cb7298d..2b3beb0d 100644
--- a/plc4j/tools/pom.xml
+++ b/plc4j/tools/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.plc4x.extras</groupId>
     <artifactId>plc4j-extras</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>plc4j-tools</artifactId>
diff --git a/pom.xml b/pom.xml
index 65dbfbb7..c3d532ee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
 
   <groupId>org.apache.plc4x.extras</groupId>
   <artifactId>plc4x-extras-parent</artifactId>
-  <version>1.1.0-SNAPSHOT</version>
+  <version>1.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>PLC4X-Extras</name>