From 4b9f0831927e9d3457fb07b1fb4a97e3c8fa20d7 Mon Sep 17 00:00:00 2001 From: JasonYeMSFT Date: Mon, 5 Oct 2026 10:39:50 -0700 Subject: [PATCH 1/5] chore: update codeowner (#3327) * chore: update codeowner * update bootstrap script --- .github/CODEOWNERS | 130 +++++++++--------- .../instructions/skill-files.instructions.md | 2 +- scripts/src/plugin/bootstrap-skill.ts | 2 +- 3 files changed, 67 insertions(+), 67 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b718559ed..14e299251 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,78 +8,78 @@ /.github/workflows/ @microsoft/github-copilot-for-azure-writers # Plugin skills owners (multi-plugin) -/plugins/foundry-iq-skills/ @hustcalm @valangar @RickWinter -/plugins/foundry-iq-skills/skills/foundry-iq/ @hustcalm @valangar @RickWinter -/plugins/azure-skills/skills/ @tmeschter @RickWinter -/plugins/azure-skills/skills/airunway-aks-setup/ @tmeschter @RickWinter -/plugins/azure-skills/skills/appinsights-instrumentation/ @JasonYeMSFT @RickWinter -/plugins/azure-skills/skills/azure-ai/ @JasonYeMSFT @RickWinter -/plugins/azure-skills/skills/azure-aigateway/ @azaslonov @RickWinter -/plugins/azure-skills/skills/azure-cloud-migrate/ @saikoumudi @MadhuraBharadwaj-MSFT @RickWinter -/plugins/azure-skills/skills/azure-compliance/ @saikoumudi @RickWinter -/plugins/azure-skills/skills/azure-compute/ @alex-thompson @rakal-dyh @joybb @RickWinter -/plugins/azure-cost/ @saikoumudi @RickWinter @jackbatzner @handeeadiguzel +/plugins/foundry-iq-skills/ @hustcalm @valangar @microsoft/github-copilot-for-azure-writers +/plugins/foundry-iq-skills/skills/foundry-iq/ @hustcalm @valangar @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/airunway-aks-setup/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/appinsights-instrumentation/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-ai/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-aigateway/ @azaslonov @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-cloud-migrate/ @MadhuraBharadwaj-MSFT @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-compliance/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-compute/ @alex-thompson @rakal-dyh @joybb @microsoft/github-copilot-for-azure-writers +/plugins/azure-cost/ @microsoft/github-copilot-for-azure-writers @jackbatzner @handeeadiguzel /plugins/azure-skills/skills/azure-deploy/ @microsoft/github-copilot-for-azure-writers @paulyuk -/plugins/azure-skills/skills/azure-diagnostics/ @tmeschter @saikoumudi @RickWinter -/plugins/azure-skills/skills/azure-enterprise-infra-planner/ @micha31r @arunrab @RickWinter -/plugins/azure-skills/skills/azure-kubernetes/ @saikoumudi @chandraneel @gambtho @RickWinter -/plugins/azure-skills/skills/azure-kusto/ @saikoumudi @RickWinter -/plugins/azure-skills/skills/azure-messaging/ @kashifkhan @RickWinter +/plugins/azure-skills/skills/azure-diagnostics/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-enterprise-infra-planner/ @micha31r @arunrab @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-kubernetes/ @chandraneel @gambtho @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-kusto/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-messaging/ @kashifkhan @microsoft/github-copilot-for-azure-writers /plugins/azure-skills/skills/azure-prepare/ @microsoft/github-copilot-for-azure-writers -/plugins/azure-skills/skills/azure-quotas/ @rakal-dyh @RickWinter -/plugins/azure-skills/skills/azure-reliability/ @MadhuraBharadwaj-MSFT @saikoumudi @RickWinter -/plugins/azure-skills/skills/azure-resource-lookup/ @JasonYeMSFT @RickWinter -/plugins/azure-skills/skills/azure-resource-visualizer/ @tmeschter @RickWinter -/plugins/azure-skills/skills/azure-storage/ @JasonYeMSFT @RickWinter -/plugins/azure-skills/skills/azure-upgrade/ @MadhuraBharadwaj-MSFT @saikoumudi @RickWinter +/plugins/azure-skills/skills/azure-quotas/ @rakal-dyh @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-reliability/ @MadhuraBharadwaj-MSFT @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-resource-lookup/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-resource-visualizer/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-storage/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-upgrade/ @MadhuraBharadwaj-MSFT @microsoft/github-copilot-for-azure-writers /plugins/azure-skills/skills/azure-validate/ @microsoft/github-copilot-for-azure-writers -/plugins/azure-skills/skills/discover-azure-skills/ @JasonYeMSFT @yunjchoi @RickWinter -/plugins/azure-skills/skills/entra-agent-id/ @ArLucaID @RickWinter -/plugins/azure-skills/skills/entra-app-registration/ @JasonYeMSFT @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/ @ankitbko @tendau @XOEEst @anchenyi @XiaofuHuang @jugonzales @vebudumu @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/cicd/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/create/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/deploy/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/invoke/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/toolbox/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/troubleshoot/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/routine/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/invocations-ws/ @anchenyi @XiaofuHuang @swatDong @RickWinter -/plugins/azure-skills/skills/python-appservice-deploy/ @glaming1 @tmeschter @RickWinter -/plugins/azure-skills/skills/azure-app-onboard/ @vaibbavisk20 @kunalsuri-microsoft @RickWinter -/plugins/azure-skills/skills/azure-app-onboard-prereq/ @vaibbavisk20 @kunalsuri-microsoft @RickWinter +/plugins/azure-skills/skills/discover-azure-skills/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/entra-agent-id/ @ArLucaID @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/entra-app-registration/ @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/ @ankitbko @tendau @XOEEst @anchenyi @XiaofuHuang @jugonzales @vebudumu @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/cicd/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/create/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/deploy/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/invoke/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/toolbox/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/troubleshoot/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/routine/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/microsoft-foundry/foundry-agent/invocations-ws/ @anchenyi @XiaofuHuang @swatDong @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/python-appservice-deploy/ @glaming1 @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-app-onboard/ @vaibbavisk20 @kunalsuri-microsoft @microsoft/github-copilot-for-azure-writers +/plugins/azure-skills/skills/azure-app-onboard-prereq/ @vaibbavisk20 @kunalsuri-microsoft @microsoft/github-copilot-for-azure-writers # Plugin skills evals owners (multi-plugin) -/evals/foundry-iq-skills/foundry-iq/ @hustcalm @valangar @RickWinter -/evals/azure-skills/airunway-aks-setup/ @tmeschter @RickWinter -/evals/azure-skills/appinsights-instrumentation/ @JasonYeMSFT @RickWinter -/evals/azure-skills/azure-ai/ @JasonYeMSFT @RickWinter -/evals/azure-skills/azure-aigateway/ @azaslonov @RickWinter -/evals/azure-skills/azure-cloud-migrate/ @saikoumudi @MadhuraBharadwaj-MSFT @RickWinter -/evals/azure-skills/azure-compliance/ @saikoumudi @RickWinter -/evals/azure-skills/azure-compute/ @alex-thompson @rakal-dyh @joybb @rmmue21 @RickWinter -/evals/azure-cost/ @saikoumudi @RickWinter @jackbatzner @handeeadiguzel +/evals/foundry-iq-skills/foundry-iq/ @hustcalm @valangar @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/airunway-aks-setup/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/appinsights-instrumentation/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-ai/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-aigateway/ @azaslonov @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-cloud-migrate/ @MadhuraBharadwaj-MSFT @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-compliance/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-compute/ @alex-thompson @rakal-dyh @joybb @rmmue21 @microsoft/github-copilot-for-azure-writers +/evals/azure-cost/ @microsoft/github-copilot-for-azure-writers @jackbatzner @handeeadiguzel /evals/azure-skills/azure-deploy/ @microsoft/github-copilot-for-azure-writers @paulyuk -/evals/azure-skills/azure-diagnostics/ @tmeschter @saikoumudi @RickWinter -/evals/azure-skills/azure-enterprise-infra-planner/ @Jbrocket @micha31r @arunrab @RickWinter -/evals/azure-skills/azure-kubernetes/ @saikoumudi @chandraneel @gambtho @RickWinter -/evals/azure-skills/azure-kusto/ @saikoumudi @RickWinter -/evals/azure-skills/azure-messaging/ @kashifkhan @RickWinter +/evals/azure-skills/azure-diagnostics/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-enterprise-infra-planner/ @Jbrocket @micha31r @arunrab @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-kubernetes/ @chandraneel @gambtho @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-kusto/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-messaging/ @kashifkhan @microsoft/github-copilot-for-azure-writers /evals/azure-skills/azure-prepare/ @microsoft/github-copilot-for-azure-writers -/evals/azure-skills/azure-quotas/ @rakal-dyh @RickWinter -/evals/azure-skills/azure-reliability/ @MadhuraBharadwaj-MSFT @saikoumudi @RickWinter -/evals/azure-skills/azure-resource-lookup/ @JasonYeMSFT @RickWinter -/evals/azure-skills/azure-resource-visualizer/ @tmeschter @RickWinter -/evals/azure-skills/azure-storage/ @JasonYeMSFT @RickWinter -/evals/azure-skills/azure-upgrade/ @MadhuraBharadwaj-MSFT @saikoumudi @RickWinter +/evals/azure-skills/azure-quotas/ @rakal-dyh @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-reliability/ @MadhuraBharadwaj-MSFT @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-resource-lookup/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-resource-visualizer/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-storage/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/azure-upgrade/ @MadhuraBharadwaj-MSFT @microsoft/github-copilot-for-azure-writers /evals/azure-skills/azure-validate/ @microsoft/github-copilot-for-azure-writers -/evals/azure-skills/discover-azure-skills/ @JasonYeMSFT @yunjchoi @RickWinter -/evals/azure-skills/entra-agent-id/ @ArLucaID @RickWinter -/evals/azure-skills/entra-app-registration/ @JasonYeMSFT @RickWinter -/evals/azure-skills/microsoft-foundry/ @ankitbko @tendau @XOEEst @anchenyi @XiaofuHuang @jugonzales @vebudumu @RickWinter -/evals/azure-skills/python-appservice-deploy/ @glaming1 @tmeschter @RickWinter +/evals/azure-skills/discover-azure-skills/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/entra-agent-id/ @ArLucaID @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/entra-app-registration/ @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/microsoft-foundry/ @ankitbko @tendau @XOEEst @anchenyi @XiaofuHuang @jugonzales @vebudumu @microsoft/github-copilot-for-azure-writers +/evals/azure-skills/python-appservice-deploy/ @glaming1 @microsoft/github-copilot-for-azure-writers # azure-local-skills plugin owners -/plugins/azure-local-skills/ @tfrankland2 @cesquedamsft @RickWinter -/plugins/azure-local-skills/skills/azure-local-multi-rack/ @tfrankland2 @cesquedamsft @RickWinter -/evals/azure-local-skills/ @tfrankland2 @cesquedamsft @RickWinter +/plugins/azure-local-skills/ @tfrankland2 @cesquedamsft @microsoft/github-copilot-for-azure-writers +/plugins/azure-local-skills/skills/azure-local-multi-rack/ @tfrankland2 @cesquedamsft @microsoft/github-copilot-for-azure-writers +/evals/azure-local-skills/ @tfrankland2 @cesquedamsft @microsoft/github-copilot-for-azure-writers diff --git a/.github/instructions/skill-files.instructions.md b/.github/instructions/skill-files.instructions.md index 948863498..e73f029dd 100644 --- a/.github/instructions/skill-files.instructions.md +++ b/.github/instructions/skill-files.instructions.md @@ -70,7 +70,7 @@ Every skill must have its test cases written under `evals// Date: Mon, 5 Oct 2026 11:11:24 -0700 Subject: [PATCH 2/5] fix: correct telemetry reporter release retention (#3338) * fix: correct telemetry release retention Read the explicitly mapped pipeline OAuth token and preserve the retention lease JSON array. Add mocked PowerShell regression coverage and document the retention wiring. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * chore: narrow telemetry retention fix Remove the README addition and regression test, leaving only the retention script corrections. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/common/scripts/Add-RetentionLease.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/common/scripts/Add-RetentionLease.ps1 b/eng/common/scripts/Add-RetentionLease.ps1 index c82f20dec..b5f442bc5 100644 --- a/eng/common/scripts/Add-RetentionLease.ps1 +++ b/eng/common/scripts/Add-RetentionLease.ps1 @@ -11,7 +11,7 @@ param( [int] $RunId, [int] $DaysValid = 731, [string] $OwnerId = 'azure-sdk-pipeline-automation', - [string] $AccessToken = $env:SYSTEMACCESSTOKEN + [string] $AccessToken = $env:SYSTEM_ACCESSTOKEN ) Set-StrictMode -Version Latest @@ -80,14 +80,14 @@ try { -ErrorAction Stop } - $requestBody = @( + $requestBody = ConvertTo-Json -InputObject @( [ordered]@{ definitionId = $DefinitionId runId = $RunId ownerId = $OwnerId daysValid = $DaysValid } - ) | ConvertTo-Json -Depth 3 + ) -Depth 3 $createdLease = Invoke-RestMethod ` -Method Post ` -Uri "${baseUri}?api-version=6.0-preview.1" ` From 8675850a3e5e86820d152fb62aa1775b70ff772f Mon Sep 17 00:00:00 2001 From: Tom Meschter Date: Mon, 5 Oct 2026 11:55:48 -0700 Subject: [PATCH 3/5] fix: report ghcfa-telem identity in telemetry metadata (#3335) Use the full NBGV informational version for telemetry events, activity sources, and service resources. Report ghcfa-telem in McpServerNameV2 while retaining existing OpenTelemetry source and service names. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- telemetry-reporter/README.md | 9 +++ .../Ghcfa.Telemetry/CompatibilityConstants.cs | 1 - .../OpenTelemetryPluginTelemetryPublisher.cs | 15 +++-- .../PluginTelemetryActivityWriter.cs | 4 +- .../Telemetry/TelemetryConstants.cs | 2 + ...nTelemetryPluginTelemetryPublisherTests.cs | 63 +++++++++++++++++++ .../PluginTelemetryActivityWriterTests.cs | 4 +- 7 files changed, 87 insertions(+), 11 deletions(-) diff --git a/telemetry-reporter/README.md b/telemetry-reporter/README.md index 23023c2ca..c7a443b3f 100644 --- a/telemetry-reporter/README.md +++ b/telemetry-reporter/README.md @@ -31,6 +31,15 @@ calculates the executable and library versions from `version.json`. The starting major and minor version is `0.1`, and `pathFilters: ["."]` limits version-height changes to commits that modify this directory. +Telemetry reports the reporter's full NBGV informational version, including +commit metadata, in the event's `Version` property, the OpenTelemetry +`service.version` resource attribute, and the activity-source version. +The event's `McpServerNameV2` property identifies the executable as `ghcfa-telem`. +The activity-source name remains `Azure.Mcp.Server`, and the OpenTelemetry +service name remains `azmcp`. +`CompatibilityConstants.AzureMcpCommit` separately pins the Azure MCP source +revision used for implementation and allowlist synchronization. + ## Native AOT builds Native AOT publishing is opt-in and supports the same operating system and diff --git a/telemetry-reporter/src/Ghcfa.Telemetry/CompatibilityConstants.cs b/telemetry-reporter/src/Ghcfa.Telemetry/CompatibilityConstants.cs index aca7c097b..1ff6cdcca 100644 --- a/telemetry-reporter/src/Ghcfa.Telemetry/CompatibilityConstants.cs +++ b/telemetry-reporter/src/Ghcfa.Telemetry/CompatibilityConstants.cs @@ -7,6 +7,5 @@ public static class CompatibilityConstants { public const string AzureMcpCommit = "5d96d4d9e9cc49f92c9a1635fd9ee5b9e0e6098e"; public const string AzureMcpServerName = "Azure.Mcp.Server"; - public const string AzureMcpVersion = "3.0.0-beta.44"; public const string OpenTelemetryServiceName = "azmcp"; } diff --git a/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/OpenTelemetryPluginTelemetryPublisher.cs b/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/OpenTelemetryPluginTelemetryPublisher.cs index 45c74d1e4..65e836319 100644 --- a/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/OpenTelemetryPluginTelemetryPublisher.cs +++ b/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/OpenTelemetryPluginTelemetryPublisher.cs @@ -59,7 +59,7 @@ public async Task PublishAsync( using var activitySource = new ActivitySource( CompatibilityConstants.AzureMcpServerName, - CompatibilityConstants.AzureMcpVersion); + TelemetryConstants.ProductVersion); using var host = builder.Build(); await host.StartAsync(cancellationToken).ConfigureAwait(false); @@ -119,11 +119,7 @@ private static void ConfigureLogging(ILoggingBuilder logging, PluginTelemetryOpt private static void ConfigureOpenTelemetry(IServiceCollection services) { services.AddOpenTelemetry() - .ConfigureResource(resource => resource - .AddService( - CompatibilityConstants.OpenTelemetryServiceName, - serviceVersion: CompatibilityConstants.AzureMcpVersion) - .AddTelemetrySdk()) + .ConfigureResource(ConfigureResource) .WithMetrics(metrics => metrics.AddAzureMonitorMetricExporter( options => { @@ -146,6 +142,13 @@ private static void ConfigureOpenTelemetry(IServiceCollection services) name: "Microsoft")); } + internal static void ConfigureResource(ResourceBuilder resource) => + resource + .AddService( + CompatibilityConstants.OpenTelemetryServiceName, + serviceVersion: TelemetryConstants.ProductVersion) + .AddTelemetrySdk(); + private static bool IsReleaseBuild { get diff --git a/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/PluginTelemetryActivityWriter.cs b/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/PluginTelemetryActivityWriter.cs index 2e4b93666..84211ef24 100644 --- a/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/PluginTelemetryActivityWriter.cs +++ b/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/PluginTelemetryActivityWriter.cs @@ -28,8 +28,8 @@ public async Task InitializeAsync() _defaultTags = [ - new(TelemetryConstants.McpServerVersion, CompatibilityConstants.AzureMcpVersion), - new(TelemetryConstants.McpServerName, CompatibilityConstants.AzureMcpServerName), + new(TelemetryConstants.McpServerVersion, TelemetryConstants.ProductVersion), + new(TelemetryConstants.McpServerName, TelemetryConstants.ProductName), new(TelemetryConstants.ServerMode, "namespace"), new(TelemetryConstants.Transport, "stdio"), new(TelemetryConstants.Host, RuntimeInformation.OSDescription), diff --git a/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/TelemetryConstants.cs b/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/TelemetryConstants.cs index 0ab9e22f5..b1e680910 100644 --- a/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/TelemetryConstants.cs +++ b/telemetry-reporter/src/Ghcfa.Telemetry/Telemetry/TelemetryConstants.cs @@ -5,6 +5,8 @@ namespace Ghcfa.Telemetry.Telemetry; /// internal static class TelemetryConstants { + public const string ProductName = "ghcfa-telem"; + public const string ProductVersion = ThisAssembly.AssemblyInformationalVersion; public const string ActivityName = "PluginExecuted"; public const string EventId = "EventId"; public const string McpServerName = "McpServerNameV2"; diff --git a/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/OpenTelemetryPluginTelemetryPublisherTests.cs b/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/OpenTelemetryPluginTelemetryPublisherTests.cs index 8786a14fa..4a10e6757 100644 --- a/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/OpenTelemetryPluginTelemetryPublisherTests.cs +++ b/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/OpenTelemetryPluginTelemetryPublisherTests.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; +using System.Reflection; using Ghcfa.Telemetry.Models; using Ghcfa.Telemetry.Telemetry; +using OpenTelemetry.Resources; namespace Ghcfa.Telemetry.Tests.Telemetry; @@ -8,6 +11,66 @@ namespace Ghcfa.Telemetry.Tests.Telemetry; /// public sealed class OpenTelemetryPluginTelemetryPublisherTests { + [Fact] + public void ProductVersion_MatchesAssemblyInformationalVersion() + { + var version = typeof(OpenTelemetryPluginTelemetryPublisher).Assembly + .GetCustomAttribute(); + + Assert.NotNull(version); + Assert.NotEmpty(version.InformationalVersion); + Assert.Equal(TelemetryConstants.ProductVersion, version.InformationalVersion); + } + + [Fact] + public void ConfigureResource_UsesReporterVersionAndAzureMcpServiceName() + { + var builder = ResourceBuilder.CreateEmpty(); + + OpenTelemetryPluginTelemetryPublisher.ConfigureResource(builder); + + var attributes = builder.Build().Attributes.ToDictionary(); + Assert.Equal( + CompatibilityConstants.OpenTelemetryServiceName, + attributes["service.name"]); + Assert.Equal(TelemetryConstants.ProductVersion, attributes["service.version"]); + } + + [Fact] + public async Task PublishAsync_UsesReporterVersionAndAzureMcpActivitySourceName() + { + ActivitySource? activitySource = null; + using var listener = new ActivityListener + { + ShouldListenTo = source => + { + if (source.Name == CompatibilityConstants.AzureMcpServerName && + !string.IsNullOrEmpty(source.Version)) + { + activitySource = source; + } + + return false; + } + }; + ActivitySource.AddActivityListener(listener); + var publisher = new OpenTelemetryPluginTelemetryPublisher( + new DisabledTelemetryEnvironment()); + + await publisher.PublishAsync( + new PluginTelemetryOptions + { + Timestamp = "timestamp", + EventType = "event", + SessionId = "session" + }, + TestContext.Current.CancellationToken); + + Assert.NotNull(activitySource); + Assert.Equal(CompatibilityConstants.AzureMcpServerName, activitySource.Name); + Assert.Equal(TelemetryConstants.ProductVersion, activitySource.Version); + } + [Fact] public async Task PublishAsync_CreatesSupportLogWhenTelemetryIsDisabled() { diff --git a/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/PluginTelemetryActivityWriterTests.cs b/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/PluginTelemetryActivityWriterTests.cs index 93e81acfa..b364e41df 100644 --- a/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/PluginTelemetryActivityWriterTests.cs +++ b/telemetry-reporter/tests/Ghcfa.Telemetry.Tests/Telemetry/PluginTelemetryActivityWriterTests.cs @@ -54,8 +54,8 @@ public async Task Write_EmitsAzureMcpActivityAndAllPluginTags() Assert.Equal( "azure-ai\\references\\auth-best-practices.md", activity.GetTagItem("Plugin_FileReference")); - Assert.Equal(CompatibilityConstants.AzureMcpServerName, activity.GetTagItem("McpServerNameV2")); - Assert.Equal(CompatibilityConstants.AzureMcpVersion, activity.GetTagItem("Version")); + Assert.Equal("ghcfa-telem", activity.GetTagItem("McpServerNameV2")); + Assert.Equal(TelemetryConstants.ProductVersion, activity.GetTagItem("Version")); Assert.Equal("namespace", activity.GetTagItem("ServerMode")); Assert.Equal("stdio", activity.GetTagItem("Transport")); Assert.Equal("AzurePublicCloud", activity.GetTagItem("Cloud")); From c3f2e998e7ad6d43fe05e7e8a86ecd6d00e5fb98 Mon Sep 17 00:00:00 2001 From: JasonYeMSFT Date: Mon, 5 Oct 2026 14:00:05 -0700 Subject: [PATCH 4/5] fix: appinsights-instrumentation prerequisite (#3292) --- .../azure-skills/skills/appinsights-instrumentation/SKILL.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/azure-skills/skills/appinsights-instrumentation/SKILL.md b/plugins/azure-skills/skills/appinsights-instrumentation/SKILL.md index 001384489..cc948f69e 100644 --- a/plugins/azure-skills/skills/appinsights-instrumentation/SKILL.md +++ b/plugins/azure-skills/skills/appinsights-instrumentation/SKILL.md @@ -35,7 +35,9 @@ This skill provides **guidance and reference material** for instrumenting webapp The app in the workspace must be one of these kinds - An ASP.NET Core app hosted in Azure +- An Azure Container App - A Node.js app hosted in Azure +- A Python app hosted in Azure ## Guidelines From 2d420610d7afdf72542eecbf9e611c742fba7b9b Mon Sep 17 00:00:00 2001 From: Sai Koumudi Kaluvakolanu Date: Mon, 5 Oct 2026 15:53:02 -0700 Subject: [PATCH 5/5] fix: authenticate skill improvement draft PRs (#3343) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/workflows/skill-improvement.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/skill-improvement.yml b/.github/workflows/skill-improvement.yml index 9a5096718..b16ae388b 100644 --- a/.github/workflows/skill-improvement.yml +++ b/.github/workflows/skill-improvement.yml @@ -258,11 +258,22 @@ jobs: git push origin "$branch" echo "branch=$branch" >> "$GITHUB_OUTPUT" + - name: Generate token for draft pull request + if: steps.candidate.outputs.branch != '' + id: draft-pr-token + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + app-id: ${{ secrets.GHCP4A_BOT_APP_ID }} + private-key: ${{ secrets.GHCP4A_BOT_PRIVATE_KEY }} + owner: microsoft + repositories: GitHub-Copilot-for-Azure + - name: Create draft pull request if: steps.candidate.outputs.branch != '' id: pr shell: bash env: + GH_TOKEN: ${{ steps.draft-pr-token.outputs.token }} PR_BASE: ${{ inputs.pr-base }} run: | body_file="$RUNNER_TEMP/skill-improvement-pr-body.md" @@ -288,6 +299,8 @@ jobs: - name: Link draft pull request from issue if: steps.issue.outputs.url != '' && steps.pr.outputs.url != '' shell: bash + env: + GH_TOKEN: ${{ steps.draft-pr-token.outputs.token }} run: | issue_number="${{ steps.issue.outputs.url }}" issue_number="${issue_number##*/}"