public static BuildModel CreateModelFromItems( ITaskItem[] artifacts, string buildId, string[] BuildProperties, string repoUri, string repoBranch, string repoCommit, bool isStableBuild, string publishingVersion, TaskLoggingHelper log) { if (artifacts == null) { throw new ArgumentNullException(nameof(artifacts)); } var blobArtifacts = new List <BlobArtifactModel>(); var packageArtifacts = new List <PackageArtifactModel>(); foreach (var artifact in artifacts) { if (string.Equals(artifact.GetMetadata("ExcludeFromManifest"), "true", StringComparison.OrdinalIgnoreCase)) { continue; } var isSymbolsPackage = artifact.ItemSpec.EndsWith(".symbols.nupkg", StringComparison.OrdinalIgnoreCase) || artifact.ItemSpec.EndsWith(".snupkg", StringComparison.OrdinalIgnoreCase); if (artifact.ItemSpec.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase) && !isSymbolsPackage) { packageArtifacts.Add(BuildManifestUtil.CreatePackageArtifactModel(artifact)); } else { if (isSymbolsPackage) { string fileName = Path.GetFileName(artifact.ItemSpec); artifact.SetMetadata("RelativeBlobPath", $"{BuildManifestUtil.AssetsVirtualDir}symbols/{fileName}"); } blobArtifacts.Add(BuildManifestUtil.CreateBlobArtifactModel(artifact)); } } var buildModel = BuildManifestUtil.CreateModel( blobArtifacts, packageArtifacts, buildId, BuildProperties, repoUri, repoBranch, repoCommit, isStableBuild, publishingVersion, log); return(buildModel); }
private IEnumerable <BlobArtifactModel> ConcatBlobArtifacts( IEnumerable <BlobArtifactModel> artifacts, IEnumerable <ITaskItem> items) { return(artifacts.Concat(items .Where(i => !string.Equals(i.GetMetadata("ExcludeFromManifest"), "true", StringComparison.OrdinalIgnoreCase)) .Select(i => BuildManifestUtil.CreateBlobArtifactModel(i, Log)) .Where(blob => blob != null))); }
public static BuildModel CreateModelFromItems( ITaskItem[] artifacts, ITaskItem[] itemsToSign, ITaskItem[] strongNameSignInfo, ITaskItem[] fileSignInfo, ITaskItem[] fileExtensionSignInfo, ITaskItem[] certificatesSignInfo, string buildId, string[] manifestBuildData, string repoUri, string repoBranch, string repoCommit, bool isStableBuild, PublishingInfraVersion publishingVersion, bool isReleaseOnlyPackageVersion, TaskLoggingHelper log) { if (artifacts == null) { throw new ArgumentNullException(nameof(artifacts)); } var blobArtifacts = new List <BlobArtifactModel>(); var packageArtifacts = new List <PackageArtifactModel>(); foreach (var artifact in artifacts) { if (string.Equals(artifact.GetMetadata("ExcludeFromManifest"), "true", StringComparison.OrdinalIgnoreCase)) { continue; } var isSymbolsPackage = artifact.ItemSpec.EndsWith(".symbols.nupkg", StringComparison.OrdinalIgnoreCase) || artifact.ItemSpec.EndsWith(".snupkg", StringComparison.OrdinalIgnoreCase); if (artifact.ItemSpec.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase) && !isSymbolsPackage) { packageArtifacts.Add(BuildManifestUtil.CreatePackageArtifactModel(artifact)); } else { if (isSymbolsPackage) { string fileName = Path.GetFileName(artifact.ItemSpec); artifact.SetMetadata("RelativeBlobPath", $"{BuildManifestUtil.AssetsVirtualDir}symbols/{fileName}"); } blobArtifacts.Add(BuildManifestUtil.CreateBlobArtifactModel(artifact, log)); } } var signingInfoModel = CreateSigningInformationModelFromItems( itemsToSign, strongNameSignInfo, fileSignInfo, fileExtensionSignInfo, certificatesSignInfo, blobArtifacts, packageArtifacts, log); var buildModel = CreateModel( blobArtifacts, packageArtifacts, buildId, manifestBuildData, repoUri, repoBranch, repoCommit, isStableBuild, publishingVersion, isReleaseOnlyPackageVersion, log, signingInformationModel: signingInfoModel); return(buildModel); }
public override bool Execute() { try { Log.LogMessage(MessageImportance.High, "Performing push to Azure DevOps artifacts storage."); if (!string.IsNullOrWhiteSpace(AssetsTemporaryDirectory)) { Log.LogMessage(MessageImportance.High, $"It's no longer necessary to specify a value for the {nameof(AssetsTemporaryDirectory)} property. " + $"Please consider patching your code to not use it."); } if (ItemsToPush == null) { Log.LogError($"No items to push. Please check ItemGroup ItemsToPush."); } else { IEnumerable <BlobArtifactModel> blobArtifacts = Enumerable.Empty <BlobArtifactModel>(); IEnumerable <PackageArtifactModel> packageArtifacts = Enumerable.Empty <PackageArtifactModel>(); var itemsToPushNoExcludes = ItemsToPush. Where(i => !string.Equals(i.GetMetadata("ExcludeFromManifest"), "true", StringComparison.OrdinalIgnoreCase)); if (PublishFlatContainer) { // Act as if %(PublishFlatContainer) were true for all items. blobArtifacts = itemsToPushNoExcludes .Select(i => BuildManifestUtil.CreateBlobArtifactModel(i, Log)); foreach (var blobItem in itemsToPushNoExcludes) { if (!File.Exists(blobItem.ItemSpec)) { Log.LogError($"Could not find file {blobItem.ItemSpec}."); continue; } Log.LogMessage(MessageImportance.High, $"##vso[artifact.upload containerfolder=BlobArtifacts;artifactname=BlobArtifacts]{blobItem.ItemSpec}"); } } else { ITaskItem[] symbolItems = itemsToPushNoExcludes .Where(i => i.ItemSpec.Contains("symbols.nupkg")) .Select(i => { string fileName = Path.GetFileName(i.ItemSpec); i.SetMetadata("RelativeBlobPath", $"{BuildManifestUtil.AssetsVirtualDir}symbols/{fileName}"); return(i); }) .ToArray(); var blobItems = itemsToPushNoExcludes .Where(i => { var isFlatString = i.GetMetadata("PublishFlatContainer"); if (!string.IsNullOrEmpty(isFlatString) && bool.TryParse(isFlatString, out var isFlat)) { return(isFlat); } return(false); }) .Union(symbolItems) .ToArray(); ITaskItem[] packageItems = itemsToPushNoExcludes .Except(blobItems) .ToArray(); foreach (var packagePath in packageItems) { if (!File.Exists(packagePath.ItemSpec)) { Log.LogError($"Could not find file {packagePath.ItemSpec}."); continue; } Log.LogMessage(MessageImportance.High, $"##vso[artifact.upload containerfolder=PackageArtifacts;artifactname=PackageArtifacts]{packagePath.ItemSpec}"); } foreach (var blobItem in blobItems) { if (!File.Exists(blobItem.ItemSpec)) { Log.LogError($"Could not find file {blobItem.ItemSpec}."); continue; } Log.LogMessage(MessageImportance.High, $"##vso[artifact.upload containerfolder=BlobArtifacts;artifactname=BlobArtifacts]{blobItem.ItemSpec}"); } packageArtifacts = packageItems.Select(BuildManifestUtil.CreatePackageArtifactModel); blobArtifacts = blobItems.Select(i => BuildManifestUtil.CreateBlobArtifactModel(i, Log)).Where(blob => blob != null); } PublishingInfraVersion targetPublishingVersion = PublishingInfraVersion.Latest; if (!string.IsNullOrEmpty(PublishingVersion)) { if (!Enum.TryParse(PublishingVersion, ignoreCase: true, out targetPublishingVersion)) { Log.LogError($"Could not parse publishing infra version '{PublishingVersion}'"); } } SigningInformationModel signingInformationModel = BuildManifestUtil.CreateSigningInformationModelFromItems( ItemsToSign, StrongNameSignInfo, FileSignInfo, FileExtensionSignInfo, CertificatesSignInfo, blobArtifacts, packageArtifacts, Log); BuildManifestUtil.CreateBuildManifest(Log, blobArtifacts, packageArtifacts, AssetManifestPath, !String.IsNullOrEmpty(ManifestRepoName) ? ManifestRepoName : ManifestRepoUri, ManifestBuildId, ManifestBranch, ManifestCommit, ManifestBuildData, IsStableBuild, targetPublishingVersion, IsReleaseOnlyPackageVersion, signingInformationModel: signingInformationModel); Log.LogMessage(MessageImportance.High, $"##vso[artifact.upload containerfolder=AssetManifests;artifactname=AssetManifests]{AssetManifestPath}"); } } catch (Exception e) { Log.LogErrorFromException(e, true); } return(!Log.HasLoggedErrors); }