<?xml version="1.0" encoding="UTF-8"?>




<dsl-extension kind="buildStep" type="ftp-deploy-runner" generateDslJar="true">
    <class name="FTPUpload">
        <description>
            An FTP Upload build step.
        </description>
    </class>
    <function name="ftpUpload">
        <description>
            Adds an FTP Upload build step.
            @see FTPUpload
        </description>
    </function>
    <params>
        <param name="jetbrains.buildServer.deployer.targetUrl" dslName="targetUrl" mandatory="true">
            <description>
                An FTP server (use a hostname or IP address) and a remote directory (relative to the FTP user's home).
            </description>
        </param>
        <param name="jetbrains.buildServer.deployer.ftp.securityMode" dslName="securityMode" type="SecurityMode">
            <description>
                Choose between an insecure and a secure connection (FTPS, FTPES).
            </description>
        </param>
        <param name="jetbrains.buildServer.deployer.ftp.dataChannelProtection" dslName="dataChannelProtection" type="DataChannelProtectionMode">
            <description>
                Choose a data protection scheme if FTPS or FTPES is used.
            </description>
        </param>
        <param name="jetbrains.buildServer.deployer.ftp.authMethod" dslName="authMethod" type="compound">
            <description>
                Authentication method.
            </description>
            <option name="anonymous" value="ANONYMOUS"/>
            <option name="usernameAndPassword" value="USER_PWD">
                <param name="jetbrains.buildServer.deployer.username" dslName="username"/>
                <param name="secure:jetbrains.buildServer.deployer.password" dslName="password"/>
            </option>
        </param>
        <param name="jetbrains.buildServer.deployer.ftp.ftpMode" dslName="ftpMode" type="FTPMode">
            <description>
                FTP Mode.
            </description>
        </param>
        <param name="jetbrains.buildServer.deployer.ftp.transferMethod" dslName="transferMode" type="TransferMode">
            <description>
                Optional. An FTP transfer mode to force.
            </description>
        </param>
        <param name="jetbrains.buildServer.deployer.sourcePath" dslName="sourcePath" mandatory="true">
            <description>
                Newline- or comma-separated paths to files/directories to be deployed.
                Ant-style wildcards like dir/**/*.zip and target directories like
                *.zip => winFiles,unix/distro.tgz => linuxFiles,
                where winFiles and linuxFiles are target directories, are supported.
            </description>
        </param>
    </params>
    <types>
        <enum name="DataChannelProtectionMode">
            <option name="DISABLE" value="D"/>
            <option name="CLEAR" value="C"/>
            <option name="SAFE" value="S"/>
            <option name="CONFIDENTIAL" value="E"/>
            <option name="PRIVATE" value="P"/>
        </enum>
        <enum name="SecurityMode">
            <option name="NONE" value="0"/>
            <option name="FTPS" value="1"/>
            <option name="FTPES" value="2"/>
        </enum>
        <enum name="FTPMode">
            <option name="ACTIVE" value="ACTIVE"/>
            <option name="PASSIVE" value="PASSIVE"/>
        </enum>
        <enum name="TransferMode">
            <option name="AUTO" value="AUTO"/>
            <option name="BINARY" value="BINARY"/>
            <option name="ASCII" value="ASCII"/>
        </enum>
    </types>

    <examples>
        <example>
            <description>
                Adds an FTP Upload build step with
                FTPS security connection mode,
                private protection mode,
                authentication via username and password,
                binary transfer mode and active FTP mode.
                See options in [documentation](https://www.jetbrains.com/help/teamcity/?FTP+Upload).
            </description>
            <code>
                ftpUpload {
                    name = "My FTP Upload step"
                    targetUrl = "8.8.8.8"
                    securityMode = FTPUpload.SecurityMode.FTPS
                    dataChannelProtection = FTPUpload.DataChannelProtectionMode.PRIVATE
                    authMethod = usernameAndPassword {
                        username = "username"
                        password = "credentialsJSON:******"
                    }
                    ftpMode = FTPUpload.FTPMode.ACTIVE
                    transferMode = FTPUpload.TransferMode.BINARY
                    sourcePath = """
                        dir/**/*.zip
                        *.zip => winFiles
                        unix/distro.tgz => linuxFile
                    """.trimIndent()
                }
            </code>
        </example>
    </examples>
</dsl-extension>