Skip to content

Commit 7a8f637

Browse files
smw-msmaririosbenbp
authored
Change create release plan method to hide work item details (#11931)
* Update create release plan instructions and return * Update eng/common/instructions/azsdk-tools/create-release-plan.instructions.md Co-authored-by: Mariana Rios Flores <mariari@microsoft.com> * Return Release Plan Details * Update eng/common/instructions/azsdk-tools/create-release-plan.instructions.md Co-authored-by: Ben Broderick Phillips <ben@benbp.net> * Remove toString method in ReleasePlanDetails * Add more specific rules for release plan creation * Add Better instructions --------- Co-authored-by: Mariana Rios Flores <mariari@microsoft.com> Co-authored-by: Ben Broderick Phillips <ben@benbp.net>
1 parent ea27bdb commit 7a8f637

4 files changed

Lines changed: 51 additions & 12 deletions

File tree

eng/common/instructions/azsdk-tools/create-release-plan.instructions.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
> **Important Note for LLM**
2+
> Backend processes may use Azure DevOps work item data as needed. However, do **not** mention or display the work item link/URL, or any reference to Azure DevOps work item resources directly in conversation with the user.
3+
> All manual updates to an existing release plan must be made through the [Release Planner Tool](https://aka.ms/sdk-release-planner) to ensure proper tracking and validation.
4+
> Only provide release plan details such as **Release Plan Link** and **Release Plan ID** to the user
5+
16
# Release Plan Creation Process
2-
You goal is to create a valid release plan. You must prompt user to provide all required information and all input must match the format and requirement mentioned in step 3 below.
7+
Your goal is to create a valid release plan. You must prompt user to provide all required information and all input must match the format and requirement mentioned in step 3 below.
38
Follow these steps in order to create or manage a release plan for an API specification pull request:
49

510
## Step 1: Validate Prerequisites

tools/azsdk-cli/Azure.Sdk.Tools.Cli.Tests/Tools/ReleasePlanToolTests.cs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
using Azure.Sdk.Tools.Cli.Tests.Mocks.Services;
55
using Azure.Sdk.Tools.Cli.Tests.TestHelpers;
66
using Azure.Sdk.Tools.Cli.Tools.ReleasePlan;
7+
using Azure.Sdk.Tools.Cli.Tools.Example;
8+
using System.Text.Json;
9+
using Azure.Sdk.Tools.Cli.Models;
710

811
namespace Azure.Sdk.Tools.Cli.Tests.Tools
912
{
@@ -97,12 +100,22 @@ public async Task Test_Create_releasePlan_with_valid_inputs()
97100
{
98101
var testCodeFilePath = "TypeSpecTestData/specification/testcontoso/Contoso.Management";
99102
var releaseplan = await releasePlanTool.CreateReleasePlan(testCodeFilePath, "July 2025", "12345678-1234-5678-9012-123456789012", "12345678-1234-5678-9012-123456789012", "2025-01-01", "https://github.com/Azure/azure-rest-api-specs/pull/35446", "beta", isTestReleasePlan: true);
100-
Assert.IsNotNull(releaseplan);
101-
Assert.True(releaseplan.Contains("Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem"));
103+
104+
var releaseplanObj = JsonSerializer.Deserialize<ReleasePlanDetails>(releaseplan);
105+
Assert.IsNotNull(releaseplanObj);
106+
Assert.IsNotNull(releaseplanObj.WorkItemId);
107+
Assert.IsNotNull(releaseplanObj.ReleasePlanId);
108+
Assert.IsNotNull(releaseplanObj.ReleasePlanLink);
109+
102110

103111
releaseplan = await releasePlanTool.CreateReleasePlan(testCodeFilePath, "July 2025", "12345678-1234-5678-9012-123456789012", "12345678-1234-5678-9012-123456789012", "2025-01-01-preview", "https://github.com/Azure/azure-rest-api-specs-pr/pull/35446", "beta", isTestReleasePlan: true);
104-
Assert.IsNotNull(releaseplan);
105-
Assert.True(releaseplan.Contains("Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem"));
112+
113+
releaseplanObj = JsonSerializer.Deserialize<ReleasePlanDetails>(releaseplan);
114+
Assert.IsNotNull(releaseplanObj);
115+
Assert.IsNotNull(releaseplanObj.WorkItemId);
116+
Assert.IsNotNull(releaseplanObj.ReleasePlanId);
117+
Assert.IsNotNull(releaseplanObj.ReleasePlanLink);
118+
106119
}
107120

108121
[Test]
@@ -135,8 +148,11 @@ public async Task Test_Create_releasePlan_with_AZSDKTOOLS_AGENT_TESTING_true_cre
135148
isTestReleasePlan: false); // This should be overridden to true by environment variable
136149

137150
// Assert
138-
Assert.IsNotNull(releaseplan);
139-
Assert.True(releaseplan.Contains("Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem"));
151+
var releaseplanObj = JsonSerializer.Deserialize<ReleasePlanDetails>(releaseplan);
152+
Assert.IsNotNull(releaseplanObj);
153+
Assert.IsNotNull(releaseplanObj.WorkItemId);
154+
Assert.IsNotNull(releaseplanObj.ReleasePlanId);
155+
Assert.IsNotNull(releaseplanObj.ReleasePlanLink);
140156

141157
// Verify the environment helper was called
142158
environmentHelperMock.Verify(x => x.GetBooleanVariable("AZSDKTOOLS_AGENT_TESTING", false), Times.Once);
@@ -172,8 +188,11 @@ public async Task Test_Create_releasePlan_with_AZSDKTOOLS_AGENT_TESTING_false_re
172188
isTestReleasePlan: false);
173189

174190
// Assert
175-
Assert.IsNotNull(releaseplan);
176-
Assert.True(releaseplan.Contains("Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem"));
191+
var releaseplanObj = JsonSerializer.Deserialize<ReleasePlanDetails>(releaseplan);
192+
Assert.IsNotNull(releaseplanObj);
193+
Assert.IsNotNull(releaseplanObj.WorkItemId);
194+
Assert.IsNotNull(releaseplanObj.ReleasePlanId);
195+
Assert.IsNotNull(releaseplanObj.ReleasePlanLink);
177196

178197
// Verify the environment helper was called
179198
environmentHelperMock.Verify(x => x.GetBooleanVariable("AZSDKTOOLS_AGENT_TESTING", false), Times.Once);

tools/azsdk-cli/Azure.Sdk.Tools.Cli/Models/ReleasePlanDetails.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public class SDKInfo
132132
{
133133
public string Language { get; set; } = string.Empty;
134134
public string GenerationPipelineUrl { get; set; } = string.Empty;
135-
public string SdkPullRequestUrl { get; set; } = string.Empty;
135+
public string SdkPullRequestUrl { get; set; } = string.Empty;
136136
public string PackageName { get; set; } = string.Empty;
137137
}
138138
}

tools/azsdk-cli/Azure.Sdk.Tools.Cli/Tools/ReleasePlan/ReleasePlanTool.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ Please create a pull request in the public Azure/azure-rest-api-specs repository
224224
}
225225
}
226226

227-
[McpServerTool(Name = "azsdk_create_release_plan"), Description("Create Release Plan work item.")]
227+
[McpServerTool(Name = "azsdk_create_release_plan"), Description("Create Release Plan")]
228228
public async Task<string> CreateReleasePlan(string typeSpecProjectPath, string targetReleaseMonthYear, string serviceTreeId, string productTreeId, string specApiVersion, string specPullRequestUrl, string sdkReleaseType, string userEmail = "", bool isTestReleasePlan = false)
229229
{
230230
try
@@ -281,7 +281,22 @@ public async Task<string> CreateReleasePlan(string typeSpecProjectPath, string t
281281
}
282282
else
283283
{
284-
return output.Format(workItem);
284+
if (workItem.Id is int workItemId)
285+
{
286+
releasePlan.WorkItemId = workItemId;
287+
}
288+
289+
if (workItem.Fields.TryGetValue("Custom.ReleasePlanId", out var value) && value is int releasePlanId)
290+
{
291+
releasePlan.ReleasePlanId = releasePlanId;
292+
}
293+
294+
if (workItem.Fields.TryGetValue("Custom.ReleasePlanLink", out value) && value is string releasePlanLink)
295+
{
296+
releasePlan.ReleasePlanLink = releasePlanLink;
297+
}
298+
299+
return JsonSerializer.Serialize(releasePlan, new JsonSerializerOptions { WriteIndented = true });
285300
}
286301
}
287302
catch (Exception ex)

0 commit comments

Comments
 (0)