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

Cole-Greer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit b6840b6f4f074177021cebe487f15c09915a266a
Merge: 0e8b8b8071 893f7e2b3c
Author: Cole Greer <[email protected]>
AuthorDate: Thu Jul 23 16:17:49 2026 -0700

    Merge branch '3.8-dev'

 docs/src/dev/developer/release.asciidoc            |  6 +-
 gremlin-js/gremlin-javascript/pom.xml              | 18 ------
 gremlin-js/gremlin-mcp/pom.xml                     | 41 -------------
 gremlin-js/gremlint/pom.xml                        | 46 ---------------
 gremlin-js/pom.xml                                 | 67 +++++++++++++++++++++-
 gremlin-python/pom.xml                             | 41 +++++++++++++
 .../src/main/python/gremlin_python/__init__.py     |  2 +-
 7 files changed, 111 insertions(+), 110 deletions(-)

diff --cc docs/src/dev/developer/release.asciidoc
index aa049e76b5,5c8fe93478..e5384c07cc
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@@ -156,23 -150,23 +156,23 @@@ might be high. Release candidates do no
  deployment.
  
  . `mvn clean install`
 -. `docker/build.sh -t -i -n`
 +. `docker/build.sh -t -i`
  . `bin/publish-docs.sh <username>` - note that under a release candidate the 
documentation is published as SNAPSHOT
  . `mvn versions:set -DnewVersion=xx.yy.zz -DgenerateBackupPoms=false` to 
update the project files to reference a non-SNAPSHOT version
- .. Manually update the `__version__` for `gremlin-python` in 
`gremlin-python/src/main/python/gremlin_python/__init__.py`
  . `mvn clean install -DskipTests` to update GLV versions
+ .. Review `__init__.py` in `gremlin-python`
  .. Review `Gremlin.Net.csproj`, `Gremlin.Net.Template.csproj` and 
`Gremlin.Net.Template.nuspec` in `gremlin-dotnet`
 -.. Review `package.json` and `package-lock.json` in `gremlin-javascript` and 
in `gremlint`
 +.. Review `package.json` in `gremlin-javascript`, `gremlint`, and 
`gremlin-mcp` under `gremlin-js/`; the `package-lock.json` lives at 
`gremlin-js/` — run `npm install` from there to regenerate it after version 
changes and review it
  . `pushd gremlin-console/bin; ln -fs 
../target/apache-tinkerpop-gremlin-console-xx.yy.zz-standalone/bin/gremlin.sh 
gremlin.sh; popd`
  . `git diff` and review the updated files
  . `git commit -a -m "TinkerPop xx.yy.zz release"` and `git push`
  . `git tag -a -m "TinkerPop xx.yy.zz release" xx.yy.zz` and `git push --tags`
  . `mvn clean install`
  . `mvn versions:set -DnewVersion=xx.yy.zz-SNAPSHOT 
-DgenerateBackupPoms=false` to go back to SNAPSHOT
- .. Manually update the `__version__` for `gremlin-python` in 
`gremlin-python/src/main/python/gremlin_python/__init__.py` to a dev version 
like `xx.yy.zz.dev1`
  . `mvn clean install -DskipTests` to update GLV versions
+ .. Review `__init__.py` in `gremlin-python`
  .. Review `Gremlin.Net.csproj`, `Gremlin.Net.Template.csproj` and 
`Gremlin.Net.Template.nuspec` in `gremlin-dotnet`
 -.. Review `package.json` and `package-lock.json` in `gremlin-javascript` and 
in `gremlint`
 +.. Review `package.json` in `gremlin-javascript`, `gremlint`, and 
`gremlin-mcp` under `gremlin-js/`; the `package-lock.json` lives at 
`gremlin-js/` — run `npm install` from there to regenerate it after version 
changes and review it
  . `pushd gremlin-console/bin; ln -fs 
../target/apache-tinkerpop-gremlin-console-xx.yy.zz-SNAPSHOT-standalone/bin/gremlin.sh
 gremlin.sh; popd`
  . `git commit -a -m "Returned to xx.yy.zz-SNAPSHOT"` and `git push`
  . Announce the release candidate to `dev` mailing list and await feedback
@@@ -221,8 -215,9 +221,9 @@@ current release was under development a
  .. Update the link to `CHANGELOG.asciidoc` - this link may already be correct 
but will not exist until the repository is tagged.
  . `mvn versions:set -DnewVersion=xx.yy.zz -DgenerateBackupPoms=false` to 
update project files to reference the non-SNAPSHOT version
  . `mvn clean install -DskipTests` to update GLV versions
+ .. Review `__init__.py` in `gremlin-python`
  .. Review `Gremlin.Net.csproj`, `Gremlin.Net.Template.csproj` and 
`Gremlin.Net.Template.nuspec` in `gremlin-dotnet`
 -.. Review `package.json` and `package-lock.json` in `gremlin-javascript`, 
`gremlint`, and `gremlin-mcp`
 +.. Review `package.json` in `gremlin-javascript`, `gremlint`, and 
`gremlin-mcp` under `gremlin-js/`; the `package-lock.json` lives at 
`gremlin-js/` — run `npm install` from there to regenerate it after version 
changes and review it
  . `pushd gremlin-console/bin; ln -fs 
../target/apache-tinkerpop-gremlin-console-xx.yy.zz-standalone/bin/gremlin.sh 
gremlin.sh; popd`
  . `git diff` and review the updated files
  . `mvn clean install` - need to build first so that the right version of the 
console is used with `bin/publish-docs.sh`
@@@ -337,13 -328,11 +338,14 @@@ the help of a PMC member for those step
  .. Make the appropriate branching changes as required by the release and bump 
the version to `SNAPSHOT` with
  `mvn versions:set -DnewVersion=xx.yy.zz-SNAPSHOT -DgenerateBackupPoms=false`.
  . `mvn clean install -DskipTests` to update GLV versions
+ .. Review `__init__.py` in `gremlin-python`
  .. Review `Gremlin.Net.csproj`, `Gremlin.Net.Template.csproj` and 
`Gremlin.Net.Template.nuspec` in `gremlin-dotnet`
 -.. Review `package.json` and `package-lock.json` in `gremlin-javascript` and 
in `gremlint`
 +.. Review `package.json` in `gremlin-javascript`, `gremlint`, and 
`gremlin-mcp` under `gremlin-js/`; the `package-lock.json` lives at 
`gremlin-js/` — run `npm install` from there to regenerate it after version 
changes and review it
  .. `pushd gremlin-console/bin; ln -fs 
../target/apache-tinkerpop-gremlin-console-xx.yy.zz-SNAPSHOT-standalone/bin/gremlin.sh
 gremlin.sh; popd`
 -.. Update CHANGELOG and upgrade docs to have the appropriate headers for the 
next version.
 +.. Update CHANGELOG and upgrade docs to have the appropriate headers for the 
next version. If a major line will no longer be under development, archive the 
CHANGELOG entries for it as follows:
 +... Create a new `changelog-x.x.x.asciidoc` in the `docs/archive/changelogs` 
folder.
 +... Copy all CHANGELOG entries of the major version into the file (refer to 
previous files).
 +... Replace the CHANGELOG entries under each minor releases with an archived 
notice containing link to the archived changelog file (refer to previous links 
inside CHANGELOG).
  .. `mvn clean install -DskipTests` - need to build first so that the right 
version of the console is used with `bin/publish-docs.sh`
  .. `mvn deploy -DskipTests` - deploy the new `SNAPSHOT`
  .. `bin/process-docs.sh` and validate the generated `SNAPSHOT` documentation 
locally and then `bin/publish-docs.sh <username>`
diff --cc gremlin-js/gremlin-javascript/pom.xml
index 017b3595d7,0000000000..05aa0fa61f
mode 100644,000000..100644
--- a/gremlin-js/gremlin-javascript/pom.xml
+++ b/gremlin-js/gremlin-javascript/pom.xml
@@@ -1,348 -1,0 +1,330 @@@
 +<!--
 +Licensed to the Apache Software Foundation (ASF) under one or more
 +contributor license agreements.  See the NOTICE file distributed with
 +this work for additional information regarding copyright ownership.
 +The ASF licenses this file to You 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.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0";
 +         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
 +         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
 +    <modelVersion>4.0.0</modelVersion>
 +    <parent>
 +        <groupId>org.apache.tinkerpop</groupId>
 +        <artifactId>gremlin-js</artifactId>
 +        <version>4.0.0-beta.3</version>
 +        <relativePath>../pom.xml</relativePath>
 +    </parent>
 +    <artifactId>gremlin-javascript</artifactId>
 +    <name>Apache TinkerPop :: Gremlin Javascript</name>
 +    <properties>
 +        <maven.test.skip>false</maven.test.skip>
 +        <skipTests>${maven.test.skip}</skipTests>
 +    </properties>
 +    <build>
 +        <directory>${basedir}/target</directory>
 +        <finalName>${project.artifactId}-${project.version}</finalName>
 +        <pluginManagement>
 +            <plugins>
 +                <plugin>
 +                    <groupId>com.github.eirslett</groupId>
 +                    <artifactId>frontend-maven-plugin</artifactId>
 +                    <version>2.0.1</version>
 +                </plugin>
 +            </plugins>
 +        </pluginManagement>
 +        <plugins>
 +            <plugin>
 +                <!--
 +                Use gmavenplus-plugin to:
 +                    - Generate js sources
 +                -->
 +                <groupId>org.codehaus.gmavenplus</groupId>
 +                <artifactId>gmavenplus-plugin</artifactId>
 +                <dependencies>
 +                    <dependency>
 +                        <groupId>org.apache.tinkerpop</groupId>
 +                        <artifactId>gremlin-server</artifactId>
 +                        <version>${project.version}</version>
 +                    </dependency>
 +                    <dependency>
 +                        <groupId>org.apache.tinkerpop</groupId>
 +                        <artifactId>gremlin-test</artifactId>
 +                        <version>${project.version}</version>
 +                    </dependency>
 +                    <dependency>
 +                        <groupId>commons-io</groupId>
 +                        <artifactId>commons-io</artifactId>
 +                        <version>${commons.io.version}</version>
 +                    </dependency>
 +                                      <dependency>
 +                                              
<groupId>ch.qos.logback</groupId>
 +                                              
<artifactId>logback-classic</artifactId>
 +                                              
<version>${logback.version}</version>
 +                                              <scope>runtime</scope>
 +                                      </dependency>
 +                    <dependency>
 +                        <groupId>org.apache.groovy</groupId>
 +                        <artifactId>groovy-all</artifactId>
 +                        <version>${groovy.version}</version>
 +                        <type>pom</type>
 +                        <scope>runtime</scope>
 +                    </dependency>
 +                </dependencies>
 +                <executions>
 +                    <execution>
 +                        <id>generate-radish-support</id>
 +                        <phase>generate-sources</phase>
 +                        <goals>
 +                            <goal>execute</goal>
 +                        </goals>
 +                        <configuration>
 +                            <properties>
 +                                <property>
 +                                    <name>projectBaseDir</name>
 +                                    <value>${project.basedir}/../../</value>
 +                                </property>
 +                            </properties>
 +                            <scripts>
 +                                
<script>${project.basedir}/scripts/groovy/generate.groovy</script>
 +                            </scripts>
 +                        </configuration>
-                     </execution>
-                     <execution>
-                         <id>update-version</id>
-                         <phase>generate-sources</phase>
-                         <goals>
-                             <goal>execute</goal>
-                         </goals>
-                         <configuration>
-                             <scripts>
-                                 <script>
-                                     def mavenVersion = "${project.version}"
-                                     def versionForJs = 
mavenVersion.replace("-SNAPSHOT", "-alpha1")
-                                     def platformAgnosticBaseDirPath = 
project.basedir.getAbsolutePath().replace("\\", "/")
-                                     def file = new 
File(platformAgnosticBaseDirPath + "/package.json")
-                                     
file.write(file.getText("UTF-8").replaceFirst(/"version": "(.*)",/, 
"\"version\": \"" + versionForJs + "\","))
-                                 </script>
-                             </scripts>
-                         </configuration>
 +                    </execution>
 +                </executions>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-clean-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <goals>
 +                            <goal>clean</goal>
 +                        </goals>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <filesets>
 +                        <fileset>
 +                            <directory>build</directory>
 +                        </fileset>
 +                    </filesets>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>com.github.eirslett</groupId>
 +                <artifactId>frontend-maven-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <id>install node and npm at workspace root</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>install-node-and-npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            
<workingDirectory>${project.basedir}/..</workingDirectory>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>npm workspace install</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <arguments>ci</arguments>
 +                            
<workingDirectory>${project.basedir}/..</workingDirectory>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>install node and npm</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>install-node-and-npm</goal>
 +                        </goals>
 +                    </execution>
 +                    <execution>
 +                        <id>npm lint</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <skip>${skipTests}</skip>
 +                            <arguments>run lint</arguments>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>npm jsdoc</id>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <phase>generate-resources</phase>
 +                        <configuration>
 +                            <arguments>run doc</arguments>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <workingDirectory>.</workingDirectory>
 +                    <nodeVersion>${runtime.node.version}</nodeVersion>
 +                    <npmVersion>${runtime.npm.version}</npmVersion>
 +                </configuration>
 +            </plugin>
 +            <!--
 +            there is no point to building/deploying the jvm stuff - there is 
no java source really - just poms
 +            -->
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-javadoc-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-source-plugin</artifactId>
 +                <configuration>
 +                    <skipSource>true</skipSource>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-install-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-deploy-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>com.google.code.maven-replacer-plugin</groupId>
 +                <artifactId>replacer</artifactId>
 +                <configuration>
 +                    <file>lib/utils.ts</file>
 +                    <replacements>
 +                        <replacement>
 +                            <token>gremlinVersion = '.*'</token>
 +                            <value>gremlinVersion = 
'${project.version}'</value>
 +                        </replacement>
 +                    </replacements>
 +                </configuration>
 +            </plugin>
 +        </plugins>
 +    </build>
 +    <profiles>
 +        <!-- Test gremlin-javascript in Docker -->
 +        <profile>
 +            <id>glv-js</id>
 +            <activation>
 +                <activeByDefault>true</activeByDefault>
 +            </activation>
 +            <build>
 +                
<finalName>${project.artifactId}-${project.version}</finalName>
 +                <plugins>
 +                    <plugin>
 +                        <artifactId>exec-maven-plugin</artifactId>
 +                        <groupId>org.codehaus.mojo</groupId>
 +                        <version>3.5.0</version>
 +                        <executions>
 +                            <execution>
 +                                <id>run-tests</id>
 +                                <phase>integration-test</phase>
 +                                <goals>
 +                                    <goal>exec</goal>
 +                                </goals>
 +                                <configuration>
 +                                    <skip>${skipTests}</skip>
 +                                    <environmentVariables>
 +                                        
<GREMLIN_SERVER>${project.version}</GREMLIN_SERVER>
 +                                        
<ABS_PROJECT_HOME>${project.basedir}/../../</ABS_PROJECT_HOME>
 +                                        <!-- setting this env variable is 
needed to be cross-platform compatible -->
 +                                        <HOME>${user.home}</HOME>
 +                                        
<NODE_VERSION>${node.test.version}</NODE_VERSION>
 +                                    </environmentVariables>
 +                                    <executable>bash</executable>
 +                                    <!--
 +                                    Command breakdown:
 +                                      compose down (first)   - remove any 
containers left over from a previously failed run
 +                                      compose up             - build images, 
start the server and test containers,
 +                                                               and wait for 
the test container to finish
 +                                      compose down (second)  - tear down this 
run's containers and network
 +                                      port-wait loop         - wait up to 30 
s for ports 45940 and 45941 to be released by
 +                                                               the Docker 
daemon before returning to Maven; all GLV modules share
 +                                                               these host 
ports and run sequentially, so the next module would
 +                                                               fail to bind 
them if docker-proxy has not fully exited yet
 +                                      image prune            - remove 
dangling test images to reclaim disk space
 +                                    -->
 +                                    <arguments>
 +                                        <argument>-c</argument>
 +                                        <argument>export HOST_UID=$(id -u) 
HOST_GID=$(id -g); docker compose down; docker compose up --build 
--exit-code-from gremlin-js-integration-tests; EXIT=$?; docker compose down; 
for i in $(seq 1 30); do ss -tlnp | grep -qE ':(45940|45941) ' || break; sleep 
1; done; docker image prune --filter [email protected] 
-f; exit $EXIT</argument>
 +                                    </arguments>
 +                                    <workingDirectory>.</workingDirectory>
 +                                </configuration>
 +                            </execution>
 +                        </executions>
 +                    </plugin>
 +                </plugins>
 +            </build>
 +        </profile>
 +        <!--
 +        Provides a way to deploy the gremlin-javascript GLV to npm. This 
cannot be part of the standard maven execution
 +        because npm does not have a staging environment like sonatype for 
releases. As soon as the release is
 +        published it is public. In our release workflow, deploy occurs prior 
to vote on the release and we can't
 +        make this stuff public until the vote is over.
 +        -->
 +        <profile>
 +            <id>glv-javascript-deploy</id>
 +            <activation>
 +                <activeByDefault>false</activeByDefault>
 +                <property>
 +                    <name>npm</name>
 +                </property>
 +            </activation>
 +            <build>
 +                <plugins>
 +                    <plugin>
 +                        <groupId>com.github.eirslett</groupId>
 +                        <artifactId>frontend-maven-plugin</artifactId>
 +                        <executions>
 +                            <execution>
 +                                <id>npm publish</id>
 +                                <phase>deploy</phase>
 +                                <goals>
 +                                    <goal>npm</goal>
 +                                </goals>
 +                                <configuration>
 +                                    <arguments>publish</arguments>
 +                                </configuration>
 +                            </execution>
 +                        </executions>
 +                        <configuration>
 +                            <!--
 +                            skip needs to be overridden given how the 
<configuration> is specified in the main build.
 +                            it should be fine to just always deploy because 
this <profile> needs to be manually
 +                            activated and that should be good enough given 
our deployment process.
 +                            -->
 +                            <skip>false</skip>
 +                            <workingDirectory>.</workingDirectory>
 +                            <nodeVersion>${runtime.node.version}</nodeVersion>
 +                            <npmVersion>${runtime.npm.version}</npmVersion>
 +                        </configuration>
 +                    </plugin>
 +                </plugins>
 +            </build>
 +        </profile>
 +    </profiles>
 +</project>
diff --cc gremlin-js/gremlin-mcp/pom.xml
index 8a2ab9d058,0000000000..11cb20888a
mode 100644,000000..100644
--- a/gremlin-js/gremlin-mcp/pom.xml
+++ b/gremlin-js/gremlin-mcp/pom.xml
@@@ -1,257 -1,0 +1,216 @@@
 +<!--
 +Licensed to the Apache Software Foundation (ASF) under one or more
 +contributor license agreements.  See the NOTICE file distributed with
 +this work for additional information regarding copyright ownership.
 +The ASF licenses this file to You 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.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0";
 +         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
 +         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
 +    <modelVersion>4.0.0</modelVersion>
 +
 +    <parent>
 +        <groupId>org.apache.tinkerpop</groupId>
 +        <artifactId>gremlin-js</artifactId>
 +        <version>4.0.0-beta.3</version>
 +        <relativePath>../pom.xml</relativePath>
 +    </parent>
 +
 +    <artifactId>gremlin-mcp</artifactId>
 +    <name>Apache TinkerPop :: Gremlin MCP</name>
 +
 +    <properties>
 +        <maven.test.skip>false</maven.test.skip>
 +        <skipTests>${maven.test.skip}</skipTests>
 +    </properties>
 +
 +    <build>
 +        <directory>${basedir}/target</directory>
 +        <finalName>${project.artifactId}-${project.version}</finalName>
 +        <plugins>
-             <plugin>
-                 <!--
-                 Use gmavenplus-plugin to:
-                     - Update the package version and gremlin dependency 
version
-                 -->
-                 <groupId>org.codehaus.gmavenplus</groupId>
-                 <artifactId>gmavenplus-plugin</artifactId>
-                 <dependencies>
-                     <dependency>
-                         <groupId>org.apache.groovy</groupId>
-                         <artifactId>groovy-all</artifactId>
-                         <version>${groovy.version}</version>
-                         <type>pom</type>
-                         <scope>runtime</scope>
-                     </dependency>
-                 </dependencies>
-                 <executions>
-                     <execution>
-                         <id>update-version</id>
-                         <phase>generate-sources</phase>
-                         <goals>
-                             <goal>execute</goal>
-                         </goals>
-                         <configuration>
-                             <scripts>
-                                 <script>
-                                     def mavenVersion = "${project.version}"
-                                     def versionForJs = 
mavenVersion.replace("-SNAPSHOT", "-alpha1")
-                                     def platformAgnosticBaseDirPath = 
project.basedir.getAbsolutePath().replace("\\", "/")
-                                     def file = new 
File(platformAgnosticBaseDirPath + "/package.json")
-                                     def content = file.getText("UTF-8")
-                                     content = 
content.replaceFirst(/"version": "(.*)",/, "\"version\": \"" + versionForJs + 
"\",")
-                                     content = 
content.replaceFirst(/"gremlin": "[^"]+"/, "\"gremlin\": \"" + versionForJs + 
"\"")
-                                     content = 
content.replaceFirst(/"gremlint": "[^"]+"/, "\"gremlint\": \"" + versionForJs + 
"\"")
-                                     file.write(content)
-                                 </script>
-                             </scripts>
-                         </configuration>
-                     </execution>
-                 </executions>
-             </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-clean-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <goals>
 +                            <goal>clean</goal>
 +                        </goals>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <filesets>
 +                        <fileset>
 +                            <directory>dist</directory>
 +                        </fileset>
 +                        <fileset>
 +                            <directory>node_modules</directory>
 +                        </fileset>
 +                    </filesets>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>com.github.eirslett</groupId>
 +                <artifactId>frontend-maven-plugin</artifactId>
 +                <version>2.0.1</version>
 +                <executions>
 +                    <execution>
 +                        <id>install node and npm at workspace root</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>install-node-and-npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            
<workingDirectory>${project.basedir}/..</workingDirectory>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>npm workspace install</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <arguments>ci</arguments>
 +                            
<workingDirectory>${project.basedir}/..</workingDirectory>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>install node and npm</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>install-node-and-npm</goal>
 +                        </goals>
 +                    </execution>
 +                    <execution>
 +                        <id>npm validate</id>
 +                        <phase>generate-resources</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <skip>${skipTests}</skip>
 +                            <arguments>run validate</arguments>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>npm build</id>
 +                        <phase>generate-resources</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <arguments>run build</arguments>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <workingDirectory>.</workingDirectory>
 +                    <nodeVersion>${runtime.node.version}</nodeVersion>
 +                    <npmVersion>${runtime.npm.version}</npmVersion>
 +                </configuration>
 +            </plugin>
 +
 +            <!-- There is no JVM code/artifacts to publish for this module -->
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-javadoc-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-source-plugin</artifactId>
 +                <configuration>
 +                    <skipSource>true</skipSource>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-install-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-deploy-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>com.google.code.maven-replacer-plugin</groupId>
 +                <artifactId>replacer</artifactId>
 +                <configuration>
 +                    <file>src/constants.ts</file>
 +                    <replacements>
 +                        <replacement>
 +                            <token>GREMLIN_VERSION = '.*'</token>
 +                            <value>GREMLIN_VERSION = 
'${project.version}'</value>
 +                        </replacement>
 +                    </replacements>
 +                </configuration>
 +            </plugin>
 +        </plugins>
 +    </build>
 +    <profiles>
 +        <!--
 +       Provides a way to deploy the gremlin-mcp to npm. This cannot be part 
of the standard maven execution
 +       because npm does not have a staging environment like sonatype for 
releases. As soon as the release is
 +       published it is public. In our release workflow, deploy occurs prior 
to vote on the release and we can't
 +       make this stuff public until the vote is over.
 +       -->
 +        <profile>
 +            <id>gremlin-mcp-deploy</id>
 +            <activation>
 +                <activeByDefault>false</activeByDefault>
 +                <property>
 +                    <name>npm</name>
 +                </property>
 +            </activation>
 +            <build>
 +                <plugins>
 +                    <plugin>
 +                        <groupId>com.github.eirslett</groupId>
 +                        <artifactId>frontend-maven-plugin</artifactId>
 +                        <executions>
 +                            <execution>
 +                                <id>npm publish</id>
 +                                <phase>deploy</phase>
 +                                <goals>
 +                                    <goal>npm</goal>
 +                                </goals>
 +                                <configuration>
 +                                    <arguments>publish</arguments>
 +                                </configuration>
 +                            </execution>
 +                        </executions>
 +                        <configuration>
 +                            <!--
 +                            skip needs to be overridden given how the 
<configuration> is specified in the main build.
 +                            it should be fine to just always deploy because 
this <profile> needs to be manually
 +                            activated and that should be good enough given 
our deployment process.
 +                            -->
 +                            <skip>false</skip>
 +                            <workingDirectory>.</workingDirectory>
 +                            <nodeVersion>${runtime.node.version}</nodeVersion>
 +                            <npmVersion>${runtime.npm.version}</npmVersion>
 +                        </configuration>
 +                    </plugin>
 +                </plugins>
 +            </build>
 +        </profile>
 +    </profiles>
 +</project>
diff --cc gremlin-js/gremlint/pom.xml
index b128b4c0a6,0000000000..997a9a66d0
mode 100644,000000..100644
--- a/gremlin-js/gremlint/pom.xml
+++ b/gremlin-js/gremlint/pom.xml
@@@ -1,232 -1,0 +1,186 @@@
 +<!--
 +Licensed to the Apache Software Foundation (ASF) under one or more
 +contributor license agreements.  See the NOTICE file distributed with
 +this work for additional information regarding copyright ownership.
 +The ASF licenses this file to You 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.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0";
 +         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
 +         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
 +    <modelVersion>4.0.0</modelVersion>
 +    <parent>
 +        <groupId>org.apache.tinkerpop</groupId>
 +        <artifactId>gremlin-js</artifactId>
 +        <version>4.0.0-beta.3</version>
 +        <relativePath>../pom.xml</relativePath>
 +    </parent>
 +    <artifactId>gremlint</artifactId>
 +    <name>Apache TinkerPop :: Gremlint</name>
 +    <properties>
 +        <maven.test.skip>false</maven.test.skip>
 +        <skipTests>${maven.test.skip}</skipTests>
 +    </properties>
 +    <build>
 +        <directory>${basedir}/target</directory>
 +        <finalName>${project.artifactId}-${project.version}</finalName>
 +        <pluginManagement>
 +            <plugins>
 +                <plugin>
 +                    <groupId>com.github.eirslett</groupId>
 +                    <artifactId>frontend-maven-plugin</artifactId>
 +                    <version>2.0.1</version>
 +                </plugin>
 +            </plugins>
 +        </pluginManagement>
 +        <plugins>
-             <plugin>
-                 <!--
-                 Use gmavenplus-plugin to:
-                     - Update version number
-                 -->
-                 <groupId>org.codehaus.gmavenplus</groupId>
-                 <artifactId>gmavenplus-plugin</artifactId>
-                 <dependencies>
-                     <dependency>
-                         <groupId>org.apache.groovy</groupId>
-                         <artifactId>groovy-all</artifactId>
-                         <version>${groovy.version}</version>
-                         <type>pom</type>
-                         <scope>runtime</scope>
-                     </dependency>
-                 </dependencies>
-                 <executions>
-                     <execution>
-                         <id>update-version</id>
-                         <phase>generate-sources</phase>
-                         <goals>
-                             <goal>execute</goal>
-                         </goals>
-                         <configuration>
-                             <properties>
-                                 <property>
-                                     <name>projectBaseDir</name>
-                                     <value>${project.basedir}</value>
-                                 </property>
-                                 <property>
-                                     <name>mavenVersion</name>
-                                     <value>${project.version}</value>
-                                 </property>
-                             </properties>
-                             <scripts>
-                                 <script>
-                                     def versionForJs = 
mavenVersion.replace("-SNAPSHOT", "-alpha1")
-                                     def platformAgnosticBaseDirPath = 
project.basedir.getAbsolutePath().replace("\\","/")
-                                     def file = new 
File(platformAgnosticBaseDirPath + "/package.json")
-                                     
file.write(file.getText("UTF-8").replaceFirst(/"version": "(.*)",/, 
"\"version\": \"" + versionForJs + "\","))
-                                 </script>
-                             </scripts>
-                         </configuration>
-                     </execution>
-                 </executions>
-             </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-clean-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <goals>
 +                            <goal>clean</goal>
 +                        </goals>
 +                    </execution>
 +                </executions>
 +            </plugin>
 +            <plugin>
 +                <groupId>com.github.eirslett</groupId>
 +                <artifactId>frontend-maven-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <id>install node and npm at workspace root</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>install-node-and-npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            
<workingDirectory>${project.basedir}/..</workingDirectory>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>npm workspace install</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <arguments>ci</arguments>
 +                            
<workingDirectory>${project.basedir}/..</workingDirectory>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>install node and npm</id>
 +                        <phase>generate-resources</phase>
 +                        <goals>
 +                            <goal>install-node-and-npm</goal>
 +                        </goals>
 +                    </execution>
 +                    <execution>
 +                        <id>npm test</id>
 +                        <phase>test</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <skip>${skipTests}</skip>
 +                            <arguments>test --exit</arguments>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <nodeVersion>${runtime.node.version}</nodeVersion>
 +                    <npmVersion>${runtime.npm.version}</npmVersion>
 +                </configuration>
 +            </plugin>
 +            <!--
 +            there is no point to building/deploying the jvm stuff - there is 
no java source really - just poms
 +            -->
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-javadoc-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-source-plugin</artifactId>
 +                <configuration>
 +                    <skipSource>true</skipSource>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-install-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-deploy-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +        </plugins>
 +    </build>
 +    <profiles>
 +        <!--
 +        Provides a way to deploy gremlint to npm. This cannot be part of the 
standard maven execution
 +        because npm does not have a staging environment like sonatype for 
releases. As soon as the release is
 +        published it is public. In our release workflow, deploy occurs prior 
to vote on the release and we can't
 +        make this stuff public until the vote is over.
 +        -->
 +        <profile>
 +            <id>gremlint-deploy</id>
 +            <activation>
 +                <activeByDefault>false</activeByDefault>
 +                <property>
 +                    <name>npm</name>
 +                </property>
 +            </activation>
 +            <build>
 +                <plugins>
 +                    <plugin>
 +                        <groupId>com.github.eirslett</groupId>
 +                        <artifactId>frontend-maven-plugin</artifactId>
 +                        <executions>
 +                            <execution>
 +                                <id>npm publish</id>
 +                                <phase>deploy</phase>
 +                                <goals>
 +                                    <goal>npm</goal>
 +                                </goals>
 +                                <configuration>
 +                                    <arguments>publish</arguments>
 +                                </configuration>
 +                            </execution>
 +                        </executions>
 +                        <configuration>
 +                            <!--
 +                            skip needs to be overridden given how the 
<configuration> is specified in the main build.
 +                            it should be fine to just always deploy because 
this <profile> needs to be manually
 +                            activated and that should be good enough given 
our deployment process.
 +                            -->
 +                            <skip>false</skip>
 +                            <nodeVersion>${runtime.node.version}</nodeVersion>
 +                            <npmVersion>${runtime.npm.version}</npmVersion>
 +                        </configuration>
 +                    </plugin>
 +                </plugins>
 +            </build>
 +        </profile>
 +    </profiles>
 +</project>
diff --cc gremlin-js/pom.xml
index 25c130e50b,0000000000..a94e4dab30
mode 100644,000000..100644
--- a/gremlin-js/pom.xml
+++ b/gremlin-js/pom.xml
@@@ -1,108 -1,0 +1,171 @@@
 +<!--
 +Licensed to the Apache Software Foundation (ASF) under one or more
 +contributor license agreements.  See the NOTICE file distributed with
 +this work for additional information regarding copyright ownership.
 +The ASF licenses this file to You 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.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0";
 +         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
 +         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
 +    <modelVersion>4.0.0</modelVersion>
 +
 +    <parent>
 +        <groupId>org.apache.tinkerpop</groupId>
 +        <artifactId>tinkerpop</artifactId>
 +        <version>4.0.0-beta.3</version>
 +        <relativePath>../pom.xml</relativePath>
 +    </parent>
 +
 +    <artifactId>gremlin-js</artifactId>
 +    <name>Apache TinkerPop :: Gremlin JS</name>
 +    <packaging>pom</packaging>
 +
 +    <modules>
 +        <module>gremlin-javascript</module>
 +        <module>gremlint</module>
 +        <module>gremlin-mcp</module>
 +    </modules>
 +
 +    <build>
 +        <plugins>
++            <!--
++            Centralized version propagation for the JS workspace. This pom 
builds first in the
++            gremlin-js reactor, so the version bump completes before any 
child module builds.
++            gmavenplus computes the npm-compatible version (translating 
Maven's "-SNAPSHOT" to a
++            valid semver pre-release tag) and keeps gremlin-mcp's references 
to its sibling
++            workspace packages (gremlin, gremlint) in lockstep. The "npm 
version" execution in the
++            frontend-maven-plugin below then bumps every workspace member's 
version and the root
++            package-lock.json in a single pass.
++            -->
++            <plugin>
++                <groupId>org.codehaus.gmavenplus</groupId>
++                <artifactId>gmavenplus-plugin</artifactId>
++                <inherited>false</inherited>
++                <dependencies>
++                    <dependency>
++                        <groupId>org.apache.groovy</groupId>
++                        <artifactId>groovy-all</artifactId>
++                        <version>${groovy.version}</version>
++                        <type>pom</type>
++                        <scope>runtime</scope>
++                    </dependency>
++                </dependencies>
++                <executions>
++                    <execution>
++                        <id>compute-js-version</id>
++                        <phase>validate</phase>
++                        <goals>
++                            <goal>execute</goal>
++                        </goals>
++                        <configuration>
++                            <scripts>
++                                <script>
++                                    // npm doesn't understand Maven's 
"-SNAPSHOT" suffix, so translate it to a
++                                    // valid semver pre-release tag for use 
by the "npm version" execution below.
++                                    def versionForJs = 
"${project.version}".replace("-SNAPSHOT", "-alpha1")
++                                    
project.properties.setProperty("versionForJs", versionForJs)
++                                    // gremlin-mcp depends on its sibling 
workspace packages at an exact version.
++                                    // "npm version" won't rewrite those 
references, so keep them in lockstep here
++                                    // before it regenerates the lockfile 
(otherwise npm fails with ETARGET).
++                                    def mcpPackageJson = new 
File(project.basedir.getAbsolutePath().replace("\\", "/") + 
"/gremlin-mcp/package.json")
++                                    def content = 
mcpPackageJson.getText("UTF-8")
++                                    content = 
content.replaceFirst(/"gremlin": "[^"]+"/, "\"gremlin\": \"" + versionForJs + 
"\"")
++                                    content = 
content.replaceFirst(/"gremlint": "[^"]+"/, "\"gremlint\": \"" + versionForJs + 
"\"")
++                                    mcpPackageJson.write(content, "UTF-8")
++                                </script>
++                            </scripts>
++                        </configuration>
++                    </execution>
++                </executions>
++            </plugin>
 +            <!--
 +            Install node/npm and run npm ci from the workspace root so that 
all JS workspace
 +            members (gremlin-javascript, gremlin-mcp, gremlint) share a 
single node_modules
 +            installation with workspace symlinks in place before any child 
module builds.
-             This pom runs first in the gremlin-js reactor, ensuring this 
completes before
-             any child module begins its own build lifecycle.
 +            -->
 +            <plugin>
 +                <groupId>com.github.eirslett</groupId>
 +                <artifactId>frontend-maven-plugin</artifactId>
 +                <version>2.0.1</version>
 +                <inherited>false</inherited>
 +                <executions>
 +                    <execution>
 +                        <id>install node and npm</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>install-node-and-npm</goal>
 +                        </goals>
 +                    </execution>
++                    <execution>
++                        <id>npm version</id>
++                        <phase>validate</phase>
++                        <goals>
++                            <goal>npm</goal>
++                        </goals>
++                        <configuration>
++                            <!--
++                            Update the TinkerPop version in every workspace 
member's package.json
++                            (gremlin-javascript, gremlint, gremlin-mcp) and 
the root package-lock.json
++                            in a single pass.
++                            -->
++                            <arguments>version ${versionForJs} --workspaces 
--no-git-tag-version --allow-same-version --ignore-scripts</arguments>
++                        </configuration>
++                    </execution>
 +                    <execution>
 +                        <id>npm workspace install</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>npm</goal>
 +                        </goals>
 +                        <configuration>
 +                            <arguments>ci</arguments>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <nodeVersion>${runtime.node.version}</nodeVersion>
 +                    <npmVersion>${runtime.npm.version}</npmVersion>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-javadoc-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-source-plugin</artifactId>
 +                <configuration>
 +                    <skipSource>true</skipSource>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-install-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-deploy-plugin</artifactId>
 +                <configuration>
 +                    <skip>true</skip>
 +                </configuration>
 +            </plugin>
 +        </plugins>
 +    </build>
 +
 +</project>
diff --cc gremlin-python/src/main/python/gremlin_python/__init__.py
index 8040ed37a2,42df32bd5d..368aaa0f3e
--- a/gremlin-python/src/main/python/gremlin_python/__init__.py
+++ b/gremlin-python/src/main/python/gremlin_python/__init__.py
@@@ -18,4 -18,4 +18,4 @@@
  #
  
  __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
- __version__ = '4.0.0.dev1'
 -__version__ = '3.8.2.dev1' # Do not touch, updated automatically from maven
++__version__ = '4.0.0-beta.3' # Do not touch, updated automatically from maven

Reply via email to