diff --git a/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/Program.cs b/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/Program.cs index 74c6236bf9d0..62c12263f627 100644 --- a/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/Program.cs +++ b/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/Program.cs @@ -19,6 +19,9 @@ static Task Main(string[] args) var output = new Option(name: "--output", description: "The output file path.", getDefaultValue: () => "swagger.json"); + var useTagForOutput = new Option(name: "--use-tag-for-output", description: "If set to true the output file will be named with the readmeTag used for the run", + getDefaultValue: () => false); + var readmeFile = new Option(name: "--readme", "The input readme file."); var readmeTag = new Option(name: "--tag", description: "Readme tag used to generate swagger apiView", @@ -37,6 +40,7 @@ static Task Main(string[] args) { swaggers, output, + useTagForOutput, packageName, swaggerLinks, readmeFile, @@ -46,7 +50,7 @@ static Task Main(string[] args) cmd.Description = "Parse swagger file into codefile."; - cmd.SetHandler(async (IEnumerable swaggerFiles, string outputFile, string package, IEnumerable links, string readme, string tag) => + cmd.SetHandler(async (IEnumerable swaggerFiles, string outputFile, bool useTagForOutputFileName, string package, IEnumerable links, string readme, string tag) => { var swaggerLinksArray = links.ToList(); @@ -56,20 +60,20 @@ static Task Main(string[] args) { readme = Path.GetFullPath(readme); } - await HandleGenerateCodeFile(enumerable, outputFile, package, swaggerLinksArray, readme, tag); - }, swaggers, output, packageName, swaggerLinks, readmeFile, readmeTag); + await HandleGenerateCodeFile(enumerable, outputFile, useTagForOutputFileName, package, swaggerLinksArray, readme, tag); + }, swaggers, output, useTagForOutput, packageName, swaggerLinks, readmeFile, readmeTag); return Task.FromResult(cmd.Invoke(args)); } - static async Task HandleGenerateCodeFile(IEnumerable swaggers, string output, string packageName, List swaggerLinks, string readmeFile, string readmeTag) + static async Task HandleGenerateCodeFile(IEnumerable swaggers, string output, bool useTagForOutput, string packageName, List swaggerLinks, string readmeFile, string readmeTag) { var swaggerFilePaths = swaggers.ToList(); if (readmeFile != null) { var readmeFileDir = Path.GetDirectoryName(readmeFile); - var swaggerFiles = ReadmeParser.GetSwaggerFilesFromReadme(readmeFile, readmeTag); + var swaggerFiles = ReadmeParser.GetSwaggerFilesFromReadme(readmeFile, ref readmeTag); swaggerFilePaths = swaggerFilePaths.Concat(swaggerFiles.Select(it => Path.Join(readmeFileDir, it))).ToList(); } @@ -114,6 +118,13 @@ static async Task HandleGenerateCodeFile(IEnumerable swaggers, string ou var codeFile = root.GenerateCodeFile(); var outputFilePath = Path.GetFullPath(output); + + if (useTagForOutput) + { + output = $"{readmeTag}.json"; + outputFilePath = Path.Combine(Path.GetDirectoryName(outputFilePath), output); + } + await using FileStream writer = File.Open(outputFilePath, FileMode.Create); Console.WriteLine($"Generate codefile {output} successfully."); await codeFile.SerializeAsync(writer); diff --git a/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/ReadmeParser.cs b/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/ReadmeParser.cs index 1905aca4eae7..68a66d886706 100644 --- a/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/ReadmeParser.cs +++ b/tools/apiview/parsers/swagger-api-parser/SwaggerApiParser/ReadmeParser.cs @@ -43,17 +43,17 @@ public static string GetTagFromYamlArguments(string arguments) return matchResult.Success ? matchResult.Groups[1].Value : ""; } - public static IEnumerable GetSwaggerFilesFromReadme(string readme, string tag) + public static IEnumerable GetSwaggerFilesFromReadme(string readme, ref string tag) { ReadmeParser parser = new ReadmeParser(readme); parser.ParseReadmeConfig(); - string readmeTag = tag; + if (tag == "default" && parser.basicConfig != null) { - readmeTag = parser.basicConfig.tag; + tag = parser.basicConfig.tag; } - parser.inputSwaggerFilesMap.TryGetValue(readmeTag, out InputSwaggerFiles inputFiles); + parser.inputSwaggerFilesMap.TryGetValue(tag, out InputSwaggerFiles inputFiles); return inputFiles?.input ?? Enumerable.Empty(); } private void ParseReadmeConfig()