import virgobuild.Constants

import static virgobuild.UpdateSitePlugin.CREATE_P2_REPOSITORY_TASK_NAME
import static virgobuild.VirgoToolsPlugin.installProduct
import static virgobuild.VirgoToolsPlugin.publishProduct

apply plugin: virgobuild.UpdateSitePlugin
apply plugin: 'org.hidetake.ssh'

buildscript {
    repositories { jcenter() }
    dependencies { classpath 'org.hidetake:gradle-ssh-plugin:1.1.2' }
}

updateSite {
    extraResources = files('epl-v10.html', 'notice.html', 'p2.index')
    hook { Project project ->
        postProcessing(project)
    }
    signing { File unsignedFolder, File signedFolder ->
        if (gradle.taskGraph.hasTask(uploadUpdateSite)) {
            signByEclipseService(unsignedFolder, signedFolder)
        } else {
            signLocally(unsignedFolder, signedFolder)
        }
    }
    mutateArtifactsXml { Node artifactsXml ->
        addExtraPropertiesToArtifactsXml(artifactsXml)
    }
}

remotes {
    eclipseDotOrg {
        host = ECLIPSE_ORG_FTP_HOST
        user = ECLIPSE_ORG_FTP_USER
        password = ECLIPSE_ORG_FTP_PASSWORD
        knownHosts = project.rootProject.file('gradle/ssh/known_hosts')
    }
}

dependencies {
    localPlugin project(':kernel:org.eclipse.virgo.kernel.agent.dm')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.artifact')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.deployer')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.deployer.dm')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.dmfragment')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.equinox.extensions')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.kerneldmfragment')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.model')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.osgi')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.services')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.userregion')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.userregionfactory')
    localPlugin project(':kernel:org.eclipse.virgo.management.console')
    localPlugin project(':kernel:org.eclipse.virgo.management.fragment')
    localPlugin project(':kernel:org.eclipse.virgo.shell.command')

    localPlugin project(':medic:org.eclipse.virgo.medic')
    localPlugin project(':medic:org.eclipse.virgo.medic.core')
    localPlugin project(':medic:org.eclipse.virgo.medic.logbackclassicfragment')
    localPlugin project(':medic:org.eclipse.virgo.medic.logbackcorefragment')

    localPlugin project(':nano:org.eclipse.virgo.nano.core')
    localPlugin project(':nano:org.eclipse.virgo.nano.deployer')
    localPlugin project(':nano:org.eclipse.virgo.nano.deployer.api')
    localPlugin project(':nano:org.eclipse.virgo.nano.deployer.hot')
    localPlugin project(':nano:org.eclipse.virgo.nano.management')
    localPlugin project(':nano:org.eclipse.virgo.nano.management.controller')
    localPlugin project(':nano:org.eclipse.virgo.nano.services.concurrent')
    localPlugin project(':nano:org.eclipse.virgo.nano.services.ds')

    localPlugin project(':repository:org.eclipse.virgo.repository')
    // TODO - review if all those signedExternalPlugins are signed
    signedExternalPlugin group: 'org.eclipse.virgo.mirrored', name: 'org.apache.commons.codec', version: commonsCodecVersion, ext: "jar"
    // optional requirement for org.springframework.core

    signedExternalPlugin group: 'org.eclipse.virgo.mirrored', name: 'oevm.org.apache.commons.httpclient', version: commonsHttpClientVersion, ext: "jar"

    localPlugin project(':util:org.eclipse.virgo.util.common')
    localPlugin project(':util:org.eclipse.virgo.util.env')
    localPlugin project(':util:org.eclipse.virgo.util.io')
    localPlugin project(':util:org.eclipse.virgo.util.jmx')
    localPlugin project(':util:org.eclipse.virgo.util.math')
    localPlugin project(':util:org.eclipse.virgo.util.osgi')
    localPlugin project(':util:org.eclipse.virgo.util.osgi.manifest')
    localPlugin project(':util:org.eclipse.virgo.util.parser.launcher')
    localPlugin project(':util:org.eclipse.virgo.util.parser.manifest')

    localPlugin project(':web:org.eclipse.virgo.web.core')
    localPlugin project(':web:org.eclipse.virgo.web.dm')
    localPlugin project(':web:org.eclipse.virgo.web.tomcat.support')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.appdeployer')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.applistener')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.catalina.fragment.webbeans')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.extension')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.provider.initializer')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.jsf.support')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.bval')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jotm')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jpa')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.webbeans')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.initialiser')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.jpa.integration')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.tomcat.factory')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openwebbeans.initialiser')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.security')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.security.openejb.classloading.hook')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.security.valve')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.services.accessor')
    localPlugin project(':web:org.eclipse.virgo.web.servlet.adapter')
    localPlugin project(':web:org.eclipse.virgo.web.spring.integration')
    localPlugin project(':web:org.eclipse.virgo.web.war.deployer')

    // TODO - review if all those signedExternalPlugins are signed
    signedExternalPlugin group: "org.slf4j", name: "slf4j-api", version: slf4jVersion
    signedExternalPlugin group: "org.slf4j", name: "jul-to-slf4j", version: slf4jVersion
    // exports package org.apache.commons.logging (jcl - Jakarta Commons Logging)
    signedExternalPlugin group: "org.slf4j", name: "jcl-over-slf4j", version: slf4jVersion
    signedExternalPlugin group: "org.slf4j", name: "log4j-over-slf4j", version: slf4jVersion

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.aspectj.weaver", version: aspectjVersion, ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.equinox.region.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.region", version: equinoxRegionVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.core.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.ds.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi", version: equinoxVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi.services", version: osgiServicesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.common", version: equinoxCommonVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.ds", version: equinoxDsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.event", version: equinoxEventVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.util", version: equinoxUtilVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.cm", version: equinoxCmVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.kernel.feature')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.equinox.http.jetty.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.http.jetty", version: equinoxHttpJettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.http.servlet", version: equinoxHttpServletVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.continuation", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.http", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.io", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.security", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.server", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.servlet", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.util", version: jettyVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.servlet", version: javaxServletVersion, configuration: "runtime", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.kernel.springintegration.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.expression", version: springframeworkVersion, ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.management.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "osgi.enterprise", version: osgiEnterpriseVersion, configuration: "compile", ext: "jar"
    // contains org.osgi.jmx
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.gemini.management", version: geminiManagementVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.medic.feature')
    signedExternalPlugin group: "ch.qos.logback", name: "logback-core", version: logbackVersion
    signedExternalPlugin group: "ch.qos.logback", name: "logback-classic", version: logbackVersion

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.deployer.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.mbeans.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.mbeans.controller.feature')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.shell.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.console", version: equinoxConsoleVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.console.ssh", version: equinoxConsoleSshVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.mina.core", version: minaCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.sshd.core", version: apacheSshdCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.felix.gogo.command", version: gogoCommandVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.felix.gogo.runtime", version: gogoRuntimeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.felix.gogo.shell", version: gogoShellVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.simpleconfigurator.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.simpleconfigurator", version: equinoxSimpleConfiguratorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.simpleconfigurator.manipulator", version: equinoxSimpleConfiguratorManipulatorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.frameworkadmin", version: equinoxFrameworkadminVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.frameworkadmin.equinox", version: equinoxFrameworkadminEquinoxVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.gemini.blueprint.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "oevm.org.aopalliance", version: orgAopAllianceVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.aop", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.beans", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.context", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.core", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-io", version: geminiBlueprintVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-core", version: geminiBlueprintVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-extender", version: geminiBlueprintVersion, ext: "jar"

    // nano base
    // TODO - merge to oev.nano.services ?
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.services.concurrent.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.services.ds.feature')

    // TODO - merge with management features above?
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.webconsole.deps.feature')

    signedExternalPlugin group: "commons-fileupload", name: "commons-fileupload", version: commonsFileuploadVersion, ext: "jar"
    signedExternalPlugin group: "commons-io", name: "commons-io", version: commonsIoVersion, ext: "jar"
    signedExternalPlugin group: "org.jolokia", name: "jolokia-osgi", version: jolokiaVersion, ext: "jar"

    // nano full
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.p2.provisioning.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.contenttype", version: eclipseCoreContenttypeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.jobs", version: eclipseCoreJobsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.net", version: eclipseCoreNetVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.runtime", version: eclipseCoreRuntimeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf", version: eclipseEcfVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.filetransfer", version: eclipseEcfFiletransferVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.identity", version: eclipseEcfIdentityVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.provider.filetransfer", version: eclipseEcfProviderFiletransferVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.ssl", version: eclipseEcfSslVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.app", version: equinoxAppVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.preferences", version: equinoxPreferencesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.registry", version: equinoxRegistryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.security", version: equinoxSecurityVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.sat4j.core", version: sat4jCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.sat4j.pb", version: sat4jPbVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.artifact.repository", version: p2ArtifactRepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.console", version: p2ConsoleVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.core", version: p2CoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.director", version: p2DirectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.engine", version: p2EngineVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.garbagecollector", version: p2GarbageCollectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.jarprocessor", version: p2JarProcessorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.metadata", version: p2MetadataVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.metadata.repository", version: p2MetadataRepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.publisher", version: p2PublisherVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.publisher.eclipse", version: p2PublisherEclipseVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.repository", version: p2RepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.touchpoint.eclipse", version: p2TouchpointEclipseVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.touchpoint.natives", version: p2TouchpointNativesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.transport.ecf", version: p2TransportEcfVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.war.deployer.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.enterprise.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.gemini.web.feature')
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.core", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.extender", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.tomcat", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.jaspic.fragment", version: geminiWebVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.log4j", version: apacheLog4jVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.objectweb.asm", version: objectwebAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javassist", version: javassistVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "scannotation", version: scannotationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.bval", version: apacheBvalVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.quartz", version: quartzVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.ow2.jotm.jotm-core", version: jotmVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "javax.interceptor", name: "javax.interceptor-api", version: javaxInterceptorVersion
    signedExternalPlugin group: "javax.transaction", name: "javax.transaction-api", version: javaxTransactionVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.annotation", version: javaxAnnotationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.ejb", version: javaxEjbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.inject", version: javaxInjectVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.jms", version: javaxJmsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.persistence", version: javaxPersistenceVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.resource", version: javaxResourceVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.security.auth.message", version: javaxSecurityAuthMessageVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.security.jacc", version: javaxSecurityJaccVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "javax.servlet.jsp.jstl", name: "javax.servlet.jsp.jstl-api", version: javaxServletJspJstlApiVersion
    signedExternalPlugin group: "org.glassfish.web", name: "javax.servlet.jsp.jstl", version: javaxServletJspJstlImplVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.validation", version: javaxValidationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.wsdl", version: javaxWsdlVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.ws.rs", version: javaxWsRsVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.glassfish.javax.faces", version: glassfishJavaxFacesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.glassfish.com.sun.faces", version: glassfishComSunFacesVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.components.connector", version: geronimoComponentsConnectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.components.transaction", version: geronimoComponentsTransactionVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.j2ee.management", version: geronimoSpecsJ2eeManagementVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.osgi.locator", version: geronimoSpecsOsgiLocatorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.osgi.registry", version: geronimoSpecsOsgiRegistryVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.beanutils", version: commonsBeanutilsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "oevm.org.apache.commons.cli", version: commonsCliVersion, ext: "jar"
    signedExternalPlugin group: "commons-collections", name: "commons-collections", version: commonsCollectionsVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.lang", version: commonsLangVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.dbcp", version: commonsDbcpVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.pool", version: commonsPoolVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "cdi.api", version: cdiApiVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.api", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.core", version: apacheOpenejbCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.javaagent", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.jee", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.loader", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.jpa-integration", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ee", version: apacheOpenwebbeansEEVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ee.common", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ejb", version: apacheOpenwebbeansEEVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.impl", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.jsf", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.spi", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.tomcat7", version: apacheOpenwebbeansTomcat7Version, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.web", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.asm", version: apacheXBeanAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.bundleutils", version: apacheXBeanBundleutilsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.finder", version: apacheXBeanFinderVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.naming", version: apacheXBeanNamingVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.reflect", version: apacheXBeanReflectVersion, configuration: "compile", ext: "jar"

    // Tomcat Runtime
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.el", version: javaxElVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "com.sun.mail", name: "javax.mail", version: javaxMailVersion
    // TODO - check CQ and put version into properties
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.activation", version: '1.1.0.v201211130549', configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.servlet.jsp", version: javaxServletJspVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.websocket", version: javaxWebsocketVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.xml.rpc", version: javaxXmlRpcVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.ha", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.tribes", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.coyote", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.el", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.jasper", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.juli", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.api", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.util", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.jni", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.websocket", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jdt.core.compiler.batch", version: eclipseJdtCoreCompilerBatchVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.antlr", version: eclipsePersistenceAntlrVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.asm", version: eclipsePersistenceAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.core", version: eclipsePersistenceCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.jpa", version: eclipsePersistenceJpaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.jpa.jpql", version: eclipsePersistenceJpaJpqlVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.derby", version: apacheDerbyVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.appdeployer')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.applistener')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.catalina.fragment.webbeans')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.extension')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.provider.initializer')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.jsf.support')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.bval')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jotm')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jpa')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.webbeans')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.initialiser')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.tomcat.factory')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openwebbeans.initialiser')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security.openejb.classloading.hook')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security.valve')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.services.accessor')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.war.deployer')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.tools.feature')
}

task zipUpdateSite(type: Zip, dependsOn: createP2Repository) {
    from "${buildDir}/repository"
    baseName 'repository'
}

task uploadUpdateSite(dependsOn: createP2Repository) {
    description = "Uploads the generated update site to the eclipse.org server."

    doLast {
        // folder structure
        // releases                    (main folder - composite update site if release repository)
        //  |--1.0                     (version folder - always a composite update site)
        //     |--1.0.0.v20150413-1512 (repository folder - simple update site)

        // define the folder structure
        def releaseTypeFolder = "${ECLIPSE_ORG_FTP_UPDATE_SITES_PATH}/${releaseTypeFolder(project)}"
        def versionFolder = "${releaseTypeFolder}/${releaseVersion()}"
        def repositoryFolder = "${versionFolder}/${project.version}"

        // create composite update site for the root of the release repository and for the versions folder
        def config = eclipsebuild.BuildshipConfig.on(project)
        def compositeFolders = config.isRelease() ? [
                releaseTypeFolder,
                versionFolder
        ] : [versionFolder]

        // upload the update site and update the composite descriptors
        ssh.run {
            session(remotes.eclipseDotOrg) {
                // create the leaf directory if not exist
                execute "mkdir -p $repositoryFolder"

                // copy the update site from the build directory to the remote location
                put from: files { file("$buildDir/repository").listFiles() }, into: repositoryFolder

                // recreate the compositeArtifacts.jar and the compositeContent.jar files
                compositeFolders.each {
                    execute("""cd ${it}
                      ${file('updateCompositeUpdateSite.sh').text}""")
                }
            }
        }
    }
}

// utility methods
def releaseTypeFolder(Project project) {
    def config = eclipsebuild.BuildshipConfig.on(project)
    if (config.isRelease()) {
        "releases"
    } else if (config.isMilestone()) {
        "milestones"
    } else if (config.isSnapshot()) {
        "snapshots"
    } else {
        throw new IllegalStateException("BuildshipConfig must either be a release, milestone, or snapshot.")
    }
}

def releaseVersion() {
    // crop the major.minor segment from the version number
    def matcher = version =~ /(\d+\.\d+)\.\d+\..*/
    matcher[0][1]
}

private void postProcessing(project) {
}

private void signByEclipseService(unsignedFolder, signedFolder) {
    ssh.run {
        session(remotes.eclipseDotOrg) {
            // the remote folder where the jars are signed
            def remoteFolder = "${ECLIPSE_ORG_TEMP_PATH}/${signedFolder.name}"

            // clean up the folder used for signing if the previous build failed
            execute """rm -rf $remoteFolder
                    mkdir -p $remoteFolder"""

            // transfer the unsigned files to the remote host
            put from: file(unsignedFolder).listFiles() as List, into: remoteFolder

            // perform the signing
            execute """ cd $remoteFolder
                    # iterate all jars in the subfolders
                    for jar in \$(find `pwd` -name '*.jar');
                    do
                        # save the signed jar into a temporary file copy and write it's content to the unsigned jar
                        curl -o signed.jar -F filedata=@\$jar http://build.eclipse.org:31338/sign
                        cp signed.jar \$jar
                        rm signed.jar
                    done
                    """

            // retrieve the signed content from the remote host into the build/signed-bundles folder
            get from: remoteFolder, into: signedFolder.parentFile

            // clean up the remote folder
            execute "rm -rf $remoteFolder"
        }
    }
}

private void signLocally(File unsignedFolder, File signedFolder) {
    def unsignedPluginsDir = new File(unsignedFolder, "plugins")
    def unsignedFeaturesDir = new File(unsignedFolder, "features")
    def signedPluginsDir = new File(signedFolder, "plugins")
    def signedFeaturesDir = new File(signedFolder, "features")

    signedPluginsDir.mkdirs()
    signedFeaturesDir.mkdirs()

    if (System.properties['skip.local.signing'] == 'true') {
        project.logger.warn("Skipping local signing process!")
        project.copy { from unsignedPluginsDir into signedPluginsDir }
        project.copy { from unsignedFeaturesDir into signedFeaturesDir }
    }

    // TODO - add assert "keystore exists" - otherwise print this help!
    // How to generate you own Java Key Store for local signing:
    // $ keytool -genkey -alias virgo -keystore virgo.jks -storepass changeme -keypass development -dname "cn=Florian Waibel, ou=Virgo, o=EclipseSource, c=DE" -validity 365
    // Verify the keystore on the command line:
    // $ jarsigner -keystore virgo.jks -storepass changeme -keypass development org.eclipse.virgo.util.env-3.7.0.M2.jar virgo
    // $ jarsigner -verify -verbose -certs org.eclipse.virgo.util.env-3.7.0.M2.jar
    File targetDir = signedPluginsDir
    def signBundle = {
        if (System.properties['skip.local.signing'] != 'true') {
            project.logger.info("Sign '${it.absolutePath}'")
            project.ant.signjar(
                    verbose: 'true',
                    destDir: targetDir,
                    alias: 'virgo',
                    jar: it,
                    keystore: project.findProject(':').file('config/signing/virgo.jks'),
                    storepass: 'changeme',
                    keypass: 'development',
                    sigalg: 'SHA1withDSA',
                    digestalg: 'SHA1',
                    preservelastmodified: 'true')
        }
    }

    unsignedPluginsDir.listFiles().each signBundle
    targetDir = signedFeaturesDir
    unsignedFeaturesDir.listFiles().each signBundle
}

private void addExtraPropertiesToArtifactsXml(Node artifactsXml) {
    // modify the artifacts.xml file only when it is deployed to the eclipse.org servers
    if (ECLIPSE_ORG_MIRROR_PATH) {
        // add p2.mirrorsUrl to the properties section
        // https://wiki.eclipse.org/Equinox/p2/p2.mirrorsURL
        def mainPropertiesNode = artifactsXml.depthFirst().find {
            it.parent()?.name() == 'repository' && it.name() == 'properties'
        }
        new Node(mainPropertiesNode, 'property', ['name': 'p2.mirrorsURL', 'value': calculateP2MirrorsUrl(project)])

        // add download.stats property to each installable unit
        // https://wiki.eclipse.org/Equinox_p2_download_stats#Enabling_stats_in_your_repository
        new Node(mainPropertiesNode, 'property', ['name': 'p2.statsURI', 'value': calculateStatsUri(project)])
        mainPropertiesNode.@size = mainPropertiesNode.children().size()

        // add <property name="download.stats" value="feature-id"/> node to the features
        artifactsXml.depthFirst().findAll {
            it.parent()?.parent()?.name() == 'artifacts' &&
                    it.parent()?.name() == 'artifact' &&
                    it.parent()?.@classifier == 'org.eclipse.update.feature' &&
                    it.name() == 'properties'
        }.each {
            new Node(it, 'property', ['name': 'download.stats', 'value': it.parent().@id])
            it.@size = it.children().size()
        }
    }
}

def calculateP2MirrorsUrl(Project project) {
    def repositoryPath = "${ECLIPSE_ORG_MIRROR_PATH}/${releaseTypeFolder(project)}/${releaseVersion()}/${project.version}"
    "http://www.eclipse.org/downloads/download.php?file=${repositoryPath}&format=xml"
}

def calculateStatsUri(Project project) {
    "http://download.eclipse.org/stats/virgo/${releaseTypeFolder(project)}/${releaseVersion()}"
}

// TODO - think about a way to trigger :org.eclipse.virgo.site:publishBase and :org.eclipse.virgo.site:publishKernelBase after site creation
project.tasks.addRule("Pattern: publish<ID>") { String taskName ->
    if (taskName.startsWith("publish")) {
        project.task(taskName, dependsOn: [
                ":org.eclipse.virgo.site:${CREATE_P2_REPOSITORY_TASK_NAME}",
        ]) {
            def product = 'undefined'
            switch (taskName.toString() - 'publish') {
                case 'Base': product = 'base'; break
                case 'KernelBase': product = 'kernel-base'; break
                case 'NanoCore': product = 'nano-core'; break
                case 'NanoBase': product = 'nano-base'; break
                case 'Nano': product = 'nano'; break
                case 'NanoFull': product = 'nano-full'; break
            }
            group = Constants.gradleTaskGroupName
            description = "Publishes a product to a p2 repository. The publishing uses ANY environment configurations."

            File productFileLocation = project.file("${project.projectDir}/publish_resources/products/${product}/${product}.product")

            inputs.file productFileLocation

            doLast { publishProduct(project, productFileLocation) }
        }
    }
}

// for testing purposes only
task('installProductNanoBase', dependsOn: [
        'publishNanoCore',
        'publishNanoBase'
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano-base'
    def shortProduct = 'VNB'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}

// for testing purposes only
task('installProductNano', dependsOn: [
        'publishNanoCore',
        'publishNanoBase',
        'publishNano',
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano'
    def shortProduct = 'VN'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}

// for testing purposes only
task('installProductNanoFull', dependsOn: [
        'publishNanoCore',
        'publishNanoBase',
        'publishNano',
        'publishNanoFull',
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano-full'
    def shortProduct = 'VNF'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}
