<!--

    Copyright (c) 2018 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, add ability to override
                 destination URL (to pub elsewhere override ${maven.repo.url})
      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"/>

    <!-- "maven dir" defined for later use ensuring only single upload occurs -->
    <property name="maven.repo.dir" value="${eclipselink.root.download.dir}/maven.repo"/>

    <!-- The repository info of where maven artifacts will be uploaded -->
    <!--    Override value to change defaults                          -->
    <property name="stagingId"   value="eclipselink.repository"/>
    <property name="stagingURL"  value="file:///${maven.repo.dir}"/>
    <property name="snapshotId"  value="eclipselink.repository"/>
    <property name="snapshotURL" value="file:///${maven.repo.dir}"/>

    <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.criteria"      value="[2.0.100, 2.2)"/>
        <property name="bundle.name"          value="Java Persistence"/>

        <!-- Determine Version info from built bundle filename -->
        <selectbundle basename="${bundle.prefix}"  directory="${maven.2.target.dir}"
                     criterion="${bundle.criteria}" property="OSGi.version" versiononly="true"
        />
        <say  message="OSGi.version:    ${OSGi.version}"                                         if="OSGi.version"/>
        <fail message="${OSGi.version} property not set! SelectBundle failure. Exiting..."   unless="OSGi.version"/>

        <!-- 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>

    <target name="upload" depends="init">
        <antcall target="upload-artifact">
            <param name="repo.dir"        value="/${maven.repo.dir}/org/eclipse/persistence/${bundle.prefix}/${maven.version}"/>
            <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}.source_${bundle.version}.jar"/>
            <param name="artifactJavadoc" value="${maven.2.target.dir}/${bundle.prefix}.javadoc_${bundle.version}.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">
            <or>
               <!-- if unpublished staging -->
               <and>
                   <isset property="sign"/>
                   <not><isset property="repo.version.exist"/></not>
               </and>
               <!-- if snapshot -->
               <not><isset property="sign"/></not>
            </or>
        </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 to maven repository -->
    <target name="upload-artifact" if="publish.ok" depends="verify-publish, prepare-pom"> <!-- , upload-snapshot, upload-artifact-staging, upload-source-staging"> -->
        <!-- only needed if publishing to two repos (staging and snapshot)
        <delete file="pom.xml"/>
    </target>
    <target name="upload-snapshot" unless="sign"> -->
        <!-- Deploy the jar to maven repository along with sources -->
        <artifact:pom id="maven.project" file="pom.xml" />
        <!-- 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>
        <!-- cleanup -->
        <delete file="pom.xml"/>
    </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>


