diff --git a/src/Tool/src/Boost.AzureDevOps/AzureDevOpsPipelinesClient.cs b/src/Tool/src/Boost.AzureDevOps/AzureDevOpsPipelinesClient.cs index af8e95c..46410a1 100644 --- a/src/Tool/src/Boost.AzureDevOps/AzureDevOpsPipelinesClient.cs +++ b/src/Tool/src/Boost.AzureDevOps/AzureDevOpsPipelinesClient.cs @@ -158,7 +158,8 @@ private Pipeline ToPipeline( private Pipeline ToPipeline( AzureDevOpsConnectedService service, - ReleaseDefinitionShallowReference definition) + ReleaseDefinitionShallowReference definition, + bool isReleaseUsingBuildArtifacts) { return new Pipeline { @@ -169,7 +170,8 @@ private Pipeline ToPipeline( WebUrl = definition.Links.GetLink("web"), Properties = new List { - new("ProjectId", definition.ProjectReference.Id.ToString()) + new("ProjectId", definition.ProjectReference.Id.ToString()), + new("IsReleaseUsingBuildArtifacts", isReleaseUsingBuildArtifacts.ToString()) } }; } @@ -216,16 +218,59 @@ public async Task> GetReleasesAsync( if ( definition is { }) { + bool isReleaseUsingBuildArtifacts = + await IsLatestReleaseUsingBuildDefinitionArtifact(serviceId, teamProjectId, buildDefinitionId, definition.Id); definition.ProjectReference = release.ProjectReference; - return ToPipeline(ClientFactory.Connections[serviceId].Service, definition); + + return ToPipeline( + ClientFactory.Connections[serviceId].Service, + definition, + isReleaseUsingBuildArtifacts); } } return null; + } + + public async Task IsLatestReleaseUsingBuildDefinitionArtifact( + Guid serviceId, + Guid teamProjectId, + int buildDefinitionId, + int ReleaseDefinitionId) + { + ReleaseHttpClient client = ClientFactory.CreateClient(serviceId); + + ReleaseDefinition ReleaseDefinition = + await client.GetReleaseDefinitionAsync( + project: teamProjectId, + definitionId: ReleaseDefinitionId + ); + + if (ReleaseDefinition != null) + { + List latestReleases = + await client.GetReleasesAsync( + project: teamProjectId, + definitionId: ReleaseDefinition.Id, + top: 1); + Release? latestRelease = latestReleases.FirstOrDefault(); + + if (latestRelease != null) + { + // Check if the latest release is using artifacts from the target build definition + Artifact? buildDefinitionArtifact = + latestRelease.Artifacts.FirstOrDefault( + a => a.DefinitionReference.ContainsKey("definition") && + a.DefinitionReference["definition"].Id == buildDefinitionId.ToString()); + + return buildDefinitionArtifact != null; + } + } + return false; } - public async Task> GetRunsAsync( +public async Task> GetRunsAsync( Guid serviceId, Guid projectId, int id,