<?xml version="1.0" encoding="UTF-8"?>
<project name="publish" basedir="." default="" xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:antcontrib="antlib:net.sf.antcontrib" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    <include file="common.xml" as="common" />
    <include file="build.xml" as="vaadin" />

    <!-- Dummy value as ivysettings-publish require a value -->
    <property name="publish.sftp.keyfile" value="/dummy" />
    <property name="publish.sftp.ivy.pattern" value="dummy" />

    <ivy:settings file="ivysettings.xml" />
    <ivy:settings file="ivysettings-publish.xml" id="publish.settings" />
    <property file="publish.properties" />

    <target name="nightly.publish" depends="nightly.download.publish, nightly.maven.publish">

    </target>

    <!-- Copies the nightly build artifacts to the download server. -->
    <target name="nightly.tests.publish" if="nightly.tests.publish">
        <property name="file.war" location="result/artifacts/${vaadin.version}/vaadin-uitest/vaadin-uitest-${version}.war" />
        <property name="target" value="${nightly.tests.publish}/${vaadin.version.major}.${vaadin.version.minor}-${build.tag}.war" />

        <fail unless="ant-jsch.present" message="Please install ant-jsch.jar into ANT_HOME/lib" />
        <fail unless="jsch.present" message="Please install jsch.jar into ANT_HOME/lib" />

        <echo>Installing ${src} to ${target}</echo>

        <scp todir="${nightly.tests.publish}" file="${file.war}">
        </scp>
    </target>

    <target name="nightly.download.publish">
        <antcontrib:foreach list="${modules.to.publish.to.download}" target="publish.module.to.download.site" param="module" />
    </target>

    <target name="nightly.maven.publish">
        <antcontrib:foreach list="${modules.to.publish.to.maven}" target="publish.module.to.maven" param="module" />
    </target>

	<target name="publish.module.to.download.site">
        <fail unless="module" message="No module to publish defined" />
        <ivy:resolve log="download-only" file="${module}/ivy.xml" />
        <ivy:publish publishivy="false" settingsref="publish.settings" conf="*(public)" resolver="sftp-publish">
            <artifacts pattern="${ivy.settings.dir}/result/artifacts/[revision]/[module]/[artifact]-[revision](-[classifier]).[ext]" />
        </ivy:publish>
    </target>

    <target name="publish.module.to.maven">
        <fail unless="module" message="No module to publish defined" />
        <property file="${gpg.passphrase.file}" />

        <!-- Ivy should be able to handle this but this does not work at 
            the moment <ivy:resolve log="download-only" file="${module}/ivy.xml" /> <ivy:publish pubrevision="7.0-SNAPSHOT" 
            publishivy="false" settingsref="publish.settings" conf="*(public)" resolver="sonatype"> 
            <artifacts pattern="${ivy.settings.dir}/result/artifacts/${vaadin.version}/[module]/[artifact]-${vaadin.version}(-[classifier]).[ext]" 
            /> </ivy:publish> -->
        <property name="jar.file" location="result/artifacts/${vaadin.version}/vaadin-${module}/vaadin-${module}-${vaadin.version}.jar" />
        <property name="pom.file" location="result/artifacts/${vaadin.version}/vaadin-${module}/vaadin-${module}-${vaadin.version}.pom" />

        <artifact:mvn failonerror="true">
            <arg value="gpg:sign-and-deploy-file" />
            <sysproperty key="file" value="${jar.file}" />
            <sysproperty key="pomFile" value="${pom.file}" />
            <sysproperty key="repositoryId" value="${maven.snapshot.repository.id}" />
            <sysproperty key="url" value="${maven.snapshot.repository.url}" />
            <sysproperty key="gpg.passphrase" value="${gpg.passphrase}" />
            <sysproperty key="retryFailedDeploymentCount" value="10" />
        </artifact:mvn>
    </target>

	<!-- Use this to publish to local Maven repo                              -->
	<!-- If you have compiled a snapshot build with:                          -->
	<!--    ant -Dvaadin.version=7.x.x.zzz package                            -->
	<!-- Publish with:                                                        -->
	<!--    ant -f publish.xml -Dvaadin.version=7.x.x.zzz local.maven.publish -->
	<!-- Note that if the build is a snapshot build, it will be installed as  -->
	<!-- 7.x-SNAPSHOT.                                                        -->
    <target name="local.maven.publish">
        <antcontrib:foreach list="${modules.to.publish.to.maven}" target="publish.module.to.local.maven" param="module" />
    </target>

    <target name="publish.module.to.local.maven">
        <fail unless="module" message="No module to publish defined" />

        <property name="jar.file" location="result/artifacts/${vaadin.version}/vaadin-${module}/vaadin-${module}-${vaadin.version}.jar" />
        <property name="javadoc.file" location="result/artifacts/${vaadin.version}/vaadin-${module}/vaadin-${module}-${vaadin.version}-javadoc.jar" />
        <property name="sources.file" location="result/artifacts/${vaadin.version}/vaadin-${module}/vaadin-${module}-${vaadin.version}-sources.jar" />
        <property name="pom.file" location="result/artifacts/${vaadin.version}/vaadin-${module}/vaadin-${module}-${vaadin.version}.pom" />

        <artifact:mvn failonerror="true">
            <arg value="install:install-file" />
            <sysproperty key="file" value="${jar.file}" />
            <sysproperty key="pomFile" value="${pom.file}" />
            <sysproperty key="javadoc" value="${javadoc.file}" />
            <sysproperty key="sources" value="${sources.file}" />
        </artifact:mvn>
    </target>
</project>
