<!--
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-dotnet</artifactId>
        <version>3.4.7</version>
    </parent>
    <artifactId>gremlin-dotnet-source</artifactId>
    <name>Apache TinkerPop :: Gremlin.Net - Source</name>
    <packaging>${packaging.type}</packaging>
    <properties>
        <nugetVersion>4.9.2</nugetVersion>
        <nugetExe>nuget-${nugetVersion}.exe</nugetExe>
    </properties>

    <build>
        <plugins>
            <!-- Override the execution from gremlin-dotnet to disable code generation from happening a second time -->
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-dsl</id>
                        <phase/>
                    </execution>
                </executions>
            </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-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>gremlin-dotnet-standard</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <packaging.type>pom</packaging.type>
            </properties>
        </profile>
        <!-- activates the building of .NET components and requires that the .NET Core SDK be installed on the system -->
        <profile>
            <id>gremlin-dotnet</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <file>
                    <exists>.glv</exists>
                </file>
            </activation>
            <properties>
                <packaging.type>dotnet-library</packaging.type>
            </properties>
            <build>
                <directory>${basedir}/target</directory>
                <finalName>${project.artifactId}-${project.version}</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.eobjects.build</groupId>
                        <artifactId>dotnet-maven-plugin</artifactId>
                        <extensions>true</extensions>
                        <configuration>
                            <packEnabled>true</packEnabled>
                            <nugetPushEnabled>false</nugetPushEnabled>
                            <nugetAddEnabled>false</nugetAddEnabled>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>docfx</id>
                                <phase>process-resources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <taskdef resource="net/sf/antcontrib/antcontrib.properties" />
                                        <if>
                                            <!-- docfx sadly requires mono and nuget at this time:
                                                 1. https://github.com/dotnet/docfx/issues/3389 (nuget required for a dll not in mono
                                                 2. https://github.com/dotnet/docfx/issues/718#issuecomment-256700598 (mono workaround) -->
                                            <and>
                                                <available file="mono" filepath="${env.PATH}"/>
                                                <available file="${nugetExe}"/>
                                            </and>
                                            <then>
                                                <if>
                                                    <available file="docfx/docfx.exe"/>
                                                    <then>
                                                        <echo>docfx already downloaded.</echo>
                                                    </then>

                                                    <else>
                                                        <exec executable="wget" failonerror="true">
                                                            <arg line="https://github.com/dotnet/docfx/releases/download/v2.40.2/docfx.zip"/>
                                                        </exec>
                                                        <mkdir dir="docfx"/>
                                                        <exec executable="unzip" failonerror="true">
                                                            <arg line="docfx.zip -d docfx"/>
                                                        </exec>
                                                        <delete file="docfx.zip"/>
                                                        <exec executable="mono" failonerror="true">
                                                            <arg line="${nugetExe} install -OutputDirectory docfx SQLitePCLRaw.core -ExcludeVersion"/>
                                                        </exec>
                                                        <copy file="docfx/SQLitePCLRaw.core/lib/net45/SQLitePCLRaw.core.dll" todir="docfx"/>
                                                    </else>
                                                </if>
                                                <exec executable="mono" failonerror="true">
                                                    <arg line="docfx/docfx.exe"/>
                                                </exec>
                                            </then>
                                            <else>
                                                <echo>Skipping docfx generation as mono and nuget are required.</echo>
                                                <echo>nuget must be installed as it would if doing a .NET deployment - see the glv-dotnet-deploy Maven profile for more information.</echo>
                                            </else>
                                        </if>
                                    </target>
                                </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>pack-dotnet-template</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <taskdef resource="net/sf/antcontrib/antcontrib.properties" />                                       
                                        <if>
                                            <available file="mono" filepath="${env.PATH}"/>
                                            <then>
                                                <if>
                                                    <available file="${nugetExe}"/>
                                                    <then>
                                                        <echo>nuget.exe already downloaded.</echo>
                                                    </then>

                                                    <else>
                                                        <exec executable="wget" failonerror="true">
                                                            <arg line="https://dist.nuget.org/win-x86-commandline/v${nugetVersion}/nuget.exe -O ${nugetExe}"/>
                                                        </exec>
                                                    </else>
                                                </if>
                                                <exec executable="mono" failonerror="true">
                                                    <arg line="${nugetExe} 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>
                                    </target>
                                </configuration>
                            </execution>
                            <execution>
                                <id>deploy-nuget</id>
                                <phase>deploy</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <tasks>
                                        <taskdef resource="net/sf/antcontrib/antcontrib.properties" />
                                        <if>
                                            <available file="${nugetExe}"/>
                                            <then>
                                                <echo>nuget.exe already downloaded.</echo>
                                            </then>

                                            <else>
                                                <exec executable="wget" failonerror="true">
                                                    <arg line="https://dist.nuget.org/win-x86-commandline/v${nugetVersion}/nuget.exe -O ${nugetExe}"/>
                                                </exec>
                                            </else>
                                        </if>

                                        <!--
                                        until https://github.com/NuGet/Home/issues/4095 we have to have to specify
                                        the "ConfigFile" option to nuget.
                                        -->
                                        <exec executable="mono" failonerror="true">
                                            <arg line="${nugetExe} push Gremlin.Net/bin/Gremlin.Net.${project.version}.nupkg -Source https://api.nuget.org/v3/index.json -ConfigFile ${user.home}/.config/NuGet/NuGet.Config"/>
                                        </exec>
                                        <exec executable="mono" failonerror="true">
                                            <arg line="${nugetExe} push Gremlin.Net.Template.${project.version}.nupkg -Source https://api.nuget.org/v3/index.json -ConfigFile ${user.home}/.config/NuGet/NuGet.Config"/>
                                        </exec>
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>ant-contrib</groupId>
                                <artifactId>ant-contrib</artifactId>
                                <version>20020829</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.gmavenplus</groupId>
                        <artifactId>gmavenplus-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.tinkerpop</groupId>
                                <artifactId>gremlin-core</artifactId>
                                <version>${project.version}</version>
                                <scope>runtime</scope>
                            </dependency>
                            <dependency>
                                <groupId>org.codehaus.groovy</groupId>
                                <artifactId>groovy-all</artifactId>
                                <version>${groovy.version}</version>
                                <type>pom</type>
                                <scope>runtime</scope>
                            </dependency>
                            <dependency>
                                <groupId>log4j</groupId>
                                <artifactId>log4j</artifactId>
                                <version>1.2.17</version>
                                <scope>runtime</scope>
                            </dependency>
                        </dependencies>
                        <executions>
                            <execution>
                                <id>generate-dsl</id>
                                <phase>deploy</phase>
                                <goals>
                                    <goal>execute</goal>
                                </goals>
                                <configuration>
                                    <scripts>
                                        <script><![CDATA[
// revert back the version after a SNAPSHOT deployment
def versionToUse = '${project.version}'
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>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>