You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by fl...@apache.org on 2018/06/19 14:41:46 UTC

[1/9] tinkerpop git commit: TINKERPOP-1778 Change documentation around usage of TimedInterruptCustomizerProvider [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1836 7dc6f4da1 -> cfded1198 (forced update)


TINKERPOP-1778 Change documentation around usage of TimedInterruptCustomizerProvider

We really shouldn't promote this setting in Gremlin Server as it competes with the scriptEvaluationTimeout. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2495e8e0
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2495e8e0
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2495e8e0

Branch: refs/heads/TINKERPOP-1836
Commit: 2495e8e0f27bd636744f81bfef477f10c19d3778
Parents: eba1df3
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Jun 18 09:20:38 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Jun 18 09:20:38 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  3 ++-
 docs/src/reference/gremlin-applications.asciidoc  | 18 ++++++++++--------
 .../src/upgrade/release-3.2.x-incubating.asciidoc |  8 ++++++++
 .../jsr223/GroovyCompilerGremlinPlugin.java       |  7 +++++++
 4 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2495e8e0/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index a1d0963..ab776d0 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,7 +23,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-2-10]]
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
-* Added Docker images for Gremlin Console and Gremlin Server
+* Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout
+* Added Docker images for Gremlin Console and Gremlin Server.
 * Fixed bug in `branch()` where reducing steps as options would produce incorrect results.
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
 * Improved performance of `TraversalVertexProgram` and related infrastructure.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2495e8e0/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index f044df8..f967a9c 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -1143,7 +1143,7 @@ The following table describes the various configuration options that Gremlin Ser
 |scriptEngines.<name>.staticImports |A comma separated list of "static" imports to make available to the `ScriptEngine`. |_none_
 |scriptEngines.<name>.scripts |A comma separated list of script files to execute on `ScriptEngine` initialization. `Graph` and `TraversalSource` instance references produced from scripts will be stored globally in Gremlin Server, therefore it is possible to use initialization scripts to add Traversal Strategies or create entirely new `Graph` instances all together. Instantiating a `LifeCycleHook` in a script provides a way to execute scripts when Gremlin Server starts and stops.|_none_
 |scriptEngines.<name>.config |A `Map` of configuration settings for the `ScriptEngine`.  These settings are dependent on the `ScriptEngine` implementation being used. |_none_
-|scriptEvaluationTimeout |The amount of time in milliseconds before a script evaluation times out. The notion of "script evaluation" refers to the time it takes for the `ScriptEngine` to do its work and *not* any additional time it takes for the result of the evaluation to be iterated and serialized. This feature can be turned off by setting the value to `0`. |30000
+|scriptEvaluationTimeout |The amount of time in milliseconds before a script evaluation and iteration of result times out. This feature can be turned off by setting the value to `0`. |30000
 |serializers |A `List` of `Map` settings, where each `Map` represents a `MessageSerializer` implementation to use along with its configuration. If this value is not set, then Gremlin Server will configure with GraphSON and Gryo but will not register any `ioRegistries` for configured graphs. |_empty_
 |serializers[X].className |The full class name of the `MessageSerializer` implementation. |_none_
 |serializers[X].config |A `Map` containing `MessageSerializer` specific configurations. |_none_
@@ -1374,18 +1374,22 @@ scriptEngines: {
     scripts: [scripts/empty-sample.groovy],
     config: {
       compilerCustomizerProviders: {
-        "org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.TimedInterruptCustomizerProvider":[10000] }}}
+        "org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.ThreadInterruptCustomizerProvider":[] }}}}
 
 This configuration sets up the script engine with a `CompilerCustomizerProvider` implementation.  The
-`TimedInterruptCustomizerProvider` injects checks that ensure that loops (like `while`) can only execute for `10000`
-milliseconds.  With this configuration in place, a remote execution as follows, now times out rather than consuming
-the thread continuously:
+`ThreadInterruptCustomizerProvider` injects checks that ensure that loops (like `while`) respect thread interruption
+requests. Note that the empty square brackets following the declaration of the `ThreadInterruptCustomizerProvider`
+are for parameters - this particular `CustomizerProvider` takes no arguments to enable it. With this configuration in
+place and assuming the `scriptEvaluationTimeout` is set to `30000` milliseconds, consider the following remote
+execution:
 
 [source,groovy]
+----
 gremlin> :remote connect tinkerpop.server conf/remote.yaml
 ==>Configured localhost/127.0.0.1:8182
 gremlin> :> while(true) { }
-Execution timed out after 10000 units. Start time: Fri Jul 24 11:04:52 EDT 2015
+Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 30000 ms or evaluation was otherwise cancelled directly for request [while(true) { }]
+----
 
 There are a number of pre-packaged `CustomizerProvider` implementations:
 
@@ -1396,7 +1400,6 @@ There are a number of pre-packaged `CustomizerProvider` implementations:
 |`CompilationOptionsCustomizerProvider` |The amount of time a script is allowed to compile before a warning message is sent to the logs.
 |`ConfigurationCustomizerProvider` |Allows configuration of the Groovy `CompilerConfiguration` object by taking a `Map` of key/value pairs where the "key" is a property to set on the `CompilerConfiguration`.
 |`ThreadInterruptCustomizerProvider` |Injects checks for thread interruption, thus allowing the thread to potentially respect calls to `Thread.interrupt()`
-|`TimedInterruptCustomizerProvider` |Injects checks into loops to interrupt them if they exceed the configured timeout in milliseconds.
 |`TypeCheckedCustomizerProvider` |Similar to the above mentioned, `CompileStaticCustomizerProvider`, the `TypeCheckedCustomizerProvider` injects `TypeChecked` annotations to incoming scripts.  More information on the nature of this annotation can be found in the link:http://docs.groovy-lang.org/latest/html/documentation/#_the_code_typechecked_code_annotation[Groovy Documentation].  It too takes a comma separated list of link:http://docs.groovy-lang.org/latest/html/documentation/#Typecheckingextensions-Workingwithextensions[type checking extensions].
 |=========================================================
 
@@ -1411,7 +1414,6 @@ scriptEngines: {
     config: {
       compilerCustomizerProviders: {
         "org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.ThreadInterruptCustomizerProvider":[],
-        "org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.TimedInterruptCustomizerProvider":[10000],
         "org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.CompilationOptionsCustomizerProvider":[8000],
         "org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.CompileStaticCustomizerProvider":["org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.SimpleSandboxExtension"]}}}}
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2495e8e0/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 593c631..90dd568 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -44,6 +44,14 @@ See: link:https://issues.apache.org/jira/browse/TINKERPOP-1897[TINKERPOP-1897],
 link:http://tinkerpop.apache.org/docs/current/reference#gremlin-console-docker-image[Reference Documentation - Gremlin Console],
 link:http://tinkerpop.apache.org/docs/current/reference#gremlin-server-docker-image[Reference Documentation - Gremlin Server],
 
+==== TimedInterruptCustomizerProvider
+
+In Gremlin Server, it is best not to use {{TimedInterruptCustomizerProvider}} because it can compete with the
+{{scriptEvaluationTimeout}} setting and produce a different error path. Simply rely on {{scriptEvaluationTimeout}}
+as it covers both script evaluation time and result iteration time.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1778[TINKERPOP-1778]
+
 ==== TinkerFactory.createGratefulDead()
 
 The Grateful Dead dataset has been with TinkerPop since the early days of 1.x. It has always been available as a

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2495e8e0/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
index 5680a4f..14757d8 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
@@ -87,6 +87,13 @@ public class GroovyCompilerGremlinPlugin extends AbstractGremlinPlugin {
             return this;
         }
 
+        /**
+         * Introduces timed checks to loops and other portions of a script to provide an interrupt for a long running
+         * script. This configuration should not be used in conjunction with the Gremlin Server which has its own
+         * {@code scriptEvaluationTimeout} which performs a similar task but in a more complete way specific to the
+         * server. Configuring both may lead to inconsistent timeout errors returning from the server. This
+         * configuration should only be used if configuring a standalone instance fo the {@link GremlinGroovyScriptEngine}.
+         */
         public Builder timedInterrupt(final long timeInMillis) {
             this.timeInMillis = timeInMillis;
             return this;


[2/9] tinkerpop git commit: Mission period in changelog CTR

Posted by fl...@apache.org.
Mission period in changelog CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/891bfa33
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/891bfa33
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/891bfa33

Branch: refs/heads/TINKERPOP-1836
Commit: 891bfa33714ce04ae553e873aff3c1ce442f9156
Parents: 2495e8e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Jun 18 09:44:33 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Jun 18 09:44:33 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/891bfa33/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index ab776d0..ebfcf67 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,7 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-2-10]]
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
-* Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout
+* Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout.
 * Added Docker images for Gremlin Console and Gremlin Server.
 * Fixed bug in `branch()` where reducing steps as options would produce incorrect results.
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.


[4/9] tinkerpop git commit: TINKERPOP-1836 Add Gremlin.Net.Template project

Posted by fl...@apache.org.
TINKERPOP-1836 Add Gremlin.Net.Template project

This project is a dotnet template that can be installed and then used to
create a simple dotnet console application ready to be used together
with a Gremlin Server.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/62a8837a
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/62a8837a
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/62a8837a

Branch: refs/heads/TINKERPOP-1836
Commit: 62a8837a24ee1f0c66c862a7ad3efe171e221118
Parents: a4e087d
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sat May 19 12:23:01 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Tue Jun 19 16:41:19 2018 +0200

----------------------------------------------------------------------
 .travis.yml                                     |  4 ++
 CHANGELOG.asciidoc                              |  1 +
 docker/Dockerfile                               |  4 +-
 .../developer/development-environment.asciidoc  |  2 +
 .../src/reference/gremlin-applications.asciidoc | 31 +++++++++--
 gremlin-dotnet/Gremlin.Net.sln                  | 19 ++++++-
 .../glv/Gremlin.Net.Template.csproj.template    | 33 ++++++++++++
 .../glv/Gremlin.Net.Template.nuspec.template    | 21 ++++++++
 gremlin-dotnet/glv/generate.groovy              |  8 ++-
 .../.template.config/template.json              | 14 +++++
 .../Gremlin.Net.Template.csproj                 | 33 ++++++++++++
 .../Gremlin.Net.Template.nuspec                 | 21 ++++++++
 .../src/Gremlin.Net.Template/Program.cs         | 50 +++++++++++++++++
 .../src/Gremlin.Net.Template/README.md          | 46 ++++++++++++++++
 .../src/Gremlin.Net.Template/Service.cs         | 43 +++++++++++++++
 gremlin-dotnet/src/pom.xml                      | 54 +++++++++++++++++++
 .../Gremlin.Net.Template.IntegrationTest.csproj | 20 +++++++
 .../ServiceTests.cs                             | 56 ++++++++++++++++++++
 pom.xml                                         |  2 +
 19 files changed, 456 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 8ca1346..a99103f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,9 +20,13 @@ install:
 before_install:
   - wget -q https://packages.microsoft.com/config/ubuntu/14.04/packages-microsoft-prod.deb
   - sudo dpkg -i packages-microsoft-prod.deb
+  - sudo sh -c 'echo "deb https://download.mono-project.com/repo/ubuntu stable-trusty main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list'  
+  - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
   - sudo apt-get install apt-transport-https
   - sudo apt-get update
   - sudo apt-get install dotnet-sdk-2.1
+  - sudo apt install mono-devel
+
 
 jobs:
   include:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index ebfcf67..05b74da 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,6 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-2-10]]
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
+* Added a dotnet template project that should make it easier to get started with Gremlin.Net.
 * Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout.
 * Added Docker images for Gremlin Console and Gremlin Server.
 * Fixed bug in `branch()` where reducing steps as options would produce incorrect results.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/docker/Dockerfile
----------------------------------------------------------------------
diff --git a/docker/Dockerfile b/docker/Dockerfile
index ef6b06c..dbc06ef 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -25,10 +25,12 @@ RUN apt-get update \
     && add-apt-repository -y ppa:webupd8team/java \
     && sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main" > /etc/apt/sources.list.d/dotnetdev.list' \
     && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893 \
+    && sh -c 'echo "deb https://download.mono-project.com/repo/ubuntu stable-trusty main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list' \
+    && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \
     && apt-get update \
     && apt-get install -y oracle-java8-installer curl gawk git maven openssh-server subversion zip \
     && sh -c 'curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg' \
-    && apt-get install -y --force-yes dotnet-sdk-2.1.101 python python-dev python-pip build-essential \
+    && apt-get install -y --force-yes dotnet-sdk-2.1.101 python python-dev python-pip build-essential mono-devel \
     && pip install virtualenv virtualenvwrapper \
     && pip install --upgrade pip \
     && rm -rf /var/lib/apt/lists/* /var/cache/oracle-jdk8-installer

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index 6b1dbd6..4f5e253 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -105,6 +105,8 @@ See the <<release-environment,Release Environment>> section for more information
 The build optionally requires link:https://www.microsoft.com/net/core[.NET Core SDK] (>=2.1.101) to work with the
 `gremlin-dotnet` module. If .NET Core SDK is not installed, TinkerPop will still build with Maven, but .NET projects
 will be skipped.
+In order to pack the Gremlin.Net Template project, it is also necessary to install link:http://www.mono-project.com/[Mono].
+The template will still be built and tested when Mono is not present but packing will be skipped.
 
 `gremlin-dotnet` can be built and tested from the command line with:
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index f967a9c..0667ca9 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -2238,11 +2238,15 @@ The following shows the output for `HadoopGraph`:
 describeGraph(HadoopGraph)
 ----
 
+[[application-templates]]
+== Application Templates
+
+TinkerPop has a number of application templates, which provide example project templates to quickly get started with TinkerPop.
+
 [[gremlin-archetypes]]
-== Gremlin Archetypes
+=== Maven Archetypes
 
-TinkerPop has a number of link:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html[Maven archetypes],
-which provide example project templates to quickly get started with TinkerPop. The available archetypes are as follows:
+The available link:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html[Maven archetypes] are as follows:
 
 * `gremlin-archetype-dsl` - An example project that demonstrates how to build Domain Specific Languages with Gremlin in Java.
 * `gremlin-archetype-server` - An example project that demonstrates the basic structure of a
@@ -2259,3 +2263,24 @@ $ mvn archetype:generate -DarchetypeGroupId=org.apache.tinkerpop -DarchetypeArti
 This command will generate a new Maven project in a directory called "app" with a `pom.xml` specifying a `groupId` of
 `com.my`. Please see the `README.asciidoc` in the root of each generated project for information on how to build and
 execute it.
+
+[[gremlin-dotnet-template]]
+=== Gremlin.Net Template
+
+This link:https://docs.microsoft.com/dotnet/core/tools/custom-templates[dotnet template] helps getting started with
+<<gremlin-DotNet,Gremlin.Net>>. It creates a new C# console project that shows how to connect to a
+<<gremlin-server,Gremlin Server>> with Gremlin.Net.
+
+You can install the template with the dotnet CLI tool:
+[source,shell]
+dotnet new -i Gremlin.Net.Template
+
+After the template is installed, a new project based on this template can be installed:
+
+[source,shell]
+dotnet new gremlin
+
+You can specify the output directory for the new project which will then also be used as the name of the created project:
+
+[source,shell]
+dotnet new gremlin -o MyFirstGremlinProject

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/Gremlin.Net.sln
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/Gremlin.Net.sln b/gremlin-dotnet/Gremlin.Net.sln
index b1a5d19..3f2b2b4 100644
--- a/gremlin-dotnet/Gremlin.Net.sln
+++ b/gremlin-dotnet/Gremlin.Net.sln
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
-VisualStudioVersion = 15.0.26430.12
+VisualStudioVersion = 15.0.27130.2026
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{584F838B-DAE2-44F5-868C-1F532949C827}"
 EndProject
@@ -15,6 +15,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gremlin.Net.UnitTest", "tes
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gremlin.Net.IntegrationTest", "test\Gremlin.Net.IntegrationTest\Gremlin.Net.IntegrationTest.csproj", "{CC54ABE3-13D2-491C-81E2-4D0355ABFA93}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gremlin.Net.Template", "src\Gremlin.Net.Template\Gremlin.Net.Template.csproj", "{A9D2567A-6FD0-452B-A2F9-4256FE513ADD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gremlin.Net.Template.IntegrationTest", "test\Gremlin.Net.Template.IntegrationTest\Gremlin.Net.Template.IntegrationTest.csproj", "{3BFC3559-E317-4327-AFB7-CFBB31E1C868}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -33,6 +37,14 @@ Global
 		{CC54ABE3-13D2-491C-81E2-4D0355ABFA93}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{CC54ABE3-13D2-491C-81E2-4D0355ABFA93}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{CC54ABE3-13D2-491C-81E2-4D0355ABFA93}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A9D2567A-6FD0-452B-A2F9-4256FE513ADD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A9D2567A-6FD0-452B-A2F9-4256FE513ADD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A9D2567A-6FD0-452B-A2F9-4256FE513ADD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A9D2567A-6FD0-452B-A2F9-4256FE513ADD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3BFC3559-E317-4327-AFB7-CFBB31E1C868}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3BFC3559-E317-4327-AFB7-CFBB31E1C868}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3BFC3559-E317-4327-AFB7-CFBB31E1C868}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3BFC3559-E317-4327-AFB7-CFBB31E1C868}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -41,5 +53,10 @@ Global
 		{6C1DD34D-E30F-4E37-AACC-BEB8AD2320D8} = {584F838B-DAE2-44F5-868C-1F532949C827}
 		{1FAB781B-B857-4AD2-BEC8-E20C214D9E21} = {1B54FAC2-5411-4BB6-B450-FE2FFD8C4782}
 		{CC54ABE3-13D2-491C-81E2-4D0355ABFA93} = {1B54FAC2-5411-4BB6-B450-FE2FFD8C4782}
+		{A9D2567A-6FD0-452B-A2F9-4256FE513ADD} = {584F838B-DAE2-44F5-868C-1F532949C827}
+		{3BFC3559-E317-4327-AFB7-CFBB31E1C868} = {1B54FAC2-5411-4BB6-B450-FE2FFD8C4782}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {F0AF408C-2147-434A-80FB-73A1626FC30C}
 	EndGlobalSection
 EndGlobal

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/glv/Gremlin.Net.Template.csproj.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/Gremlin.Net.Template.csproj.template b/gremlin-dotnet/glv/Gremlin.Net.Template.csproj.template
new file mode 100644
index 0000000..9a6adf0
--- /dev/null
+++ b/gremlin-dotnet/glv/Gremlin.Net.Template.csproj.template
@@ -0,0 +1,33 @@
+<!--
+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.
+-->
+
+<!--  THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml -->
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <!-- We need both reference elements until this is resolved: https://github.com/dotnet/sdk/issues/1151 -->
+    <ProjectReference Include="../Gremlin.Net/Gremlin.Net.csproj" />
+    <PackageReference Include="Gremlin.Net" Version="$projectVersion" />
+  </ItemGroup>
+
+</Project>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/glv/Gremlin.Net.Template.nuspec.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/Gremlin.Net.Template.nuspec.template b/gremlin-dotnet/glv/Gremlin.Net.Template.nuspec.template
new file mode 100644
index 0000000..72ad382
--- /dev/null
+++ b/gremlin-dotnet/glv/Gremlin.Net.Template.nuspec.template
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
+    <metadata>
+        <id>Gremlin.Net.Template</id>
+        <title>Gremlin.Net Template</title>
+        <version>$projectVersion</version>
+        <description>Gremlin.Net template to create a console application with dotnet new.</description>
+        <authors>Apache TinkerPop</authors>
+        <licenseUrl>https://github.com/apache/tinkerpop/blob/master/LICENSE</licenseUrl>
+        <projectUrl>http://tinkerpop.apache.org</projectUrl>
+        <tags>TinkerPop Gremlin Gremlin.Net</tags>
+        <packageTypes>
+            <packageType name="Template" />
+        </packageTypes>
+    </metadata>
+    <files>
+        <file src=".template.config/template.json" target="content/.template.config" />
+        <file src="Gremlin.Net.Template.csproj" target="content" />
+        <file src="*.cs" target="content" />
+</files>
+</package>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/glv/generate.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/generate.groovy b/gremlin-dotnet/glv/generate.groovy
index 10b1008..8f5fa44 100644
--- a/gremlin-dotnet/glv/generate.groovy
+++ b/gremlin-dotnet/glv/generate.groovy
@@ -378,4 +378,10 @@ def determineVersion = {
 def versionToUse = determineVersion()
 def csprojTemplate = engine.createTemplate(new File("${projectBaseDir}/glv/Gremlin.Net.csproj.template")).make(["projectVersion":versionToUse])
 def csprojFile = new File("${projectBaseDir}/src/Gremlin.Net/Gremlin.Net.csproj")
-csprojFile.newWriter().withWriter{ it << csprojTemplate }
\ No newline at end of file
+csprojFile.newWriter().withWriter{ it << csprojTemplate }
+def templateCsprojTemplate = engine.createTemplate(new File("${projectBaseDir}/glv/Gremlin.Net.Template.csproj.template")).make(["projectVersion":versionToUse])
+def templateCsprojFile = new File("${projectBaseDir}/src/Gremlin.Net.Template/Gremlin.Net.Template.csproj")
+templateCsprojFile.newWriter().withWriter{ it << templateCsprojTemplate }
+def nuspecTemplate = engine.createTemplate(new File("${projectBaseDir}/glv/Gremlin.Net.Template.nuspec.template")).make(["projectVersion":versionToUse])
+def nuspecFile = new File("${projectBaseDir}/src/Gremlin.Net.Template/Gremlin.Net.Template.nuspec")
+nuspecFile.newWriter().withWriter{ it << nuspecTemplate }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/src/Gremlin.Net.Template/.template.config/template.json
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Template/.template.config/template.json b/gremlin-dotnet/src/Gremlin.Net.Template/.template.config/template.json
new file mode 100644
index 0000000..f1ea667
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Template/.template.config/template.json
@@ -0,0 +1,14 @@
+{
+    "$schema": "http://json.schemastore.org/template",
+    "author": "Apache TinkerPop",
+    "classifications": [ "TinkerPop", "Gremlin", "Gremlin.Net" ],
+    "identity": "Gremlin.Net.Template",
+    "name": "Gremlin.Net Template",
+    "shortName": "gremlin",
+    "tags": {
+        "language": "C#",
+        "type": "project"
+    },
+    "sourceName": "Gremlin.Net.Template",
+    "preferNameDirectory": true
+  }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.csproj b/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.csproj
new file mode 100644
index 0000000..bfe36cf
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.csproj
@@ -0,0 +1,33 @@
+<!--
+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.
+-->
+
+<!--  THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml -->
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <!-- We need both reference elements until this is resolved: https://github.com/dotnet/sdk/issues/1151 -->
+    <ProjectReference Include="../Gremlin.Net/Gremlin.Net.csproj" />
+    <PackageReference Include="Gremlin.Net" Version="3.2.10-SNAPSHOT" />
+  </ItemGroup>
+
+</Project>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.nuspec
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.nuspec b/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.nuspec
new file mode 100644
index 0000000..3de87df
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Template/Gremlin.Net.Template.nuspec
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
+    <metadata>
+        <id>Gremlin.Net.Template</id>
+        <title>Gremlin.Net Template</title>
+        <version>3.2.10-SNAPSHOT</version>
+        <description>Gremlin.Net template to create a console application with dotnet new.</description>
+        <authors>Apache TinkerPop</authors>
+        <licenseUrl>https://github.com/apache/tinkerpop/blob/master/LICENSE</licenseUrl>
+        <projectUrl>http://tinkerpop.apache.org</projectUrl>
+        <tags>TinkerPop Gremlin Gremlin.Net</tags>
+        <packageTypes>
+            <packageType name="Template" />
+        </packageTypes>
+    </metadata>
+    <files>
+        <file src=".template.config/template.json" target="content/.template.config" />
+        <file src="Gremlin.Net.Template.csproj" target="content" />
+        <file src="*.cs" target="content" />
+</files>
+</package>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/src/Gremlin.Net.Template/Program.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Template/Program.cs b/gremlin-dotnet/src/Gremlin.Net.Template/Program.cs
new file mode 100644
index 0000000..00f85e4
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Template/Program.cs
@@ -0,0 +1,50 @@
+#region License
+
+/*
+ * 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.
+ */
+
+#endregion
+
+using System;
+using Gremlin.Net.Driver;
+using Gremlin.Net.Driver.Remote;
+using Gremlin.Net.Structure;
+
+namespace Gremlin.Net.Template
+{
+    internal class Program
+    {
+        private const string GremlinServerHostname = "localhost";
+        private const int GremlinServerPort = 45940;
+
+        private static void Main()
+        {
+            using (var client = new GremlinClient(new GremlinServer(GremlinServerHostname, GremlinServerPort)))
+            {
+                var g = new Graph().Traversal().WithRemote(new DriverRemoteConnection(client));
+                var service = new Service(g);
+                var creators = service.FindCreatorsOfSoftware("lop");
+                foreach (var c in creators)
+                {
+                    Console.WriteLine(c);
+                }
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/src/Gremlin.Net.Template/README.md
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Template/README.md b/gremlin-dotnet/src/Gremlin.Net.Template/README.md
new file mode 100644
index 0000000..c57f51c
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Template/README.md
@@ -0,0 +1,46 @@
+<!--
+
+ 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.
+
+-->
+
+# Gremlin.Net Template
+
+This dotnet template helps getting started with [Gremlin.Net](http://tinkerpop.apache.org/docs/current/reference/#gremlin-DotNet) - the .NET Gremlin Language Variant (GLV) of Apache TinkerPop™. It creates a new C# console project that shows how to connect to a [Gremlin Server](http://tinkerpop.apache.org/docs/current/reference/#gremlin-server) with Gremlin.Net.
+
+## Installation
+
+You can install the template with the dotnet CLI tool:
+
+```bash
+dotnet new -i Gremlin.Net.Template
+```
+
+## Creating a project using the template
+
+After the template is installed, a new project based on this template can be installed:
+
+```bash
+dotnet new gremlin
+```
+
+You can specify the output directory for the new project which will then also be used as the name of the created project:
+
+```bash
+dotnet new gremlin -o MyFirstGremlinProject
+```
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/src/Gremlin.Net.Template/Service.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Template/Service.cs b/gremlin-dotnet/src/Gremlin.Net.Template/Service.cs
new file mode 100644
index 0000000..4ded6d3
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Template/Service.cs
@@ -0,0 +1,43 @@
+#region License
+
+/*
+ * 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.
+ */
+
+#endregion
+
+using System.Collections.Generic;
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.Net.Template
+{
+    public class Service
+    {
+        private readonly GraphTraversalSource _g;
+
+        public Service(GraphTraversalSource g)
+        {
+            _g = g;
+        }
+
+        public IList<string> FindCreatorsOfSoftware(string softwareName)
+        {
+            return _g.V().HasLabel("software").Has("name", softwareName).In("created").Values<string>("name").ToList();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/src/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/pom.xml b/gremlin-dotnet/src/pom.xml
index f913692..b8991a0 100644
--- a/gremlin-dotnet/src/pom.xml
+++ b/gremlin-dotnet/src/pom.xml
@@ -89,6 +89,54 @@ limitations under the License.
                             <nugetAddEnabled>false</nugetAddEnabled>
                         </configuration>
                     </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>pack-dotnet-template</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <tasks>
+                                        <taskdef resource="net/sf/antcontrib/antcontrib.properties" />                                       
+                                        <if>
+                                            <available file="mono" filepath="${env.PATH}"/>
+                                            <then>
+                                                <if>
+                                                    <available file="Gremlin.Net/bin/nuget.exe"/>
+                                                    <then>
+                                                        <echo>nuget.exe already downloaded and at Gremlin.Net/bin/nuget.exe.</echo>
+                                                    </then>
+
+                                                    <else>
+                                                        <exec dir="Gremlin.Net/bin" executable="wget" failonerror="true">
+                                                            <arg line="https://dist.nuget.org/win-x86-commandline/v4.4.1/nuget.exe"/>
+                                                        </exec>
+                                                    </else>
+                                                </if>
+                                                <exec dir="Gremlin.Net/bin" executable="mono" failonerror="true">
+                                                    <arg line="nuget.exe pack ../../Gremlin.Net.Template/Gremlin.Net.Template.nuspec"/>
+                                                </exec>
+                                            </then>
+                                            <else>
+                                                <echo>Skipping packaging of Gremlin.Net.Template as mono is not available</echo>
+                                            </else>
+                                        </if>
+                                    </tasks>
+                                </configuration>
+                            </execution>
+                        </executions>
+                        <dependencies>
+                            <dependency>
+                                <groupId>ant-contrib</groupId>
+                                <artifactId>ant-contrib</artifactId>
+                                <version>20020829</version>
+                            </dependency>
+                        </dependencies>
+                    </plugin>
                 </plugins>
             </build>
         </profile>
@@ -200,6 +248,12 @@ def engine = new groovy.text.GStringTemplateEngine()
 def csprojTemplate = engine.createTemplate(new File('${project.parent.basedir}/glv/Gremlin.Net.csproj.template')).make(["projectVersion":versionToUse])
 def csprojFile = new File('${project.basedir}/Gremlin.Net/Gremlin.Net.csproj')
 csprojFile.newWriter().withWriter{ it << csprojTemplate }
+def templateCsprojTemplate = engine.createTemplate(new File('${project.parent.basedir}/glv/Gremlin.Net.Template.csproj.template')).make(["projectVersion":versionToUse])
+def templateCsprojFile = new File('${project.basedir}/Gremlin.Net.Template/Gremlin.Net.Template.csproj')
+templateCsprojFile.newWriter().withWriter{ it << templateCsprojTemplate }
+def nuspecTemplate = engine.createTemplate(new File('${project.parent.basedir}/glv/Gremlin.Net.Template.nuspec.template')).make(["projectVersion":versionToUse])
+def nuspecFile = new File('${project.basedir}/Gremlin.Net.Template/Gremlin.Net.Template.nuspec')
+nuspecFile.newWriter().withWriter{ it << nuspecTemplate }
 ]]>
                                         </script>
                                     </scripts>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj
new file mode 100644
index 0000000..3607e68
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
+    <PackageReference Include="xunit" Version="2.3.1" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
+    <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\src\Gremlin.Net.Template\Gremlin.Net.Template.csproj" />
+  </ItemGroup>
+
+</Project>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
new file mode 100644
index 0000000..8bf332f
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
@@ -0,0 +1,56 @@
+#region License
+
+/*
+ * 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.
+ */
+
+#endregion
+
+using System.Collections.Generic;
+using Gremlin.Net.Driver;
+using Gremlin.Net.Driver.Remote;
+using Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.Template.IntegrationTest
+{
+    public class ServiceTests
+    {
+        private const string TestHost = "localhost";
+        private const int TestPort = 45940;
+
+        [Fact]
+        public void ShouldReturnExpectedCreators()
+        {
+            using (var client = CreateClient())
+            {
+                var g = new Graph().Traversal().WithRemote(new DriverRemoteConnection(client));
+                var service = new Service(g);
+            
+                var creators = service.FindCreatorsOfSoftware("lop");
+
+                Assert.Equal(new List<string> {"marko", "josh", "peter"}, creators);
+            }
+        }
+
+        private static IGremlinClient CreateClient()
+        {
+            return new GremlinClient(new GremlinServer(TestHost, TestPort));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/62a8837a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a9be62d..155db82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -375,6 +375,8 @@ limitations under the License.
                         <exclude>**/*.csproj</exclude>
                         <exclude>**/.vs/**</exclude>
                         <exclude>**/NuGet.Config</exclude>
+                        <exclude>**/*.nuspec</exclude>
+                        <exclude>**/*.nuspec.template</exclude>
                         <exclude>**/gremlin-javascript/node_modules/**</exclude>
                         <exclude>**/node/node_modules/**</exclude>
                         <exclude>**/node/node</exclude>


[7/9] tinkerpop git commit: Fix integration test by using correct traversal source TINKREPOP-1836

Posted by fl...@apache.org.
Fix integration test by using correct traversal source TINKREPOP-1836


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/280a8cfe
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/280a8cfe
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/280a8cfe

Branch: refs/heads/TINKERPOP-1836
Commit: 280a8cfedeaa19e26e7b57a72a1295ad9ca90b5b
Parents: 492353f
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Thu Jun 14 18:07:09 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Tue Jun 19 16:41:20 2018 +0200

----------------------------------------------------------------------
 .../test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/280a8cfe/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
index 8bf332f..91ce491 100644
--- a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
@@ -33,13 +33,14 @@ namespace Gremlin.Net.Template.IntegrationTest
     {
         private const string TestHost = "localhost";
         private const int TestPort = 45940;
+        private const string TestTraversalSource = "gmodern";
 
         [Fact]
         public void ShouldReturnExpectedCreators()
         {
             using (var client = CreateClient())
             {
-                var g = new Graph().Traversal().WithRemote(new DriverRemoteConnection(client));
+                var g = new Graph().Traversal().WithRemote(new DriverRemoteConnection(client, TestTraversalSource));
                 var service = new Service(g);
             
                 var creators = service.FindCreatorsOfSoftware("lop");


[8/9] tinkerpop git commit: Don't download nuget.exe on every build again TINKERPOP-1836

Posted by fl...@apache.org.
Don't download nuget.exe on every build again TINKERPOP-1836


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2d1e9424
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2d1e9424
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2d1e9424

Branch: refs/heads/TINKERPOP-1836
Commit: 2d1e9424eaabef082660d363453bad9e567a33c0
Parents: 62a8837
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Mon May 21 18:34:06 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Tue Jun 19 16:41:20 2018 +0200

----------------------------------------------------------------------
 .gitignore                 |  2 +-
 gremlin-dotnet/src/pom.xml | 28 ++++++++++++++++------------
 2 files changed, 17 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2d1e9424/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 0109f82..a27eb44 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,4 +31,4 @@ tools/
 .vs/
 *nupkg
 NuGet.Config
-nuget.exe
+nuget*.exe

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2d1e9424/gremlin-dotnet/src/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/pom.xml b/gremlin-dotnet/src/pom.xml
index b8991a0..a018c89 100644
--- a/gremlin-dotnet/src/pom.xml
+++ b/gremlin-dotnet/src/pom.xml
@@ -26,6 +26,10 @@ limitations under the License.
     <artifactId>gremlin-dotnet-source</artifactId>
     <name>Apache TinkerPop :: Gremlin.Net - Source</name>
     <packaging>${packaging.type}</packaging>
+    <properties>
+        <nugetVersion>4.4.1</nugetVersion>
+        <nugetExe>nuget-${nugetVersion}.exe</nugetExe>
+    </properties>
 
     <build>
         <plugins>
@@ -106,19 +110,19 @@ limitations under the License.
                                             <available file="mono" filepath="${env.PATH}"/>
                                             <then>
                                                 <if>
-                                                    <available file="Gremlin.Net/bin/nuget.exe"/>
+                                                    <available file="${nugetExe}"/>
                                                     <then>
-                                                        <echo>nuget.exe already downloaded and at Gremlin.Net/bin/nuget.exe.</echo>
+                                                        <echo>nuget.exe already downloaded.</echo>
                                                     </then>
 
                                                     <else>
-                                                        <exec dir="Gremlin.Net/bin" executable="wget" failonerror="true">
-                                                            <arg line="https://dist.nuget.org/win-x86-commandline/v4.4.1/nuget.exe"/>
+                                                        <exec executable="wget" failonerror="true">
+                                                            <arg line="https://dist.nuget.org/win-x86-commandline/v${nugetVersion}/nuget.exe -O ${nugetExe}"/>
                                                         </exec>
                                                     </else>
                                                 </if>
-                                                <exec dir="Gremlin.Net/bin" executable="mono" failonerror="true">
-                                                    <arg line="nuget.exe pack ../../Gremlin.Net.Template/Gremlin.Net.Template.nuspec"/>
+                                                <exec executable="mono" failonerror="true">
+                                                    <arg line="${nugetExe} pack Gremlin.Net.Template/Gremlin.Net.Template.nuspec"/>
                                                 </exec>
                                             </then>
                                             <else>
@@ -178,14 +182,14 @@ limitations under the License.
                                     <tasks>
                                         <taskdef resource="net/sf/antcontrib/antcontrib.properties" />
                                         <if>
-                                            <available file="Gremlin.Net/bin/nuget.exe"/>
+                                            <available file="${nugetExe}"/>
                                             <then>
-                                                <echo>nuget.exe already downloaded and at Gremlin.Net/bin/nuget.exe.</echo>
+                                                <echo>nuget.exe already downloaded.</echo>
                                             </then>
 
                                             <else>
-                                                <exec dir="Gremlin.Net/bin" executable="wget" failonerror="true">
-                                                    <arg line="https://dist.nuget.org/win-x86-commandline/v4.4.1/nuget.exe"/>
+                                                <exec executable="wget" failonerror="true">
+                                                    <arg line="https://dist.nuget.org/win-x86-commandline/v${nugetVersion}/nuget.exe -O ${nugetExe}"/>
                                                 </exec>
                                             </else>
                                         </if>
@@ -194,8 +198,8 @@ limitations under the License.
                                         until https://github.com/NuGet/Home/issues/4095 we have to have to specify
                                         the "ConfigFile" option to nuget.
                                         -->
-                                        <exec dir="Gremlin.Net/bin" executable="mono" failonerror="true">
-                                            <arg line="nuget.exe push Gremlin.Net.*.nupkg -Source https://www.nuget.org/api/v2/package -ConfigFile ${user.home}/.config/NuGet/NuGet.Config"/>
+                                        <exec executable="mono" failonerror="true">
+                                            <arg line="${nugetExe} push Gremlin.Net/bin/Gremlin.Net.*.nupkg -Source https://www.nuget.org/api/v2/package -ConfigFile ${user.home}/.config/NuGet/NuGet.Config"/>
                                         </exec>
                                     </tasks>
                                 </configuration>


[6/9] tinkerpop git commit: Remove Mono from Travis build again TINKERPOP-1836

Posted by fl...@apache.org.
Remove Mono from Travis build again TINKERPOP-1836


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/cfded119
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/cfded119
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/cfded119

Branch: refs/heads/TINKERPOP-1836
Commit: cfded1198a8825207e7d9a29f50011522759a4f0
Parents: 280a8cf
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sat Jun 16 11:33:08 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Tue Jun 19 16:41:20 2018 +0200

----------------------------------------------------------------------
 .travis.yml | 4 ----
 1 file changed, 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cfded119/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index a99103f..8ca1346 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,13 +20,9 @@ install:
 before_install:
   - wget -q https://packages.microsoft.com/config/ubuntu/14.04/packages-microsoft-prod.deb
   - sudo dpkg -i packages-microsoft-prod.deb
-  - sudo sh -c 'echo "deb https://download.mono-project.com/repo/ubuntu stable-trusty main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list'  
-  - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
   - sudo apt-get install apt-transport-https
   - sudo apt-get update
   - sudo apt-get install dotnet-sdk-2.1
-  - sudo apt install mono-devel
-
 
 jobs:
   include:


[9/9] tinkerpop git commit: Add note about Gremlin.Net.Template deploy rights TINKERPOP-1836

Posted by fl...@apache.org.
Add note about Gremlin.Net.Template deploy rights TINKERPOP-1836


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a968c861
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a968c861
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a968c861

Branch: refs/heads/TINKERPOP-1836
Commit: a968c8610be518a7ef8178fefe1e425abe144595
Parents: 2d1e942
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Wed May 23 20:50:46 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Tue Jun 19 16:41:20 2018 +0200

----------------------------------------------------------------------
 docs/src/dev/developer/development-environment.asciidoc | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a968c861/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index 4f5e253..72aff9c 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -181,9 +181,9 @@ For .NET releases, install link:http://www.mono-project.com/[Mono]. The release
 so it is best to probably install that version. Release managers should probably also do an install of
 link:https://dist.nuget.org/win-x86-commandline/v3.4.4/nuget.exe[nuget 3.4.4] as it will help with environmental setup.
 To get an environment ready to deploy to NuGet, it is necessary to have a NuGet API key. First, create an account with
-link:https://www.nuget.org[nuget] and request that a PMC member add your account to the Gremlin.Net package in nuget
-so that you can deploy. Next, generate an API key for your account on the nuget website. The API key should be added
-to `NuGet.Config` with the following:
+link:https://www.nuget.org[nuget] and request that a PMC member add your account to the Gremlin.Net and
+the Gremlin.Net.Template package in nuget so that you can deploy. Next, generate an API key for your account on the
+nuget website. The API key should be added to `NuGet.Config` with the following:
 
 [source,text]
 ----


[3/9] tinkerpop git commit: TINKERPOP-1780 Redirected some tests to the secure server for auth testing CTR

Posted by fl...@apache.org.
TINKERPOP-1780 Redirected some tests to the secure server for auth testing CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a4e087da
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a4e087da
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a4e087da

Branch: refs/heads/TINKERPOP-1836
Commit: a4e087da1fb9b6b698f3eecbdd9b3cd457baa7f1
Parents: 891bfa3
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Jun 18 16:05:36 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Jun 18 16:05:36 2018 -0400

----------------------------------------------------------------------
 gremlin-python/src/main/jython/tests/conftest.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a4e087da/gremlin-python/src/main/jython/tests/conftest.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/conftest.py b/gremlin-python/src/main/jython/tests/conftest.py
index 96ded16..a654719 100644
--- a/gremlin-python/src/main/jython/tests/conftest.py
+++ b/gremlin-python/src/main/jython/tests/conftest.py
@@ -38,7 +38,7 @@ def connection(request):
     executor = concurrent.futures.ThreadPoolExecutor(5)
     pool = queue.Queue()
     try:
-        conn = Connection('ws://localhost:45940/gremlin', 'gmodern', protocol,
+        conn = Connection('ws://localhost:45941/gremlin', 'gmodern', protocol,
                           lambda: TornadoTransport(), executor, pool)
     except OSError:
         executor.shutdown()


[5/9] tinkerpop git commit: Only pack Gremlin.Net.Template on demand TINKERPOP-1836

Posted by fl...@apache.org.
Only pack Gremlin.Net.Template on demand TINKERPOP-1836


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/492353fa
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/492353fa
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/492353fa

Branch: refs/heads/TINKERPOP-1836
Commit: 492353fae288e0ad4c52969e6e3662cddd8d5974
Parents: a968c86
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Thu Jun 14 17:29:48 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Tue Jun 19 16:41:20 2018 +0200

----------------------------------------------------------------------
 .../developer/development-environment.asciidoc  | 10 ++-
 docs/src/dev/developer/release.asciidoc         |  1 +
 gremlin-dotnet/src/pom.xml                      | 70 +++++++++-----------
 3 files changed, 39 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/492353fa/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index 72aff9c..0cf06f6 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -105,8 +105,6 @@ See the <<release-environment,Release Environment>> section for more information
 The build optionally requires link:https://www.microsoft.com/net/core[.NET Core SDK] (>=2.1.101) to work with the
 `gremlin-dotnet` module. If .NET Core SDK is not installed, TinkerPop will still build with Maven, but .NET projects
 will be skipped.
-In order to pack the Gremlin.Net Template project, it is also necessary to install link:http://www.mono-project.com/[Mono].
-The template will still be built and tested when Mono is not present but packing will be skipped.
 
 `gremlin-dotnet` can be built and tested from the command line with:
 
@@ -118,6 +116,14 @@ and `test` directories of the `gremlin-dotnet` module  which will signify to Ma
 The `.glv` file need not have any contents and is ignored by Git. A standard `mvn clean install` will then build
 `gremlin-dotnet` in full.
 
+In order to pack the Gremlin.Net.Template project, it is also necessary to install link:http://www.mono-project.com/[Mono].
+The template can still be built and tested without Mono but packing will be skipped.
+To pack the template (which will also download the link:https://docs.microsoft.com/en-us/nuget/tools/nuget-exe-cli-reference[NuGet CLI tool])
+the `nuget` property has to be set:
+
+[source,text]
+mvn clean install -Dnuget
+
 See the <<release-environment,Release Environment>> section for more information on release manager configurations.
 
 [[nodejs-environment]]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/492353fa/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/release.asciidoc b/docs/src/dev/developer/release.asciidoc
index 5496b31..eeb4679 100644
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@ -112,6 +112,7 @@ during this period.
 . At some point during the week:
 .. Run the full integration test suite: `mvn clean install -DskipIntegrationTests=false -DincludeNeo4j`
 .. Build and test the Docker images: `mvn clean install -pl gremlin-server,gremlin-console -DdockerImages`
+.. Ensure that the Gremlin.Net.Template gets packaged successfully: `mvn clean install -Dnuget`
 .. Deploy a final SNAPSHOT to the snapshot repository as well as GLV and Docker image pre-releases.
 .. Review LICENSE and NOTICE files to make sure that no <<dependencies,changes are needed>>.
 .. Review javadoc filters on the "Core API" docs to be sure nothing needs to change.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/492353fa/gremlin-dotnet/src/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/pom.xml b/gremlin-dotnet/src/pom.xml
index a018c89..664522a 100644
--- a/gremlin-dotnet/src/pom.xml
+++ b/gremlin-dotnet/src/pom.xml
@@ -93,6 +93,33 @@ limitations under the License.
                             <nugetAddEnabled>false</nugetAddEnabled>
                         </configuration>
                     </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <!--
+        Provides a way to deploy the Gremlin.Net GLV to nuget. This cannot be part of the standard maven execution
+        because nuget 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-dotnet-deploy</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+                <property>
+                    <name>nuget</name>
+                </property>
+            </activation>
+            <properties>
+                <packaging.type>dotnet-library</packaging.type>
+            </properties>
+            <build>
+                <plugins>
+                    <!--
+                      not seeing much point to making this OS agnostic really. as far as it is known, no one who does
+                      deployments will do so from a windows machine. this part of the build requires mono. note that
+                      the "correct" version of nuget is downloaded as part of the process.
+                     -->
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-antrun-plugin</artifactId>
@@ -132,46 +159,6 @@ limitations under the License.
                                     </tasks>
                                 </configuration>
                             </execution>
-                        </executions>
-                        <dependencies>
-                            <dependency>
-                                <groupId>ant-contrib</groupId>
-                                <artifactId>ant-contrib</artifactId>
-                                <version>20020829</version>
-                            </dependency>
-                        </dependencies>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <!--
-        Provides a way to deploy the Gremlin.Net GLV to nuget. This cannot be part of the standard maven execution
-        because nuget 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-dotnet-deploy</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-                <property>
-                    <name>nuget</name>
-                </property>
-            </activation>
-            <properties>
-                <packaging.type>dotnet-library</packaging.type>
-            </properties>
-            <build>
-                <plugins>
-                    <!--
-                      not seeing much point to making this OS agnostic really. as far as it is known, no one who does
-                      deployments will do so from a windows machine. this part of the build requires mono. note that
-                      the "correct" version of nuget is downloaded as part of the process.
-                     -->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-antrun-plugin</artifactId>
-                        <executions>
                             <execution>
                                 <id>deploy-nuget</id>
                                 <phase>deploy</phase>
@@ -201,6 +188,9 @@ limitations under the License.
                                         <exec executable="mono" failonerror="true">
                                             <arg line="${nugetExe} push Gremlin.Net/bin/Gremlin.Net.*.nupkg -Source https://www.nuget.org/api/v2/package -ConfigFile ${user.home}/.config/NuGet/NuGet.Config"/>
                                         </exec>
+                                        <exec executable="mono" failonerror="true">
+                                            <arg line="${nugetExe} push Gremlin.Net.Template.*.nupkg -Source https://www.nuget.org/api/v2/package -ConfigFile ${user.home}/.config/NuGet/NuGet.Config"/>
+                                        </exec>
                                     </tasks>
                                 </configuration>
                             </execution>