public void Execute(IConfiguration configuration, StepType currentStep) { //get artifacts output directory DirectoryPath artifactsPath = configuration.GetArtifactsPath(); if (!configuration.TryGetSimple(NuGetConstants.NUGET_NUSPEC_FILE_KEY, out string nuspecPath)) { configuration.Context.CakeContext.LogAndThrow("Can not determine nuget package id using either the PackageId configuration or the id in the Nuspec file"); } if (!configuration.TryGetSimple(NuGetConstants.NUGET_PACKAGE_ID_KEY, out string packageId)) { packageId = ReadPackageIdFromNuspec(configuration, configuration.AddRootDirectory(nuspecPath)); configuration.AddSimple(NuGetConstants.NUGET_PACKAGE_ID_KEY, packageId); } if (!configuration.TryGetSimple(NuGetConstants.NUGET_PACKAGE_VERSION_KEY, out string packageVersion)) { if (!configuration.TryGetSimple(ConfigurationConstants.VERSION_KEY, out packageVersion)) { packageVersion = ReadPackageVersionFromNuspec(configuration, configuration.AddRootDirectory(nuspecPath)); } configuration.AddSimple(NuGetConstants.NUGET_PACKAGE_VERSION_KEY, packageVersion); } IDirectory artifactsDirectory = configuration.Context.CakeContext.FileSystem.GetDirectory(artifactsPath); List <FilePath> inputFiles = artifactsDirectory.GetFiles("*", SearchScope.Current).Select(x => x.Path).ToList(); List <DirectoryPath> inputDirectories = artifactsDirectory.GetDirectories("*", SearchScope.Current).Select(x => x.Path).ToList(); //create nuget output directory DirectoryPath nugetContentPath = artifactsPath.Combine(packageId); configuration.Context.CakeContext.EnsureDirectoryExists(nugetContentPath); DirectoryPath nugetLibPath = nugetContentPath.Combine("lib"); configuration.Context.CakeContext.EnsureDirectoryExists(nugetLibPath); //copy existing file in nuget content directory foreach (DirectoryPath inputDirectory in inputDirectories) { DirectoryPath output = nugetLibPath.Combine(inputDirectory.GetDirectoryName()); configuration.Context.CakeContext.EnsureDirectoryExists(output); configuration.Context.CakeContext.CopyDirectory(inputDirectory, output); } foreach (FilePath inputFile in inputFiles) { configuration.Context.CakeContext.CopyFileToDirectory(inputFile, nugetLibPath); } //copy nuspec with parameters string nuspecOutputPath = Nuspec(configuration, nugetContentPath); if (configuration.TryGet(NuGetConstants.NUGET_ADDITIONAL_FILES_KEY, out ListConfigurationItem <NugetFile> list)) { foreach (NugetFile nugetFile in list.Values) { string file = configuration.AddRootDirectory(nugetFile.FilePath); configuration.FileExistsOrThrow(file); DirectoryPath destinationPath = nugetContentPath; if (!string.IsNullOrEmpty(nugetFile.NugetRelativePath)) { destinationPath = destinationPath.Combine(nugetFile.NugetRelativePath); } configuration.Context.CakeContext.EnsureDirectoryExists(destinationPath); configuration.Context.CakeContext.CopyFileToDirectory(file, destinationPath); } } configuration.Context.CakeContext.NuGetPack(nuspecOutputPath, new NuGetPackSettings { OutputDirectory = artifactsPath, }); string nugetPackagePath = artifactsPath.CombineWithFilePath($"{packageId}.{packageVersion}.nupkg").FullPath; configuration.AddSimple(NuGetConstants.NUGET_PACK_OUTPUT_FILE_KEY, nugetPackagePath); }