<?xml version="1.0" encoding="UTF-8"?>
<dsl-extension kind="buildStep" type="kotlinScript" generateDslJar="true" applicable="params['scriptType'] == 'file'">
  <class name="KotlinScriptFileBuildStep">
    <description>
      A build step running a Kotlin script with from a specified file
    </description>
  </class>
  <function name="kotlinFile">
    <description>
      Adds a build step running a Kotlin script from a specified file
      @see KotlinScriptFileBuildStep
    </description>
  </function>
  <init>
    <param name="scriptType" value="file"/>
  </init>
  <params>
    <param name="teamcity.build.workingDir" dslName="workingDir">
      <description>
        [Build working directory](https://www.jetbrains.com/help/teamcity/?Build+Working+Directory) for the script,
        specify it if it is different from the [checkout directory](https://www.jetbrains.com/help/teamcity/?Build+Checkout+Directory).
      </description>
    </param>
    <param name="scriptFile" dslName="path" mandatory="true">
      <description>
        A path to a file with .main.kts extension
      </description>
    </param>
    <param name="kotlinPath" dslName="compiler">
      <description>
        Path to Kotlin compiler
      </description>
    </param>
    <param name="kotlinArgs" dslName="arguments">
      <description>
        Space-separated list of additional arguments for Kotlin script
      </description>
    </param>
    <param name="target.jdk.home" dslName="jdkHome">
      <description>
        Custom [JDK](https://www.jetbrains.com/help/teamcity/?Predefined+Build+Parameters#PredefinedBuildParameters-DefiningJava-relatedEnvironmentVariables) to use.
        The default is JAVA_HOME environment variable or the agent's own Java.
      </description>
    </param>
    <param name="jvmArgs">
      <description>
        Space-separated list of additional arguments for JVM
      </description>
    </param>
  </params>

  <examples>
    <example>
      <description>
        Adds a Kotlin script build step with [default Kotlin compiler](https://www.jetbrains.com/help/teamcity/?Kotlin+Script#Prerequisites) and default JVM.
      </description>
      <code>
        kotlinScript {
            name = "My Kotlin Script step"
            path = "script.kts"
        }
      </code>
    </example>
    <example>
      <description>
        Adds a Kotlin script build step with [bundled Kotlin compiler](https://www.jetbrains.com/help/teamcity/?Kotlin+Script#Prerequisites)
        and custom JDK is set to the [environment variable](https://www.jetbrains.com/help/teamcity/?Using+Build+Parameters) value with additional parameter.
        Additional agruments are passed to the Kotlin script with a reference to the [configuration parameter](https://www.jetbrains.com/help/teamcity/?Using+Build+Parameters) value.
        Custom [working directory](https://www.jetbrains.com/help/teamcity/?Build+Working+Directory) is provided.
      </description>
      <code>
        kotlinScript {
            name = "My Kotlin Script step"
            workingDir = "scripts/"
            path = "script.kts"

            compiler = "%teamcity.tool.kotlin.compiler.bundled%"
            arguments = "%myscript.params%"

            jdkHome = "%env.JDK_15_0%"
            jvmArgs = "-Xmx2048m"
        }
      </code>
    </example>
    <example>
      <description>
        Adds a Kotlin script build step with custom Kotlin compiler
        and custom JDK with additional parameter.
        Custom [working directory](https://www.jetbrains.com/help/teamcity/?Build+Working+Directory) is provided.
      </description>
      <code>
        kotlinScript {
            name = "My Kotlin Script step"
            workingDir = "scripts/"
            path = "script.kts"

            compiler = "path/to/kotlin/compiler"

            jdkHome = "path/to/jdk"
            jvmArgs = "-Xmx2048m"
        }
      </code>
    </example>
  </examples>
</dsl-extension>