in eng/tools/spec-gen-sdk-runner/src/commands.ts [162:257]
export async function generateSdkForBatchSpecs(batchType: string): Promise<number> {
// Parse the arguments
const commandInput: SpecGenSdkCmdInput = parseArguments();
// Construct the spec-gen-sdk command
const specGenSdkCommand = prepareSpecGenSdkCommand(commandInput);
// Get the spec paths based on the batch run type
const specConfigPaths = getSpecPaths(batchType, commandInput.localSpecRepoPath);
// Prepare variables
let statusCode = 0;
let markdownContent = "\n";
let failedContent = `## Spec Failures in the Generation Process\n`;
let succeededContent = `## Successful Specs in the Generation Process\n`;
let notEnabledContent = `## Specs with SDK Not Enabled\n`;
let failedCount = 0;
let notEnabledCount = 0;
let succeededCount = 0;
let executionReport;
// Generate SDKs for each spec
for (const specConfigPath of specConfigPaths) {
logMessage(`Generating SDK from ${specConfigPath}`, LogLevel.Group);
if (specConfigPath.endsWith("tspconfig.yaml")) {
specGenSdkCommand.push("--tsp-config-relative-path", specConfigPath);
} else {
specGenSdkCommand.push("--readme-relative-path", specConfigPath);
}
logMessage(`Runner command:${specGenSdkCommand.join(" ")}`);
try {
await resetGitRepo(commandInput.localSdkRepoPath);
await runSpecGenSdkCommand(specGenSdkCommand);
logMessage("Runner command executed successfully");
} catch (error) {
logMessage(`Runner: error executing command:${error}`, LogLevel.Error);
statusCode = 1;
}
// Pop the spec config path from the command
specGenSdkCommand.pop();
specGenSdkCommand.pop();
try {
// Read the execution report to determine if the generation was successful
executionReport = getExecutionReport(commandInput);
const executionResult = executionReport.executionResult;
logMessage(`Runner: command execution result:${executionResult}`);
if (executionResult === "succeeded" || executionResult === "warning") {
succeededContent += `${specConfigPath},`;
succeededCount++;
} else if (executionResult === "notEnabled") {
notEnabledContent += `${specConfigPath},`;
notEnabledCount++;
} else {
failedContent += `${specConfigPath},`;
failedCount++;
}
} catch (error) {
logMessage(`Runner: error reading execution-report.json:${error}`, LogLevel.Error);
statusCode = 1;
}
logMessage("ending group logging", LogLevel.EndGroup);
logIssuesToPipeline(executionReport?.vsoLogPath, specConfigPath);
}
if (failedCount > 0) {
markdownContent += `${failedContent}\n`;
}
if (notEnabledCount > 0) {
markdownContent += `${notEnabledContent}\n`;
}
if (succeededCount > 0) {
markdownContent += `${succeededContent}\n`;
}
markdownContent += failedCount ? `## Total Failed Specs\n ${failedCount}\n` : "";
markdownContent += notEnabledCount
? `## Total Specs with SDK not enabled in the Configuration\n ${notEnabledCount}\n`
: "";
markdownContent += succeededCount ? `## Total Successful Specs\n ${succeededCount}\n` : "";
markdownContent += `## Total Specs Count\n ${specConfigPaths.length}\n\n`;
// Write the markdown content to a file
const markdownFilePath = path.join(commandInput.workingFolder, "out/logs/generation-summary.md");
try {
if (fs.existsSync(markdownFilePath)) {
fs.rmSync(markdownFilePath);
}
fs.writeFileSync(markdownFilePath, markdownContent);
logMessage(`Runner: markdown file written to ${markdownFilePath}`);
vsoAddAttachment("Generation Summary", markdownFilePath);
} catch (error) {
vsoLogIssue(`Runner: error writing markdown file ${markdownFilePath}:${error}`);
statusCode = 1;
}
return statusCode;
}