¿Cómo se ocultan los parameters en los pasos de creación personalizados en Kotlin para TeamCity?

Estoy intentando configurar TeamCity, usando config como código con Kotlin. Estoy escribiendo wrappers para buildsteps para poder ocultar la configuration expuesta pnetworkingeterminada y solo exponer los parameters que importan. Esto me permitiría evitar que los usuarios de la class cambien los valores que causarían errores de compilation.

Quiero esto:

steps { step { name = "Restore NuGet Packages" type = "jb.nuget.installer" param("nuget.path", "%teamcity.tool.NuGet.CommandLine.3.3.0%") param("nuget.updatePackages.mode", "sln") param("nuget.use.restre", "restre") param("sln.path", "path_to_solution") //parameter here param("toolPathSelector", "%teamcity.tool.NuGet.CommandLine.3.3.0%") } 

… ser esto:

 MyBuildSteps.buildstep1("path_to_solution") 

Aquí está la firma de la function para el paso:

 public final class BuildSteps { public final fun step(base: BuildStep?, init: BuildStep.() -> Unit ): Unit { /* compiled code */ } } 

Esto es lo que intenté:

 class MyBuildSteps { fun restreNugetPackages(slnPath: String): kotlin.Unit { var step: BuildStep = BuildStep { name = "Restore NuGet Packages" type = "jb.nuget.installer" } var stepParams: List = Parametrized { param("build-file-path", slnPath) param("msbuild_version", "14.0") param("octopus_octopack_package_version", "1.0.0.%build.number%") param("octopus_run_octopack", "true") param("run-platform", "x86") param("toolsVersion", "14.0") param("vs.version", "vs2015") } return { step.name step.type stepParams } //how do I return this? } } 

¡Cualquier consejo sería muy apreciado!

    Supongo que quiere encapsular el step {...} en una function buildstep1 con un parámetro slnPath .

    Utilice esta firma de function y copie y pegue la parte del step {...} el interior. Agregue los parameters que considere adecuados:

     fun BuildSteps.buildstep1(slnPath: String) { step { name = "Restore NuGet Packages" type = "jb.nuget.installer" param("nuget.path", "%teamcity.tool.NuGet.CommandLine.3.3.0%") param("nuget.updatePackages.mode", "sln") param("nuget.use.restre", "restre") param("sln.path", slnPath) // your parameter here param("toolPathSelector", "%teamcity.tool.NuGet.CommandLine.3.3.0%") } } 

    ¡Eso es todo! Úselo en lugar del step {...} construcción:

     steps { buildstep1("path_to_solution") } 

    Esta function se puede declarar en cualquier parte del file de configuration (generalmente los .kts en la parte inferior) o en un file .kts separado y se importa (teóricamente).