예제 #1
0
        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);
        }