diff --git a/eng/common/pipelines/templates/jobs/perf.yml b/eng/common/pipelines/templates/jobs/perf.yml index b19bd5c88bd..ff2d5316255 100644 --- a/eng/common/pipelines/templates/jobs/perf.yml +++ b/eng/common/pipelines/templates/jobs/perf.yml @@ -17,6 +17,9 @@ parameters: - name: Language type: string default: '' +- name: LanguageVersion + type: string + default: '' - name: LanguageRepoName type: string default: $(Build.Repository.Name) @@ -38,9 +41,6 @@ parameters: - name: ServiceDirectory type: string default: '' -- name: Services - type: string - default: '' - name: PackageVersions type: string default: '.*' @@ -118,17 +118,12 @@ jobs: Location: westus ResourceType: perf - - pwsh: | - set-content -path config.yml -value "WorkingDirectories:" - add-content -path config.yml -value " ${{ parameters.Language }}: $(Agent.BuildDirectory)/s" - workingDirectory: azure-sdk-tools/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation - displayName: Create config.yml - - script: >- dotnet run -- run - --no-sync - --languages ${{ parameters.Language }} - --services "${{ parameters.Services }}" + --language ${{ parameters.Language }} + --language-version ${{ parameters.LanguageVersion }} + --repo-root $(System.DefaultWorkingDirectory) + --tests-file $(System.DefaultWorkingDirectory)/sdk/${{ parameters.ServiceDirectory }}/perf-tests.yml --package-versions "${{ parameters.PackageVersions }}" --tests "${{ parameters.Tests }}" --arguments "${{ parameters.Arguments }}" diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/ILanguage.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/ILanguage.cs index ba3d10b39bb..b7d4ae900f2 100644 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/ILanguage.cs +++ b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/ILanguage.cs @@ -6,6 +6,8 @@ namespace Azure.Sdk.Tools.PerfAutomation { public interface ILanguage { + string WorkingDirectory { get; set; } + Task CleanupAsync(string project); IDictionary FilterRuntimePackageVersions(IDictionary runtimePackageVersions); diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/JavaScript.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/JavaScript.cs index 1c7d24a98c4..c4b39d382ab 100644 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/JavaScript.cs +++ b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/JavaScript.cs @@ -133,7 +133,7 @@ public override async Task RunAsync( bool profile, object context) { - var runtimePackageVersions = (Dictionary) context; + var runtimePackageVersions = (Dictionary)context; var outputBuilder = new StringBuilder(); var errorBuilder = new StringBuilder(); diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/LanguageBase.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/LanguageBase.cs index e976bf68505..95278e159ca 100644 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/LanguageBase.cs +++ b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/LanguageBase.cs @@ -11,7 +11,7 @@ public abstract class LanguageBase : ILanguage protected string ProfileDirectory => Path.GetFullPath(Path.Combine(WorkingDirectory, Language + "-profile")); - protected string WorkingDirectory => Program.Config.WorkingDirectories[Language]; + public string WorkingDirectory { get; set; } public abstract Task CleanupAsync(string project); diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/Config.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/Config.cs deleted file mode 100644 index 2257b559dd1..00000000000 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/Config.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Azure.Sdk.Tools.PerfAutomation.Models -{ - public class Config - { - public IDictionary WorkingDirectories { get; set; } - } -} diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/Input.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/Input.cs deleted file mode 100644 index 318d4c08fd0..00000000000 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/Input.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Collections.Generic; - -namespace Azure.Sdk.Tools.PerfAutomation.Models -{ - public class Input - { - public IDictionary Languages { get; set; } - public IEnumerable Services { get; set; } - } -} diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/LanguageInfo.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/LanguageInfo.cs deleted file mode 100644 index 6cd7e98710b..00000000000 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/LanguageInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Collections.Generic; - -namespace Azure.Sdk.Tools.PerfAutomation.Models -{ - public class LanguageInfo - { - public IEnumerable DefaultVersions { get; set; } - public IEnumerable OptionalVersions { get; set; } - } -} diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/ServiceInfo.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/ServiceInfo.cs index 1f15ffd1f71..9c93dd79760 100644 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/ServiceInfo.cs +++ b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/ServiceInfo.cs @@ -1,11 +1,44 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; namespace Azure.Sdk.Tools.PerfAutomation.Models { public class ServiceInfo { public string Service { get; set; } - public IDictionary Languages { get; set; } + public string Project { get; set; } + + private string _primaryPackage; + public string PrimaryPackage + { + get + { + if (!string.IsNullOrEmpty(_primaryPackage)) + { + return _primaryPackage; + } + else if (!PackageVersions.Any()) + { + return string.Empty; + } + else if (PackageVersions.First().Count == 1) + { + return PackageVersions.First().First().Key; + } + else + { + throw new InvalidOperationException("Must set PrimaryPackageVersion if PackageVersions contains multiple packages"); + } + } + + set + { + _primaryPackage = value; + } + } + + public IEnumerable> PackageVersions { get; set; } public IEnumerable Tests { get; set; } } } diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/ServiceLanguageInfo.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/ServiceLanguageInfo.cs deleted file mode 100644 index 4f75db9bc8a..00000000000 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/ServiceLanguageInfo.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Azure.Sdk.Tools.PerfAutomation.Models -{ - public class ServiceLanguageInfo - { - public string Project { get; set; } - public IEnumerable> PackageVersions { get; set; } - public IDictionary AdditionalArguments { get; set; } - - private string _primaryPackage; - public string PrimaryPackage - { - get - { - if (!string.IsNullOrEmpty(_primaryPackage)) - { - return _primaryPackage; - } - else if (PackageVersions.First().Count() == 1) - { - return PackageVersions.First().First().Key; - } - else - { - throw new InvalidOperationException("Must set PrimaryPackageVersion if PackageVersions contains multiple packages"); - } - } - - set - { - _primaryPackage = value; - } - } - } -} diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/TestInfo.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/TestInfo.cs index 809a76ceef9..25bbf80d762 100644 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/TestInfo.cs +++ b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Models/TestInfo.cs @@ -5,7 +5,7 @@ namespace Azure.Sdk.Tools.PerfAutomation.Models public class TestInfo { public string Test { get; set; } + public string Class { get; set; } public IEnumerable Arguments { get; set; } - public IDictionary TestNames { get; set; } } } diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Program.cs b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Program.cs index 0f1f5d021f3..ad17c985a5e 100644 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Program.cs +++ b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/Program.cs @@ -20,9 +20,7 @@ public static class Program { public const string PackageVersionSource = "source"; - public static Config Config { get; set; } - - private static Dictionary _languages = new Dictionary + private static readonly Dictionary _languages = new Dictionary { { Language.Java, new Java() }, { Language.JS, new JavaScript() }, @@ -41,35 +39,28 @@ public static class Program WriteIndented = true, }; - [Verb("run", HelpText = "Run perf tests and collect results")] - public class RunOptions + public class Options { [Option('a', "arguments", HelpText = "Regex of arguments to run")] public string Arguments { get; set; } - [Option('c', "configFile", Default = "config.yml")] - public string ConfigFile { get; set; } - [Option('d', "debug")] public bool Debug { get; set; } [Option('n', "dry-run")] public bool DryRun { get; set; } - [Option("input-file", Default = "tests.yml")] - public string InputFile { get; set; } - [Option("insecure", HelpText = "Allow untrusted SSL certs")] public bool Insecure { get; set; } [Option('i', "iterations", Default = 1)] public int Iterations { get; set; } - [Option('l', "languages", HelpText = "List of languages (separated by spaces)")] - public IEnumerable Languages { get; set; } + [Option('l', "language", Required = true)] + public Language Language { get; set; } - [Option('v', "language-versions", HelpText = "Regex of language versions to run")] - public string LanguageVersions { get; set; } + [Option("language-version", Required = true, HelpText = ".NET: 6|7, Java: 8|17, JS: 16|18, Python: 3.10|3.11, Cpp: N/A")] + public string LanguageVersion { get; set; } [Option("no-async")] public bool NoAsync { get; set; } @@ -89,8 +80,8 @@ public class RunOptions [Option("profile", HelpText = "Enables capture of profiling data")] public bool Profile { get; set; } - [Option('s', "services", HelpText = "Regex of services to run")] - public string Services { get; set; } + [Option("repo-root", Required = true, HelpText = "Path to root of repository in which to run tests")] + public string RepoRoot { get; set; } // TODO: Configure YAML serialization to print URI values [Option('x', "test-proxies", Separator = ';', HelpText = "URIs of TestProxy Servers")] @@ -103,6 +94,9 @@ public class RunOptions [Option('t', "tests", HelpText = "Regex of tests to run")] public string Tests { get; set; } + + [Option("tests-file", Required = true)] + public string TestsFile { get; set; } } public static async Task Main(string[] args) @@ -114,10 +108,10 @@ public static async Task Main(string[] args) settings.HelpWriter = null; }); - var parserResult = parser.ParseArguments(args); + var parserResult = parser.ParseArguments(args); await parserResult.MapResult( - (RunOptions options) => Run(options), + (Options options) => Run(options), errors => DisplayHelp(parserResult) ); } @@ -135,54 +129,37 @@ static Task DisplayHelp(ParserResult result) return Task.CompletedTask; } - private static async Task Run(RunOptions options) + private static async Task Run(Options options) { - Config = DeserializeYaml(options.ConfigFile); + if (options.Language == Language.JS) { + // JS is async-only + options.NoSync = true; + } + else if (options.Language == Language.Cpp) + { + // Cpp is sync-only + options.NoAsync = true; + } - var input = DeserializeYaml(options.InputFile); + var serviceInfo = DeserializeYaml(options.TestsFile); - var selectedlanguages = input.Languages - .Where(l => !options.Languages.Any() || options.Languages.Contains(l.Key)) - .ToDictionary(l => l.Key, l => new LanguageInfo() - { - DefaultVersions = l.Value.DefaultVersions.Where(v => - (String.IsNullOrEmpty(options.LanguageVersions) || Regex.IsMatch(v, options.LanguageVersions)) && - !(l.Key == Language.Net && v == "net461" && !Util.IsWindows)), - OptionalVersions = l.Value.OptionalVersions.Where(v => - (!String.IsNullOrEmpty(options.LanguageVersions) && Regex.IsMatch(v, options.LanguageVersions)) && - !(l.Key == Language.Net && v == "net461" && !Util.IsWindows)) - }); - - - var selectedServices = input.Services - .Where(s => String.IsNullOrEmpty(options.Services) || Regex.IsMatch(s.Service, options.Services, RegexOptions.IgnoreCase)) - .Select(s => new ServiceInfo + var selectedPackageVersions = serviceInfo.PackageVersions.Where(d => + String.IsNullOrEmpty(options.PackageVersions) || + Regex.IsMatch(d[serviceInfo.PrimaryPackage], options.PackageVersions, RegexOptions.IgnoreCase)); + + var selectedTests = serviceInfo.Tests + .Where(t => + String.IsNullOrEmpty(options.Tests) || + Regex.IsMatch(t.Test, options.Tests, RegexOptions.IgnoreCase)) + .Select(t => new TestInfo { - Service = s.Service, - Languages = s.Languages - .Where(l => !options.Languages.Any() || options.Languages.Contains(l.Key)) - .ToDictionary(p => p.Key, p => new ServiceLanguageInfo() - { - Project = p.Value.Project, - AdditionalArguments = p.Value.AdditionalArguments, - PackageVersions = p.Value.PackageVersions.Where(d => - String.IsNullOrEmpty(options.PackageVersions) || Regex.IsMatch(d[p.Value.PrimaryPackage], options.PackageVersions)), - PrimaryPackage = p.Value.PrimaryPackage, - }), - Tests = s.Tests - .Where(t => String.IsNullOrEmpty(options.Tests) || Regex.IsMatch(t.Test, options.Tests, RegexOptions.IgnoreCase)) - .Select(t => new TestInfo - { - Test = t.Test, - Arguments = t.Arguments.Where(a => - String.IsNullOrEmpty(options.Arguments) || Regex.IsMatch(a, options.Arguments, RegexOptions.IgnoreCase)), - TestNames = t.TestNames.Where(n => !options.Languages.Any() || options.Languages.Contains(n.Key)) - .ToDictionary(p => p.Key, p => p.Value) - }) - .Where(t => t.TestNames.Any()) - .Where(t => t.Arguments.Any()), + Test = t.Test, + Class = t.Class, + Arguments = t.Arguments.Where(a => + String.IsNullOrEmpty(options.Arguments) || + Regex.IsMatch(a, options.Arguments, RegexOptions.IgnoreCase)) }) - .Where(s => s.Tests.Any()); + .Where(t => t.Arguments.Any()); var serializer = new Serializer(); Console.WriteLine("=== Options ==="); @@ -191,7 +168,14 @@ private static async Task Run(RunOptions options) Console.WriteLine(); Console.WriteLine("=== Test Plan ==="); - serializer.Serialize(Console.Out, new Input() { Languages = selectedlanguages, Services = selectedServices }); + serializer.Serialize(Console.Out, new ServiceInfo() + { + Service = serviceInfo.Service, + Project = serviceInfo.Project, + PrimaryPackage = serviceInfo.PrimaryPackage, + PackageVersions = selectedPackageVersions, + Tests = selectedTests, + }); if (options.DryRun) { @@ -221,59 +205,56 @@ private static async Task Run(RunOptions options) var outputMd = outputFiles[3]; var results = new List(); - var profileDirectories = new List(); + DirectoryInfo profileDirectory = null; - foreach (var service in selectedServices) + if (options.Profile) { - foreach (var l in service.Languages) - { - var language = l.Key; - var serviceLanugageInfo = l.Value; - - if (options.Profile) - { - // For each language create a directory name "{language name}-profile" that will be used to contain - // all profiling data for a performance run by that language. - // Later this directory will be zipped to create ZIP file that can be retained with the name "{language name}-profile.zip". - string profileDirectory = Path.Combine(Program.Config.WorkingDirectories[language], language + "-profile"); - if (!Directory.Exists(profileDirectory)) - { - profileDirectories.Add(Directory.CreateDirectory(profileDirectory)); - } - } - - var languageInfo = selectedlanguages[language]; - - foreach (var languageVersion in languageInfo.DefaultVersions.Concat(languageInfo.OptionalVersions)) - { + profileDirectory = Directory.CreateDirectory(Path.Combine(options.RepoRoot, "profile")); + } - foreach (var packageVersions in serviceLanugageInfo.PackageVersions) - { - await RunPackageVersion(options, outputJson, outputCsv, outputTxt, outputMd, results, service, - language, serviceLanugageInfo, languageVersion, packageVersions); - } - } - } + foreach (var packageVersions in selectedPackageVersions) + { + await RunPackageVersion( + options, + serviceInfo.Service, + serviceInfo.Project, + serviceInfo.PrimaryPackage, + packageVersions, + selectedTests, + outputJson, + outputCsv, + outputTxt, + outputMd, + results); } - if (options.Profile) + if (options.Profile) { - // For each language that ran create a ZIP file containing all profiling data collected. - // This can be retained for in-depth performance analysis. - foreach (var profileDirectory in profileDirectories) - { - ZipFile.CreateFromDirectory(profileDirectory.FullName, Path.Combine(profileDirectory.Parent.FullName, profileDirectory.Name + ".zip")); - } + ZipFile.CreateFromDirectory(profileDirectory.FullName, Path.Combine(profileDirectory.Parent.FullName, profileDirectory.Name + ".zip")); } } - private static async Task RunPackageVersion(RunOptions options, string outputJson, string outputCsv, string outputTxt, - string outputMd, List results, ServiceInfo service, Language language, ServiceLanguageInfo serviceLanguageInfo, - string languageVersion, IDictionary packageVersions) + private static async Task RunPackageVersion( + Options options, + string service, + string project, + string primaryPackage, + IDictionary packageVersions, + IEnumerable tests, + string outputJson, + string outputCsv, + string outputTxt, + string outputMd, + List results) { + var language = options.Language; + var languageVersion = options.LanguageVersion; + + _languages[language].WorkingDirectory = options.RepoRoot; + try { - Console.WriteLine($"SetupAsync({serviceLanguageInfo.Project}, {languageVersion}, " + + Console.WriteLine($"SetupAsync({project}, {languageVersion}, " + $"{JsonSerializer.Serialize(packageVersions)})"); Console.WriteLine(); @@ -285,7 +266,7 @@ private static async Task RunPackageVersion(RunOptions options, string outputJso try { (setupOutput, setupError, context) = await _languages[language].SetupAsync( - serviceLanguageInfo.Project, languageVersion, serviceLanguageInfo.PrimaryPackage, packageVersions); + project, languageVersion, primaryPackage, packageVersions); } catch (Exception e) { @@ -295,7 +276,7 @@ private static async Task RunPackageVersion(RunOptions options, string outputJso Console.WriteLine(); } - foreach (var test in service.Tests) + foreach (var test in tests) { IEnumerable selectedArguments; if (!options.NoAsync && !options.NoSync) @@ -319,19 +300,6 @@ private static async Task RunPackageVersion(RunOptions options, string outputJso { var allArguments = arguments; - if (serviceLanguageInfo.AdditionalArguments != null) - { - foreach (var kvp in serviceLanguageInfo.AdditionalArguments) - { - var (name, value) = (kvp.Key, kvp.Value); - - if (arguments == null || !arguments.Contains($"--{name} ")) - { - allArguments += $" --{name} {value}"; - } - } - } - if (options.Insecure) { allArguments += " --insecure"; @@ -349,15 +317,15 @@ private static async Task RunPackageVersion(RunOptions options, string outputJso var result = new Result { - Service = service.Service, + Service = service, Test = test.Test, Start = DateTime.Now, Language = language, LanguageVersion = languageVersion, - Project = serviceLanguageInfo.Project, - LanguageTestName = test.TestNames[language], + Project = project, + LanguageTestName = test.Class, Arguments = allArguments, - PrimaryPackage = serviceLanguageInfo.PrimaryPackage, + PrimaryPackage = primaryPackage, PackageVersions = packageVersions, SetupStandardOutput = setupOutput, SetupStandardError = setupError, @@ -374,16 +342,16 @@ private static async Task RunPackageVersion(RunOptions options, string outputJso IterationResult iterationResult; try { - Console.WriteLine($"RunAsync({serviceLanguageInfo.Project}, {languageVersion}, " + - $"{test.TestNames[language]}, {allArguments}, {context}, {options.Profile})"); + Console.WriteLine($"RunAsync({project}, {languageVersion}, " + + $"{test.Class}, {allArguments}, {context}, {options.Profile})"); Console.WriteLine(); iterationResult = await _languages[language].RunAsync( - serviceLanguageInfo.Project, + project, languageVersion, - serviceLanguageInfo.PrimaryPackage, + primaryPackage, packageVersions, - test.TestNames[language], + test.Class, allArguments, options.Profile, context @@ -422,12 +390,12 @@ private static async Task RunPackageVersion(RunOptions options, string outputJso { if (!options.NoCleanup) { - Console.WriteLine($"CleanupAsync({serviceLanguageInfo.Project})"); + Console.WriteLine($"CleanupAsync({project})"); Console.WriteLine(); try { - await _languages[language].CleanupAsync(serviceLanguageInfo.Project); + await _languages[language].CleanupAsync(project); } catch (Exception e) { diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/config.sample.yml b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/config.sample.yml deleted file mode 100644 index f557925a786..00000000000 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/config.sample.yml +++ /dev/null @@ -1,6 +0,0 @@ -WorkingDirectories: - Net: C:\Git\azure-sdk-for-net - Java: C:\Git\azure-sdk-for-java - JS: C:\Git\azure-sdk-for-js - Python: C:\Git\azure-sdk-for-python - Cpp: C:\Git\azure-sdk-for-cpp diff --git a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/tests.yml b/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/tests.yml deleted file mode 100644 index 18e72b2eda1..00000000000 --- a/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/tests.yml +++ /dev/null @@ -1,735 +0,0 @@ -Languages: - Net: - DefaultVersions: - - 7 - OptionalVersions: - - 6 - - Java: - DefaultVersions: - - 17 - OptionalVersions: - - 8 - - JS: - DefaultVersions: - - 18 - OptionalVersions: - - 16 - - Python: - DefaultVersions: - - 3.11 - OptionalVersions: - - 3.10 - - Cpp: - DefaultVersions: - - 3.20 - OptionalVersions: - - 3.13 - -Services: -- Service: sample - Languages: - Net: - Project: common/Perf/Azure.Sample.Perf/Azure.Sample.Perf.csproj - PackageVersions: - - Azure.Test.Perf: source - Java: - Project: sdk/template/azure-template-perf - PackageVersions: - - 'com.azure:perf-test-core': source - JS: - Project: sdk/test-utils/perfstress - PackageVersions: - - '@azure/test-utils-perfstress': source - Tests: - - Test: no-op - Arguments: - - --warmup 0 --duration 1 - TestNames: - Net: NoOp - Java: noop - JS: NoOp - -- Service: core - Languages: - Java: - Project: sdk/core/azure-core-perf - PrimaryPackage: 'com.azure:azure-core' - PackageVersions: - - 'com.azure:azure-core': 1.36.0 - 'com.azure:azure-core-http-netty': 1.13.0 - 'com.azure:azure-core-http-okhttp': 1.11.6 - - 'com.azure:azure-core': source - 'com.azure:azure-core-http-netty': source - 'com.azure:azure-core-http-okhttp': source - AdditionalArguments: &java-additional-arguments - warmup: 15 - duration: 15 - Cpp: - Project: azure-perf-test - PackageVersions: - - azure-core-cpp: 1.7.2 - - azure-core-cpp: source - - Tests: - - Test: jsonsend - Arguments: &core-document-sizes - - --size 10 --parallel 64 --backend-type blobs - - --size 1000 --parallel 64 --backend-type blobs - TestNames: - Java: jsonsend - - Test: jsonreceive - Arguments: *core-document-sizes - TestNames: - Java: jsonreceive - - Test: xmlsend - Arguments: *core-document-sizes - TestNames: - Java: xmlsend - - Test: xmlreceive - Arguments: *core-document-sizes - TestNames: - Java: xmlreceive - - Test: binarydatasend - Arguments: - - --size 10240 --binary-data-source bytes --parallel 64 --backend-type blobs - - --size 10240 --binary-data-source file --parallel 64 --backend-type blobs - - --size 10240 --binary-data-source flux --parallel 64 --backend-type blobs - - --size 10240 --binary-data-source stream --parallel 64 --backend-type blobs - - --size 10485760 --binary-data-source bytes --parallel 32 --backend-type blobs - - --size 10485760 --binary-data-source file --parallel 32 --backend-type blobs - - --size 10485760 --binary-data-source flux --parallel 32 --backend-type blobs - - --size 10485760 --binary-data-source stream --parallel 32 --backend-type blobs - - --size 10240 --binary-data-source bytes --parallel 64 --backend-type blobs --http-client okhttp - - --size 10240 --binary-data-source file --parallel 64 --backend-type blobs --http-client okhttp - - --size 10240 --binary-data-source flux --parallel 64 --backend-type blobs --http-client okhttp - - --size 10240 --binary-data-source stream --parallel 64 --backend-type blobs --http-client okhttp - - --size 10485760 --binary-data-source bytes --parallel 32 --backend-type blobs --http-client okhttp - - --size 10485760 --binary-data-source file --parallel 32 --backend-type blobs --http-client okhttp - - --size 10485760 --binary-data-source flux --parallel 32 --backend-type blobs --http-client okhttp - - --size 10485760 --binary-data-source stream --parallel 32 --backend-type blobs --http-client okhttp - TestNames: - Java: binarydatasend - - Test: binarydatareceive - Arguments: - - --size 10240 --parallel 64 --backend-type blobs - - --size 10485760 --parallel 32 --backend-type blobs - - --size 10240 --parallel 64 --backend-type blobs --http-client okhttp - - --size 10485760 --parallel 32 --backend-type blobs --http-client okhttp - TestNames: - Java: binarydatareceive - - Test: extendedOptions - Arguments: - - -e 1 - TestNames: - Cpp: extendedOptions - -- Service: storage-blob - Languages: - Net: - Project: sdk/storage/Azure.Storage.Blobs/perf/Azure.Storage.Blobs.Perf/Azure.Storage.Blobs.Perf.csproj - PackageVersions: - - Azure.Storage.Blobs: 12.14.1 - - Azure.Storage.Blobs: source - Java: - Project: sdk/storage/azure-storage-perf - PrimaryPackage: 'com.azure:azure-storage-blob' - PackageVersions: &java-storage-package-versions - - 'com.azure:azure-storage-common': 12.19.1 - 'com.azure:azure-storage-blob': 12.20.1 - 'com.azure:azure-storage-blob-cryptography': 12.19.1 - 'com.azure:azure-storage-file-share': 12.16.1 - 'com.azure:azure-storage-file-datalake': 12.13.1 - 'com.azure:azure-core': 1.34.0 - 'com.azure:azure-core-http-netty': 1.12.7 - 'com.azure:azure-core-http-okhttp': 1.11.4 - 'io.projectreactor:reactor-core': 3.4.23 - - 'com.azure:azure-storage-common': source - 'com.azure:azure-storage-blob': source - 'com.azure:azure-storage-blob-cryptography': source - 'com.azure:azure-storage-file-share': source - 'com.azure:azure-storage-file-datalake': source - 'com.azure:azure-core': source - 'com.azure:azure-core-http-netty': source - 'com.azure:azure-core-http-okhttp': source - 'io.projectreactor:reactor-core': source - AdditionalArguments: *java-additional-arguments - JS: - Project: sdk/storage/perf-tests/storage-blob - PrimaryPackage: '@azure/storage-blob' - PackageVersions: - - '@azure/storage-blob': 12.12.0 - '@azure/core-auth': 1.4.0 - '@azure/core-http': 2.3.1 - '@azure/core-lro': 2.4.0 - '@azure/core-paging': 1.4.0 - '@azure/core-rest-pipeline': 1.10.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.1.1 - '@azure/abort-controller': 1.1.0 - '@azure/logger': 1.0.3 - - '@azure/storage-blob': source - '@azure/core-auth': source - '@azure/core-http': source - '@azure/core-lro': source - '@azure/core-paging': source - '@azure/core-rest-pipeline': source - '@azure/core-tracing': source - '@azure/core-util': source - '@azure/abort-controller': source - '@azure/logger': source - Python: - Project: sdk/storage/azure-storage-blob - PrimaryPackage: azure-storage-blob - PackageVersions: - - azure-core: 1.26.1 - azure-storage-blob: 12.14.1 - - azure-core: source - azure-storage-blob: source - Cpp: - Project: azure-storage-blobs-perf - PrimaryPackage: azure-storage-blobs-cpp - PackageVersions: - - azure-storage-blobs-cpp: 12.6.2 - azure-core-cpp: 1.7.2 - - azure-storage-blobs-cpp: source - azure-core-cpp: source - - Tests: - - Test: download - Arguments: &storage-sizes - - --size 1 --warmup 0 --duration 1 - - --size 10240 --parallel 64 - - --size 1048576 --parallel 1 - - --size 10485760 --parallel 32 - - --size 10485760 --parallel 32 --sync - - --size 20971520 --parallel 1 - - --size 209715200 --parallel 1 - - --size 1073741824 --parallel 1 --warmup 60 --duration 60 - - --size 1073741824 --parallel 8 --warmup 60 --duration 60 - TestNames: - Net: DownloadBlob - Java: downloadblob - JS: StorageBlobDownloadTest - Python: DownloadTest - Cpp: DownloadBlob - - - Test: download-file - Arguments: - - --size 10485760 --parallel 32 - - --size 10485760 --parallel 32 --sync - TestNames: - Java: downloadblobtofile - - - Test: upload - Arguments: *storage-sizes - TestNames: - Net: UploadBlob - Java: uploadblob - JS: StorageBlobUploadTest - Python: UploadTest - Cpp: UploadBlob - - - Test: upload-file - Arguments: - - --size 10485760 --parallel 32 - - --size 10485760 --parallel 32 --sync - - --size 268435456 --parallel 1 --warmup 30 --duration 30 - - --size 268435456 --parallel 1 --warmup 30 --duration 30 --max-concurrency 8 - TestNames: - Java: uploadfromfile - Python: UploadFromFileTest - - - Test: list-blobs - Arguments: &storage-blob-counts - - --count 1 --warmup 0 --duration 1 - - --count 5 --parallel 64 - - --count 500 --parallel 32 - - --count 500 --parallel 32 --sync - - --count 50000 --parallel 32 --warmup 60 --duration 60 - TestNames: - Net: GetBlobs - Java: listblobs - JS: StorageBlobListTest - Python: ListBlobsTest - Cpp: ListBlob - - - Test: download-sas-http-client - Arguments: - - --size 10240 --parallel 256 - TestNames: - Net: DownloadSasUriHttpClient - - - Test: download-sas-http-pipeline - Arguments: - - --size 10240 --parallel 256 - TestNames: - Net: DownloadSasUriHttpPipeline - - - Test: download-sas-blob-client - Arguments: - - --size 10240 --parallel 256 - TestNames: - Net: DownloadSasUriBlobClient - -- Service: storage-blob-track1 - Languages: - Net: - Project: sdk/storage/Azure.Storage.Blobs/perf/Microsoft.Azure.Storage.Blob.Perf/Microsoft.Azure.Storage.Blob.Perf.csproj - PackageVersions: - - Microsoft.Azure.Storage.Blob: 11.2.2 - Java: - Project: sdk/storage/microsoft-azure-storage-perf - PackageVersions: - - azure-storage: 8.6.5 - AdditionalArguments: *java-additional-arguments - JS: - Project: sdk/storage/perf-tests/storage-blob-track-1 - PackageVersions: - - '@azure/storage-blob': 10.5.0 - Python: - Project: sdk/storage/azure-storage-blob - PackageVersions: - - azure-storage-blob: 2.1.0 - - Tests: - - Test: download - Arguments: *storage-sizes - TestNames: - Net: DownloadBlob - Java: downloadblob - JS: StorageBlobDownloadTest - Python: LegacyDownloadTest - - - Test: upload - Arguments: *storage-sizes - TestNames: - Net: UploadBlob - Java: uploadblob - JS: StorageBlobUploadTest - Python: LegacyUploadTest - - - Test: list-blobs - Arguments: *storage-blob-counts - TestNames: - Net: GetBlobs - Java: listblobs - JS: StorageBlobListTest - Python: LegacyListBlobsTest - -- Service: storage-file-share - Languages: - Net: - Project: sdk/storage/Azure.Storage.Files.Shares/perf/Azure.Storage.Files.Shares.Perf/Azure.Storage.Files.Shares.Perf.csproj - PackageVersions: - - Azure.Storage.Files.Shares: 12.12.1 - - Azure.Storage.Files.Shares: source - Java: - Project: sdk/storage/azure-storage-perf - PrimaryPackage: 'com.azure:azure-storage-file-share' - PackageVersions: *java-storage-package-versions - AdditionalArguments: *java-additional-arguments - JS: - Project: sdk/storage/perf-tests/storage-file-share - PrimaryPackage: '@azure/storage-file-share' - PackageVersions: - - '@azure/storage-file-share': 12.12.0 - '@azure/core-auth': 1.4.0 - '@azure/core-http': 2.3.1 - '@azure/core-paging': 1.4.0 - '@azure/core-rest-pipeline': 1.10.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.1.1 - '@azure/abort-controller': 1.1.0 - '@azure/logger': 1.0.3 - - '@azure/storage-file-share': source - '@azure/core-auth': source - '@azure/core-http': source - '@azure/core-paging': source - '@azure/core-rest-pipeline': source - '@azure/core-tracing': source - '@azure/core-util': source - '@azure/abort-controller': source - '@azure/logger': source - Python: - Project: sdk/storage/azure-storage-file-share - PrimaryPackage: azure-storage-file-share - PackageVersions: - - azure-core: 1.26.1 - azure-storage-file-share: 12.10.1 - - azure-core: source - azure-storage-file-share: source - - Tests: - - Test: download - Arguments: *storage-sizes - TestNames: - Net: DownloadFile - Java: downloadfileshare - JS: StorageFileShareDownloadTest - Python: DownloadTest - - - Test: upload - Arguments: *storage-sizes - TestNames: - Net: UploadFile - Java: uploadfileshare - JS: StorageFileShareUploadTest - Python: UploadTest - -- Service: storage-file-datalake - Languages: - Net: - Project: sdk/storage/Azure.Storage.Files.DataLake/perf/Azure.Storage.Files.DataLake.Perf/Azure.Storage.Files.DataLake.Perf.csproj - PackageVersions: - - Azure.Storage.Files.DataLake: 12.12.1 - - Azure.Storage.Files.DataLake: source - Java: - Project: sdk/storage/azure-storage-perf - PrimaryPackage: 'com.azure:azure-storage-file-datalake' - PackageVersions: *java-storage-package-versions - AdditionalArguments: *java-additional-arguments - JS: - Project: sdk/storage/perf-tests/storage-file-datalake - PrimaryPackage: '@azure/storage-file-datalake' - PackageVersions: - - '@azure/storage-file-datalake': 12.11.0 - '@azure/storage-blob': 12.12.0 - '@azure/core-auth': 1.4.0 - '@azure/core-http': 2.3.1 - '@azure/core-lro': 2.4.0 - '@azure/core-paging': 1.3.0 - '@azure/core-rest-pipeline': 1.10.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.1.1 - '@azure/abort-controller': 1.1.0 - '@azure/logger': 1.0.3 - - '@azure/storage-file-datalake': source - '@azure/storage-blob': source - '@azure/core-auth': source - '@azure/core-http': source - '@azure/core-lro': source - '@azure/core-paging': source - '@azure/core-rest-pipeline': source - '@azure/core-tracing': source - '@azure/core-util': source - '@azure/abort-controller': source - '@azure/logger': source - Python: - Project: sdk/storage/azure-storage-file-datalake - PrimaryPackage: azure-storage-file-datalake - PackageVersions: - - azure-core: 1.26.1 - azure-storage-file-datalake: 12.9.1 - - azure-core: source - azure-storage-file-datalake: source - - Tests: - - Test: download - Arguments: *storage-sizes - TestNames: - Net: Read - Java: readfiledatalake - JS: StorageDFSReadTest - Python: DownloadTest - - - Test: upload - Arguments: *storage-sizes - TestNames: - Net: Upload - Java: uploadfiledatalake - JS: StorageDFSUploadTest - Python: UploadTest - -- Service: keyvault-secrets - Languages: - Net: - Project: sdk/keyvault/Azure.Security.KeyVault.Secrets/perf/Azure.Security.KeyVault.Secrets.Perf.csproj - PackageVersions: - - Azure.Security.KeyVault.Secrets: 4.2.0 - - Azure.Security.KeyVault.Secrets: source - Java: - Project: sdk/keyvault/azure-security-keyvault-perf - PrimaryPackage: 'com.azure:azure-security-keyvault-secrets' - PackageVersions: - - 'com.azure:azure-security-keyvault-certificates': 4.3.5 - 'com.azure:azure-security-keyvault-keys': 4.4.6 - 'com.azure:azure-security-keyvault-secrets': 4.4.6 - 'com.azure:azure-core': 1.31.0 - 'com.azure:azure-core-http-netty': 1.12.4 - 'com.azure:azure-identity': 1.5.4 - 'io.projectreactor:reactor-core': 3.4.9 - - 'com.azure:azure-security-keyvault-certificates': source - 'com.azure:azure-security-keyvault-keys': source - 'com.azure:azure-security-keyvault-secrets': source - 'com.azure:azure-core': source - 'com.azure:azure-core-http-netty': source - 'com.azure:azure-identity': source - 'io.projectreactor:reactor-core': source - AdditionalArguments: *java-additional-arguments - JS: - Project: sdk/keyvault/perf-tests/keyvault-secrets - PackageVersions: - - '@azure/keyvault-secrets': 4.3.0 - - '@azure/keyvault-secrets': source - Python: - Project: sdk/keyvault/azure-keyvault-secrets - PrimaryPackage: azure-keyvault-secrets - PackageVersions: - - azure-core: 1.15.0 - azure-keyvault-secrets: 4.3.0 - - azure-core: source - azure-keyvault-secrets: source - Cpp: - Project: azure-security-keyvault-secrets-perf - PrimaryPackage: azure-security-keyvault-secrets-cpp - PackageVersions: - - azure-security-keyvault-secrets-cpp: 4.1.0 - azure-core-cpp: 1.7.1 - - azure-security-keyvault-secrets-cpp: source - azure-core-cpp: source - - Tests: - - Test: get-secret - Arguments: - - --warmup 0 --duration 1 - - --parallel 64 - TestNames: - Net: GetSecret - Java: getsecret - JS: GetSecretTest - Python: GetSecretTest - Cpp: GetSecret - - - Test: list-secrets - Arguments: &keyvault-counts - - --count 1 --warmup 0 --duration 1 - - --count 5 --parallel 64 - - --count 500 --parallel 32 - TestNames: - Net: ListSecrets - Java: listsecrets - JS: ListSecretsTest - Python: ListSecretsTest - -- Service: eventhubs - Languages: - Net: - Project: sdk/eventhub/Azure.Messaging.EventHubs/perf/Azure.Messaging.EventHubs.Perf.csproj - PackageVersions: - - Azure.Messaging.EventHubs: 5.7.5 - - Azure.Messaging.EventHubs: source - Python: - Project: sdk/eventhub/azure-eventhub - PrimaryPackage: azure-eventhub - PackageVersions: - - azure-core: 1.26.1 - azure-eventhub: 5.11.1 - - azure-core: source - azure-eventhub: source - JS: - Project: sdk/eventhub/perf-tests/event-hubs - PrimaryPackage: '@azure/event-hubs' - PackageVersions: - - '@azure/event-hubs': 5.8.0 - '@azure/core-amqp': 3.2.0 - '@azure/core-auth': 1.4.0 - '@azure/core-http': 2.3.1 - '@azure/core-rest-pipeline': 1.10.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.1.1 - '@azure/abort-controller': 1.1.0 - '@azure/logger': 1.0.3 - - '@azure/event-hubs': source - '@azure/core-amqp': source - '@azure/core-auth': source - '@azure/core-http': source - '@azure/core-rest-pipeline': source - '@azure/core-tracing': source - '@azure/core-util': source - '@azure/abort-controller': source - '@azure/logger': source - Tests: - - Test: publish-batches-to-gateway - Arguments: - - --body-size 1 --batch-size 1 --warmup 0 --duration 1 - - --body-size 1024 --batch-size 100 --parallel 64 - TestNames: - Net: PublishBatchesToGateway - - Test: send-event-batch - Arguments: - - --event-size 1024 --batch-size 100 --parallel 64 - - --event-size 1024 --batch-size 100 --parallel 64 --uamqp-transport - - --event-size 1024 --batch-size 100 --parallel 64 --transport-type 1 - - --event-size 1024 --batch-size 100 --parallel 64 --transport-type 1 --uamqp-transport - - --event-size 1024 --batch-size 100 --parallel 64 --sync - - --event-size 1024 --batch-size 100 --parallel 64 --uamqp-transport --sync - - --event-size 1024 --batch-size 100 --parallel 64 --transport-type 1 --sync - - --event-size 1024 --batch-size 100 --parallel 64 --transport-type 1 --uamqp-transport --sync - TestNames: - Python: SendEventBatchTest - - Test: process-events-batch - Arguments: - - --event-size 1024 --max-batch-size 100 --preload 1000000 - - --event-size 1024 --max-batch-size 100 --preload 1000000 --uamqp-transport - - --event-size 1024 --max-batch-size 100 --preload 1000000 --transport-type 1 - - --event-size 1024 --max-batch-size 100 --preload 1000000 --transport-type 1 --uamqp-transport - - --event-size 1024 --max-batch-size 100 --preload 1000000 --sync --warmup 30 - - --event-size 1024 --max-batch-size 100 --preload 1000000 --uamqp-transport --sync --warmup 30 - - --event-size 1024 --max-batch-size 100 --preload 1000000 --transport-type 1 --sync --warmup 30 - - --event-size 1024 --max-batch-size 100 --preload 1000000 --transport-type 1 --uamqp-transport --sync --warmup 30 - TestNames: - Python: ProcessEventsBatchTest - - Test: send - Arguments: - - --event-size 1024 --batch-size 100 --parallel 64 - TestNames: - JS: SendTest - - Test: subscribe - Arguments: - - --event-size 1024 --max-batch-size 100 --events 1000000 - TestNames: - JS: SubscribeTest - -- Service: eventhubs-processor - Languages: - Net: - Project: sdk/eventhub/Azure.Messaging.EventHubs.Processor/perf/Azure.Messaging.EventHubs.Processor.Perf.csproj - PackageVersions: - - Azure.Messaging.EventHubs.Processor: 5.7.5 - - Azure.Messaging.EventHubs.Processor: source - Tests: - - Test: process-event - Arguments: - - --warmup 0 --duration 1 - - --parallel 1 - - --parallel 1 --checkpoint-interval 100 - TestNames: - Net: ProcessEvent - -- Service: servicebus - Languages: - JS: - Project: sdk/servicebus/perf-tests/service-bus - PrimaryPackage: '@azure/service-bus' - PackageVersions: - - '@azure/service-bus': 7.7.3 - '@azure/core-amqp': 3.2.1 - '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.6.1 - '@azure/core-http': 2.3.1 - '@azure/core-paging': 1.4.0 - '@azure/core-rest-pipeline': 1.10.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.1.1 - '@azure/core-xml': 1.3.0 - '@azure/abort-controller': 1.1.0 - '@azure/logger': 1.0.3 - - '@azure/service-bus': source - '@azure/core-amqp': source - '@azure/core-auth': source - '@azure/core-client': source - '@azure/core-http': source - '@azure/core-paging': source - '@azure/core-rest-pipeline': source - '@azure/core-tracing': source - '@azure/core-util': source - '@azure/core-xml': source - '@azure/abort-controller': source - '@azure/logger': source - Tests: - - Test: send-event-batch - Arguments: - - --size 10240 --batch-size 10 - TestNames: - JS: BatchSendTest - - Test: subscribe - Arguments: - - --message-size 2000 --messages 10000 --mcc 1000 - TestNames: - JS: SubscribeTest - - Test: receive-batch - Arguments: - - --number-of-messages 10000 --message-size 2000 --max-message-count 50 - TestNames: - JS: BatchReceiveTest - - -- Service: monitor-ingestion - Languages: - Net: - Project: sdk/monitor/Azure.Monitor.Ingestion/perf/Azure.Monitor.Ingestion.Perf.csproj - PackageVersions: - - Azure.Monitor.Ingestion: 1.0.0-beta.4 - - Azure.Monitor.Ingestion: source - Tests: - - Test: upload - Arguments: - - --parallel 1 - - --parallel 2 - - --parallel 4 - - --parallel 8 - - --parallel 16 - - --parallel 32 - - --parallel 64 - - --parallel 128 - - --parallel 256 - - --parallel 512 - TestNames: - Net: SingleUpload - - Test: upload-batch - Arguments: - - --parallel 1 - - --parallel 2 - - --parallel 4 - - --parallel 8 - - --parallel 16 - - --parallel 32 - - --parallel 64 - - --parallel 128 - - --parallel 256 - - --parallel 512 - TestNames: - Net: BatchUpload - -- Service: keyvault-keys - Languages: - Cpp: - Project: azure-security-keyvault-keys-perf - PrimaryPackage: azure-security-keyvault-keys-cpp - PackageVersions: - - azure-security-keyvault-keys-cpp: 4.3.0 - azure-core-cpp: 1.7.1 - - azure-security-keyvault-keys-cpp: source - azure-core-cpp: source - - Tests: - - Test: get-key - Arguments: - - --warmup 0 --duration 1 - - --parallel 64 - TestNames: - Cpp: GetKey - -- Service: keyvault-certificates - Languages: - Cpp: - Project: azure-security-keyvault-certificates-perf - PrimaryPackage: azure-security-keyvault-certificates-cpp - PackageVersions: - - azure-security-keyvault-certificates-cpp: 4.1.0 - azure-core-cpp: 1.7.1 - - azure-security-keyvault-certificates-cpp: source - azure-core-cpp: source - - Tests: - - Test: get-certificate - Arguments: - - --warmup 0 --duration 1 - - --parallel 64 - TestNames: - Cpp: GetCertificate - diff --git a/tools/perf-automation/tests.yml b/tools/perf-automation/tests.yml index 6611130ce5f..bc60ee71940 100644 --- a/tools/perf-automation/tests.yml +++ b/tools/perf-automation/tests.yml @@ -6,6 +6,10 @@ parameters: - name: NetRepoCommitish type: string default: 'main' +- name: NetLanguageVersion + displayName: NetLanguageVersion (6, 7) + type: string + default: '7' - name: NetServiceDirectory type: string default: 'storage/Azure.Storage.Blobs' @@ -16,6 +20,10 @@ parameters: - name: JavaRepoCommitish type: string default: 'main' +- name: JavaLanguageVersion + displayName: JavaLanguageVersion (8, 11, 17) + type: string + default: '17' - name: JavaServiceDirectory type: string default: 'storage/azure-storage-blob' @@ -26,6 +34,10 @@ parameters: - name: JSRepoCommitish type: string default: 'main' +- name: JSLanguageVersion + displayName: JSLanguageVersion (14, 16, 18) + type: string + default: '18' - name: JSServiceDirectory type: string default: 'storage/storage-blob' @@ -36,6 +48,10 @@ parameters: - name: PythonRepoCommitish type: string default: 'main' +- name: PythonLanguageVersion + displayName: PythonLanguageVersion (3.7, 3.8, 3.9, 3.10, 3.11) + type: string + default: '3.11' - name: PythonServiceDirectory type: string default: 'storage/azure-storage-blob' @@ -48,10 +64,7 @@ parameters: default: 'main' - name: CppServiceDirectory type: string - default: 'storage' -- name: Services - type: string - default: '^storage-blob$' + default: 'storage/azure-storage-blobs' - name: PackageVersions type: string default: '12|source' @@ -124,6 +137,7 @@ stages: WindowsPool: ${{ parameters.WindowsPool }} WindowsVmImage: $(WindowsVmImage) Language: 'Net' + LanguageVersion: ${{ parameters.NetLanguageVersion }} LanguageRepoName: 'Azure/azure-sdk-for-net' LanguageRepoCommitish: ${{ parameters.NetRepoCommitish }} ToolsRepoCommitish: $(ToolsRepoCommitish) @@ -135,7 +149,6 @@ stages: parameters: EnableNuGetCache: false ServiceDirectory: ${{ parameters.NetServiceDirectory }} - Services: ${{ parameters.Services }} PackageVersions: ${{ parameters.PackageVersions }} Tests: ${{ parameters.Tests }} Arguments: ${{ parameters.Arguments }} @@ -151,6 +164,7 @@ stages: WindowsPool: ${{ parameters.WindowsPool }} WindowsVmImage: $(WindowsVmImage) Language: 'Java' + LanguageVersion: ${{ parameters.JavaLanguageVersion }} LanguageRepoName: 'Azure/azure-sdk-for-java' LanguageRepoCommitish: ${{ parameters.JavaRepoCommitish }} ToolsRepoCommitish: $(ToolsRepoCommitish) @@ -160,16 +174,15 @@ stages: InstallLanguageSteps: - task: JavaToolInstaller@0 inputs: - versionSpec: '17' + versionSpec: ${{ parameters.JavaLanguageVersion }} jdkArchitectureOption: 'x64' jdkSourceOption: 'PreInstalled' - displayName: Install Java 17 + displayName: Install Java ${{ parameters.JavaLanguageVersion }} - script: | java -version mvn --version displayName: Print Java Versions ServiceDirectory: ${{ parameters.JavaServiceDirectory }} - Services: ${{ parameters.Services }} PackageVersions: ${{ parameters.PackageVersions }} Tests: ${{ parameters.Tests }} Arguments: ${{ parameters.Arguments }} @@ -185,6 +198,7 @@ stages: WindowsPool: ${{ parameters.WindowsPool }} WindowsVmImage: $(WindowsVmImage) Language: 'JS' + LanguageVersion: ${{ parameters.JSLanguageVersion }} LanguageRepoName: 'Azure/azure-sdk-for-js' LanguageRepoCommitish: ${{ parameters.JSRepoCommitish }} ToolsRepoCommitish: $(ToolsRepoCommitish) @@ -194,9 +208,8 @@ stages: InstallLanguageSteps: - template: /eng/pipelines/templates/steps/use-node-version.yml@azure-sdk-for-js parameters: - NodeVersion: 18.x + NodeVersion: ${{ parameters.JSLanguageVersion }}.x ServiceDirectory: ${{ parameters.JSServiceDirectory }} - Services: ${{ parameters.Services }} PackageVersions: ${{ parameters.PackageVersions }} Tests: ${{ parameters.Tests }} Arguments: ${{ parameters.Arguments }} @@ -212,13 +225,14 @@ stages: WindowsPool: ${{ parameters.WindowsPool }} WindowsVmImage: $(WindowsVmImage) Language: 'Python' + LanguageVersion: ${{ parameters.PythonLanguageVersion }} LanguageRepoName: 'Azure/azure-sdk-for-python' LanguageRepoCommitish: ${{ parameters.PythonRepoCommitish }} ToolsRepoCommitish: $(ToolsRepoCommitish) Variables: - template: /eng/pipelines/templates/variables/globals.yml@azure-sdk-for-python - name: PythonVersion - value: '3.11' + value: ${{ parameters.PythonLanguageVersion }} OperatingSystems: ${{ parameters.OperatingSystems }} InstallLanguageSteps: - task: UsePythonVersion@0 @@ -226,7 +240,6 @@ stages: inputs: versionSpec: $(PythonVersion) ServiceDirectory: ${{ parameters.PythonServiceDirectory }} - Services: ${{ parameters.Services }} PackageVersions: ${{ parameters.PackageVersions }} Tests: ${{ parameters.Tests }} Arguments: ${{ parameters.Arguments }} @@ -242,6 +255,7 @@ stages: WindowsPool: ${{ parameters.WindowsPool }} WindowsVmImage: $(WindowsVmImage) Language: 'Cpp' + LanguageVersion: 'N/A' LanguageRepoName: 'Azure/azure-sdk-for-cpp' LanguageRepoCommitish: ${{ parameters.CppRepoCommitish }} ToolsRepoCommitish: $(ToolsRepoCommitish) @@ -253,7 +267,6 @@ stages: parameters: RepoOwner: Microsoft ServiceDirectory: ${{ parameters.CppServiceDirectory }} - Services: ${{ parameters.Services }} PackageVersions: ${{ parameters.PackageVersions }} Tests: ${{ parameters.Tests }} Arguments: ${{ parameters.Arguments }}