From 2f5eb8f1d500ca8ad6eb52402ba438f5c9523809 Mon Sep 17 00:00:00 2001 From: Viktor Hofer Date: Mon, 18 Sep 2023 11:46:17 +0200 Subject: [PATCH 1/5] Move portable RID graph into runtime and clean-up 1. Move portable RID graph into runtime 2. Allow updates to both the non-portable and portable RID graphs under source build. 3. Clean-up project and remove hacks --- Directory.Build.props | 7 + Directory.Build.targets | 1 + eng/AvoidRestoreCycleOnSelfReference.targets | 14 - src/libraries/Directory.Build.targets | 1 - .../src/AssemblyResolver.cs | 111 - .../src/BuildTask.Desktop.cs | 13 - .../src/BuildTask.cs | 151 - .../src/Directory.Build.props | 9 + .../src/Extensions.cs | 46 - .../src/GenerateRuntimeGraph.cs | 427 - .../src/Microsoft.NETCore.Platforms.csproj | 88 +- .../src/PortableRuntimeIdentifierGraph.json | 475 + .../Microsoft.NETCore.Platforms/src/RID.cs | 208 - .../src/RuntimeGroup.cs | 298 - .../src/RuntimeGroupCollection.cs | 160 - .../src/RuntimeVersion.cs | 140 - .../src/UpdateRuntimeIdentifierGraph.cs | 48 + .../src/runtime.compatibility.json | 11768 ---------------- .../src/runtimeGroups.props | 296 - 19 files changed, 572 insertions(+), 13689 deletions(-) delete mode 100644 eng/AvoidRestoreCycleOnSelfReference.targets delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs create mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs create mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RID.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs create mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props diff --git a/Directory.Build.props b/Directory.Build.props index ef11d8d95d177..4d3e8a8408abf 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -471,4 +471,11 @@ $(RepositoryEngineeringDir)NoTargetsSdk.BeforeTargets.targets $(RepositoryEngineeringDir)TraversalSdk.AfterTargets.targets + + + + $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.NETCore.Platforms', 'runtime.json')) + $([MSBuild]::NormalizePath('$(LibrariesProjectRoot)', 'Microsoft.NETCore.Platforms', 'src', 'runtime.json')) + + diff --git a/Directory.Build.targets b/Directory.Build.targets index 88598f1295f5f..df701955c0ff6 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -216,4 +216,5 @@ Runtime/$(SharedFrameworkNugetVersion)/ + diff --git a/eng/AvoidRestoreCycleOnSelfReference.targets b/eng/AvoidRestoreCycleOnSelfReference.targets deleted file mode 100644 index cb665cb070d98..0000000000000 --- a/eng/AvoidRestoreCycleOnSelfReference.targets +++ /dev/null @@ -1,14 +0,0 @@ - - - - <_PackageIdTemp>$(PackageId) - $(PackageId)_temp - - - - - $(_PackageIdTemp) - - - \ No newline at end of file diff --git a/src/libraries/Directory.Build.targets b/src/libraries/Directory.Build.targets index acd5edc193262..5f7126056b09c 100644 --- a/src/libraries/Directory.Build.targets +++ b/src/libraries/Directory.Build.targets @@ -128,7 +128,6 @@ - diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs b/src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs deleted file mode 100644 index 81cbce457a734..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs +++ /dev/null @@ -1,111 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Reflection; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - /// - /// Used to enable app-local assembly unification. - /// - internal static class AssemblyResolver - { - static AssemblyResolver() - { - AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; - } - - /// - /// Call to enable the assembly resolver for the current AppDomain. - /// - public static void Enable() - { - // intentionally empty. This is just meant to ensure the static constructor - // has run. - } - - [UnconditionalSuppressMessage("SingleFile", "IL3000:Avoid accessing Assembly file path when publishing as a single file", - Justification = "The code has a fallback to use AppDomain.CurrentDomain.BaseDirectory so it will work correctly in single-file")] - private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) - { - // apply any existing policy - AssemblyName referenceName = new AssemblyName(AppDomain.CurrentDomain.ApplyPolicy(args.Name)); - - string fileName = referenceName.Name + ".dll"; - string assemblyPath; - string probingPath; - Assembly assm; - - // look next to requesting assembly - assemblyPath = args.RequestingAssembly?.Location; - if (!string.IsNullOrEmpty(assemblyPath)) - { - probingPath = Path.Combine(Path.GetDirectoryName(assemblyPath), fileName); - Debug.WriteLine($"Considering {probingPath} based on RequestingAssembly"); - if (Probe(probingPath, referenceName.Version, out assm)) - { - return assm; - } - } - - // look next to the executing assembly - assemblyPath = Assembly.GetExecutingAssembly().Location; - if (!string.IsNullOrEmpty(assemblyPath)) - { - probingPath = Path.Combine(Path.GetDirectoryName(assemblyPath), fileName); - - Debug.WriteLine($"Considering {probingPath} based on ExecutingAssembly"); - if (Probe(probingPath, referenceName.Version, out assm)) - { - return assm; - } - } - - // look in AppDomain base directory - probingPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); - Debug.WriteLine($"Considering {probingPath} based on BaseDirectory"); - if (Probe(probingPath, referenceName.Version, out assm)) - { - return assm; - } - - // look in current directory - Debug.WriteLine($"Considering {fileName}"); - if (Probe(fileName, referenceName.Version, out assm)) - { - return assm; - } - - return null; - } - - /// - /// Considers a path to load for satisfying an assembly ref and loads it - /// if the file exists and version is sufficient. - /// - /// Path to consider for load - /// Minimum version to consider - /// loaded assembly - /// true if assembly was loaded - private static bool Probe(string filePath, Version minimumVersion, out Assembly assembly) - { - if (File.Exists(filePath)) - { - AssemblyName name = AssemblyName.GetAssemblyName(filePath); - - if (name.Version >= minimumVersion) - { - assembly = Assembly.Load(name); - return true; - } - } - - assembly = null; - return false; - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs b/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs deleted file mode 100644 index 29af5f186cfb4..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public partial class BuildTask - { - static BuildTask() - { - AssemblyResolver.Enable(); - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs b/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs deleted file mode 100644 index 98e17c3b0c566..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs +++ /dev/null @@ -1,151 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using System; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public abstract partial class BuildTask : ITask - { - private Log _log; - - internal Log Log - { - get { return _log ??= new Log(new TaskLoggingHelper(this)); } - } - - public BuildTask() - { - } - - public IBuildEngine BuildEngine - { - get; - set; - } - - public ITaskHost HostObject - { - get; - set; - } - - public abstract bool Execute(); - } - - internal sealed class Log : ILog - { - private readonly TaskLoggingHelper _logger; - public Log(TaskLoggingHelper logger) - { - _logger = logger; - } - - public void LogError(string message, params object[] messageArgs) - { - _logger.LogError(message, messageArgs); - } - - public void LogErrorFromException(Exception exception, bool showStackTrace) - { - _logger.LogErrorFromException(exception, showStackTrace); - } - - public void LogMessage(string message, params object[] messageArgs) - { - _logger.LogMessage(message, messageArgs); - } - - public void LogMessage(LogImportance importance, string message, params object[] messageArgs) - { - _logger.LogMessage((MessageImportance)importance, message, messageArgs); - } - - public void LogWarning(string message, params object[] messageArgs) - { - _logger.LogWarning(message, messageArgs); - } - - public bool HasLoggedErrors { get { return _logger.HasLoggedErrors; } } - } - - public enum LogImportance - { - Low = MessageImportance.Low, - Normal = MessageImportance.Normal, - High = MessageImportance.High - } - - - public interface ILog - { - // - // Summary: - // Logs an error with the specified message. - // - // Parameters: - // message: - // The message. - // - // messageArgs: - // Optional arguments for formatting the message string. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogError(string message, params object[] messageArgs); - - // - // Summary: - // Logs a message with the specified string. - // - // Parameters: - // message: - // The message. - // - // messageArgs: - // The arguments for formatting the message. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogMessage(string message, params object[] messageArgs); - - // - // Summary: - // Logs a message with the specified string and importance. - // - // Parameters: - // importance: - // One of the enumeration values that specifies the importance of the message. - // - // message: - // The message. - // - // messageArgs: - // The arguments for formatting the message. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogMessage(LogImportance importance, string message, params object[] messageArgs); - - // - // Summary: - // Logs a warning with the specified message. - // - // Parameters: - // message: - // The message. - // - // messageArgs: - // Optional arguments for formatting the message string. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogWarning(string message, params object[] messageArgs); - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props b/src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props new file mode 100644 index 0000000000000..75e6b0abd56ae --- /dev/null +++ b/src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props @@ -0,0 +1,9 @@ + + + + false + + + + + \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs b/src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs deleted file mode 100644 index 2456407d682e7..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Generic; -using System.Linq; -using Microsoft.Build.Framework; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public static class Extensions - { - public static string GetString(this ITaskItem taskItem, string metadataName) - { - var metadataValue = taskItem.GetMetadata(metadataName)?.Trim(); - return string.IsNullOrEmpty(metadataValue) ? null : metadataValue; - } - - public static bool GetBoolean(this ITaskItem taskItem, string metadataName, bool defaultValue = false) - { - bool result; - var metadataValue = taskItem.GetMetadata(metadataName); - if (!bool.TryParse(metadataValue, out result)) - { - result = defaultValue; - } - return result; - } - - public static IEnumerable GetStrings(this ITaskItem taskItem, string metadataName) - { - var metadataValue = taskItem.GetMetadata(metadataName)?.Trim(); - if (!string.IsNullOrEmpty(metadataValue)) - { - return metadataValue.Split(';').Where(v => !string.IsNullOrEmpty(v.Trim())).ToArray(); - } - - return Enumerable.Empty(); - } - - public static IEnumerable NullAsEmpty(this IEnumerable source) - { - return source ?? Enumerable.Empty(); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs b/src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs deleted file mode 100644 index f431e274e8dca..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs +++ /dev/null @@ -1,427 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using Microsoft.Build.Framework; -using Newtonsoft.Json; -using NuGet.RuntimeModel; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class GenerateRuntimeGraph : BuildTask - { - - /// - /// A set of RuntimeGroups that can be used to generate a runtime graph - /// Identity: the base string for the RID, without version architecture, or qualifiers. - /// Parent: the base string for the parent of this RID. This RID will be imported by the baseRID, architecture-specific, - /// and qualifier-specific RIDs (with the latter two appending appropriate architecture and qualifiers). - /// Versions: A list of strings delimited by semi-colons that represent the versions for this RID. - /// TreatVersionsAsCompatible: Default is true. When true, version-specific RIDs will import the previous - /// version-specific RID in the Versions list, with the first version importing the version-less RID. - /// When false all version-specific RIDs will import the version-less RID (bypassing previous version-specific RIDs) - /// OmitVersionDelimiter: Default is false. When true no characters will separate the base RID and version (EG: win7). - /// When false a '.' will separate the base RID and version (EG: osx.10.12). - /// ApplyVersionsToParent: Default is false. When true, version-specific RIDs will import version-specific Parent RIDs - /// similar to is done for architecture and qualifier (see Parent above). - /// Architectures: A list of strings delimited by semi-colons that represent the architectures for this RID. - /// AdditionalQualifiers: A list of strings delimited by semi-colons that represent the additional qualifiers for this RID. - /// Additional qualifers do not stack, each only applies to the qualifier-less RIDs (so as not to cause combinatorial - /// exponential growth of RIDs). - /// - /// The following options can be used under special circumstances but break the normal precedence rules we try to establish - /// by generating the RID graph from common logic. These options make it possible to create a RID fallback chain that doesn't - /// match the rest of the RIDs and therefore is hard for developers/package authors to reason about. - /// Only use these options for cases where you know what you are doing and have carefully reviewed the resulting RID fallbacks - /// using the CompatibliltyMap. - /// OmitRIDs: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should - /// be omitted from the RuntimeGraph. These RIDs will not be referenced nor defined. - /// OmitRIDDefinitions: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup - /// that should be omitted from the RuntimeGraph. These RIDs will not be defined by this RuntimeGroup, but will be - /// referenced: useful in case some other RuntimeGroup (or runtime.json template) defines them. - /// OmitRIDReferences: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup - /// that should be omitted from the RuntimeGraph. These RIDs will be defined but not referenced by this RuntimeGroup. - /// - public ITaskItem[] RuntimeGroups - { - get; - set; - } - - /// - /// Additional runtime identifiers to add to the graph. - /// - public string[] AdditionalRuntimeIdentifiers - { - get; - set; - } - - /// - /// Parent RID to use for any unknown AdditionalRuntimeIdentifier. - /// - public string AdditionalRuntimeIdentifierParent - { - get; - set; - } - - /// - /// Optional source Runtime.json to use as a starting point when merging additional RuntimeGroups - /// - public string SourceRuntimeJson - { - get; - set; - } - - /// - /// Where to write the final runtime.json - /// - public string RuntimeJson - { - get; - set; - } - - /// - /// Optionally, other runtime.jsons which may contain imported RIDs - /// - public string[] ExternalRuntimeJsons - { - get; - set; - } - - /// - /// When defined, specifies the file to write compatibility precedence for each RID in the graph. - /// - public string CompatibilityMap - { - get; - set; - } - - - /// - /// True to write the generated runtime.json to RuntimeJson and compatibility map to CompatibilityMap, otherwise files are read and diffed - /// with generated versions and an error is emitted if they differ. - /// Setting UpdateRuntimeFiles will overwrite files even when the file is marked ReadOnly. - /// - public bool UpdateRuntimeFiles - { - get; - set; - } - - /// - /// When defined, specifies the file to write a DGML representation of the runtime graph. - /// - public string RuntimeDirectedGraph - { - get; - set; - } - - public override bool Execute() - { - if (RuntimeGroups != null && RuntimeGroups.Length != 0 && RuntimeJson == null) - { - Log.LogError($"{nameof(RuntimeJson)} argument must be specified when {nameof(RuntimeGroups)} is specified."); - return false; - } - - RuntimeGraph runtimeGraph; - if (!string.IsNullOrEmpty(SourceRuntimeJson)) - { - if (!File.Exists(SourceRuntimeJson)) - { - Log.LogError($"{nameof(SourceRuntimeJson)} did not exist at {SourceRuntimeJson}."); - return false; - } - - runtimeGraph = JsonRuntimeFormat.ReadRuntimeGraph(SourceRuntimeJson); - } - else - { - runtimeGraph = new RuntimeGraph(); - } - - List runtimeGroups = RuntimeGroups.NullAsEmpty().Select(i => new RuntimeGroup(i)).ToList(); - - AddRuntimeIdentifiers(runtimeGroups); - - foreach (var runtimeGroup in runtimeGroups) - { - runtimeGraph = SafeMerge(runtimeGraph, runtimeGroup); - } - - Dictionary externalRids = new Dictionary(); - if (ExternalRuntimeJsons != null) - { - foreach (var externalRuntimeJson in ExternalRuntimeJsons) - { - RuntimeGraph externalRuntimeGraph = JsonRuntimeFormat.ReadRuntimeGraph(externalRuntimeJson); - - foreach (var runtime in externalRuntimeGraph.Runtimes.Keys) - { - // don't check for duplicates, we merely care what is external - externalRids.Add(runtime, externalRuntimeJson); - } - } - } - - ValidateImports(runtimeGraph, externalRids); - - if (!string.IsNullOrEmpty(RuntimeJson)) - { - if (UpdateRuntimeFiles) - { - EnsureWritable(RuntimeJson); - WriteRuntimeGraph(RuntimeJson, runtimeGraph); - - } - else - { - // validate that existing file matches generated file - if (!File.Exists(RuntimeJson)) - { - Log.LogError($"{nameof(RuntimeJson)} did not exist at {RuntimeJson} and {nameof(UpdateRuntimeFiles)} was not specified."); - } - else - { - var existingRuntimeGraph = JsonRuntimeFormat.ReadRuntimeGraph(RuntimeJson); - - if (!existingRuntimeGraph.Equals(runtimeGraph)) - { - Log.LogError($"The generated {nameof(RuntimeJson)} differs from {RuntimeJson} and {nameof(UpdateRuntimeFiles)} was not specified. Please specify {nameof(UpdateRuntimeFiles)}=true to commit the changes."); - } - } - } - } - - if (!string.IsNullOrEmpty(CompatibilityMap)) - { - var compatibilityMap = GetCompatibilityMap(runtimeGraph); - if (UpdateRuntimeFiles) - { - EnsureWritable(CompatibilityMap); - WriteCompatibilityMap(compatibilityMap, CompatibilityMap); - } - else - { - // validate that existing file matches generated file - if (!File.Exists(CompatibilityMap)) - { - Log.LogError($"{nameof(CompatibilityMap)} did not exist at {CompatibilityMap} and {nameof(UpdateRuntimeFiles)} was not specified."); - } - else - { - var existingCompatibilityMap = ReadCompatibilityMap(CompatibilityMap); - - if (!CompatibilityMapEquals(existingCompatibilityMap, compatibilityMap)) - { - Log.LogError($"The generated {nameof(CompatibilityMap)} differs from {CompatibilityMap} and {nameof(UpdateRuntimeFiles)} was not specified. Please specify {nameof(UpdateRuntimeFiles)}=true to commit the changes."); - } - } - } - } - - if (!string.IsNullOrEmpty(RuntimeDirectedGraph)) - { - WriteRuntimeGraph(runtimeGraph, RuntimeDirectedGraph); - } - - return !Log.HasLoggedErrors; - } - - private static void EnsureWritable(string file) - { - if (File.Exists(file)) - { - var existingAttributes = File.GetAttributes(file); - - if ((existingAttributes & FileAttributes.ReadOnly) != 0) - { - File.SetAttributes(file, existingAttributes &= ~FileAttributes.ReadOnly); - } - } - } - - public static void WriteRuntimeGraph(string filePath, RuntimeGraph runtimeGraph) - { - using (var fileStream = new FileStream(filePath, FileMode.Create)) - using (var textWriter = new StreamWriter(fileStream)) - using (var jsonWriter = new JsonTextWriter(textWriter)) - using (var writer = new JsonObjectWriter(jsonWriter)) - { - jsonWriter.Formatting = Formatting.Indented; - - // workaround https://github.com/NuGet/Home/issues/9532 - writer.WriteObjectStart(); - - JsonRuntimeFormat.WriteRuntimeGraph(writer, runtimeGraph); - - writer.WriteObjectEnd(); - } - } - - private RuntimeGraph SafeMerge(RuntimeGraph existingGraph, RuntimeGroup runtimeGroup) - { - var runtimeGraph = runtimeGroup.GetRuntimeGraph(); - - foreach (var existingRuntimeDescription in existingGraph.Runtimes.Values) - { - RuntimeDescription newRuntimeDescription; - - if (runtimeGraph.Runtimes.TryGetValue(existingRuntimeDescription.RuntimeIdentifier, out newRuntimeDescription)) - { - // overlapping RID, ensure that the imports match (same ordering and content) - if (!existingRuntimeDescription.InheritedRuntimes.SequenceEqual(newRuntimeDescription.InheritedRuntimes)) - { - Log.LogError($"RuntimeGroup {runtimeGroup.BaseRID} defines RID {newRuntimeDescription.RuntimeIdentifier} with imports {string.Join(";", newRuntimeDescription.InheritedRuntimes)} which differ from existing imports {string.Join(";", existingRuntimeDescription.InheritedRuntimes)}. You may avoid this by specifying {nameof(RuntimeGroup.OmitRIDDefinitions)} metadata with {newRuntimeDescription.RuntimeIdentifier}."); - } - } - } - - return RuntimeGraph.Merge(existingGraph, runtimeGraph); - } - - private void ValidateImports(RuntimeGraph runtimeGraph, Dictionary externalRIDs) - { - foreach (var runtimeDescription in runtimeGraph.Runtimes.Values) - { - string externalRuntimeJson; - - if (externalRIDs.TryGetValue(runtimeDescription.RuntimeIdentifier, out externalRuntimeJson)) - { - Log.LogError($"Runtime {runtimeDescription.RuntimeIdentifier} is defined in both this RuntimeGraph and {externalRuntimeJson}."); - } - - foreach (var import in runtimeDescription.InheritedRuntimes) - { - if (!runtimeGraph.Runtimes.ContainsKey(import) && !externalRIDs.ContainsKey(import)) - { - Log.LogError($"Runtime {runtimeDescription.RuntimeIdentifier} imports {import} which is not defined."); - } - } - } - } - - private void AddRuntimeIdentifiers(ICollection runtimeGroups) - { - if (AdditionalRuntimeIdentifiers == null || AdditionalRuntimeIdentifiers.Length == 0) - { - return; - } - - RuntimeGroupCollection runtimeGroupCollection = new RuntimeGroupCollection(runtimeGroups); - - foreach (string additionalRuntimeIdentifier in AdditionalRuntimeIdentifiers) - { - runtimeGroupCollection.AddRuntimeIdentifier(additionalRuntimeIdentifier, AdditionalRuntimeIdentifierParent); - } - } - - private static Dictionary> GetCompatibilityMap(RuntimeGraph graph) - { - Dictionary> compatibilityMap = new Dictionary>(); - - foreach (var rid in graph.Runtimes.Keys.OrderBy(rid => rid, StringComparer.Ordinal)) - { - compatibilityMap.Add(rid, graph.ExpandRuntime(rid)); - } - - return compatibilityMap; - } - - private static IDictionary> ReadCompatibilityMap(string mapFile) - { - var serializer = new JsonSerializer(); - using (var file = File.OpenText(mapFile)) - using (var jsonTextReader = new JsonTextReader(file) { MaxDepth = null }) - { - return serializer.Deserialize>>(jsonTextReader); - } - } - - private static void WriteCompatibilityMap(Dictionary> compatibilityMap, string mapFile) - { - var serializer = new JsonSerializer() - { - Formatting = Formatting.Indented, - StringEscapeHandling = StringEscapeHandling.EscapeNonAscii - }; - - string directory = Path.GetDirectoryName(mapFile); - if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) - { - Directory.CreateDirectory(directory); - } - - using (var file = File.CreateText(mapFile)) - { - serializer.Serialize(file, compatibilityMap); - } - } - - private static bool CompatibilityMapEquals(IDictionary> left, Dictionary> right) - { - if (left.Count != right.Count) - { - return false; - } - - foreach (var leftPair in left) - { - IEnumerable rightValue; - - if (!right.TryGetValue(leftPair.Key, out rightValue)) - { - return false; - } - - if (!rightValue.SequenceEqual(leftPair.Value)) - { - return false; - } - } - - return true; - } - - private static readonly XNamespace s_dgmlns = @"http://schemas.microsoft.com/vs/2009/dgml"; - private static void WriteRuntimeGraph(RuntimeGraph graph, string dependencyGraphFilePath) - { - - var doc = new XDocument(new XElement(s_dgmlns + "DirectedGraph")); - var nodesElement = new XElement(s_dgmlns + "Nodes"); - var linksElement = new XElement(s_dgmlns + "Links"); - doc.Root.Add(nodesElement); - doc.Root.Add(linksElement); - - foreach (var runtimeDescription in graph.Runtimes.Values) - { - nodesElement.Add(new XElement(s_dgmlns + "Node", - new XAttribute("Id", runtimeDescription.RuntimeIdentifier))); - - foreach (var import in runtimeDescription.InheritedRuntimes) - { - linksElement.Add(new XElement(s_dgmlns + "Link", - new XAttribute("Source", runtimeDescription.RuntimeIdentifier), - new XAttribute("Target", import))); - } - } - - using (var file = File.Create(dependencyGraphFilePath)) - { - doc.Save(file); - } - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj b/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj index 86e98f21dbb1e..def7f1052e90b 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj +++ b/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj @@ -1,86 +1,62 @@ + $(NetCoreAppToolCurrent);$(NetFrameworkToolCurrent) - Microsoft.NETCore.Platforms.BuildTasks + true + false + true + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NET packages. + $(NoWarn);NU5128 - disable false false false false - false - - true - false - $(MSBuildProjectName) - true - Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. - $(NoWarn);NU5128 - true - - $(MSBuildProjectName) - UpdateRuntimeJson;$(BeforePack) <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' == 'core'">$(NetCoreAppToolCurrent) - <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' != 'core'">net472 + <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' != 'core'">$(NetFrameworkToolCurrent) <_generateRuntimeGraphTask>$([MSBuild]::NormalizePath('$(BaseOutputPath)', $(Configuration), '$(_generateRuntimeGraphTargetFramework)', '$(AssemblyName).dll')) - - $(AdditionalRuntimeIdentifiers);$(OutputRID) - - - - + + + - - - - - - - + - - - - + + + + + + + + - - - - - - - - - - - - - - + + + + + + + diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json b/src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json new file mode 100644 index 0000000000000..f6f7fbf597cfb --- /dev/null +++ b/src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json @@ -0,0 +1,475 @@ +{ + "runtimes": { + "android": { + "#import": [ + "linux-bionic" + ] + }, + "android-arm": { + "#import": [ + "android", + "linux-bionic-arm" + ] + }, + "android-arm64": { + "#import": [ + "android", + "linux-bionic-arm64" + ] + }, + "android-x64": { + "#import": [ + "android", + "linux-bionic-x64" + ] + }, + "android-x86": { + "#import": [ + "android", + "linux-bionic-x86" + ] + }, + "any": { + "#import": [ + "base" + ] + }, + "base": { + "#import": [] + }, + "browser": { + "#import": [ + "any" + ] + }, + "browser-wasm": { + "#import": [ + "browser" + ] + }, + "freebsd": { + "#import": [ + "unix" + ] + }, + "freebsd-arm64": { + "#import": [ + "freebsd", + "unix-arm64" + ] + }, + "freebsd-x64": { + "#import": [ + "freebsd", + "unix-x64" + ] + }, + "haiku": { + "#import": [ + "unix" + ] + }, + "haiku-x64": { + "#import": [ + "haiku", + "unix-x64" + ] + }, + "illumos": { + "#import": [ + "unix" + ] + }, + "illumos-x64": { + "#import": [ + "illumos", + "unix-x64" + ] + }, + "ios": { + "#import": [ + "unix" + ] + }, + "ios-arm": { + "#import": [ + "ios", + "unix-arm" + ] + }, + "ios-arm64": { + "#import": [ + "ios", + "unix-arm64" + ] + }, + "ios-x64": { + "#import": [ + "ios", + "unix-x64" + ] + }, + "ios-x86": { + "#import": [ + "ios", + "unix-x86" + ] + }, + "iossimulator": { + "#import": [ + "ios" + ] + }, + "iossimulator-arm64": { + "#import": [ + "iossimulator", + "ios-arm64" + ] + }, + "iossimulator-x64": { + "#import": [ + "iossimulator", + "ios-x64" + ] + }, + "iossimulator-x86": { + "#import": [ + "iossimulator", + "ios-x86" + ] + }, + "linux": { + "#import": [ + "unix" + ] + }, + "linux-arm": { + "#import": [ + "linux", + "unix-arm" + ] + }, + "linux-arm64": { + "#import": [ + "linux", + "unix-arm64" + ] + }, + "linux-armel": { + "#import": [ + "linux", + "unix-armel" + ] + }, + "linux-armv6": { + "#import": [ + "linux", + "unix-armv6" + ] + }, + "linux-bionic": { + "#import": [ + "linux" + ] + }, + "linux-bionic-arm": { + "#import": [ + "linux-bionic", + "linux-arm" + ] + }, + "linux-bionic-arm64": { + "#import": [ + "linux-bionic", + "linux-arm64" + ] + }, + "linux-bionic-x64": { + "#import": [ + "linux-bionic", + "linux-x64" + ] + }, + "linux-bionic-x86": { + "#import": [ + "linux-bionic", + "linux-x86" + ] + }, + "linux-loongarch64": { + "#import": [ + "linux", + "unix-loongarch64" + ] + }, + "linux-mips64": { + "#import": [ + "linux", + "unix-mips64" + ] + }, + "linux-musl": { + "#import": [ + "linux" + ] + }, + "linux-musl-arm": { + "#import": [ + "linux-musl", + "linux-arm" + ] + }, + "linux-musl-arm64": { + "#import": [ + "linux-musl", + "linux-arm64" + ] + }, + "linux-musl-armel": { + "#import": [ + "linux-musl", + "linux-armel" + ] + }, + "linux-musl-armv6": { + "#import": [ + "linux-musl", + "linux-armv6" + ] + }, + "linux-musl-ppc64le": { + "#import": [ + "linux-musl", + "linux-ppc64le" + ] + }, + "linux-musl-riscv64": { + "#import": [ + "linux-musl", + "linux-riscv64" + ] + }, + "linux-musl-s390x": { + "#import": [ + "linux-musl", + "linux-s390x" + ] + }, + "linux-musl-x64": { + "#import": [ + "linux-musl", + "linux-x64" + ] + }, + "linux-musl-x86": { + "#import": [ + "linux-musl", + "linux-x86" + ] + }, + "linux-ppc64le": { + "#import": [ + "linux", + "unix-ppc64le" + ] + }, + "linux-riscv64": { + "#import": [ + "linux", + "unix-riscv64" + ] + }, + "linux-s390x": { + "#import": [ + "linux", + "unix-s390x" + ] + }, + "linux-x64": { + "#import": [ + "linux", + "unix-x64" + ] + }, + "linux-x86": { + "#import": [ + "linux", + "unix-x86" + ] + }, + "maccatalyst": { + "#import": [ + "ios" + ] + }, + "maccatalyst-arm64": { + "#import": [ + "maccatalyst", + "ios-arm64" + ] + }, + "maccatalyst-x64": { + "#import": [ + "maccatalyst", + "ios-x64" + ] + }, + "osx": { + "#import": [ + "unix" + ] + }, + "osx-arm64": { + "#import": [ + "osx", + "unix-arm64" + ] + }, + "osx-x64": { + "#import": [ + "osx", + "unix-x64" + ] + }, + "solaris": { + "#import": [ + "unix" + ] + }, + "solaris-x64": { + "#import": [ + "solaris", + "unix-x64" + ] + }, + "tvos": { + "#import": [ + "unix" + ] + }, + "tvos-arm64": { + "#import": [ + "tvos", + "unix-arm64" + ] + }, + "tvos-x64": { + "#import": [ + "tvos", + "unix-x64" + ] + }, + "tvossimulator": { + "#import": [ + "tvos" + ] + }, + "tvossimulator-arm64": { + "#import": [ + "tvossimulator", + "tvos-arm64" + ] + }, + "tvossimulator-x64": { + "#import": [ + "tvossimulator", + "tvos-x64" + ] + }, + "unix": { + "#import": [ + "any" + ] + }, + "unix-arm": { + "#import": [ + "unix" + ] + }, + "unix-arm64": { + "#import": [ + "unix" + ] + }, + "unix-armel": { + "#import": [ + "unix" + ] + }, + "unix-armv6": { + "#import": [ + "unix" + ] + }, + "unix-loongarch64": { + "#import": [ + "unix" + ] + }, + "unix-mips64": { + "#import": [ + "unix" + ] + }, + "unix-ppc64le": { + "#import": [ + "unix" + ] + }, + "unix-riscv64": { + "#import": [ + "unix" + ] + }, + "unix-s390x": { + "#import": [ + "unix" + ] + }, + "unix-x64": { + "#import": [ + "unix" + ] + }, + "unix-x86": { + "#import": [ + "unix" + ] + }, + "wasi": { + "#import": [ + "any" + ] + }, + "wasi-wasm": { + "#import": [ + "wasi" + ] + }, + "win": { + "#import": [ + "any" + ] + }, + "win-arm": { + "#import": [ + "win" + ] + }, + "win-arm64": { + "#import": [ + "win" + ] + }, + "win-x64": { + "#import": [ + "win" + ] + }, + "win-x86": { + "#import": [ + "win" + ] + } + } + } \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs deleted file mode 100644 index b464d5f0f54e3..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs +++ /dev/null @@ -1,208 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Diagnostics; -using System.Text; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class RID - { - internal const char VersionDelimiter = '.'; - internal const char ArchitectureDelimiter = '-'; - internal const char QualifierDelimiter = '-'; - - public string BaseRID { get; set; } - public bool OmitVersionDelimiter { get; set; } - public RuntimeVersion Version { get; set; } - public string Architecture { get; set; } - public string Qualifier { get; set; } - - public override string ToString() - { - StringBuilder builder = new StringBuilder(BaseRID); - - if (HasVersion) - { - if (!OmitVersionDelimiter) - { - builder.Append(VersionDelimiter); - } - builder.Append(Version); - } - - if (HasArchitecture) - { - builder.Append(ArchitectureDelimiter); - builder.Append(Architecture); - } - - if (HasQualifier) - { - builder.Append(QualifierDelimiter); - builder.Append(Qualifier); - } - - return builder.ToString(); - } - - private enum RIDPart : int - { - Base = 0, - Version, - Architecture, - Qualifier, - Max = Qualifier - } - - public static RID Parse(string runtimeIdentifier, bool noQualifier) - { - string[] parts = new string[(int)RIDPart.Max + 1]; - bool omitVersionDelimiter = true; - RIDPart parseState = RIDPart.Base; - - int partStart = 0, partLength; - - // qualifier is indistinguishable from arch so we cannot distinguish it for parsing purposes - Debug.Assert(ArchitectureDelimiter == QualifierDelimiter); - - for (int i = 0; i < runtimeIdentifier.Length; i++) - { - char current = runtimeIdentifier[i]; - partLength = i - partStart; - - switch (parseState) - { - case RIDPart.Base: - // treat any number as the start of the version - if (current == VersionDelimiter || (current >= '0' && current <= '9')) - { - SetPart(); - partStart = i; - if (current == VersionDelimiter) - { - omitVersionDelimiter = false; - partStart = i + 1; - } - parseState = RIDPart.Version; - } - // version might be omitted - else if (current == ArchitectureDelimiter) - { - // The qualifier delimiter and architecture delimiter are the same. - // When there is no qualifier, there will be one delimiter past the base part - // for the architecture. - // So if we see another delimiter later in the string (for the architecture), - // extend the base part instead of starting the architecture part. - if (noQualifier && runtimeIdentifier.IndexOf(ArchitectureDelimiter, i + 1) != -1) - { - break; - } - // ensure there's no version later in the string - if (runtimeIdentifier.IndexOf(VersionDelimiter, i) != -1) - { - break; - } - SetPart(); - partStart = i + 1; // skip delimiter - parseState = RIDPart.Architecture; - } - break; - case RIDPart.Version: - if (current == ArchitectureDelimiter) - { - SetPart(); - partStart = i + 1; // skip delimiter - parseState = RIDPart.Architecture; - } - break; - case RIDPart.Architecture: - if (current == QualifierDelimiter) - { - SetPart(); - partStart = i + 1; // skip delimiter - parseState = RIDPart.Qualifier; - } - break; - default: - break; - } - } - - partLength = runtimeIdentifier.Length - partStart; - if (partLength > 0) - { - SetPart(); - } - - string GetPart(RIDPart part) - { - return parts[(int)part]; - } - - void SetPart() - { - if (partLength == 0) - { - throw new ArgumentException($"Unexpected delimiter at position {partStart} in \"{runtimeIdentifier}\""); - } - - parts[(int)parseState] = runtimeIdentifier.Substring(partStart, partLength); - } - - string version = GetPart(RIDPart.Version); - - if (version == null) - { - omitVersionDelimiter = false; - } - - return new RID() - { - BaseRID = GetPart(RIDPart.Base), - OmitVersionDelimiter = omitVersionDelimiter, - Version = version == null ? null : new RuntimeVersion(version), - Architecture = GetPart(RIDPart.Architecture), - Qualifier = GetPart(RIDPart.Qualifier) - }; - } - - public bool HasVersion => Version != null; - - public bool HasArchitecture => Architecture != null; - - public bool HasQualifier => Qualifier != null; - - public override bool Equals(object obj) - { - return Equals(obj as RID); - } - - public bool Equals(RID obj) - { - return object.ReferenceEquals(obj, this) || - (obj is not null && - BaseRID == obj.BaseRID && - (Version == null || OmitVersionDelimiter == obj.OmitVersionDelimiter) && - Version == obj.Version && - Architecture == obj.Architecture && - Qualifier == obj.Qualifier); - - } - - public override int GetHashCode() - { -#if NETFRAMEWORK - return BaseRID.GetHashCode(); -#else - HashCode hashCode = default; - hashCode.Add(BaseRID); - hashCode.Add(Version); - hashCode.Add(Architecture); - hashCode.Add(Qualifier); - return hashCode.ToHashCode(); -#endif - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs deleted file mode 100644 index 9d5c169cb526d..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs +++ /dev/null @@ -1,298 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using NuGet.RuntimeModel; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class RuntimeGroup - { - private const string rootRID = "any"; - - public RuntimeGroup(ITaskItem item) - { - BaseRID = item.ItemSpec; - Parent = item.GetString(nameof(Parent)); - Versions = new HashSet(item.GetStrings(nameof(Versions)).Select(v => new RuntimeVersion(v))); - TreatVersionsAsCompatible = item.GetBoolean(nameof(TreatVersionsAsCompatible), true); - OmitVersionDelimiter = item.GetBoolean(nameof(OmitVersionDelimiter)); - ApplyVersionsToParent = item.GetBoolean(nameof(ApplyVersionsToParent)); - Architectures = new HashSet(item.GetStrings(nameof(Architectures))); - AdditionalQualifiers = new HashSet(item.GetStrings(nameof(AdditionalQualifiers))); - OmitRIDs = new HashSet(item.GetStrings(nameof(OmitRIDs))); - OmitRIDDefinitions = new HashSet(item.GetStrings(nameof(OmitRIDDefinitions))); - OmitRIDReferences = new HashSet(item.GetStrings(nameof(OmitRIDReferences))); - } - - public RuntimeGroup(string baseRID, string parent, bool treatVersionsAsCompatible = true, bool omitVersionDelimiter = false, bool applyVersionsToParent = false, IEnumerable additionalQualifiers = null) - { - BaseRID = baseRID; - Parent = parent; - Versions = new HashSet(); - TreatVersionsAsCompatible = treatVersionsAsCompatible; - OmitVersionDelimiter = omitVersionDelimiter; - ApplyVersionsToParent = applyVersionsToParent; - Architectures = new HashSet(); - AdditionalQualifiers = new HashSet(additionalQualifiers.NullAsEmpty()); - OmitRIDs = new HashSet(); - OmitRIDDefinitions = new HashSet(); - OmitRIDReferences = new HashSet(); - } - - public string BaseRID { get; } - public string Parent { get; } - public ICollection Versions { get; } - public bool TreatVersionsAsCompatible { get; } - public bool OmitVersionDelimiter { get; } - public bool ApplyVersionsToParent { get; } - public ICollection Architectures { get; } - public ICollection AdditionalQualifiers { get; } - public ICollection OmitRIDs { get; } - public ICollection OmitRIDDefinitions { get; } - public ICollection OmitRIDReferences { get; } - - public void ApplyRid(RID rid) - { - if (!rid.BaseRID.Equals(BaseRID, StringComparison.Ordinal)) - { - throw new ArgumentException($"Cannot apply {nameof(RID)} with {nameof(RID.BaseRID)} {rid.BaseRID} to {nameof(RuntimeGroup)} with {nameof(RuntimeGroup.BaseRID)} {BaseRID}.", nameof(rid)); - } - - if (rid.HasArchitecture) - { - Architectures.Add(rid.Architecture); - } - - if (rid.HasVersion) - { - Versions.Add(rid.Version); - } - - if (rid.HasQualifier) - { - AdditionalQualifiers.Add(rid.Qualifier); - } - } - - internal sealed class RIDMapping - { - public RIDMapping(RID runtimeIdentifier) - { - RuntimeIdentifier = runtimeIdentifier; - Imports = Enumerable.Empty(); - } - - public RIDMapping(RID runtimeIdentifier, IEnumerable imports) - { - RuntimeIdentifier = runtimeIdentifier; - Imports = imports; - } - - public RID RuntimeIdentifier { get; } - - public IEnumerable Imports { get; } - } - - - internal RID CreateRuntime(string baseRid, RuntimeVersion version = null, string architecture = null, string qualifier = null) - { - return new RID() - { - BaseRID = baseRid, - Version = version, - OmitVersionDelimiter = OmitVersionDelimiter, - Architecture = architecture, - Qualifier = qualifier - }; - } - - internal IEnumerable GetRIDMappings() - { - // base => - // Parent - yield return Parent == null ? - new RIDMapping(CreateRuntime(BaseRID)) : - new RIDMapping(CreateRuntime(BaseRID), new[] { CreateRuntime(Parent) }); - - foreach (var architecture in Architectures) - { - // base + arch => - // base, - // parent + arch - var imports = new List() - { - CreateRuntime(BaseRID) - }; - - if (!IsNullOrRoot(Parent)) - { - imports.Add(CreateRuntime(Parent, architecture: architecture)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, architecture: architecture), imports); - } - - RuntimeVersion lastVersion = null; - foreach (var version in Versions) - { - // base + version => - // base + lastVersion, - // parent + version (optionally) - var imports = new List() - { - CreateRuntime(BaseRID, version: lastVersion) - }; - - if (ApplyVersionsToParent) - { - imports.Add(CreateRuntime(Parent, version: version)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version), imports); - - foreach (var architecture in Architectures) - { - // base + version + architecture => - // base + version, - // base + lastVersion + architecture, - // parent + version + architecture (optionally) - var archImports = new List() - { - CreateRuntime(BaseRID, version: version), - CreateRuntime(BaseRID, version: lastVersion, architecture: architecture) - }; - - if (ApplyVersionsToParent) - { - archImports.Add(CreateRuntime(Parent, version: version, architecture: architecture)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version, architecture: architecture), archImports); - } - - if (TreatVersionsAsCompatible) - { - lastVersion = version; - } - } - - foreach (var qualifier in AdditionalQualifiers) - { - // base + qual => - // base, - // parent + qual - yield return new RIDMapping(CreateRuntime(BaseRID, qualifier: qualifier), - new[] - { - CreateRuntime(BaseRID), - IsNullOrRoot(Parent) ? CreateRuntime(qualifier) : CreateRuntime(Parent, qualifier:qualifier) - }); - - foreach (var architecture in Architectures) - { - // base + arch + qualifier => - // base + qualifier, - // base + arch - // parent + arch + qualifier - var imports = new List() - { - CreateRuntime(BaseRID, qualifier: qualifier), - CreateRuntime(BaseRID, architecture: architecture) - }; - - if (!IsNullOrRoot(Parent)) - { - imports.Add(CreateRuntime(Parent, architecture: architecture, qualifier: qualifier)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, architecture: architecture, qualifier: qualifier), imports); - } - - lastVersion = null; - foreach (var version in Versions) - { - // base + version + qualifier => - // base + version, - // base + lastVersion + qualifier - // parent + version + qualifier (optionally) - var imports = new List() - { - CreateRuntime(BaseRID, version: version), - CreateRuntime(BaseRID, version: lastVersion, qualifier: qualifier) - }; - - if (ApplyVersionsToParent) - { - imports.Add(CreateRuntime(Parent, version: version, qualifier: qualifier)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version, qualifier: qualifier), imports); - - foreach (var architecture in Architectures) - { - // base + version + architecture + qualifier => - // base + version + qualifier, - // base + version + architecture, - // base + version, - // base + lastVersion + architecture + qualifier, - // parent + version + architecture + qualifier (optionally) - var archImports = new List() - { - CreateRuntime(BaseRID, version: version, qualifier: qualifier), - CreateRuntime(BaseRID, version: version, architecture: architecture), - CreateRuntime(BaseRID, version: version), - CreateRuntime(BaseRID, version: lastVersion, architecture: architecture, qualifier: qualifier) - }; - - if (ApplyVersionsToParent) - { - imports.Add(CreateRuntime(Parent, version: version, architecture: architecture, qualifier: qualifier)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version, architecture: architecture, qualifier: qualifier), archImports); - } - - if (TreatVersionsAsCompatible) - { - lastVersion = version; - } - } - } - } - - private static bool IsNullOrRoot(string rid) - { - return rid == null || rid == rootRID; - } - - - public IEnumerable GetRuntimeDescriptions() - { - foreach (var mapping in GetRIDMappings()) - { - var rid = mapping.RuntimeIdentifier.ToString(); - - if (OmitRIDs.Contains(rid) || OmitRIDDefinitions.Contains(rid)) - { - continue; - } - - var imports = mapping.Imports - .Select(i => i.ToString()) - .Where(i => !OmitRIDs.Contains(i) && !OmitRIDReferences.Contains(i)) - .ToArray(); - - yield return new RuntimeDescription(rid, imports); - } - } - - public RuntimeGraph GetRuntimeGraph() - { - return new RuntimeGraph(GetRuntimeDescriptions()); - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs deleted file mode 100644 index ec4762d71424c..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs +++ /dev/null @@ -1,160 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using NuGet.RuntimeModel; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class RuntimeGroupCollection - { - private readonly ICollection allRuntimeGroups; - private readonly Dictionary> runtimeGroupsByBaseRID; - private readonly HashSet knownRIDs; - - public RuntimeGroupCollection(ICollection runtimeGroups) - { - allRuntimeGroups = runtimeGroups; - runtimeGroupsByBaseRID = runtimeGroups.GroupBy(rg => rg.BaseRID).ToDictionary(g => g.Key, g => new List(g.AsEnumerable())); - - knownRIDs = new HashSet(allRuntimeGroups.SelectMany(rg => rg.GetRIDMappings()).Select(mapping => mapping.RuntimeIdentifier)); - } - - /// - /// Locate an existing RuntimeGroup to append to. - /// Existing group must have matching baseRID, then we choose based on closest version, - /// and prefer matching arch and qualifier. - /// If no match is found, then a new RID hierarchy is created. - /// - /// - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { - // don't parse qualifier since we don't use them and they are ambiguous with `-` in base RID - RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); - } - - public void AddRuntimeIdentifier(RID rid, string parent) - { - // Do nothing if we already know about the RID - if (knownRIDs.Contains(rid)) - { - return; - } - - RuntimeGroup runtimeGroup = null; - - if (runtimeGroupsByBaseRID.TryGetValue(rid.BaseRID, out var candidateRuntimeGroups)) - { - RuntimeVersion closestVersion = null; - - foreach (var candidate in candidateRuntimeGroups) - { - if (rid.HasVersion) - { - // Find the closest previous version - foreach (var version in candidate.Versions) - { - // a previous version - if (version <= rid.Version) - { - // haven't yet found a match or this is a closer match - if (closestVersion == null || version > closestVersion) - { - closestVersion = version; - runtimeGroup = candidate; - } - else if (version == closestVersion) - { - // found a tie in version, examine other fields - considerCandidate(); - } - } - } - } - - // if we don't have a version, or if we couldn't find any match, consider other fields - if (!rid.HasVersion) - { - considerCandidate(); - } - - // if we don't have a match yet, take this as it matches on baseRID - runtimeGroup ??= candidate; - - void considerCandidate() - { - // is this a better match? - if (!rid.HasArchitecture || candidate.Architectures.Contains(rid.Architecture)) - { - if (!rid.HasQualifier || candidate.AdditionalQualifiers.Contains(rid.Qualifier)) - { - // matched on arch and qualifier. - runtimeGroup = candidate; - } - else if (rid.HasArchitecture && !runtimeGroup.Architectures.Contains(rid.Architecture)) - { - // matched only on arch and existing match doesn't match arch - runtimeGroup = candidate; - } - } - } - } - - Debug.Assert(runtimeGroup != null, "Empty candidates?"); - } - else - { - // This is an unknown base RID, we'll need to add a new group. - if (string.IsNullOrEmpty(parent)) - { - throw new InvalidOperationException($"AdditionalRuntimeIdentifier {rid} was specified, which could not be found in any existing {nameof(RuntimeGroup)}, and no {nameof(parent)} was specified."); - } - - runtimeGroup = new RuntimeGroup(rid.BaseRID, parent); - - AddRuntimeGroup(runtimeGroup); - } - - runtimeGroup.ApplyRid(rid); - - // Compute the portion of the RID graph produced from this modified RuntimeGroup - var ridMappings = runtimeGroup.GetRIDMappings(); - - // Record any newly defined RIDs in our set of known RIDs - foreach (RID definedRID in ridMappings.Select(mapping => mapping.RuntimeIdentifier)) - { - knownRIDs.Add(definedRID); - } - - // Make sure that any RID imported is added as well. This allows users to specify - // a single new RID and we'll add any new RIDs up the parent chain that might be needed. - foreach (RID importedRID in ridMappings.SelectMany(mapping => mapping.Imports)) - { - // This should not introduce any new RuntimeGroups, so we specify parent as null - AddRuntimeIdentifier(importedRID, null); - } - - } - - private void AddRuntimeGroup(RuntimeGroup runtimeGroup) - { - List baseRuntimeGroups; - - if (!runtimeGroupsByBaseRID.TryGetValue(runtimeGroup.BaseRID, out baseRuntimeGroups)) - { - runtimeGroupsByBaseRID[runtimeGroup.BaseRID] = baseRuntimeGroups = new List(); - } - - baseRuntimeGroups.Add(runtimeGroup); - allRuntimeGroups.Add(runtimeGroup); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs deleted file mode 100644 index ca7b1dbd47406..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs +++ /dev/null @@ -1,140 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - - /// - /// A Version class that also supports a single integer (major only) - /// - public sealed class RuntimeVersion : IComparable, IComparable, IEquatable - { - private readonly string versionString; - private readonly Version version; - private readonly bool hasMinor; - - public RuntimeVersion(string versionString) - { - // intentionally don't support the type of version that omits the separators as it is abiguous. - // for example Windows 8.1 was encoded as win81, where as Windows 10.0 was encoded as win10 - this.versionString = versionString; - string toParse = versionString; -#if NETCOREAPP - if (!toParse.Contains('.')) -#else - if (toParse.IndexOf('.') == -1) -#endif - { - toParse += ".0"; - hasMinor = false; - } - else - { - hasMinor = true; - } - version = Version.Parse(toParse); - } - - public int CompareTo(object obj) - { - if (obj == null) - { - return 1; - } - - if (obj is RuntimeVersion version) - { - return CompareTo(version); - } - - throw new ArgumentException($"Cannot compare {nameof(RuntimeVersion)} to object of type {obj.GetType()}.", nameof(obj)); - } - - public int CompareTo(RuntimeVersion other) - { - if (other == null) - { - return 1; - } - - int versionResult = version.CompareTo(other?.version); - - if (versionResult == 0) - { - if (!hasMinor && other.hasMinor) - { - return -1; - } - - if (hasMinor && !other.hasMinor) - { - return 1; - } - - return string.CompareOrdinal(versionString, other.versionString); - } - - return versionResult; - } - - public bool Equals(RuntimeVersion other) - { - return object.ReferenceEquals(other, this) || - (other != null && - versionString.Equals(other.versionString, StringComparison.Ordinal)); - } - - public override bool Equals(object obj) - { - return Equals(obj as RuntimeVersion); - } - - public override int GetHashCode() - { - return versionString.GetHashCode(); - } - - public override string ToString() - { - return versionString; - } - - public static bool operator ==(RuntimeVersion v1, RuntimeVersion v2) - { - if (v2 is null) - { - return (v1 is null) ? true : false; - } - - return ReferenceEquals(v2, v1) ? true : v2.Equals(v1); - } - - public static bool operator !=(RuntimeVersion v1, RuntimeVersion v2) => !(v1 == v2); - - public static bool operator <(RuntimeVersion v1, RuntimeVersion v2) - { - if (v1 is null) - { - return !(v2 is null); - } - - return v1.CompareTo(v2) < 0; - } - - public static bool operator <=(RuntimeVersion v1, RuntimeVersion v2) - { - if (v1 is null) - { - return true; - } - - return v1.CompareTo(v2) <= 0; - } - - public static bool operator >(RuntimeVersion v1, RuntimeVersion v2) => v2 < v1; - - public static bool operator >=(RuntimeVersion v1, RuntimeVersion v2) => v2 <= v1; - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs b/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs new file mode 100644 index 0000000000000..a60051084135f --- /dev/null +++ b/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs @@ -0,0 +1,48 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.IO; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace Microsoft.NETCore.Platforms +{ + public class UpdateRuntimeIdentifierGraph : Task + { + [Required] + public string? InputFile { get; set; } + + [Required] + public string? OutputFile { get; set; } + + // ItemSpec should be a RID, and "Imports" metadata should be a semicolon-separated list of RIDs that the ItemSpec RID imports + [Required] + public ITaskItem[]? AdditionalRuntimeIdentifiers { get; set; } + + public override bool Execute() + { + JToken json; + + using (StreamReader streamReader = File.OpenText(InputFile!)) + using (JsonTextReader jsonReader = new JsonTextReader(streamReader)) + { + json = JObject.ReadFrom(jsonReader); + } + + JObject runtimes = (JObject)json["runtimes"]!; + foreach (ITaskItem rid in AdditionalRuntimeIdentifiers!) + { + string[] importedRids = rid.GetMetadata("Imports").Split(';'); + runtimes.Add(rid.ItemSpec, new JObject(new JProperty("#import", new JArray(importedRids)))); + } + + using StreamWriter streamWriter = File.CreateText(OutputFile!); + using JsonTextWriter jsonWriter = new(streamWriter) { Formatting = Formatting.Indented }; + json.WriteTo(jsonWriter); + + return true; + } + } +} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json deleted file mode 100644 index 085cb7b518ff7..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json +++ /dev/null @@ -1,11768 +0,0 @@ -{ - "alpine": [ - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine-arm": [ - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine-arm64": [ - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine-armv6": [ - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine-ppc64le": [ - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine-s390x": [ - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine-x64": [ - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine-x86": [ - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.10": [ - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.10-arm": [ - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.10-arm64": [ - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.10-armv6": [ - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.10-ppc64le": [ - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.10-s390x": [ - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.10-x64": [ - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.10-x86": [ - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.11": [ - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.11-arm": [ - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.11-arm64": [ - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.11-armv6": [ - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.11-ppc64le": [ - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.11-s390x": [ - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.11-x64": [ - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.11-x86": [ - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.12": [ - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.12-arm": [ - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.12-arm64": [ - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.12-armv6": [ - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.12-ppc64le": [ - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.12-s390x": [ - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.12-x64": [ - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.12-x86": [ - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.13": [ - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.13-arm": [ - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.13-arm64": [ - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.13-armv6": [ - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.13-ppc64le": [ - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.13-s390x": [ - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.13-x64": [ - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.13-x86": [ - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.14": [ - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.14-arm": [ - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.14-arm64": [ - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.14-armv6": [ - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.14-ppc64le": [ - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.14-s390x": [ - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.14-x64": [ - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.14-x86": [ - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.15": [ - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.15-arm": [ - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.15-arm64": [ - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.15-armv6": [ - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.15-ppc64le": [ - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.15-s390x": [ - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.15-x64": [ - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.15-x86": [ - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.16": [ - "alpine.3.16", - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.16-arm": [ - "alpine.3.16-arm", - "alpine.3.16", - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.16-arm64": [ - "alpine.3.16-arm64", - "alpine.3.16", - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.16-armv6": [ - "alpine.3.16-armv6", - "alpine.3.16", - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.16-ppc64le": [ - "alpine.3.16-ppc64le", - "alpine.3.16", - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.16-s390x": [ - "alpine.3.16-s390x", - "alpine.3.16", - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.16-x64": [ - "alpine.3.16-x64", - "alpine.3.16", - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.16-x86": [ - "alpine.3.16-x86", - "alpine.3.16", - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.17": [ - "alpine.3.17", - "alpine.3.16", - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.17-arm": [ - "alpine.3.17-arm", - "alpine.3.17", - "alpine.3.16-arm", - "alpine.3.16", - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.17-arm64": [ - "alpine.3.17-arm64", - "alpine.3.17", - "alpine.3.16-arm64", - "alpine.3.16", - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.17-armv6": [ - "alpine.3.17-armv6", - "alpine.3.17", - "alpine.3.16-armv6", - "alpine.3.16", - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.17-ppc64le": [ - "alpine.3.17-ppc64le", - "alpine.3.17", - "alpine.3.16-ppc64le", - "alpine.3.16", - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.17-s390x": [ - "alpine.3.17-s390x", - "alpine.3.17", - "alpine.3.16-s390x", - "alpine.3.16", - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.17-x64": [ - "alpine.3.17-x64", - "alpine.3.17", - "alpine.3.16-x64", - "alpine.3.16", - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.17-x86": [ - "alpine.3.17-x86", - "alpine.3.17", - "alpine.3.16-x86", - "alpine.3.16", - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.18": [ - "alpine.3.18", - "alpine.3.17", - "alpine.3.16", - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.18-arm": [ - "alpine.3.18-arm", - "alpine.3.18", - "alpine.3.17-arm", - "alpine.3.17", - "alpine.3.16-arm", - "alpine.3.16", - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.18-arm64": [ - "alpine.3.18-arm64", - "alpine.3.18", - "alpine.3.17-arm64", - "alpine.3.17", - "alpine.3.16-arm64", - "alpine.3.16", - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.18-armv6": [ - "alpine.3.18-armv6", - "alpine.3.18", - "alpine.3.17-armv6", - "alpine.3.17", - "alpine.3.16-armv6", - "alpine.3.16", - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.18-ppc64le": [ - "alpine.3.18-ppc64le", - "alpine.3.18", - "alpine.3.17-ppc64le", - "alpine.3.17", - "alpine.3.16-ppc64le", - "alpine.3.16", - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.18-s390x": [ - "alpine.3.18-s390x", - "alpine.3.18", - "alpine.3.17-s390x", - "alpine.3.17", - "alpine.3.16-s390x", - "alpine.3.16", - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.18-x64": [ - "alpine.3.18-x64", - "alpine.3.18", - "alpine.3.17-x64", - "alpine.3.17", - "alpine.3.16-x64", - "alpine.3.16", - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.18-x86": [ - "alpine.3.18-x86", - "alpine.3.18", - "alpine.3.17-x86", - "alpine.3.17", - "alpine.3.16-x86", - "alpine.3.16", - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.6": [ - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.6-arm": [ - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.6-arm64": [ - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.6-armv6": [ - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.6-ppc64le": [ - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.6-s390x": [ - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.6-x64": [ - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.6-x86": [ - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.7": [ - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.7-arm": [ - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.7-arm64": [ - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.7-armv6": [ - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.7-ppc64le": [ - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.7-s390x": [ - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.7-x64": [ - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.7-x86": [ - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.8": [ - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.8-arm": [ - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.8-arm64": [ - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.8-armv6": [ - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.8-ppc64le": [ - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.8-s390x": [ - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.8-x64": [ - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.8-x86": [ - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.9": [ - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.9-arm": [ - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.9-arm64": [ - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.9-armv6": [ - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.9-ppc64le": [ - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.9-s390x": [ - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.9-x64": [ - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.9-x86": [ - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android": [ - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android-arm": [ - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android-arm64": [ - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android-x64": [ - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android-x86": [ - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.21": [ - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.21-arm": [ - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.21-arm64": [ - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.21-x64": [ - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.21-x86": [ - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.22": [ - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.22-arm": [ - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.22-arm64": [ - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.22-x64": [ - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.22-x86": [ - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.23": [ - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.23-arm": [ - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.23-arm64": [ - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.23-x64": [ - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.23-x86": [ - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.24": [ - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.24-arm": [ - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.24-arm64": [ - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.24-x64": [ - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.24-x86": [ - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.25": [ - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.25-arm": [ - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.25-arm64": [ - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.25-x64": [ - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.25-x86": [ - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.26": [ - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.26-arm": [ - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.26-arm64": [ - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.26-x64": [ - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.26-x86": [ - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.27": [ - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.27-arm": [ - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.27-arm64": [ - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.27-x64": [ - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.27-x86": [ - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.28": [ - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.28-arm": [ - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.28-arm64": [ - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.28-x64": [ - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.28-x86": [ - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.29": [ - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.29-arm": [ - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.29-arm64": [ - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.29-x64": [ - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.29-x86": [ - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.30": [ - "android.30", - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.30-arm": [ - "android.30-arm", - "android.30", - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.30-arm64": [ - "android.30-arm64", - "android.30", - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.30-x64": [ - "android.30-x64", - "android.30", - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.30-x86": [ - "android.30-x86", - "android.30", - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.31": [ - "android.31", - "android.30", - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.31-arm": [ - "android.31-arm", - "android.31", - "android.30-arm", - "android.30", - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.31-arm64": [ - "android.31-arm64", - "android.31", - "android.30-arm64", - "android.30", - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.31-x64": [ - "android.31-x64", - "android.31", - "android.30-x64", - "android.30", - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.31-x86": [ - "android.31-x86", - "android.31", - "android.30-x86", - "android.30", - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.32": [ - "android.32", - "android.31", - "android.30", - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.32-arm": [ - "android.32-arm", - "android.32", - "android.31-arm", - "android.31", - "android.30-arm", - "android.30", - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.32-arm64": [ - "android.32-arm64", - "android.32", - "android.31-arm64", - "android.31", - "android.30-arm64", - "android.30", - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.32-x64": [ - "android.32-x64", - "android.32", - "android.31-x64", - "android.31", - "android.30-x64", - "android.30", - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.32-x86": [ - "android.32-x86", - "android.32", - "android.31-x86", - "android.31", - "android.30-x86", - "android.30", - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "any": [ - "any", - "base" - ], - "aot": [ - "aot", - "any", - "base" - ], - "arch": [ - "arch", - "linux", - "unix", - "any", - "base" - ], - "arch-x64": [ - "arch-x64", - "arch", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "base": [ - "base" - ], - "browser": [ - "browser", - "any", - "base" - ], - "browser-wasm": [ - "browser-wasm", - "browser", - "any", - "base" - ], - "centos": [ - "centos", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos-arm64": [ - "centos-arm64", - "centos", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "centos-x64": [ - "centos-x64", - "centos", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "centos.7": [ - "centos.7", - "centos", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos.7-x64": [ - "centos.7-x64", - "centos.7", - "centos-x64", - "rhel.7-x64", - "centos", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "centos.8": [ - "centos.8", - "centos", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos.8-arm64": [ - "centos.8-arm64", - "centos.8", - "centos-arm64", - "rhel.8-arm64", - "centos", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "centos.8-x64": [ - "centos.8-x64", - "centos.8", - "centos-x64", - "rhel.8-x64", - "centos", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "centos.9": [ - "centos.9", - "centos", - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos.9-arm64": [ - "centos.9-arm64", - "centos.9", - "centos-arm64", - "rhel.9-arm64", - "centos", - "rhel.9", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "centos.9-x64": [ - "centos.9-x64", - "centos.9", - "centos-x64", - "rhel.9-x64", - "centos", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian": [ - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian-arm": [ - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian-arm64": [ - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian-armel": [ - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian-x64": [ - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian-x86": [ - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.10": [ - "debian.10", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.10-arm": [ - "debian.10-arm", - "debian.10", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.10-arm64": [ - "debian.10-arm64", - "debian.10", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.10-armel": [ - "debian.10-armel", - "debian.10", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.10-x64": [ - "debian.10-x64", - "debian.10", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.10-x86": [ - "debian.10-x86", - "debian.10", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.11": [ - "debian.11", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.11-arm": [ - "debian.11-arm", - "debian.11", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.11-arm64": [ - "debian.11-arm64", - "debian.11", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.11-armel": [ - "debian.11-armel", - "debian.11", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.11-x64": [ - "debian.11-x64", - "debian.11", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.11-x86": [ - "debian.11-x86", - "debian.11", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.12": [ - "debian.12", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.12-arm": [ - "debian.12-arm", - "debian.12", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.12-arm64": [ - "debian.12-arm64", - "debian.12", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.12-armel": [ - "debian.12-armel", - "debian.12", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.12-x64": [ - "debian.12-x64", - "debian.12", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.12-x86": [ - "debian.12-x86", - "debian.12", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.8": [ - "debian.8", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.8-arm": [ - "debian.8-arm", - "debian.8", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.8-arm64": [ - "debian.8-arm64", - "debian.8", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.8-armel": [ - "debian.8-armel", - "debian.8", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.8-x64": [ - "debian.8-x64", - "debian.8", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.8-x86": [ - "debian.8-x86", - "debian.8", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.9": [ - "debian.9", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.9-arm": [ - "debian.9-arm", - "debian.9", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.9-arm64": [ - "debian.9-arm64", - "debian.9", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.9-armel": [ - "debian.9-armel", - "debian.9", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.9-x64": [ - "debian.9-x64", - "debian.9", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.9-x86": [ - "debian.9-x86", - "debian.9", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "exherbo": [ - "exherbo", - "linux", - "unix", - "any", - "base" - ], - "exherbo-x64": [ - "exherbo-x64", - "exherbo", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora": [ - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora-arm64": [ - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora-x64": [ - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.23": [ - "fedora.23", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.23-arm64": [ - "fedora.23-arm64", - "fedora.23", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.23-x64": [ - "fedora.23-x64", - "fedora.23", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.24": [ - "fedora.24", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.24-arm64": [ - "fedora.24-arm64", - "fedora.24", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.24-x64": [ - "fedora.24-x64", - "fedora.24", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.25": [ - "fedora.25", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.25-arm64": [ - "fedora.25-arm64", - "fedora.25", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.25-x64": [ - "fedora.25-x64", - "fedora.25", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.26": [ - "fedora.26", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.26-arm64": [ - "fedora.26-arm64", - "fedora.26", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.26-x64": [ - "fedora.26-x64", - "fedora.26", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.27": [ - "fedora.27", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.27-arm64": [ - "fedora.27-arm64", - "fedora.27", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.27-x64": [ - "fedora.27-x64", - "fedora.27", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.28": [ - "fedora.28", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.28-arm64": [ - "fedora.28-arm64", - "fedora.28", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.28-x64": [ - "fedora.28-x64", - "fedora.28", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.29": [ - "fedora.29", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.29-arm64": [ - "fedora.29-arm64", - "fedora.29", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.29-x64": [ - "fedora.29-x64", - "fedora.29", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.30": [ - "fedora.30", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.30-arm64": [ - "fedora.30-arm64", - "fedora.30", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.30-x64": [ - "fedora.30-x64", - "fedora.30", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.31": [ - "fedora.31", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.31-arm64": [ - "fedora.31-arm64", - "fedora.31", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.31-x64": [ - "fedora.31-x64", - "fedora.31", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.32": [ - "fedora.32", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.32-arm64": [ - "fedora.32-arm64", - "fedora.32", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.32-x64": [ - "fedora.32-x64", - "fedora.32", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.33": [ - "fedora.33", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.33-arm64": [ - "fedora.33-arm64", - "fedora.33", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.33-x64": [ - "fedora.33-x64", - "fedora.33", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.34": [ - "fedora.34", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.34-arm64": [ - "fedora.34-arm64", - "fedora.34", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.34-x64": [ - "fedora.34-x64", - "fedora.34", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.35": [ - "fedora.35", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.35-arm64": [ - "fedora.35-arm64", - "fedora.35", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.35-x64": [ - "fedora.35-x64", - "fedora.35", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.36": [ - "fedora.36", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.36-arm64": [ - "fedora.36-arm64", - "fedora.36", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.36-x64": [ - "fedora.36-x64", - "fedora.36", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.37": [ - "fedora.37", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.37-arm64": [ - "fedora.37-arm64", - "fedora.37", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.37-x64": [ - "fedora.37-x64", - "fedora.37", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.38": [ - "fedora.38", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.38-arm64": [ - "fedora.38-arm64", - "fedora.38", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.38-x64": [ - "fedora.38-x64", - "fedora.38", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.39": [ - "fedora.39", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.39-arm64": [ - "fedora.39-arm64", - "fedora.39", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.39-x64": [ - "fedora.39-x64", - "fedora.39", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "freebsd": [ - "freebsd", - "unix", - "any", - "base" - ], - "freebsd-arm64": [ - "freebsd-arm64", - "freebsd", - "unix-arm64", - "unix", - "any", - "base" - ], - "freebsd-x64": [ - "freebsd-x64", - "freebsd", - "unix-x64", - "unix", - "any", - "base" - ], - "freebsd.12": [ - "freebsd.12", - "freebsd", - "unix", - "any", - "base" - ], - "freebsd.12-arm64": [ - "freebsd.12-arm64", - "freebsd.12", - "freebsd-arm64", - "freebsd", - "unix-arm64", - "unix", - "any", - "base" - ], - "freebsd.12-x64": [ - "freebsd.12-x64", - "freebsd.12", - "freebsd-x64", - "freebsd", - "unix-x64", - "unix", - "any", - "base" - ], - "freebsd.13": [ - "freebsd.13", - "freebsd.12", - "freebsd", - "unix", - "any", - "base" - ], - "freebsd.13-arm64": [ - "freebsd.13-arm64", - "freebsd.13", - "freebsd.12-arm64", - "freebsd.12", - "freebsd-arm64", - "freebsd", - "unix-arm64", - "unix", - "any", - "base" - ], - "freebsd.13-x64": [ - "freebsd.13-x64", - "freebsd.13", - "freebsd.12-x64", - "freebsd.12", - "freebsd-x64", - "freebsd", - "unix-x64", - "unix", - "any", - "base" - ], - "gentoo": [ - "gentoo", - "linux", - "unix", - "any", - "base" - ], - "gentoo-x64": [ - "gentoo-x64", - "gentoo", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "illumos": [ - "illumos", - "unix", - "any", - "base" - ], - "illumos-x64": [ - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "ios": [ - "ios", - "unix", - "any", - "base" - ], - "ios-arm": [ - "ios-arm", - "ios", - "unix-arm", - "unix", - "any", - "base" - ], - "ios-arm64": [ - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios-x64": [ - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios-x86": [ - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "ios.10": [ - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.10-arm": [ - "ios.10-arm", - "ios.10", - "ios-arm", - "ios", - "unix-arm", - "unix", - "any", - "base" - ], - "ios.10-arm64": [ - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.10-x64": [ - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.10-x86": [ - "ios.10-x86", - "ios.10", - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "ios.11": [ - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.11-arm64": [ - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.11-x64": [ - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.12": [ - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.12-arm64": [ - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.12-x64": [ - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.13": [ - "ios.13", - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.13-arm64": [ - "ios.13-arm64", - "ios.13", - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.13-x64": [ - "ios.13-x64", - "ios.13", - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.14": [ - "ios.14", - "ios.13", - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.14-arm64": [ - "ios.14-arm64", - "ios.14", - "ios.13-arm64", - "ios.13", - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.14-x64": [ - "ios.14-x64", - "ios.14", - "ios.13-x64", - "ios.13", - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.15": [ - "ios.15", - "ios.14", - "ios.13", - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.15-arm64": [ - "ios.15-arm64", - "ios.15", - "ios.14-arm64", - "ios.14", - "ios.13-arm64", - "ios.13", - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.15-x64": [ - "ios.15-x64", - "ios.15", - "ios.14-x64", - "ios.14", - "ios.13-x64", - "ios.13", - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator": [ - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator-arm64": [ - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator-x64": [ - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator-x86": [ - "iossimulator-x86", - "iossimulator", - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "iossimulator.10": [ - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.10-arm64": [ - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.10-x64": [ - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.10-x86": [ - "iossimulator.10-x86", - "iossimulator.10", - "iossimulator-x86", - "iossimulator", - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "iossimulator.11": [ - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.11-arm64": [ - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.11-x64": [ - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.12": [ - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.12-arm64": [ - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.12-x64": [ - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.13": [ - "iossimulator.13", - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.13-arm64": [ - "iossimulator.13-arm64", - "iossimulator.13", - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.13-x64": [ - "iossimulator.13-x64", - "iossimulator.13", - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.14": [ - "iossimulator.14", - "iossimulator.13", - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.14-arm64": [ - "iossimulator.14-arm64", - "iossimulator.14", - "iossimulator.13-arm64", - "iossimulator.13", - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.14-x64": [ - "iossimulator.14-x64", - "iossimulator.14", - "iossimulator.13-x64", - "iossimulator.13", - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.15": [ - "iossimulator.15", - "iossimulator.14", - "iossimulator.13", - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.15-arm64": [ - "iossimulator.15-arm64", - "iossimulator.15", - "iossimulator.14-arm64", - "iossimulator.14", - "iossimulator.13-arm64", - "iossimulator.13", - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.15-x64": [ - "iossimulator.15-x64", - "iossimulator.15", - "iossimulator.14-x64", - "iossimulator.14", - "iossimulator.13-x64", - "iossimulator.13", - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "linux": [ - "linux", - "unix", - "any", - "base" - ], - "linux-arm": [ - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "linux-arm64": [ - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "linux-armel": [ - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "linux-armv6": [ - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "linux-bionic": [ - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "linux-bionic-arm": [ - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "linux-bionic-arm64": [ - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "linux-bionic-x64": [ - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linux-bionic-x86": [ - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "linux-loongarch64": [ - "linux-loongarch64", - "linux", - "unix-loongarch64", - "unix", - "any", - "base" - ], - "linux-mips64": [ - "linux-mips64", - "linux", - "unix-mips64", - "unix", - "any", - "base" - ], - "linux-musl": [ - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "linux-musl-arm": [ - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "linux-musl-arm64": [ - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "linux-musl-armel": [ - "linux-musl-armel", - "linux-musl", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "linux-musl-armv6": [ - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "linux-musl-ppc64le": [ - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "linux-musl-riscv64": [ - "linux-musl-riscv64", - "linux-musl", - "linux-riscv64", - "linux", - "unix-riscv64", - "unix", - "any", - "base" - ], - "linux-musl-s390x": [ - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "linux-musl-x64": [ - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linux-musl-x86": [ - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "linux-ppc64le": [ - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "linux-riscv64": [ - "linux-riscv64", - "linux", - "unix-riscv64", - "unix", - "any", - "base" - ], - "linux-s390x": [ - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "linux-x64": [ - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linux-x86": [ - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "linuxmint.17": [ - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17-x64": [ - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.17.1": [ - "linuxmint.17.1", - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17.1-x64": [ - "linuxmint.17.1-x64", - "linuxmint.17.1", - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.17.2": [ - "linuxmint.17.2", - "linuxmint.17.1", - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17.2-x64": [ - "linuxmint.17.2-x64", - "linuxmint.17.2", - "linuxmint.17.1-x64", - "linuxmint.17.1", - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.17.3": [ - "linuxmint.17.3", - "linuxmint.17.2", - "linuxmint.17.1", - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17.3-x64": [ - "linuxmint.17.3-x64", - "linuxmint.17.3", - "linuxmint.17.2-x64", - "linuxmint.17.2", - "linuxmint.17.1-x64", - "linuxmint.17.1", - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18": [ - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18-x64": [ - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18.1": [ - "linuxmint.18.1", - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18.1-x64": [ - "linuxmint.18.1-x64", - "linuxmint.18.1", - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18.2": [ - "linuxmint.18.2", - "linuxmint.18.1", - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18.2-x64": [ - "linuxmint.18.2-x64", - "linuxmint.18.2", - "linuxmint.18.1-x64", - "linuxmint.18.1", - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18.3": [ - "linuxmint.18.3", - "linuxmint.18.2", - "linuxmint.18.1", - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18.3-x64": [ - "linuxmint.18.3-x64", - "linuxmint.18.3", - "linuxmint.18.2-x64", - "linuxmint.18.2", - "linuxmint.18.1-x64", - "linuxmint.18.1", - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.19": [ - "linuxmint.19", - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.19-x64": [ - "linuxmint.19-x64", - "linuxmint.19", - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.19.1": [ - "linuxmint.19.1", - "linuxmint.19", - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.19.1-x64": [ - "linuxmint.19.1-x64", - "linuxmint.19.1", - "linuxmint.19-x64", - "linuxmint.19", - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.19.2": [ - "linuxmint.19.2", - "linuxmint.19.1", - "linuxmint.19", - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.19.2-x64": [ - "linuxmint.19.2-x64", - "linuxmint.19.2", - "linuxmint.19.1-x64", - "linuxmint.19.1", - "linuxmint.19-x64", - "linuxmint.19", - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst": [ - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst-arm64": [ - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst-x64": [ - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst.13": [ - "maccatalyst.13", - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst.13-arm64": [ - "maccatalyst.13-arm64", - "maccatalyst.13", - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst.13-x64": [ - "maccatalyst.13-x64", - "maccatalyst.13", - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst.14": [ - "maccatalyst.14", - "maccatalyst.13", - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst.14-arm64": [ - "maccatalyst.14-arm64", - "maccatalyst.14", - "maccatalyst.13-arm64", - "maccatalyst.13", - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst.14-x64": [ - "maccatalyst.14-x64", - "maccatalyst.14", - "maccatalyst.13-x64", - "maccatalyst.13", - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst.15": [ - "maccatalyst.15", - "maccatalyst.14", - "maccatalyst.13", - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst.15-arm64": [ - "maccatalyst.15-arm64", - "maccatalyst.15", - "maccatalyst.14-arm64", - "maccatalyst.14", - "maccatalyst.13-arm64", - "maccatalyst.13", - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst.15-x64": [ - "maccatalyst.15-x64", - "maccatalyst.15", - "maccatalyst.14-x64", - "maccatalyst.14", - "maccatalyst.13-x64", - "maccatalyst.13", - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "manjaro": [ - "manjaro", - "arch", - "linux", - "unix", - "any", - "base" - ], - "manjaro-x64": [ - "manjaro-x64", - "manjaro", - "arch-x64", - "arch", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "miraclelinux": [ - "miraclelinux", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "miraclelinux-x64": [ - "miraclelinux-x64", - "miraclelinux", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "miraclelinux.8": [ - "miraclelinux.8", - "miraclelinux", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "miraclelinux.8-x64": [ - "miraclelinux.8-x64", - "miraclelinux.8", - "miraclelinux-x64", - "rhel.8-x64", - "miraclelinux", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "miraclelinux.9": [ - "miraclelinux.9", - "miraclelinux", - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "miraclelinux.9-x64": [ - "miraclelinux.9-x64", - "miraclelinux.9", - "miraclelinux-x64", - "rhel.9-x64", - "miraclelinux", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol": [ - "ol", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol-x64": [ - "ol-x64", - "ol", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7": [ - "ol.7", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7-x64": [ - "ol.7-x64", - "ol.7", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.0": [ - "ol.7.0", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.0-x64": [ - "ol.7.0-x64", - "ol.7.0", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.1": [ - "ol.7.1", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.1-x64": [ - "ol.7.1-x64", - "ol.7.1", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.2": [ - "ol.7.2", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.2-x64": [ - "ol.7.2-x64", - "ol.7.2", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.3": [ - "ol.7.3", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.3-x64": [ - "ol.7.3-x64", - "ol.7.3", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.4": [ - "ol.7.4", - "ol.7.3", - "rhel.7.4", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.4-x64": [ - "ol.7.4-x64", - "ol.7.4", - "ol.7.3-x64", - "rhel.7.4-x64", - "ol.7.3", - "rhel.7.4", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.5": [ - "ol.7.5", - "ol.7.4", - "rhel.7.5", - "ol.7.3", - "rhel.7.4", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.5-x64": [ - "ol.7.5-x64", - "ol.7.5", - "ol.7.4-x64", - "rhel.7.5-x64", - "ol.7.4", - "rhel.7.5", - "ol.7.3-x64", - "rhel.7.4-x64", - "ol.7.3", - "rhel.7.4", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.6": [ - "ol.7.6", - "ol.7.5", - "rhel.7.6", - "ol.7.4", - "rhel.7.5", - "ol.7.3", - "rhel.7.4", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.6-x64": [ - "ol.7.6-x64", - "ol.7.6", - "ol.7.5-x64", - "rhel.7.6-x64", - "ol.7.5", - "rhel.7.6", - "ol.7.4-x64", - "rhel.7.5-x64", - "ol.7.4", - "rhel.7.5", - "ol.7.3-x64", - "rhel.7.4-x64", - "ol.7.3", - "rhel.7.4", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.8": [ - "ol.8", - "ol", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.8-x64": [ - "ol.8-x64", - "ol.8", - "ol-x64", - "rhel.8-x64", - "ol", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.8.0": [ - "ol.8.0", - "ol.8", - "rhel.8.0", - "ol", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.8.0-x64": [ - "ol.8.0-x64", - "ol.8.0", - "ol.8-x64", - "rhel.8.0-x64", - "ol.8", - "rhel.8.0", - "ol-x64", - "rhel.8-x64", - "ol", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "omnios": [ - "omnios", - "illumos", - "unix", - "any", - "base" - ], - "omnios-x64": [ - "omnios-x64", - "omnios", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "omnios.15": [ - "omnios.15", - "omnios", - "illumos", - "unix", - "any", - "base" - ], - "omnios.15-x64": [ - "omnios.15-x64", - "omnios.15", - "omnios-x64", - "omnios", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "openindiana": [ - "openindiana", - "illumos", - "unix", - "any", - "base" - ], - "openindiana-x64": [ - "openindiana-x64", - "openindiana", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse": [ - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse-x64": [ - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.13.2": [ - "opensuse.13.2", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.13.2-x64": [ - "opensuse.13.2-x64", - "opensuse.13.2", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.15.0": [ - "opensuse.15.0", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.15.0-x64": [ - "opensuse.15.0-x64", - "opensuse.15.0", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.15.1": [ - "opensuse.15.1", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.15.1-x64": [ - "opensuse.15.1-x64", - "opensuse.15.1", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.42.1": [ - "opensuse.42.1", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.42.1-x64": [ - "opensuse.42.1-x64", - "opensuse.42.1", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.42.2": [ - "opensuse.42.2", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.42.2-x64": [ - "opensuse.42.2-x64", - "opensuse.42.2", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.42.3": [ - "opensuse.42.3", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.42.3-x64": [ - "opensuse.42.3-x64", - "opensuse.42.3", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "osx": [ - "osx", - "unix", - "any", - "base" - ], - "osx-arm64": [ - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx-x64": [ - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.10": [ - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.10-arm64": [ - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.10-x64": [ - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.11": [ - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.11-arm64": [ - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.11-x64": [ - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.12": [ - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.12-arm64": [ - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.12-x64": [ - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.13": [ - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.13-arm64": [ - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.13-x64": [ - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.14": [ - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.14-arm64": [ - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.14-x64": [ - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.15": [ - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.15-arm64": [ - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.15-x64": [ - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.16": [ - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.16-arm64": [ - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.16-x64": [ - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.11.0": [ - "osx.11.0", - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.11.0-arm64": [ - "osx.11.0-arm64", - "osx.11.0", - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.11.0-x64": [ - "osx.11.0-x64", - "osx.11.0", - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.12": [ - "osx.12", - "osx.11.0", - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.12-arm64": [ - "osx.12-arm64", - "osx.12", - "osx.11.0-arm64", - "osx.11.0", - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.12-x64": [ - "osx.12-x64", - "osx.12", - "osx.11.0-x64", - "osx.11.0", - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.13": [ - "osx.13", - "osx.12", - "osx.11.0", - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.13-arm64": [ - "osx.13-arm64", - "osx.13", - "osx.12-arm64", - "osx.12", - "osx.11.0-arm64", - "osx.11.0", - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.13-x64": [ - "osx.13-x64", - "osx.13", - "osx.12-x64", - "osx.12", - "osx.11.0-x64", - "osx.11.0", - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel": [ - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel-arm64": [ - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel-x64": [ - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.6": [ - "rhel.6", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.6-x64": [ - "rhel.6-x64", - "rhel.6", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7": [ - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7-x64": [ - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.0": [ - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.0-x64": [ - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.1": [ - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.1-x64": [ - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.2": [ - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.2-x64": [ - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.3": [ - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.3-x64": [ - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.4": [ - "rhel.7.4", - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.4-x64": [ - "rhel.7.4-x64", - "rhel.7.4", - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.5": [ - "rhel.7.5", - "rhel.7.4", - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.5-x64": [ - "rhel.7.5-x64", - "rhel.7.5", - "rhel.7.4-x64", - "rhel.7.4", - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.6": [ - "rhel.7.6", - "rhel.7.5", - "rhel.7.4", - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.6-x64": [ - "rhel.7.6-x64", - "rhel.7.6", - "rhel.7.5-x64", - "rhel.7.5", - "rhel.7.4-x64", - "rhel.7.4", - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.8": [ - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.8-arm64": [ - "rhel.8-arm64", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.8-x64": [ - "rhel.8-x64", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.8.0": [ - "rhel.8.0", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.8.0-arm64": [ - "rhel.8.0-arm64", - "rhel.8.0", - "rhel.8-arm64", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.8.0-x64": [ - "rhel.8.0-x64", - "rhel.8.0", - "rhel.8-x64", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.8.1": [ - "rhel.8.1", - "rhel.8.0", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.8.1-arm64": [ - "rhel.8.1-arm64", - "rhel.8.1", - "rhel.8.0-arm64", - "rhel.8.0", - "rhel.8-arm64", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.8.1-x64": [ - "rhel.8.1-x64", - "rhel.8.1", - "rhel.8.0-x64", - "rhel.8.0", - "rhel.8-x64", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.9": [ - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.9-arm64": [ - "rhel.9-arm64", - "rhel.9", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.9-x64": [ - "rhel.9-x64", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rocky": [ - "rocky", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rocky-arm64": [ - "rocky-arm64", - "rocky", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rocky-x64": [ - "rocky-x64", - "rocky", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rocky.8": [ - "rocky.8", - "rocky", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rocky.8-arm64": [ - "rocky.8-arm64", - "rocky.8", - "rocky-arm64", - "rhel.8-arm64", - "rocky", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rocky.8-x64": [ - "rocky.8-x64", - "rocky.8", - "rocky-x64", - "rhel.8-x64", - "rocky", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rocky.9": [ - "rocky.9", - "rocky", - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rocky.9-arm64": [ - "rocky.9-arm64", - "rocky.9", - "rocky-arm64", - "rhel.9-arm64", - "rocky", - "rhel.9", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rocky.9-x64": [ - "rocky.9-x64", - "rocky.9", - "rocky-x64", - "rhel.9-x64", - "rocky", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles": [ - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles-x64": [ - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12": [ - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12-x64": [ - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.1": [ - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.1-x64": [ - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.2": [ - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.2-x64": [ - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.3": [ - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.3-x64": [ - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.4": [ - "sles.12.4", - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.4-x64": [ - "sles.12.4-x64", - "sles.12.4", - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.15": [ - "sles.15", - "sles.12.4", - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.15-x64": [ - "sles.15-x64", - "sles.15", - "sles.12.4-x64", - "sles.12.4", - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.15.1": [ - "sles.15.1", - "sles.15", - "sles.12.4", - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.15.1-x64": [ - "sles.15.1-x64", - "sles.15.1", - "sles.15-x64", - "sles.15", - "sles.12.4-x64", - "sles.12.4", - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "smartos": [ - "smartos", - "illumos", - "unix", - "any", - "base" - ], - "smartos-x64": [ - "smartos-x64", - "smartos", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "smartos.2020": [ - "smartos.2020", - "smartos", - "illumos", - "unix", - "any", - "base" - ], - "smartos.2020-x64": [ - "smartos.2020-x64", - "smartos.2020", - "smartos-x64", - "smartos", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "smartos.2021": [ - "smartos.2021", - "smartos.2020", - "smartos", - "illumos", - "unix", - "any", - "base" - ], - "smartos.2021-x64": [ - "smartos.2021-x64", - "smartos.2021", - "smartos.2020-x64", - "smartos.2020", - "smartos-x64", - "smartos", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "solaris": [ - "solaris", - "unix", - "any", - "base" - ], - "solaris-x64": [ - "solaris-x64", - "solaris", - "unix-x64", - "unix", - "any", - "base" - ], - "solaris.11": [ - "solaris.11", - "solaris", - "unix", - "any", - "base" - ], - "solaris.11-x64": [ - "solaris.11-x64", - "solaris.11", - "solaris-x64", - "solaris", - "unix-x64", - "unix", - "any", - "base" - ], - "tizen": [ - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen-arm64": [ - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen-armel": [ - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen-x86": [ - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.4.0.0": [ - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.4.0.0-arm64": [ - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.4.0.0-armel": [ - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.4.0.0-x86": [ - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.5.0.0": [ - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.5.0.0-arm64": [ - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.5.0.0-armel": [ - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.5.0.0-x86": [ - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.5.5.0": [ - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.5.5.0-arm64": [ - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.5.5.0-armel": [ - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.5.5.0-x86": [ - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.6.0.0": [ - "tizen.6.0.0", - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.6.0.0-arm64": [ - "tizen.6.0.0-arm64", - "tizen.6.0.0", - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.6.0.0-armel": [ - "tizen.6.0.0-armel", - "tizen.6.0.0", - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.6.0.0-x86": [ - "tizen.6.0.0-x86", - "tizen.6.0.0", - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.6.5.0": [ - "tizen.6.5.0", - "tizen.6.0.0", - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.6.5.0-arm64": [ - "tizen.6.5.0-arm64", - "tizen.6.5.0", - "tizen.6.0.0-arm64", - "tizen.6.0.0", - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.6.5.0-armel": [ - "tizen.6.5.0-armel", - "tizen.6.5.0", - "tizen.6.0.0-armel", - "tizen.6.0.0", - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.6.5.0-x86": [ - "tizen.6.5.0-x86", - "tizen.6.5.0", - "tizen.6.0.0-x86", - "tizen.6.0.0", - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.7.0.0": [ - "tizen.7.0.0", - "tizen.6.5.0", - "tizen.6.0.0", - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.7.0.0-arm64": [ - "tizen.7.0.0-arm64", - "tizen.7.0.0", - "tizen.6.5.0-arm64", - "tizen.6.5.0", - "tizen.6.0.0-arm64", - "tizen.6.0.0", - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.7.0.0-armel": [ - "tizen.7.0.0-armel", - "tizen.7.0.0", - "tizen.6.5.0-armel", - "tizen.6.5.0", - "tizen.6.0.0-armel", - "tizen.6.0.0", - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.7.0.0-x86": [ - "tizen.7.0.0-x86", - "tizen.7.0.0", - "tizen.6.5.0-x86", - "tizen.6.5.0", - "tizen.6.0.0-x86", - "tizen.6.0.0", - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tvos": [ - "tvos", - "unix", - "any", - "base" - ], - "tvos-arm64": [ - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos-x64": [ - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.10": [ - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.10-arm64": [ - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.10-x64": [ - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.11": [ - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.11-arm64": [ - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.11-x64": [ - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.12": [ - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.12-arm64": [ - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.12-x64": [ - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.13": [ - "tvos.13", - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.13-arm64": [ - "tvos.13-arm64", - "tvos.13", - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.13-x64": [ - "tvos.13-x64", - "tvos.13", - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.14": [ - "tvos.14", - "tvos.13", - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.14-arm64": [ - "tvos.14-arm64", - "tvos.14", - "tvos.13-arm64", - "tvos.13", - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.14-x64": [ - "tvos.14-x64", - "tvos.14", - "tvos.13-x64", - "tvos.13", - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.15": [ - "tvos.15", - "tvos.14", - "tvos.13", - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.15-arm64": [ - "tvos.15-arm64", - "tvos.15", - "tvos.14-arm64", - "tvos.14", - "tvos.13-arm64", - "tvos.13", - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.15-x64": [ - "tvos.15-x64", - "tvos.15", - "tvos.14-x64", - "tvos.14", - "tvos.13-x64", - "tvos.13", - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator": [ - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator-arm64": [ - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator-x64": [ - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.10": [ - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.10-arm64": [ - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.10-x64": [ - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.11": [ - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.11-arm64": [ - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.11-x64": [ - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.12": [ - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.12-arm64": [ - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.12-x64": [ - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.13": [ - "tvossimulator.13", - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.13-arm64": [ - "tvossimulator.13-arm64", - "tvossimulator.13", - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.13-x64": [ - "tvossimulator.13-x64", - "tvossimulator.13", - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.14": [ - "tvossimulator.14", - "tvossimulator.13", - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.14-arm64": [ - "tvossimulator.14-arm64", - "tvossimulator.14", - "tvossimulator.13-arm64", - "tvossimulator.13", - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.14-x64": [ - "tvossimulator.14-x64", - "tvossimulator.14", - "tvossimulator.13-x64", - "tvossimulator.13", - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.15": [ - "tvossimulator.15", - "tvossimulator.14", - "tvossimulator.13", - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.15-arm64": [ - "tvossimulator.15-arm64", - "tvossimulator.15", - "tvossimulator.14-arm64", - "tvossimulator.14", - "tvossimulator.13-arm64", - "tvossimulator.13", - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.15-x64": [ - "tvossimulator.15-x64", - "tvossimulator.15", - "tvossimulator.14-x64", - "tvossimulator.14", - "tvossimulator.13-x64", - "tvossimulator.13", - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu": [ - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu-arm": [ - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu-arm64": [ - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu-x64": [ - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu-x86": [ - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.14.04": [ - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.14.04-arm": [ - "ubuntu.14.04-arm", - "ubuntu.14.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.14.04-x64": [ - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.14.04-x86": [ - "ubuntu.14.04-x86", - "ubuntu.14.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.14.10": [ - "ubuntu.14.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.14.10-arm": [ - "ubuntu.14.10-arm", - "ubuntu.14.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.14.10-x64": [ - "ubuntu.14.10-x64", - "ubuntu.14.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.14.10-x86": [ - "ubuntu.14.10-x86", - "ubuntu.14.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.15.04": [ - "ubuntu.15.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.15.04-arm": [ - "ubuntu.15.04-arm", - "ubuntu.15.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.15.04-x64": [ - "ubuntu.15.04-x64", - "ubuntu.15.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.15.04-x86": [ - "ubuntu.15.04-x86", - "ubuntu.15.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.15.10": [ - "ubuntu.15.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.15.10-arm": [ - "ubuntu.15.10-arm", - "ubuntu.15.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.15.10-x64": [ - "ubuntu.15.10-x64", - "ubuntu.15.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.15.10-x86": [ - "ubuntu.15.10-x86", - "ubuntu.15.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.16.04": [ - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.16.04-arm": [ - "ubuntu.16.04-arm", - "ubuntu.16.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.16.04-arm64": [ - "ubuntu.16.04-arm64", - "ubuntu.16.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.16.04-x64": [ - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.16.04-x86": [ - "ubuntu.16.04-x86", - "ubuntu.16.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.16.10": [ - "ubuntu.16.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.16.10-arm": [ - "ubuntu.16.10-arm", - "ubuntu.16.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.16.10-arm64": [ - "ubuntu.16.10-arm64", - "ubuntu.16.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.16.10-x64": [ - "ubuntu.16.10-x64", - "ubuntu.16.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.16.10-x86": [ - "ubuntu.16.10-x86", - "ubuntu.16.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.17.04": [ - "ubuntu.17.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.17.04-arm": [ - "ubuntu.17.04-arm", - "ubuntu.17.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.17.04-arm64": [ - "ubuntu.17.04-arm64", - "ubuntu.17.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.17.04-x64": [ - "ubuntu.17.04-x64", - "ubuntu.17.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.17.04-x86": [ - "ubuntu.17.04-x86", - "ubuntu.17.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.17.10": [ - "ubuntu.17.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.17.10-arm": [ - "ubuntu.17.10-arm", - "ubuntu.17.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.17.10-arm64": [ - "ubuntu.17.10-arm64", - "ubuntu.17.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.17.10-x64": [ - "ubuntu.17.10-x64", - "ubuntu.17.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.17.10-x86": [ - "ubuntu.17.10-x86", - "ubuntu.17.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.18.04": [ - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.18.04-arm": [ - "ubuntu.18.04-arm", - "ubuntu.18.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.18.04-arm64": [ - "ubuntu.18.04-arm64", - "ubuntu.18.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.18.04-x64": [ - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.18.04-x86": [ - "ubuntu.18.04-x86", - "ubuntu.18.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.18.10": [ - "ubuntu.18.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.18.10-arm": [ - "ubuntu.18.10-arm", - "ubuntu.18.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.18.10-arm64": [ - "ubuntu.18.10-arm64", - "ubuntu.18.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.18.10-x64": [ - "ubuntu.18.10-x64", - "ubuntu.18.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.18.10-x86": [ - "ubuntu.18.10-x86", - "ubuntu.18.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.19.04": [ - "ubuntu.19.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.19.04-arm": [ - "ubuntu.19.04-arm", - "ubuntu.19.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.19.04-arm64": [ - "ubuntu.19.04-arm64", - "ubuntu.19.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.19.04-x64": [ - "ubuntu.19.04-x64", - "ubuntu.19.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.19.04-x86": [ - "ubuntu.19.04-x86", - "ubuntu.19.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.19.10": [ - "ubuntu.19.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.19.10-arm": [ - "ubuntu.19.10-arm", - "ubuntu.19.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.19.10-arm64": [ - "ubuntu.19.10-arm64", - "ubuntu.19.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.19.10-x64": [ - "ubuntu.19.10-x64", - "ubuntu.19.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.19.10-x86": [ - "ubuntu.19.10-x86", - "ubuntu.19.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.20.04": [ - "ubuntu.20.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.20.04-arm": [ - "ubuntu.20.04-arm", - "ubuntu.20.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.20.04-arm64": [ - "ubuntu.20.04-arm64", - "ubuntu.20.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.20.04-x64": [ - "ubuntu.20.04-x64", - "ubuntu.20.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.20.04-x86": [ - "ubuntu.20.04-x86", - "ubuntu.20.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.20.10": [ - "ubuntu.20.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.20.10-arm": [ - "ubuntu.20.10-arm", - "ubuntu.20.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.20.10-arm64": [ - "ubuntu.20.10-arm64", - "ubuntu.20.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.20.10-x64": [ - "ubuntu.20.10-x64", - "ubuntu.20.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.20.10-x86": [ - "ubuntu.20.10-x86", - "ubuntu.20.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.21.04": [ - "ubuntu.21.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.21.04-arm": [ - "ubuntu.21.04-arm", - "ubuntu.21.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.21.04-arm64": [ - "ubuntu.21.04-arm64", - "ubuntu.21.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.21.04-x64": [ - "ubuntu.21.04-x64", - "ubuntu.21.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.21.04-x86": [ - "ubuntu.21.04-x86", - "ubuntu.21.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.21.10": [ - "ubuntu.21.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.21.10-arm": [ - "ubuntu.21.10-arm", - "ubuntu.21.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.21.10-arm64": [ - "ubuntu.21.10-arm64", - "ubuntu.21.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.21.10-x64": [ - "ubuntu.21.10-x64", - "ubuntu.21.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.21.10-x86": [ - "ubuntu.21.10-x86", - "ubuntu.21.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.22.04": [ - "ubuntu.22.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.22.04-arm": [ - "ubuntu.22.04-arm", - "ubuntu.22.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.22.04-arm64": [ - "ubuntu.22.04-arm64", - "ubuntu.22.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.22.04-x64": [ - "ubuntu.22.04-x64", - "ubuntu.22.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.22.04-x86": [ - "ubuntu.22.04-x86", - "ubuntu.22.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.22.10": [ - "ubuntu.22.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.22.10-arm": [ - "ubuntu.22.10-arm", - "ubuntu.22.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.22.10-arm64": [ - "ubuntu.22.10-arm64", - "ubuntu.22.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.22.10-x64": [ - "ubuntu.22.10-x64", - "ubuntu.22.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.22.10-x86": [ - "ubuntu.22.10-x86", - "ubuntu.22.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.23.04": [ - "ubuntu.23.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.23.04-arm": [ - "ubuntu.23.04-arm", - "ubuntu.23.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.23.04-arm64": [ - "ubuntu.23.04-arm64", - "ubuntu.23.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.23.04-x64": [ - "ubuntu.23.04-x64", - "ubuntu.23.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.23.04-x86": [ - "ubuntu.23.04-x86", - "ubuntu.23.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.23.10": [ - "ubuntu.23.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.23.10-arm": [ - "ubuntu.23.10-arm", - "ubuntu.23.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.23.10-arm64": [ - "ubuntu.23.10-arm64", - "ubuntu.23.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.23.10-x64": [ - "ubuntu.23.10-x64", - "ubuntu.23.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.23.10-x86": [ - "ubuntu.23.10-x86", - "ubuntu.23.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "unix": [ - "unix", - "any", - "base" - ], - "unix-arm": [ - "unix-arm", - "unix", - "any", - "base" - ], - "unix-arm64": [ - "unix-arm64", - "unix", - "any", - "base" - ], - "unix-armel": [ - "unix-armel", - "unix", - "any", - "base" - ], - "unix-armv6": [ - "unix-armv6", - "unix", - "any", - "base" - ], - "unix-loongarch64": [ - "unix-loongarch64", - "unix", - "any", - "base" - ], - "unix-mips64": [ - "unix-mips64", - "unix", - "any", - "base" - ], - "unix-ppc64le": [ - "unix-ppc64le", - "unix", - "any", - "base" - ], - "unix-riscv64": [ - "unix-riscv64", - "unix", - "any", - "base" - ], - "unix-s390x": [ - "unix-s390x", - "unix", - "any", - "base" - ], - "unix-x64": [ - "unix-x64", - "unix", - "any", - "base" - ], - "unix-x86": [ - "unix-x86", - "unix", - "any", - "base" - ], - "wasi": [ - "wasi", - "any", - "base" - ], - "wasi-wasm": [ - "wasi-wasm", - "wasi", - "any", - "base" - ], - "win": [ - "win", - "any", - "base" - ], - "win-aot": [ - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win-arm": [ - "win-arm", - "win", - "any", - "base" - ], - "win-arm-aot": [ - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win-arm64": [ - "win-arm64", - "win", - "any", - "base" - ], - "win-arm64-aot": [ - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win-x64": [ - "win-x64", - "win", - "any", - "base" - ], - "win-x64-aot": [ - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win-x86": [ - "win-x86", - "win", - "any", - "base" - ], - "win-x86-aot": [ - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win10": [ - "win10", - "win81", - "win8", - "win7", - "win", - "any", - "base" - ], - "win10-aot": [ - "win10-aot", - "win10", - "win81-aot", - "win81", - "win8-aot", - "win8", - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win10-arm": [ - "win10-arm", - "win10", - "win81-arm", - "win81", - "win8-arm", - "win8", - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win10-arm-aot": [ - "win10-arm-aot", - "win10-aot", - "win10-arm", - "win10", - "win81-arm-aot", - "win81-aot", - "win81-arm", - "win81", - "win8-arm-aot", - "win8-aot", - "win8-arm", - "win8", - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win10-arm64": [ - "win10-arm64", - "win10", - "win81-arm64", - "win81", - "win8-arm64", - "win8", - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win10-arm64-aot": [ - "win10-arm64-aot", - "win10-aot", - "win10-arm64", - "win10", - "win81-arm64-aot", - "win81-aot", - "win81-arm64", - "win81", - "win8-arm64-aot", - "win8-aot", - "win8-arm64", - "win8", - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win10-x64": [ - "win10-x64", - "win10", - "win81-x64", - "win81", - "win8-x64", - "win8", - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win10-x64-aot": [ - "win10-x64-aot", - "win10-aot", - "win10-x64", - "win10", - "win81-x64-aot", - "win81-aot", - "win81-x64", - "win81", - "win8-x64-aot", - "win8-aot", - "win8-x64", - "win8", - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win10-x86": [ - "win10-x86", - "win10", - "win81-x86", - "win81", - "win8-x86", - "win8", - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win10-x86-aot": [ - "win10-x86-aot", - "win10-aot", - "win10-x86", - "win10", - "win81-x86-aot", - "win81-aot", - "win81-x86", - "win81", - "win8-x86-aot", - "win8-aot", - "win8-x86", - "win8", - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win7": [ - "win7", - "win", - "any", - "base" - ], - "win7-aot": [ - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win7-arm": [ - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win7-arm-aot": [ - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win7-arm64": [ - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win7-arm64-aot": [ - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win7-x64": [ - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win7-x64-aot": [ - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win7-x86": [ - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win7-x86-aot": [ - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win8": [ - "win8", - "win7", - "win", - "any", - "base" - ], - "win8-aot": [ - "win8-aot", - "win8", - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win8-arm": [ - "win8-arm", - "win8", - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win8-arm-aot": [ - "win8-arm-aot", - "win8-aot", - "win8-arm", - "win8", - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win8-arm64": [ - "win8-arm64", - "win8", - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win8-arm64-aot": [ - "win8-arm64-aot", - "win8-aot", - "win8-arm64", - "win8", - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win8-x64": [ - "win8-x64", - "win8", - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win8-x64-aot": [ - "win8-x64-aot", - "win8-aot", - "win8-x64", - "win8", - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win8-x86": [ - "win8-x86", - "win8", - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win8-x86-aot": [ - "win8-x86-aot", - "win8-aot", - "win8-x86", - "win8", - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win81": [ - "win81", - "win8", - "win7", - "win", - "any", - "base" - ], - "win81-aot": [ - "win81-aot", - "win81", - "win8-aot", - "win8", - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win81-arm": [ - "win81-arm", - "win81", - "win8-arm", - "win8", - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win81-arm-aot": [ - "win81-arm-aot", - "win81-aot", - "win81-arm", - "win81", - "win8-arm-aot", - "win8-aot", - "win8-arm", - "win8", - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win81-arm64": [ - "win81-arm64", - "win81", - "win8-arm64", - "win8", - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win81-arm64-aot": [ - "win81-arm64-aot", - "win81-aot", - "win81-arm64", - "win81", - "win8-arm64-aot", - "win8-aot", - "win8-arm64", - "win8", - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win81-x64": [ - "win81-x64", - "win81", - "win8-x64", - "win8", - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win81-x64-aot": [ - "win81-x64-aot", - "win81-aot", - "win81-x64", - "win81", - "win8-x64-aot", - "win8-aot", - "win8-x64", - "win8", - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win81-x86": [ - "win81-x86", - "win81", - "win8-x86", - "win8", - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win81-x86-aot": [ - "win81-x86-aot", - "win81-aot", - "win81-x86", - "win81", - "win8-x86-aot", - "win8-aot", - "win8-x86", - "win8", - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ] -} \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props deleted file mode 100644 index 05bdf782326b5..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props +++ /dev/null @@ -1,296 +0,0 @@ - - - - - any - x64;x86;arm;armv6;armel;arm64;loongarch64;mips64;s390x;ppc64le;riscv64 - - - unix - x64;x86;arm;armv6;armel;arm64;loongarch64;mips64;s390x;ppc64le;riscv64 - - - linux - x64;x86;arm;armv6;armel;arm64;s390x;ppc64le;riscv64 - - - - linux-musl - x64;x86;arm;armv6;arm64;s390x;ppc64le - 3.6;3.7;3.8;3.9;3.10;3.11;3.12;3.13;3.14;3.15;3.16;3.17;3.18 - - - - linux - x64;x86;arm;arm64 - - - linux-bionic - x64;x86;arm;arm64 - 21;22;23;24;25;26;27;28;29;30;31;32 - - - - linux - x64 - - - - arch - x64 - - - - any - wasm - - - - any - wasm - - - - ios - x64;arm64 - 13;14;15 - - - - rhel - x64 - 7 - true - false - - - rhel - x64;arm64 - 8;9 - true - false - - - - linux - x64;x86;arm;armel;arm64 - 8;9;10;11;12 - false - - - - linux - x64 - - - - linux - x64;arm64 - 23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39 - false - - - - linux - x64 - - - - unix - arm;x86 - 10 - - - unix - arm64;x64 - 10;11;12;13;14;15 - - - - ios - x86 - 10 - - - ios - arm64;x64 - 10;11;12;13;14;15 - - - - unix - arm64;x64 - 10;11;12;13;14;15 - - - - tvos - arm64;x64 - 10;11;12;13;14;15 - - - - - ubuntu.14.04 - x64 - 1;2;3 - - - ubuntu.16.04 - x64 - 1;2;3 - - - ubuntu.18.04 - x64 - 1;2 - - - - rhel - x64 - 8;9 - true - false - - - - rhel - x64 - 7;7.0;7.1;7.2;7.3;7.4;7.5;7.6 - true - - - rhel - x64 - 8;8.0 - true - - - - - linux - x64 - 13.2;15.0;15.1;42.1;42.2;42.3 - false - - - - unix - x64;arm64 - 10.10;10.11;10.12;10.13;10.14;10.15;10.16;11.0;12;13 - - - - unix - x64;arm64 - 12;13 - - - - unix - x64 - 11 - - - - unix - x64 - - - - illumos - x64 - 15 - - - - illumos - x64 - - - - illumos - x64 - 2020;2021 - - - - - linux - x64 - 6 - - - - linux - x64 - 7;7.0;7.1;7.2;7.3;7.4;7.5;7.6 - - - linux - x64;arm64 - 8;8.0;8.1 - - - linux - x64;arm64 - 9 - - - - rhel - x64;arm64 - 8;9 - true - false - - - - linux - x64 - 12;12.1;12.2;12.3;12.4;15;15.1 - - - - linux - x86;armel;arm64 - 4.0.0;5.0.0;5.5.0;6.0.0;6.5.0;7.0.0 - - - - debian - x64;x86;arm - 14.04;14.10;15.04;15.10 - false - - - debian - x64;x86;arm;arm64 - 16.04;16.10;17.04;17.10;18.04;18.10;19.04;19.10;20.04;20.10;21.04;21.10;22.04;22.10;23.04;23.10 - false - - - - any - true - aot - x64;x86;arm;arm64 - 7;8;81;10 - - - - - - - - base - - - - - any - - - - From bf9d5ea2839a3ee7969e1c9467e322ca50677676 Mon Sep 17 00:00:00 2001 From: Viktor Hofer Date: Mon, 18 Sep 2023 13:56:10 +0200 Subject: [PATCH 2/5] Update README and delete test --- .../Microsoft.NETCore.Platforms.sln | 39 --- .../Microsoft.NETCore.Platforms/readme.md | 80 +----- .../tests/AssemblyInfo.cs | 6 - .../tests/GenerateRuntimeGraphTests.cs | 264 ------------------ .../Microsoft.NETCore.Platforms/tests/Log.cs | 56 ---- .../Microsoft.NETCore.Platforms.Tests.csproj | 29 -- .../tests/RidTests.cs | 66 ----- .../tests/RuntimeVersionTests.cs | 233 ---------------- .../tests/TestBuildEngine.cs | 56 ---- src/libraries/tests.proj | 1 - 10 files changed, 2 insertions(+), 828 deletions(-) delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs diff --git a/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln b/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln index 90b82606258c8..736dbcc4b53af 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln +++ b/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln @@ -1,63 +1,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{39BCA125-321F-490F-AD4E-28DCB4406969}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NETCore.Platforms", "src\Microsoft.NETCore.Platforms.csproj", "{BFFF96CC-06AA-4291-9F93-3E77F23DBB11}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NETCore.Platforms.Tests", "tests\Microsoft.NETCore.Platforms.Tests.csproj", "{0C60F372-5C73-4BFA-9B91-5659C88F9750}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComInterfaceGenerator", "..\System.Runtime.InteropServices\gen\ComInterfaceGenerator\ComInterfaceGenerator.csproj", "{89E78703-8B4C-4911-A4E6-794E7DC4D581}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibraryImportGenerator", "..\System.Runtime.InteropServices\gen\LibraryImportGenerator\LibraryImportGenerator.csproj", "{45449066-3A31-43E5-B705-20D667080A23}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.SourceGeneration", "..\System.Runtime.InteropServices\gen\Microsoft.Interop.SourceGeneration\Microsoft.Interop.SourceGeneration.csproj", "{2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{E4827496-6F39-4CA0-8F4A-ACDE9DFEBE5C}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F96FBD24-3BB3-4D02-9884-4D90F94DD3C0}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gen", "gen", "{E8010E1D-FDAF-481D-AA34-3B115B667E4B}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {39BCA125-321F-490F-AD4E-28DCB4406969}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39BCA125-321F-490F-AD4E-28DCB4406969}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39BCA125-321F-490F-AD4E-28DCB4406969}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39BCA125-321F-490F-AD4E-28DCB4406969}.Release|Any CPU.Build.0 = Release|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Debug|Any CPU.Build.0 = Debug|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Release|Any CPU.ActiveCfg = Release|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Release|Any CPU.Build.0 = Release|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Release|Any CPU.Build.0 = Release|Any CPU - {89E78703-8B4C-4911-A4E6-794E7DC4D581}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {89E78703-8B4C-4911-A4E6-794E7DC4D581}.Debug|Any CPU.Build.0 = Debug|Any CPU - {89E78703-8B4C-4911-A4E6-794E7DC4D581}.Release|Any CPU.ActiveCfg = Release|Any CPU - {89E78703-8B4C-4911-A4E6-794E7DC4D581}.Release|Any CPU.Build.0 = Release|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Release|Any CPU.Build.0 = Release|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {39BCA125-321F-490F-AD4E-28DCB4406969} = {E4827496-6F39-4CA0-8F4A-ACDE9DFEBE5C} - {0C60F372-5C73-4BFA-9B91-5659C88F9750} = {E4827496-6F39-4CA0-8F4A-ACDE9DFEBE5C} {BFFF96CC-06AA-4291-9F93-3E77F23DBB11} = {F96FBD24-3BB3-4D02-9884-4D90F94DD3C0} - {89E78703-8B4C-4911-A4E6-794E7DC4D581} = {E8010E1D-FDAF-481D-AA34-3B115B667E4B} - {45449066-3A31-43E5-B705-20D667080A23} = {E8010E1D-FDAF-481D-AA34-3B115B667E4B} - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B} = {E8010E1D-FDAF-481D-AA34-3B115B667E4B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E946A528-C3E7-48EC-AD6D-AE84ED2B11AC} diff --git a/src/libraries/Microsoft.NETCore.Platforms/readme.md b/src/libraries/Microsoft.NETCore.Platforms/readme.md index 6c76386f17d07..ae3a062123ab3 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/readme.md +++ b/src/libraries/Microsoft.NETCore.Platforms/readme.md @@ -1,5 +1,5 @@ # Runtime IDs -The package `Microsoft.NETCore.Platforms` defines the runtime identifiers (RIDs) used by .NET packages to represent runtime-specific assets in NuGet packages. +The `Microsoft.NETCore.Platforms` transport package contains the portable and non-portable runtime identifier graph files for redistribution in the dotnet/sdk repository. ## What is a RID? A RID is an opaque string that identifies a platform. RIDs have relationships to other RIDs by "importing" the other RID. In that way a RID is a directed graph of compatible RIDs. @@ -76,80 +76,4 @@ runtimes/win/lib/netstandard1.0/foo.dll When resolving for netstandard1.5/win7-x64 will select `lib/netstandard1.5/foo.dll` for the compile asset and `runtimes/win/lib/netstandard1.0/foo.dll` for the runtime asset. ## Adding new RIDs - -### Why do I need to add a new RID? -NuGet's extensibility mechanism for platform-specific assets requires a RID be defined for any platform that needs assets specific to that platform. Unlike TFMs, which have a known relationship in NuGet (eg net4.5 is compatible with net4.0), RIDs are opaque strings which NuGet knows nothing about. The definition and relationship of RIDs comes solely from the `runtime.json` files within the root of the packages referenced by the project. -As such, whenever we want to put a new RID in a project.json in order to get assets specific for that RID we have to define the rid in some package. Typically that package is `Microsoft.NETCore.Platforms` if the RID is "official". If you'd like to prototype you can put the RID in any other package and so long as that package is referenced you can use that RID. - -### Do I really need to add a new RID? -If you're prototyping on a platform that is compatible with an existing platform then you can reuse the RID for that existing platform. New RIDs are only needed when an asset needs to be different on a particular platform. - -`Microsoft.NETCore.Platforms` attempts to define all RIDs that packages may need, and as such will define RIDs for platforms that we don't actually cross compile for. This is to support higher-level packages, 3rd party packages, that may need to cross-compile for that RID. - -### Adding a new OS -Add a new `RuntimeGroup` item in `runtimeGroups.props`. - -For example: -```xml - - linux - x86;x64;arm - 42.0;43.0 - -``` - -This will create a new RID for `myLinuxDistro` where `myLinuxDistro` should be the string used for the `ID=` value in the `/etc/os-release` file. - -Whenever modifying the `runtimeGroups.props` make sure to pack the project via the `dotnet pack` command and inspect if the generated package contains the desired changes. - -RuntimeGroup items have the following format: -- `Identity`: the base string for the RID, without version architecture, or qualifiers. -- `Parent`: the base string for the parent of this RID. This RID will be imported by the baseRID, architecture-specific, and qualifier-specific RIDs (with the latter two appending appropriate architecture and qualifiers). -- `Versions`: A list of strings delimited by semi-colons that represent the versions for this RID. -- `TreatVersionsAsCompatible`: Default is true. When true, version-specific RIDs will import the previous version-specific RID in the Versions list, with the first version importing the version-less RID. When false all version-specific RIDs will import the version-less RID (bypassing previous version-specific RIDs) -- `OmitVersionDelimiter`: Default is false. When true no characters will separate the base RID and version (EG: win7). When false a '.' will separate the base RID and version (EG: osx.10.12). -- `ApplyVersionsToParent`: Default is false. When true, version-specific RIDs will import version-specific Parent RIDs similar to is done for architecture and qualifier (see Parent above). -- `Architectures`: A list of strings delimited by semi-colons that represent the architectures for this RID. -- `AdditionalQualifiers`: A list of strings delimited by semi-colons that represent the additional qualifiers for this RID. Additional qualifers do not stack, each only applies to the qualifier-less RIDs (so as not to cause combinatorial exponential growth of RIDs). - -### Adding a new version to an existing OS -Find the existing `RuntimeGroup` in `runtimeGroups.props` and add the version to the list of `Versions`, separated by a semi-colon. - -If the version you are adding needs to be treated as not-compatible with previous versions and the `RuntimeGroup` has not set `TreatVersionsAsCompatible`=`false` then you may create a new `RuntimeGroup` to represent the new compatibility band. - -### Checking your work -After making a change to `runtimeGroups.props` you can examine the resulting changes in `runtime.json` and `runtime.compatibility.json`. - -`runtime.json` is the graph representation of the RIDs and is what ships in the package. - -`runtime.compatibility.json` is a flattened version of the graph that shows the RID precedence for each RID in the graph. - -### Version compatibility -Version compatibility is represented through imports. If a platform is considered compatible with another version of the same platform, or a specific version of another platform, then it can import that platform. This permits packages to reuse assets that were built for the imported platform on the compatible platform. Compatibility here is a bit nebulous because inevitably different platforms will have observable differences that can cause compatibility problems. For the purposes of RIDs we'll try to represent compatibility as versions of a platform that are explicitly advertised as being compatible with a previous version and/or another platform and don't have any known broad breaking changes. It is usually better to opt to treat platforms as compatible since that enables the scenario of building an asset for a particular version and using that in future versions, otherwise you force people to cross-compile for all future versions the moment they target a specific version. - -## Appendix : details of RID graph generation - -### Naming convention -We use the following convention in all newly-defined RIDs. Some RIDs (win7-x64, win8-x64) predate this convention and don't follow it, but all new RIDs should follow it. -`[os name].[version]-[architecture]-[additional qualifiers]`, for example `osx.10.10-x64` or `ubuntu.14.04-x64` -- `[os name]` can contain any characters other than `.` -- `[version]` can contain any characters other than `-`. Typically a numeric version like 14.04 or 10.0. -- `[architecture]` can contain any characters other than `-`. Typically: `x86`, `x64`, `arm`, `arm64` -- `[additional qualifiers]` can be things like `aot`. Used to further differentiate different platforms. - -For all of these we strive to make them something that can be uniquely discoverable at runtime, so that a RID may be computed from an executing application. As such these properties should be derivable from `/etc/os-release` or similar platform APIs / data. - -### Import convention -Imports should be used when the added RID is considered compatible with an existing RID. - -1. Architecture-specific RIDs should first import the architecture-less RID. EG: `osx.10.11-x64` should first import `osx.10.11`. -2. Architecture-specific RIDs that are compatible with a previous version RID for the same OS should then import the previous version, architecture specific RID. EG: `osx.10.11-x64` should then import `osx.10.10-x64`. If there is no earlier compatible/supported version, then a versionless RID should be imported. EG: `osx.10.10-x64` should import `osx-x64`. -3. Architecture-less RIDs that are compatible with a previous version RID for the same OS should then import the previous version, architecture neutral RID. EG: `osx.10.11` should import `osx.10.10`. If there is no earlier compatible/supported version, then a versionless RID should be imported. EG: `osx.10.10` should import `osx`. -4. Version-less RIDs should import an OS category. EG: `osx-x64` should import `unix-x64`, `osx` should import `unix`. - -### Advanced RuntimeGroup metadata -The following options can be used under special circumstances but break the normal precedence rules we try to establish by generating the RID graph from common logic. These options make it possible to create a RID fallback chain that doesn't match the rest of the RIDs and therefore is hard for developers/package authors to reason about. Only use these options for cases where you know what you are doing and have carefully reviewed the resulting RID fallbacks using the CompatibliltyMap. - -- `OmitRIDs`: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should be omitted from the RuntimeGraph. These RIDs will not be referenced nor defined. -- `OmitRIDDefinitions`: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should be omitted from the RuntimeGraph. These RIDs will not be defined by this RuntimeGroup, but will be referenced: useful in case some other RuntimeGroup (or runtime.json template) defines them. -- `OmitRIDReferences`: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should be omitted from the RuntimeGraph. These RIDs will be defined but not referenced by this RuntimeGroup. +The RID graphs are frozen and shouldn't be updated anymore. Build from source automatically adds the non-portable distro RID encoded via the `OutputRID` property into the RID graph which allows build tools to target that RID. \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs deleted file mode 100644 index f5a33895866d5..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs +++ /dev/null @@ -1,6 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Xunit; - -[assembly: SkipOnPlatform(TestPlatforms.Browser, "MSBuild is not supported on Browser")] \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs deleted file mode 100644 index 63e83a819bd81..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs +++ /dev/null @@ -1,264 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.IO; -using System.Linq; -using System.Runtime.CompilerServices; -using Microsoft.Build.Evaluation; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NuGet.RuntimeModel; -using Xunit; -using Xunit.Abstractions; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - // MSBuild engine is not compatible with single file - [ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.HasAssemblyFiles))] - public class GenerateRuntimeGraphTests - { - private Log _log; - private TestBuildEngine _engine; - - private string defaultRootPath = (PlatformDetection.IsiOS || PlatformDetection.IstvOS) ? Path.GetTempPath() : string.Empty; - private string defaultRuntimeFile = "runtime.json"; - - public GenerateRuntimeGraphTests(ITestOutputHelper output) - { - _log = new Log(output); - _engine = new TestBuildEngine(_log); - - if (PlatformDetection.IsiOS || PlatformDetection.IstvOS) - { - var runtimeJsonPath = Path.Combine(defaultRootPath, defaultRuntimeFile); - File.Copy(defaultRuntimeFile, runtimeJsonPath, true); - - defaultRuntimeFile = runtimeJsonPath; - } - } - - private static ITaskItem[] DefaultRuntimeGroupItems { get; } = GetDefaultRuntimeGroupItems(); - - private static ITaskItem[] GetDefaultRuntimeGroupItems() - { - Project runtimeGroupProps = new Project("runtimeGroups.props"); - - ITaskItem[] runtimeGroups = runtimeGroupProps.GetItems("RuntimeGroupWithQualifiers") - .Select(i => CreateItem(i)).ToArray(); - - Assert.NotEmpty(runtimeGroups); - - return runtimeGroups; - } - - private static ITaskItem CreateItem(ProjectItem projectItem) - { - TaskItem item = new TaskItem(projectItem.EvaluatedInclude); - foreach (var metadatum in projectItem.Metadata) - { - item.SetMetadata(metadatum.Name, metadatum.EvaluatedValue); - } - return item; - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanCreateRuntimeGraph() - { - // will generate and compare to existing file. - GenerateRuntimeGraph task = new GenerateRuntimeGraph() - { - BuildEngine = _engine, - RuntimeGroups = DefaultRuntimeGroupItems, - RuntimeJson = defaultRuntimeFile, - UpdateRuntimeFiles = false - }; - task.Execute(); - - _log.AssertNoErrorsOrWarnings(); - } - - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanIgnoreExistingInferRids() - { - // will generate and compare to existing file. - GenerateRuntimeGraph task = new GenerateRuntimeGraph() - { - BuildEngine = _engine, - RuntimeGroups = DefaultRuntimeGroupItems, - RuntimeJson = defaultRuntimeFile, - AdditionalRuntimeIdentifiers = new[] { "rhel.9-x64", "centos.9-arm64", "win-x64" }, - UpdateRuntimeFiles = false - }; - - _log.Reset(); - task.Execute(); - _log.AssertNoErrorsOrWarnings(); - } - - /// - /// Runs GenerateRuntimeGraph task specifying AdditionalRuntimeIdentifiers then asserts that the - /// generated runtime.json has the expected additions (and no more). - /// - /// additional RIDs - /// entries that are expected to be added to the RuntimeGraph - /// parent to use when adding a new RID - /// a unique prefix to use for the generated - private void AssertRuntimeGraphAdditions(string[] additionalRIDs, RuntimeDescription[] expectedAdditions, string additionalRIDParent = null, [CallerMemberName] string runtimeFilePrefix = null) - { - string runtimeFile = Path.Combine(defaultRootPath, runtimeFilePrefix + ".runtime.json"); - - GenerateRuntimeGraph task = new GenerateRuntimeGraph() - { - BuildEngine = _engine, - RuntimeGroups = DefaultRuntimeGroupItems, - RuntimeJson = runtimeFile, - AdditionalRuntimeIdentifiers = additionalRIDs, - AdditionalRuntimeIdentifierParent = additionalRIDParent, - UpdateRuntimeFiles = true - }; - - _log.Reset(); - task.Execute(); - _log.AssertNoErrorsOrWarnings(); - - RuntimeGraph expected = RuntimeGraph.Merge( - JsonRuntimeFormat.ReadRuntimeGraph(defaultRuntimeFile), - new RuntimeGraph(expectedAdditions)); - - RuntimeGraph actual = JsonRuntimeFormat.ReadRuntimeGraph(runtimeFile); - - // Should this assert fail, it's helpful to diff defaultRuntimeFile and runtimeFile to see the additions. - Assert.Equal(expected, actual); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddVersionsToExistingGroups() - { - var additionalRIDs = new[] { "ubuntu.22.04-arm64" }; - var expectedAdditions = new[] - { - new RuntimeDescription("ubuntu.22.04", new[] { "ubuntu" }), - new RuntimeDescription("ubuntu.22.04-x64", new[] { "ubuntu.22.04", "ubuntu-x64" }), - new RuntimeDescription("ubuntu.22.04-x86", new[] { "ubuntu.22.04", "ubuntu-x86" }), - new RuntimeDescription("ubuntu.22.04-arm", new[] { "ubuntu.22.04", "ubuntu-arm" }), - new RuntimeDescription("ubuntu.22.04-arm64", new[] { "ubuntu.22.04", "ubuntu-arm64" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddParentVersionsToExistingGroups() - { - var additionalRIDs = new[] { "centos.9.2-arm64" }; - var expectedAdditions = new[] - { - new RuntimeDescription("centos.9.2", new[] { "centos", "rhel.9.2" }), - new RuntimeDescription("centos.9.2-x64", new[] { "centos.9.2", "centos-x64", "rhel.9.2-x64" }), - new RuntimeDescription("centos.9.2-arm64", new[] { "centos.9.2", "centos-arm64", "rhel.9.2-arm64" }), - - // rhel RIDs are implicitly created since centos imports versioned RHEL RIDs - new RuntimeDescription("rhel.9.2", new[] { "rhel.9" }), - new RuntimeDescription("rhel.9.2-x64", new[] { "rhel.9.2", "rhel.9-x64" }), - new RuntimeDescription("rhel.9.2-arm64", new[] { "rhel.9.2", "rhel.9-arm64" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddMajorVersionsToExistingGroups() - { - - var additionalRIDs = new[] { "rhel.10-x64" }; - var expectedAdditions = new[] - { - // Note that rhel doesn't treat major versions as compatible, however we do since it's closest and we don't represent this policy in the RuntimeGroups explicitly. - // We could add a rule that wouldn't insert a new major version if we see existing groups are split by major version. - new RuntimeDescription("rhel.10", new[] { "rhel.9" }), - new RuntimeDescription("rhel.10-x64", new[] { "rhel.10", "rhel.9-x64" }), - new RuntimeDescription("rhel.10-arm64", new[] { "rhel.10", "rhel.9-arm64" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddArchitectureToExistingGroups() - { - var additionalRIDs = new[] { "win10-x128" }; - var expectedAdditions = new[] - { - new RuntimeDescription("win10-x128", new[] { "win10", "win81-x128" }), - new RuntimeDescription("win10-x128-aot", new[] { "win10-aot", "win10-x128", "win10", "win81-x128-aot" }), - new RuntimeDescription("win81-x128-aot", new[] { "win81-aot", "win81-x128", "win81", "win8-x128-aot" }), - new RuntimeDescription("win81-x128", new[] { "win81", "win8-x128" }), - new RuntimeDescription("win8-x128-aot", new[] { "win8-aot", "win8-x128", "win8", "win7-x128-aot" }), - new RuntimeDescription("win8-x128", new[] { "win8", "win7-x128" }), - new RuntimeDescription("win7-x128-aot", new[] { "win7-aot", "win7-x128", "win7", "win-x128-aot" }), - new RuntimeDescription("win7-x128", new[] { "win7", "win-x128" }), - new RuntimeDescription("win-x128-aot", new[] { "win-aot", "win-x128" }), - new RuntimeDescription("win-x128", new[] { "win" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddArchitectureAndVersionToExistingGroups() - { - var additionalRIDs = new[] { "osx.13-powerpc" }; - var expectedAdditions = new[] - { - new RuntimeDescription("osx.13-powerpc", new[] { "osx.13", "osx.12-powerpc" }), - new RuntimeDescription("osx.13-arm64", new[] { "osx.13", "osx.12-arm64" }), - new RuntimeDescription("osx.13-x64", new[] { "osx.13", "osx.12-x64" }), - new RuntimeDescription("osx.13", new[] { "osx.12" }), - // our RID model doesn't give priority to architecture, so the new architecture is applied to all past versions - new RuntimeDescription("osx.12-powerpc", new[] { "osx.12", "osx.11.0-powerpc" }), - new RuntimeDescription("osx.11.0-powerpc", new[] { "osx.11.0", "osx.10.16-powerpc" }), - new RuntimeDescription("osx.10.16-powerpc", new[] { "osx.10.16", "osx.10.15-powerpc" }), - new RuntimeDescription("osx.10.15-powerpc", new[] { "osx.10.15", "osx.10.14-powerpc" }), - new RuntimeDescription("osx.10.14-powerpc", new[] { "osx.10.14", "osx.10.13-powerpc" }), - new RuntimeDescription("osx.10.13-powerpc", new[] { "osx.10.13", "osx.10.12-powerpc" }), - new RuntimeDescription("osx.10.12-powerpc", new[] { "osx.10.12", "osx.10.11-powerpc" }), - new RuntimeDescription("osx.10.11-powerpc", new[] { "osx.10.11", "osx.10.10-powerpc" }), - new RuntimeDescription("osx.10.10-powerpc", new[] { "osx.10.10", "osx-powerpc" }), - new RuntimeDescription("unix-powerpc", new[] { "unix" }), - new RuntimeDescription("osx-powerpc", new[] { "osx", "unix-powerpc" }), - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddNewGroups() - { - var additionalRIDs = new[] { "yolinux.42.0-quantum" }; - var expectedAdditions = new[] - { - new RuntimeDescription("unix-quantum", new[] { "unix" }), - new RuntimeDescription("linux-quantum", new[] { "linux", "unix-quantum" }), - new RuntimeDescription("linux-musl-quantum", new[] { "linux-musl", "linux-quantum" }), - new RuntimeDescription("yolinux", new[] { "linux-musl" }), - new RuntimeDescription("yolinux-quantum", new[] { "yolinux", "linux-musl-quantum" }), - new RuntimeDescription("yolinux.42.0", new[] { "yolinux" }), - new RuntimeDescription("yolinux.42.0-quantum", new[] { "yolinux.42.0", "yolinux-quantum" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions, "linux-musl"); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs deleted file mode 100644 index d1e7368ec0882..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Xunit; -using Xunit.Abstractions; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - internal class Log : ILog - { - private readonly ITestOutputHelper _output; - - public Log(ITestOutputHelper output) - { - _output = output; - Reset(); - } - - public int ErrorsLogged { get; set; } - public int WarningsLogged { get; set; } - - public void LogError(string message, params object[] messageArgs) - { - ErrorsLogged++; - _output.WriteLine("Error: " + message, messageArgs); - } - - public void LogMessage(string message, params object[] messageArgs) - { - _output.WriteLine(message, messageArgs); - } - - public void LogMessage(LogImportance importance, string message, params object[] messageArgs) - { - _output.WriteLine(message, messageArgs); - } - - public void LogWarning(string message, params object[] messageArgs) - { - WarningsLogged++; - _output.WriteLine("Warning: " + message, messageArgs); - } - - public void Reset() - { - ErrorsLogged = 0; - WarningsLogged = 0; - } - - public void AssertNoErrorsOrWarnings() - { - Assert.Equal(0, ErrorsLogged); - Assert.Equal(0, WarningsLogged); - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj b/src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj deleted file mode 100644 index d4b11af0a96d6..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - $(NetCoreAppCurrent);$(NetFrameworkToolCurrent) - true - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs deleted file mode 100644 index 8dee0ebeda17a..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Generic; -using Xunit; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - public class RidTests - { - public static IEnumerable ValidRIDData() - { - yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; - yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")}, null }; - yield return new object[] { "linux", new RID() { BaseRID = "linux" }, null }; - yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; - yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; - yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; - yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" }, null }; - yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" }, null }; - yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" }, null }; - yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" }, // demonstrates ambiguity, avoid using `-` in base - new RID() { BaseRID = "foo-bar", Architecture = "arm" } }; - yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" }, // yes, we already have ambiguous RIDs - new RID() { BaseRID = "linux-musl", Architecture = "x64" } }; - } - - [Theory] - [MemberData(nameof(ValidRIDData))] - internal void ParseCorrectly(string input, RID expected, RID? expectedNoQualifier) - { - _ = expectedNoQualifier; // unused - - RID actual = RID.Parse(input, noQualifier: false); - - Assert.Equal(expected, actual); - } - - [Theory] - [MemberData(nameof(ValidRIDData))] - internal void ParseCorrectlyNoQualifier(string input, RID expected, RID? expectedNoQualifier) - { - expectedNoQualifier ??= expected; - - RID actual = RID.Parse(input, noQualifier: true); - - Assert.Equal(expectedNoQualifier, actual); - } - - [Theory] - [MemberData(nameof(ValidRIDData))] - internal void ToStringAsExpected(string expected, RID rid, RID? expectedNoQualifierRid) - { - string actual = rid.ToString(); - - Assert.Equal(expected, actual); - - if (expectedNoQualifierRid is not null) - { - actual = expectedNoQualifierRid.ToString(); - - Assert.Equal(expected, actual); - } - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs deleted file mode 100644 index 2822974acfacc..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs +++ /dev/null @@ -1,233 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Generic; -using Xunit; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - public class RuntimeVersionTests - { - public enum Comparison - { - LessThan, - Equal, - GreaterThan - } - - public static IEnumerable ComparisonData() - { - yield return new object[] { "0.0", "00.0", Comparison.LessThan }; - yield return new object[] { "2.0", "1.0", Comparison.GreaterThan }; - yield return new object[] { "2", "1.0", Comparison.GreaterThan }; - yield return new object[] { "2", "1", Comparison.GreaterThan }; - yield return new object[] { "10", "10.0", Comparison.LessThan }; - yield return new object[] { "10", "10.00", Comparison.LessThan }; - yield return new object[] { "10.0", "10.0", Comparison.Equal }; - yield return new object[] { "10.0", null, Comparison.GreaterThan }; - yield return new object[] { "8", "8", Comparison.Equal }; - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void CompareTo(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - int actual = v1.CompareTo(v2); - int invActual = v2?.CompareTo(v1) ?? -1; - - switch (expected) - { - case Comparison.LessThan: - Assert.True(actual < 0); - Assert.True(invActual > 0); - break; - case Comparison.Equal: - Assert.Equal(0, actual); - Assert.Equal(0, invActual); - break; - case Comparison.GreaterThan: - Assert.True(actual > 0); - Assert.True(invActual < 0); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void GreaterThan(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 > v2; - bool invActual = v2 > v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.False(actual); - Assert.True(invActual); - break; - case Comparison.Equal: - Assert.False(actual); - Assert.False(invActual); - break; - case Comparison.GreaterThan: - Assert.True(actual); - Assert.False(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void GreaterThanOrEqual(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 >= v2; - bool invActual = v2 >= v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.False(actual); - Assert.True(invActual); - break; - case Comparison.Equal: - Assert.True(actual); - Assert.True(invActual); - break; - case Comparison.GreaterThan: - Assert.True(actual); - Assert.False(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void LessThan(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 < v2; - bool invActual = v2 < v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.True(actual); - Assert.False(invActual); - break; - case Comparison.Equal: - Assert.False(actual); - Assert.False(invActual); - break; - case Comparison.GreaterThan: - Assert.False(actual); - Assert.True(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void LessThanOrEqual(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 <= v2; - bool invActual = v2 <= v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.True(actual); - Assert.False(invActual); - break; - case Comparison.Equal: - Assert.True(actual); - Assert.True(invActual); - break; - case Comparison.GreaterThan: - Assert.False(actual); - Assert.True(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void Equal(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 == v2; - bool invActual = v2 == v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.False(actual); - Assert.False(invActual); - break; - case Comparison.Equal: - Assert.True(actual); - Assert.True(invActual); - break; - case Comparison.GreaterThan: - Assert.False(actual); - Assert.False(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void GetHashCodeUnique(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - int h1 = v1.GetHashCode(); - int h2 = v2?.GetHashCode() ?? 0; - - switch (expected) - { - case Comparison.LessThan: - Assert.NotEqual(h1, h2); - break; - case Comparison.Equal: - Assert.Equal(h1, h2); - break; - case Comparison.GreaterThan: - Assert.NotEqual(h1, h2); - break; - } - } - public static IEnumerable ValidVersions() - { - yield return new object[] { "0" }; - yield return new object[] { "00" }; - yield return new object[] { "000" }; - yield return new object[] { "1" }; - yield return new object[] { "1.0" }; - yield return new object[] { "1.1" }; - yield return new object[] { "1.01" }; - yield return new object[] { "1.2.3.4" }; - yield return new object[] { "1.02.03.04" }; - } - - - [MemberData(nameof(ValidVersions))] - [Theory] - public static void RoundTripToString(string expected) - { - RuntimeVersion version = new RuntimeVersion(expected); - string actual = version.ToString(); - Assert.Equal(expected, actual); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs deleted file mode 100644 index 67dfefbe8c8c9..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using System; -using System.Collections; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - public class TestBuildEngine : IBuildEngine - { - private ILog _log; - - public TestBuildEngine(ILog log) - { - ColumnNumberOfTaskNode = 0; - ContinueOnError = true; - LineNumberOfTaskNode = 0; - ProjectFileOfTaskNode = "test"; - _log = log; - } - - public int ColumnNumberOfTaskNode { get; set; } - - public bool ContinueOnError { get; set; } - - public int LineNumberOfTaskNode { get; set; } - - public string ProjectFileOfTaskNode { get; set; } - - public bool BuildProjectFile(string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs) - { - throw new NotImplementedException(); - } - - public void LogCustomEvent(CustomBuildEventArgs e) - { - _log.LogMessage(e.Message); - } - - public void LogErrorEvent(BuildErrorEventArgs e) - { - _log.LogError(e.Message); - } - - public void LogMessageEvent(BuildMessageEventArgs e) - { - _log.LogMessage((LogImportance)e.Importance, e.Message); - } - - public void LogWarningEvent(BuildWarningEventArgs e) - { - _log.LogWarning(e.Message); - } - } -} diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 5b1d2ca95cd27..0afc0908b70c4 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -341,7 +341,6 @@ - - - + + + + diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs b/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs index a60051084135f..867da09df9b67 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs +++ b/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs @@ -34,6 +34,12 @@ public override bool Execute() JObject runtimes = (JObject)json["runtimes"]!; foreach (ITaskItem rid in AdditionalRuntimeIdentifiers!) { + // Skip the RID if it's already in the graph + if (runtimes.ContainsKey(rid.ItemSpec)) + { + continue; + } + string[] importedRids = rid.GetMetadata("Imports").Split(';'); runtimes.Add(rid.ItemSpec, new JObject(new JProperty("#import", new JArray(importedRids)))); } From 277f6172ba8cac2bc50eb34b78469bed9f5f53ca Mon Sep 17 00:00:00 2001 From: Viktor Hofer Date: Mon, 18 Sep 2023 17:25:45 +0200 Subject: [PATCH 4/5] Update src/libraries/Microsoft.NETCore.Platforms/readme.md Co-authored-by: Jan Kotas --- src/libraries/Microsoft.NETCore.Platforms/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.NETCore.Platforms/readme.md b/src/libraries/Microsoft.NETCore.Platforms/readme.md index ae3a062123ab3..d13971838d38c 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/readme.md +++ b/src/libraries/Microsoft.NETCore.Platforms/readme.md @@ -76,4 +76,4 @@ runtimes/win/lib/netstandard1.0/foo.dll When resolving for netstandard1.5/win7-x64 will select `lib/netstandard1.5/foo.dll` for the compile asset and `runtimes/win/lib/netstandard1.0/foo.dll` for the runtime asset. ## Adding new RIDs -The RID graphs are frozen and shouldn't be updated anymore. Build from source automatically adds the non-portable distro RID encoded via the `OutputRID` property into the RID graph which allows build tools to target that RID. \ No newline at end of file +The RID graphs should be only updated with new base OSes. The RID graphs shouldn't be updated with new OS flavor- and version-specific RIDs anymore. Build from source automatically adds the non-portable distro RID encoded via the `OutputRID` property into the RID graph which allows build tools to target that RID. \ No newline at end of file From cbc36776b72465c5b5a8fe49379304ae3c6a0cc8 Mon Sep 17 00:00:00 2001 From: Viktor Hofer Date: Tue, 19 Sep 2023 18:48:59 +0200 Subject: [PATCH 5/5] Update src/libraries/Microsoft.NETCore.Platforms/readme.md Co-authored-by: Andy Gocke --- src/libraries/Microsoft.NETCore.Platforms/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.NETCore.Platforms/readme.md b/src/libraries/Microsoft.NETCore.Platforms/readme.md index d13971838d38c..cca951daaab5f 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/readme.md +++ b/src/libraries/Microsoft.NETCore.Platforms/readme.md @@ -76,4 +76,4 @@ runtimes/win/lib/netstandard1.0/foo.dll When resolving for netstandard1.5/win7-x64 will select `lib/netstandard1.5/foo.dll` for the compile asset and `runtimes/win/lib/netstandard1.0/foo.dll` for the runtime asset. ## Adding new RIDs -The RID graphs should be only updated with new base OSes. The RID graphs shouldn't be updated with new OS flavor- and version-specific RIDs anymore. Build from source automatically adds the non-portable distro RID encoded via the `OutputRID` property into the RID graph which allows build tools to target that RID. \ No newline at end of file +The RID graphs should be only updated with new base OSes, architectures, or C standard libraries. The RID graphs shouldn't be updated with new OS flavor- and version-specific RIDs anymore. Build from source automatically adds the non-portable distro RID encoded via the `OutputRID` property into the RID graph which allows build tools to target that RID. \ No newline at end of file