Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding .Net SDK for Microsoft.IntegrationSpaces RP #39653

Closed
wants to merge 74 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
2074680
Adding .New SDK for Microsoft.IntegrationSpaces RP
DevArjun23 Oct 28, 2023
79a3652
update
ArthurMa1978 Nov 3, 2023
23aebe8
AGC API Version 2023-11-01 (#39516)
Oct 30, 2023
41900cd
Add azure sdk data factory test. (#38777)
wangbwn Oct 30, 2023
4d508ac
Aohri resource health update 1 (#39491)
abhayohri Oct 30, 2023
73b13f7
Increment package version after release of Azure.ResourceManager.Stor…
azure-sdk Oct 30, 2023
9a99303
Increment package version after release of Azure.ResourceManager.Hard…
azure-sdk Oct 30, 2023
6754e4f
Share checkpoint schema (#39556)
jaschrep-msft Oct 30, 2023
534d745
Parse any json into BinaryData not just objects (#39467)
DavidKarlas Oct 30, 2023
bc40dd9
ensure that empty package properties are not honored when dumping the…
azure-sdk Oct 30, 2023
37a33e0
Mapping "maxMessageBatchSize" to "batchOptions:maxMessageCount" (#39502)
alrod Oct 30, 2023
a83979b
[Event Hubs] Fix doc comments error (#39600)
jsquire Oct 30, 2023
a6061ce
[JobRouter] SDK Review changes for GA (#39533)
williamzhao87 Oct 30, 2023
454eee3
Add Azure.Monitor.OpenTelemetry.LiveMetrics with auto-generated class…
rajkumar-rangaraj Oct 30, 2023
97102ae
Changes for 20230915-stable/preview RP API release (#38468)
Achint-Agrawal Oct 31, 2023
445c2a5
Planned maintenance - package - 2023 - 10 (#38498)
adana-popescu Oct 31, 2023
fe27ad2
Update README.md (#39618)
glorialimicrosoft Oct 31, 2023
565ad11
Increment package version after release of Azure.ResourceManager.Main…
azure-sdk Oct 31, 2023
7a65abc
Increment package version after release of Azure.ResourceManager.Cosm…
azure-sdk Oct 31, 2023
52b96f6
Synapse new release Oct 2023 (#39499)
kevinzz6 Oct 31, 2023
9c2488d
Increment package version after release of Azure.ResourceManager.Reso…
azure-sdk Oct 31, 2023
f44a9d0
Add .NET SDK for 2023-09-01-preview (#39153)
sahilpwr Oct 31, 2023
1c62949
September API Generated (#39387)
JeetendraJoshi-MSFT Oct 31, 2023
0c7e28e
Fix properties definition in swagger to match service behavior (#39635)
AlexanderSher Oct 31, 2023
23e4a0e
Prepare for release (#39616)
JoshLove-msft Oct 31, 2023
c702c2e
Update Generator Version 3.0.0-beta.20231027.2 (#39569)
azure-sdk Oct 31, 2023
6dd15f4
Use projectListOverrideFile for preview generation (#39614)
hallipr Oct 31, 2023
33e8939
Use sparse checkout for pipeline generator (#39639)
azure-sdk Oct 31, 2023
c653ffd
Remove duplicat `to` (#39634)
rhorber Oct 31, 2023
c9d0286
[Azure.Developer.DevCenter] Update package version (#39604)
drielenr Oct 31, 2023
33e2088
Fixes for Log Scope Processing (#39453)
rajkumar-rangaraj Oct 31, 2023
d4e4274
[AzureMonitorExporter] add support for LiveMetrics to the ConnectionS…
TimothyMothra Nov 1, 2023
25dd52e
Sync eng/common directory with azure-sdk-tools for PR 7193 (#39515)
azure-sdk Nov 1, 2023
88eabc6
Update Generator Version 3.0.0-beta.20231031.2 (#39661)
azure-sdk Nov 1, 2023
dae0b31
prepare release for mobilenetwork (#39662)
ArcturusZhang Nov 1, 2023
634ce99
update armclient to support extension mock (#39631)
ArcturusZhang Nov 1, 2023
7924493
Increment version for mobilenetwork releases (#39667)
azure-sdk Nov 1, 2023
6e6fe33
[Event Hubs] Fix ETW arg type inference (#39643)
jsquire Nov 1, 2023
e766602
Increment package version after release of Azure.Analytics.Synapse.Ar…
azure-sdk Nov 1, 2023
c7fa1c2
Increment package version after release of Azure.ResourceManager.Netw…
azure-sdk Nov 1, 2023
01a7dc3
Increment package version after release of Azure.Developer.DevCenter …
azure-sdk Nov 1, 2023
0881ed5
Increment version for resourcemanager releases (#39674)
azure-sdk Nov 1, 2023
817525c
[Event Hubs] Processor Changelog (#39673)
jsquire Nov 1, 2023
757a5af
[JobRouter] SDK Review Updates part 2 (#39652)
williamzhao87 Nov 1, 2023
6517ffd
Collect AKS attach rate numerator (#39663)
rajkumar-rangaraj Nov 1, 2023
b17398a
Update AutoRest C# version to 3.0.0-beta.20231101.1 (#39676)
azure-sdk Nov 1, 2023
3136359
Fix mocking of session processor (#39650)
JoshLove-msft Nov 1, 2023
4611b04
[Storage] [DataMovement] Service Copy File Share (#39530)
amnguye Nov 1, 2023
b5d1cd0
Update Sample14_AMQPMessage.md (#39681)
paulroho Nov 1, 2023
e950934
[AzureMonitorExporter] Fix statsbeat AKS attach rate numerator (#39680)
rajkumar-rangaraj Nov 1, 2023
b0f8a76
[Azure OpenAI] Change representation of embeddings from IReadOnlyList…
joseharriaga Nov 1, 2023
b7d1011
Azure OpenAI: rename and move "deploymentOrModelName" (#39655)
trrwilson Nov 1, 2023
03a7971
use project ref to openai in test project (#39689)
m-nash Nov 2, 2023
0b1ffb3
update code owners (#39691)
TimothyMothra Nov 2, 2023
02a2bfc
[Storage][DataMovement] Refactor Job Part Plan file schema (#39606)
jalauzon-msft Nov 2, 2023
52b9f73
fix(sdk): excessive entries in changelog (#39669)
archerzz Nov 2, 2023
637d992
Add .NET SDK for HybridNetwork service (#39386)
jddarby Nov 2, 2023
af4805c
[NetAppFiles] Fix serialization (#39677)
audunn Nov 2, 2023
453a1f0
Update AutoRest C# version to 3.0.0-beta.20231102.1 (#39700)
azure-sdk Nov 2, 2023
fc25f6c
Update hybridnetwork changelog for release (#39701)
jddarby Nov 2, 2023
4e2da9c
Enable mocking for extension methods in mgmt SDKs (#37927)
ArcturusZhang Nov 2, 2023
f0ffc08
Failed Update AutoRest C# version to 3.0.0-beta.20231102.3 (#39705)
azure-sdk Nov 2, 2023
d387223
[JobRouter] Remove Uri constructor (#39708)
williamzhao87 Nov 2, 2023
4eac2d8
Increment package version after release of Azure.ResourceManager.Sear…
azure-sdk Nov 2, 2023
432f0d2
Increment package version after release of Azure.ResourceManager.Serv…
azure-sdk Nov 2, 2023
f08bdc7
[AzureMonitorExporter] refactor how EnvironmentVariables are read (#3…
TimothyMothra Nov 2, 2023
4f17bea
Azure OpenAI: Revise streaming behavior for better usability (complet…
trrwilson Nov 2, 2023
f4897c1
[AzureMonitorExporter] refactor, prepping for LiveMetrics proj (#39712)
TimothyMothra Nov 2, 2023
642424b
[Event Hubs] Error handling for disabled entities (#39715)
jsquire Nov 2, 2023
e94f91f
[Azure.Monitor.LiveMetrics] add project scaffolding (#39719)
TimothyMothra Nov 2, 2023
767abb5
[Storage] [DataMovement] Added Download Share Directory Tests (#39645)
amnguye Nov 2, 2023
3cf1d49
Release for MySQL 2023-06-01-preview (#39380)
xiaoxuqi-ms Nov 3, 2023
7a15979
Update Generator Version 3.0.0-beta.20231102.4 (#39723)
azure-sdk Nov 3, 2023
d849700
fix(cspell): suppress error in hybridnetwork (#39724)
archerzz Nov 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,10 @@
# ServiceLabel: %Monitor - Exporter %Service Attention
/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/ @cijothomas @reyang @rajkumar-rangaraj @TimothyMothra @vishweshbankwar

# PRLabel: %Monitor - LiveMetrics
# ServiceLabel: %Monitor - LiveMetrics %Service Attention
/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/ @cijothomas @reyang @rajkumar-rangaraj @TimothyMothra @vishweshbankwar

# ServiceLabel: %MySQL %Service Attention
/sdk/mysql/Microsoft.Azure.Management.MySQL/ @ajlam @ambhatna @kummanish

Expand Down
13 changes: 12 additions & 1 deletion .vscode/cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,9 @@
"Ocsp",
"Afri",
"Apac",
"Latam"
"Latam",
"Fips",
"Diffie"
]
},
{
Expand Down Expand Up @@ -1234,6 +1236,15 @@
"words": [
"resourceid"
]
},
{
"filename": "**/sdk/hybridnetwork/**/*.cs",
"words": [
"Nfvi",
"nfvi",
"NFVIs",
"nfvis"
]
}
],
"allowCompoundWords": true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,278 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using Moq;
using Moq.Language;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;

namespace Azure.ResourceManager.TestFramework
{
public sealed class ManagementMockingPatternTests
{
private const string TestFrameworkAssembly = "Azure.ResourceManager.TestFramework";
private const string AssemblyPrefix = "Azure.ResourceManager.";
private const string ResourceManagerAssemblyName = "Azure.ResourceManager";
private const string TestAssemblySuffix = ".Tests";

[Test]
public void ValidateMockingPattern()
{
var testAssembly = Assembly.GetExecutingAssembly();
var assemblyName = testAssembly.GetName().Name;
Assert.IsTrue(assemblyName.EndsWith(TestAssemblySuffix), $"The test assembly should end with {TestAssemblySuffix}");
var rpNamespace = assemblyName.Substring(0, assemblyName.Length - TestAssemblySuffix.Length);

if (rpNamespace == ResourceManagerAssemblyName || rpNamespace == TestFrameworkAssembly)
{
// in Azure.ResourceManager, we do not have extension methods therefore there is nothing to validate
return;
}

TestContext.WriteLine($"Testing assembly {rpNamespace}");

if (!rpNamespace.StartsWith(AssemblyPrefix))
{
return;
}

// find the SDK assembly by filtering the assemblies in current domain, or load it if not found (when there is no test case)
var sdkAssembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.GetName().Name == rpNamespace) ?? Assembly.Load(rpNamespace);

Assert.IsNotNull(sdkAssembly, $"The SDK assembly {rpNamespace} not found");

// find the extension class
foreach (var type in sdkAssembly.GetTypes())
{
if (IsExtensionsType(type, rpNamespace))
{
TestContext.WriteLine($"Verifying class {type}");
CheckExtensionsType(sdkAssembly, type);
}
}
}

private static bool IsExtensionsType(Type type, string assemblyNamespace)
{
return type.IsPublic &&
type.Namespace.StartsWith(assemblyNamespace) &&
type.Name.EndsWith("Extensions") &&
type.IsClass && // this should be a class
type.IsSealed && type.IsAbstract; // this is checking if the class is static
}

private static void CheckExtensionsType(Assembly sdkAssembly, Type extensionType)
{
var rpNamespace = extensionType.Namespace;
var rpName = GetRPName(rpNamespace);

Assert.IsNotNull(extensionType);

foreach (var method in extensionType.GetMethods(BindingFlags.Public | BindingFlags.Static))
{
ValidateMethod(sdkAssembly, method, rpNamespace, rpName);
}
}

private static string GetRPName(string rpNamespace)
{
// there is an assertion of the prefix, therefore this is safe.
var trailing = rpNamespace.Substring(AssemblyPrefix.Length);
var segments = trailing.Split('.');
var rpName = string.Join("", segments.Select(s => char.ToUpper(s[0]) + s.Substring(1)));
return rpName;
}

private static void ValidateMethod(Assembly assembly, MethodInfo method, string rpNamespace, string rpName)
{
// the method should be public, static and extension
if (!method.IsStatic || !method.IsPublic || !method.IsDefined(typeof(ExtensionAttribute), true))
return;

// ignore those obsolete methods
if (method.IsDefined(typeof(ObsoleteAttribute), true))
return;

// finds the corresponding mocking extension class
var parameters = method.GetParameters();
var extendedType = parameters[0].ParameterType;

var mockingExtensionTypeName = GetMockableResourceTypeName(rpNamespace, rpName, extendedType.Name);

var mockingExtensionType = assembly.GetType(mockingExtensionTypeName);
Assert.IsNotNull(mockingExtensionType, $"The mocking extension class {mockingExtensionTypeName} must exist");
Assert.IsTrue(mockingExtensionType.IsPublic, $"The mocking extension class {mockingExtensionType} must be public");

// validate the mocking extension class has a method with the exact name and parameter list
var expectedTypes = parameters.Skip(1).Select(p => p.ParameterType).ToArray();
var methodOnExtension = mockingExtensionType.GetMethod(method.Name, parameters.Skip(1).Select(p => p.ParameterType).ToArray());

Assert.IsNotNull(methodOnExtension, $"The class {mockingExtensionType} must have method {method}");
Assert.IsTrue(methodOnExtension.IsVirtual, $"The method on {mockingExtensionType} must be virtual");
Assert.IsTrue(methodOnExtension.IsPublic, $"The method on {mockingExtensionType} must be public");

// validate they should both have or both not have the EditorBrowsable(Never) attribute
Assert.AreEqual(method.IsDefined(typeof(EditorBrowsableAttribute)), methodOnExtension.IsDefined(typeof(EditorBrowsableAttribute)), $"The method {method} and {methodOnExtension} should both have or neither have the EditorBrowsableAttribute on them");

ValidateMocking(extendedType, mockingExtensionType, method, methodOnExtension);
}

private static string GetMockableResourceTypeName(string rpNamespace, string rpName, string extendedResourceName)
=> $"{rpNamespace}.Mocking.Mockable{rpName}{extendedResourceName}";

private static void ValidateMocking(Type extendedType, Type mockingExtensionType, MethodInfo extensionMethod, MethodInfo methodOnExtension)
{
// construct a mock instance for the extendee
var mock = (Mock)Activator.CreateInstance(typeof(Mock<>).MakeGenericType(extendedType));
// construct a mock instance for the mocking extension
var extensionMock = (Mock)Activator.CreateInstance(typeof(Mock<>).MakeGenericType(mockingExtensionType));
// mock the GetCachedClient
MockGetCachedClientMethod(mock, extensionMock, extendedType, mockingExtensionType);
// mock the method on MockingExtension
MockMethodOnMockingExtension(extensionMock, mockingExtensionType, methodOnExtension);

// call the method on the mock result
var arguments = new List<object>() { mock.Object };
foreach (var p in extensionMethod.GetParameters().Skip(1))
{
object i = p.ParameterType.IsValueType ? Activator.CreateInstance(p.ParameterType) : null;
arguments.Add(i);
}
try
{
var result = extensionMethod.Invoke(null, arguments.ToArray());

Assert.IsNotNull(result, $"Mocking of extension method {extensionMethod} is not working properly, please check the implementation to ensure it to call the method with same name and parameter list in {mockingExtensionType}");
}
catch (Exception)
{
Assert.Fail($"Mocking of extension method {extensionMethod} is not working properly, please check the implementation to ensure it to call the method with same name and parameter list in {mockingExtensionType}");
}
}

private static void MockGetCachedClientMethod(Mock mock, Mock extensionMock, Type extendedType, Type mockingExtensionType)
{
// get the setup method for Mock<T> so that we could call it.
var setupMethod = FindSetupMethod(mock.GetType()).MakeGenericMethod(mockingExtensionType);
// construct the expression to use in the Setup method `extendee => extendee.GetCachedClient(It.IsAny<Func<ArmClient, MockingExtensionType>>())`
var expression = ConstructGetCachedClientExpression(extendedType, mockingExtensionType);
// invoke the setup method
var getCachedClientResult = setupMethod.Invoke(mock, new object[] { expression });
// find the Returns method on the result
var returnsMethod = FindReturnsMethod(getCachedClientResult.GetType(), mockingExtensionType);
// call the Returns method
returnsMethod.Invoke(getCachedClientResult, new object[] { extensionMock.Object });
}

private static void MockMethodOnMockingExtension(object extensionMock, Type mockingExtensionType, MethodInfo methodOnExtension)
{
var returnType = methodOnExtension.ReturnType;
var setupMethod = FindSetupMethod(extensionMock.GetType()).MakeGenericMethod(returnType);
// construct the expression that calls this method
var expression = ConstructMethodExpression(mockingExtensionType, methodOnExtension);
// invoke the setup method
var methodResult = setupMethod.Invoke(extensionMock, new object[] { expression });
if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(Task<>))
{
returnType = returnType.GenericTypeArguments.Single();
// find the ReturnsAsync method on ReturnsExtensions
var returnsMethod = GetReturnsAsyncMethod().MakeGenericMethod(mockingExtensionType, returnType);
// construct a mock instance for the result so that the mock method no longer returns null
var resultMock = (Mock)Activator.CreateInstance(typeof(Mock<>).MakeGenericType(returnType));
// since ReturnsAsync is an extension method, we need to call it in the static method way
returnsMethod.Invoke(null, new object[] { methodResult, resultMock.Object });
}
else
{
// find the Returns method on the result
var returnsMethod = FindReturnsMethod(methodResult.GetType(), returnType);
// construct a mock instance for the result so that the mock method no longer returns null
var resultMock = (Mock)Activator.CreateInstance(typeof(Mock<>).MakeGenericType(returnType));
// call the Returns method
returnsMethod.Invoke(methodResult, new object[] { resultMock.Object });
}
}

private static MethodInfo _returnsAsyncMethod = null;

private static MethodInfo GetReturnsAsyncMethod()
{
if (_returnsAsyncMethod != null)
{
return _returnsAsyncMethod;
}

var returnsAsyncMethods = typeof(ReturnsExtensions).GetMethods().Where(m => m.Name == "ReturnsAsync");

// Get the method with the desired type of the second generic parameter of the IReturns interface
foreach (var method in returnsAsyncMethods)
{
// we want to find this method: IReturnsResult<TMock> ReturnsAsync<TMock, TResult>(this IReturns<TMock, Task<TResult>> mock, TResult value)
if (!method.IsGenericMethod)
continue;
var genericArguments = method.GetGenericArguments();
if (genericArguments.Length != 2)
continue;
var parameters = method.GetParameters();
if (parameters.Length != 2)
continue;
var firstType = typeof(IReturns<,>).MakeGenericType(genericArguments[0], typeof(Task<>).MakeGenericType(genericArguments[1]));
var secondType = genericArguments[1];
if (firstType == parameters[0].ParameterType && secondType == parameters[1].ParameterType)
{
_returnsAsyncMethod = method;
break;
}
}

return _returnsAsyncMethod;
}

private static LambdaExpression ConstructGetCachedClientExpression(Type extendedType, Type mockingExtensionType)
{
// step 1: construct an expression: It.IsAny<Func<ArmClient, MockingExtensionType>>()
var funcType = typeof(Func<,>).MakeGenericType(typeof(ArmClient), mockingExtensionType);
var itIsAnyExpression = Expression.Call(isAnyMethod.MakeGenericMethod(funcType));
// step 2: get the expression of `extendee.GetCachedClient(It.IsAny<Func<ArmClient, MockingExtensionType>>())`
var parameter = Expression.Parameter(extendedType, "extendee");
var methodCallExpression = Expression.Call(parameter, "GetCachedClient", new[] { mockingExtensionType }, itIsAnyExpression);
// step 3: get the lambda: `extendee => extendee.GetCachedClient(It.IsAny<Func<ArmClient, MockingExtensionType>>())`
return Expression.Lambda(methodCallExpression, parameter);
}

private static LambdaExpression ConstructMethodExpression(Type mockingExtensionType, MethodInfo methodOnExtension)
{
var parameters = methodOnExtension.GetParameters();
// construct an expression like `e.TheMethod(default, default, default, default);`
var parameter = Expression.Parameter(mockingExtensionType, "e");
var arguments = new List<Expression>();
foreach (var p in parameters)
{
arguments.Add(Expression.Default(p.ParameterType));
}
var methodCallExpression = Expression.Call(parameter, methodOnExtension, arguments);
// change it to a lambda
return Expression.Lambda(methodCallExpression, parameter);
}

private static MethodInfo FindSetupMethod(Type mock)
{
var methods = mock.GetMethods(BindingFlags.Public | BindingFlags.Instance);
return methods.Single(m => m.Name == "Setup" && m.IsGenericMethod);
}

private static MethodInfo FindReturnsMethod(Type instance, Type resultType)
{
return instance.GetMethod("Returns", new[] { resultType });
}

private static readonly MethodInfo isAnyMethod = typeof(It).GetMethod(nameof(It.IsAny), BindingFlags.Public | BindingFlags.Static);
}
}
4 changes: 2 additions & 2 deletions eng/Packages.Data.props
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
<PackageReference Update="Azure.Storage.Blobs" Version="12.16.0" />
<PackageReference Update="Azure.Storage.Queues" Version="12.14.0" />
<PackageReference Update="Azure.AI.OpenAI" Version="1.0.0-beta.5" />
<PackageReference Update="Azure.ResourceManager" Version="1.7.0" />
<PackageReference Update="Azure.ResourceManager" Version="1.8.0" />

<!-- Other approved packages -->
<PackageReference Update="Microsoft.Azure.Amqp" Version="2.6.3" />
Expand Down Expand Up @@ -176,7 +176,7 @@
All should have PrivateAssets="All" set so they don't become package dependencies
-->
<ItemGroup>
<PackageReference Update="Microsoft.Azure.AutoRest.CSharp" Version="3.0.0-beta.20231027.1" PrivateAssets="All" />
<PackageReference Update="Microsoft.Azure.AutoRest.CSharp" Version="3.0.0-beta.20231102.4" PrivateAssets="All" />
<PackageReference Update="Azure.ClientSdk.Analyzers" Version="0.1.1-dev.20231025.2" PrivateAssets="All" />
<PackageReference Update="coverlet.collector" Version="3.2.0" PrivateAssets="All" />
<PackageReference Update="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.1" PrivateAssets="All" />
Expand Down
8 changes: 8 additions & 0 deletions eng/common/pipelines/templates/jobs/prepare-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ jobs:
name: azsdk-pool-mms-ubuntu-2204-general
vmImage: ubuntu-22.04
steps:
- template: /eng/common/pipelines/templates/steps/sparse-checkout.yml
parameters:
Paths:
- 'sdk/**/*.yml'
- '!sdk/**/test-recordings/*'
- '!sdk/**/recordings/*'
- '!sdk/**/SessionRecords/*'
- '!sdk/**/session-records/*'
- template: /eng/common/pipelines/templates/steps/install-pipeline-generation.yml
- template: /eng/common/pipelines/templates/steps/set-default-branch.yml
# This covers our public repos.
Expand Down
Loading