<!--

    Copyright (c) 2018, 2019 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0 which is available at
    http://www.eclipse.org/legal/epl-2.0,
    or the Eclipse Distribution License v. 1.0 which is available at
    http://www.eclipse.org/org/documents/edl-v10.php.

    SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause

-->

<!--
  Contributors:
      mmeswani - initial API and implementation (checked in by tware)
      egwin    - updated variables as they have changed in the rest of the system
                 updated svnversion to not break build, and default if exec fails
      egwin    - updated for publishing to Maven Central, split nexus handling to
                 new script
      egwin    - converted svn.revision to git.hash (was missed in original
                 migration to Git)
      egwin    - migrated to javax.persistence
-->
<!-- Variables Needed:
*         build.type      - should be set to "SNAPSHOT, "M##", or "RELEASE"
*         git.hash        - for stamping pom, to link build with source repo
*
*********************************************************************************-->
<!-- Build Assumptions:
*         running from a "view"
*            Needs:
*               ${mavenant.dir}/maven-ant-tasks-2.0.8.jar (assumes: ${build.deps.dir}/mavenant)
*               ../eclipselink.releng/ant_customizations.jar
*
*********************************************************************************-->
<!--
   Ant naming conventions:
   - regardless of the actual OS platform,'/' is the directory separator
     (Ant will convert as appropriate).
   - multi-word properties use periods '.'
     - properties ending in .jar define jarfile names only (no path)
     - properties ending in .lib are fully qualified jars (path and filename)
     - properties ending in .dir are directory paths
     - properties ending in .path are path refid names (classpath fragments)
   - multi-word targets use hyphens '-'
     - targets beginning with test- are reserved for high level test targets,
       and are used in test results parsing
     - targets typically use the form <action>-<object>-<type> (ie. package-bundle-zip)
   - multi-word macros use underscores '_'
   - multi-word macro attributes are concatenated
    e.g. 'runpathref'
   - multi-word tasks (taskdef) names are concatenated
     e.g. 'validateconnection'
   - OS environment variables are in ALLCAPS and have 'env' as a prefix
     e.g. ${env.XXX}.
   - Ant properties are lower case.
-->
<project name="Upload2Maven"  basedir="." xmlns:artifact="urn:maven-artifact-ant" default="info">
    <property file="${user.home}/build.properties"/>
    <!-- The following properties defined so they can be overridden for testing -->
    <property name="mavenant.dir" value="${build.deps.dir}/mavenant"/>
    <property name="eclipselink.root.download.dir" value="home/data/httpd/download.eclipse.org/rt/eclipselink"/>

    <path id="maven-ant-tasks.classpath" path="${mavenant.dir}/maven-ant-tasks-2.1.3.jar" />
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
             classpathref="maven-ant-tasks.classpath" />

    <!-- Tool version definitions -->
    <property name="gpg.plugin.version"   value="1.4"/>
    <property name="wagon.http.version"   value="2.4"/>

    <!-- The repository info of where maven artifacts will be uploaded -->
    <!--    Override value to change defaults                          -->
    <property name="stagingId"   value="sonatype-nexus-staging"/>
    <property name="stagingURL"  value="https://oss.sonatype.org/service/local/staging/deploy/maven2"/>
    <property name="snapshotId"  value="sonatype-nexus-snapshots"/>
    <property name="snapshotURL" value="https://oss.sonatype.org/content/repositories/snapshots"/>

    <target name="init">
        <dirname  property="maven.build.location_temp" file="${ant.file.Upload2Maven}"/>
        <pathconvert targetos="unix" property="maven.build.location">
            <path>
                <pathelement location="${maven.build.location_temp}"/>
            </path>
        </pathconvert>
        <property file="${user.home}/build.properties"/>
        <!-- discover path definitions -->
        <property name="maven.2.target.dir"    value="${maven.build.location}/target"/>
        <property name="maven.2.releng.dir"    value="${maven.build.location}/../eclipselink.releng"/>

        <echo message="maven.build.location = ${maven.build.location}"/>
        <echo message="maven.2.target.dir   = ${maven.2.target.dir}"/>
        <echo message="maven.2.releng.dir   = ${maven.2.releng.dir}"/>

        <!-- Test for Basic run requirements   -->
        <available file="${maven.2.releng.dir}" type="dir" property="releng.exist"/>
        <fail message="Cannot find Releng repo! Exiting."      unless="releng.exist"/>

        <!-- Custom task definitions -->
        <property name="custom.tasks.lib"                 value="${maven.2.releng.dir}/ant_customizations.jar"/>
        <property name="custom.echo.task.class"           value="org.eclipse.persistence.buildtools.ant.taskdefs.Say"/>
        <property name="custom.selectbundle.task.class"   value="org.eclipse.persistence.buildtools.ant.taskdefs.SelectBundle"/>
        <property name="custom.stripqualifier.task.class" value="org.eclipse.persistence.buildtools.ant.taskdefs.StripQualifier"/>
        <taskdef name="say"            classname="${custom.echo.task.class}"           classpath="${custom.tasks.lib}"/>
        <taskdef name="selectbundle"   classname="${custom.selectbundle.task.class}"   classpath="${custom.tasks.lib}"/>
        <taskdef name="stripQualifier" classname="${custom.stripqualifier.task.class}" classpath="${custom.tasks.lib}"/>

        <property name="bundle.prefix"        value="jakarta.persistence"/>
        <property name="bundle.name"          value="Jakarta Persistence"/>
        <property name="OSGi.version"         value="2.2.3" />

        <!-- Maven standards state we should publish with a stripped down 3-part version rather -->
        <!-- than the 4-part OSGi version. So we need to generate a "base.version" from the     -->
        <!-- discovered "OSGi.version". "base.version" will be combined with build.type to get  -->
        <!-- the actual "maven.version"                                                         -->
        <stripQualifier input="${OSGi.version}"                                            property="base.version"/>
        <say  message="base.version:    ${base.version}"                                         if="base.version"/>
        <fail message="${base.version} property not set! StripQualifier failure. Exiting..." unless="base.version"/>

        <say  message="build.type:      ${build.type}"                                           if="build.type"/>
        <fail message="Cannot upload to Maven without a build.type defined!"                 unless="build.type"/>

        <!-- used to determine whether to publish if version exists, and could also be used if  -->
        <!-- pgp signing required (not currently used in eclipse maven.repo)                    -->
        <condition property="sign">
            <not> <equals arg1="${build.type}" arg2="SNAPSHOT"/> </not>
        </condition>

        <!-- Set maven.version appropriately depending upon ${build.type}.           -->
        <!--    variable should only be used for maven version element in POM.       -->
        <condition property="maven.version" value="${base.version}"
                                             else="${base.version}-${build.type}">
            <equals arg1="${build.type}" arg2="RELEASE"/>
        </condition>
        <say  message="maven.version:   ${maven.version}"/>

        <say  message="git.hash:        ${git.hash}"                                             if="git.hash"/>
        <fail message="Cannot upload to Maven without 'git.hash' defined!"                   unless="git.hash"/>

        <condition property="target.repo.message" value="Target repository ID: '${stagingId}' URL:'${stagingURL}'"
                                                   else="Target repository ID: '${snapshotId}' URL:'${snapshotURL}'">
            <isset property="sign"/>
        </condition>
        <echo message="${target.repo.message}"/>
    </target>

    <target name="info" depends="init, verify-publish">
        <say  message="If above info is correct, and you want to pubish for real, Re-run specifying target 'upload'."/>
    </target>

    <!-- Nexus typicaly is configured to disallow uploads of already published versions (non-snapshot)   -->
    <!--   Aditionally Sonatype is configured to disallow publishing of non-snapshot versions to the     -->
    <!--   snapshot server (400 error). -->
    <target name="upload" depends="init">
        <antcall target="upload-artifact">
            <param name="groupId"         value="org.eclipse.persistence"/>
            <param name="artifactId"      value="${bundle.prefix}"/>
            <param name="artifactVersion" value="${maven.version}"/>
            <param name="artifact"        value="${maven.2.target.dir}/${bundle.prefix}-${bundle.version}.jar"/>
            <param name="artifactSrc"     value="${maven.2.target.dir}/${bundle.prefix}-${bundle.version}-sources.jar"/>
            <param name="artifactJavadoc" value="${maven.2.target.dir}/${bundle.prefix}-${bundle.version}-javadoc.jar"/>
            <param name="artifactName"    value="${bundle.name}"/>
            <param name="dependencies"    value=""/>
        </antcall>
    </target>

    <!-- Generic targets to do the Maven work  -->
    <target name="prepare-pom">
        <!-- Copy pom.template to pom.xml filtering various properties -->
        <copy file="pom.xml.template" tofile="pom.xml" overwrite="true">
          <filterset>
            <filter token="groupId"      value="${groupId}"/>
            <filter token="version"      value="${artifactVersion}"/>
            <filter token="git.hash"     value="${git.hash}"/>
            <filter token="artifactId"   value="${artifactId}"/>
            <filter token="artifactName" value="${artifactName}"/>
            <filter token="dependencies" value="${dependencies}"/>
           </filterset>
        </copy>
    </target>

    <target name="verify-publish">
        <available file="${maven.repo.dir}" property="repo.exist"   type="dir" value="true"/>
        <say  message="Repository: '${maven.repo.dir}' inaccessible. Upload will fail." unless="repo.exist"/>
        <fail message="Repository inaccessible" unless="repo.exist"/>

        <available file="${repo.dir}" property="repo.version.exist" type="dir" value="true"/>
        <condition property="publish.ok">
               <!-- if unpublished staging -->
               <and>
                   <isset property="sign"/>
                   <not><isset property="repo.version.exist"/></not>
               </and>
        </condition>
        <condition property="publish.message"
                  value="'${artifactName}' version '${artifactVersion}' SNAPSHOT upload ok."
                   else="'${artifactName}' version '${artifactVersion}' never deployed to ... upload ok.">
            <equals arg1="${build.type}" arg2="SNAPSHOT"/>
        </condition>
        <say message="'${artifactName}' version '${artifactVersion}' already deployed to repository... skipping." unless="publish.ok"/>
        <say message="${publish.message}"                                                                             if="publish.ok"/>
     </target>

    <!-- Uploads a single artifact, source & javadoc to maven repository -->
    <target name="upload-artifact" depends="verify-publish, prepare-pom, upload-snapshot, upload-artifact-staging, upload-source-staging, upload-javadoc-staging">
        <!-- cleanup -->
        <delete file="pom.xml"/>
    </target>
    <target name="upload-snapshot" unless="sign">
        <!-- Install provider for https protocol -->
        <artifact:install-provider artifactId="wagon-http" version="${wagon.http.version}"/>
        <!-- Deploy Artifact to repote repo, attach source and javadoc -->
        <artifact:deploy file="${artifact}">
          <artifact:remoteRepository id="${snapshotId}" url="${snapshotURL}"/>
          <artifact:pom id="maven.project" file="pom.xml"/>
          <artifact:attach file="${artifactSrc}"     type="jar" classifier="sources"/>
          <artifact:attach file="${artifactJavadoc}" type="zip" classifier="javadoc"/>
        </artifact:deploy>
    </target>

    <!-- Staging targets -->
    <target name="upload-artifact-staging" if="publish.ok" >
        <!-- sign and deploy the main artifact -->
        <artifact:mvn>
            <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/>
            <arg value="-Durl=${stagingURL}"/>
            <arg value="-DrepositoryId=${stagingId}"/>
            <arg value="-DpomFile=${maven.build.location}/pom.xml"/>
            <arg value="-Dfile=${artifact}"/>
            <arg value="-Pgpg"/>
        </artifact:mvn>
    </target>
    <target name="upload-source-staging" if="publish.ok" >
        <!-- sign and deploy the sources artifact -->
        <artifact:mvn>
            <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/>
            <arg value="-Durl=${stagingURL}"/>
            <arg value="-DrepositoryId=${stagingId}"/>
            <arg value="-DpomFile=${maven.build.location}/pom.xml"/>
            <arg value="-Dfile=${artifactSrc}"/>
            <arg value="-Dclassifier=sources"/>
            <arg value="-Pgpg"/>
        </artifact:mvn>
    </target>
    <target name="upload-javadoc-staging" if="publish.ok" >
        <!-- sign and deploy the javadoc artifact -->
        <artifact:mvn>
            <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/>
            <arg value="-Durl=${stagingURL}"/>
            <arg value="-DrepositoryId=${stagingId}"/>
            <arg value="-DpomFile=${maven.build.location}/pom.xml"/>
            <arg value="-Dfile=${artifactJavadoc}"/>
            <arg value="-Dclassifier=javadoc"/>
            <arg value="-Pgpg"/>
        </artifact:mvn>
    </target>

</project>


