public static string GetVersion( string version, bool isReleaseBuild, string suffix, bool enableBuildNumber, string packageBuildMetadata, ILogger logger, NuGetVersioningSettings nugetVersioningSettings) { Version parsedVersion; if (!Version.TryParse(version, out parsedVersion)) { throw new ArgumentException($"The version '{version} is not a valid version format"); } if (isReleaseBuild) { string parsed = parsedVersion.ToString(3); logger.Write($"Build is release build, using major.minor.patch as the version, {parsed}"); return(parsed); } string buildVersion; int usePadding = nugetVersioningSettings.SemVerVersion == 1 && nugetVersioningSettings.MaxZeroPaddingLength > 0 ? nugetVersioningSettings.MaxZeroPaddingLength : 0; string semVer2PreReleaseSeparator = nugetVersioningSettings.SemVerVersion == 2 ? "." : string.Empty; if (!string.IsNullOrWhiteSpace(suffix)) { if (enableBuildNumber) { buildVersion = $"{parsedVersion.Major}.{parsedVersion.Minor}.{parsedVersion.Build}-{suffix}{semVer2PreReleaseSeparator}{parsedVersion.Revision.ToString().LeftPad(usePadding, '0')}"; logger.Write( $"Package suffix is {suffix}, using major.minor.patch-{{suffix}}build as the version, {buildVersion}"); } else { buildVersion = $"{parsedVersion.Major}.{parsedVersion.Minor}.{parsedVersion.Build}-{suffix}"; logger.Write( $"Package suffix is {suffix}, using major.minor.patch-{{suffix}} as the version, {buildVersion}"); } } else { if (enableBuildNumber) { buildVersion = $"{parsedVersion.Major}.{parsedVersion.Minor}.{parsedVersion.Build}-{parsedVersion.Revision.ToString().LeftPad(usePadding, '0')}"; logger.Write($"Using major.minor.patch-build as the version, {buildVersion}"); } else { buildVersion = $"{parsedVersion.Major}.{parsedVersion.Minor}.{parsedVersion.Build}"; logger.Write($"Using major.minor.patch as the version, {buildVersion}"); } } string final; if (!string.IsNullOrWhiteSpace(packageBuildMetadata)) { final = $"{buildVersion}+{packageBuildMetadata.TrimStart('+')}"; } else { final = buildVersion; } SemanticVersion semanticVersion; if (!SemanticVersion.TryParse(final, out semanticVersion)) { throw new InvalidOperationException($"The NuGet version '{final}' is not a valid Semver 2.0 version"); } return(final); }
public async Task <ExitCode> CreatePackageAsync( string packageSpecificationPath, NuGetPackageConfiguration packageConfiguration, bool ignoreWarnings = false, CancellationToken cancellationToken = default) { _logger.WriteDebug($"Using NuGet package configuration {packageConfiguration}"); NuSpec nuSpec = NuSpec.Parse(packageSpecificationPath); string properties = GetProperties(packageConfiguration.Configuration); if (!string.IsNullOrWhiteSpace(packageConfiguration.PackageIdOverride)) { _logger.Write($"Using NuGet package id override '{packageConfiguration.PackageIdOverride}'"); } string packageId = !string.IsNullOrWhiteSpace(packageConfiguration.PackageIdOverride) ? packageConfiguration.PackageIdOverride : NuGetPackageIdHelper.CreateNugetPackageId( nuSpec.PackageId, packageConfiguration.IsReleaseBuild, packageConfiguration.BranchName, packageConfiguration.BranchNameEnabled); if (string.IsNullOrWhiteSpace(packageConfiguration.PackageIdOverride)) { _logger.Write($"Using NuGet package ID {packageId}"); } else { _logger.Write($"Using NuGet package version override '{packageConfiguration.PackageIdOverride}'"); } var nuGetVersioningSettings = new NuGetVersioningSettings { MaxZeroPaddingLength = 5, SemVerVersion = 1 }; string nuGetPackageVersion = !string.IsNullOrWhiteSpace(packageConfiguration.NuGetPackageVersionOverride) ? packageConfiguration.NuGetPackageVersionOverride : NuGetVersionHelper.GetVersion( packageConfiguration.Version, packageConfiguration.IsReleaseBuild, packageConfiguration.Suffix, packageConfiguration.BuildNumberEnabled, packageConfiguration.PackageBuildMetadata, _logger, nuGetVersioningSettings); _logger.Write( string.IsNullOrWhiteSpace(packageConfiguration.NuGetPackageVersionOverride) ? $"Using NuGet package version {nuGetPackageVersion}" : $"Using NuGet package version override '{packageConfiguration.NuGetPackageVersionOverride}'"); var nuSpecInfo = new FileInfo(packageSpecificationPath); // ReSharper disable AssignNullToNotNullAttribute string nuSpecFileCopyPath = Path.Combine(nuSpecInfo.DirectoryName, $"{Guid.NewGuid()}-{nuSpecInfo.Name}"); // ReSharper restore AssignNullToNotNullAttribute var nuSpecCopy = new NuSpec(packageId, nuGetPackageVersion, nuSpecInfo.FullName); string nuSpecTempDirectory = Path.Combine(packageConfiguration.TempPath, "nuspecs"); if (!Directory.Exists(nuSpecTempDirectory)) { Directory.CreateDirectory(nuSpecTempDirectory); } _logger.WriteVerbose($"Saving new nuspec '{nuSpecFileCopyPath}'"); nuSpecCopy.Save(nuSpecFileCopyPath); var removedTags = new List <string>(); if (packageConfiguration.AllowManifestReWrite) { _logger.WriteVerbose($"Rewriting manifest in NuSpec '{nuSpecFileCopyPath}'"); var manitestReWriter = new ManitestReWriter(); ManifestReWriteResult manifestReWriteResult = manitestReWriter.Rewrite(nuSpecFileCopyPath); removedTags.AddRange(manifestReWriteResult.RemoveTags); } else { _logger.WriteVerbose("Rewriting manifest disabled"); } _logger.WriteVerbose( $"Created nuspec content: {Environment.NewLine}{File.ReadAllText(nuSpecFileCopyPath)}"); ExitCode result = await ExecuteNuGetPackAsync( packageConfiguration.NuGetExePath, packageConfiguration.PackagesDirectory, _logger, nuSpecFileCopyPath, properties, nuSpecCopy, removedTags, cancellationToken : cancellationToken, ignoreWarnings : ignoreWarnings); return(result); }