Skip to content

Commit 4f85509

Browse files
committed
Output generateOutput.json
1 parent 06d2cc1 commit 4f85509

File tree

6 files changed

+54
-19
lines changed

6 files changed

+54
-19
lines changed

.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"cwd": "${workspaceFolder}/generator",
4747
"args": [
4848
"${workspaceFolder}/generator/cmd/generateall.ts",
49-
"{\"localPath\":\"/home/me/workspace/azure-rest-api-specs\",\"readmeFiles\":[\"specification/signalr/resource-manager/readme.md\",\"specification/appplatform/resource-manager/readme.md\"]}"
49+
"{\"localPath\":\"/home/me/workspace/azure-rest-api-specs\",\"readmeFiles\":[\"specification/signalr/resource-manager/readme.md\",\"specification/appplatform/resource-manager/readme.md\"],\"outputPath\":\"../generateOutput.json\"}"
5050
]
5151
}
5252
],

generator/cmd/generateall.ts

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import * as constants from '../constants';
2-
import { cloneAndGenerateBasePaths, resolveLocalPath, validateAndReturnReadmePath } from '../specs';
2+
import { cloneAndGenerateBasePaths, getPackageString, resolveAbsolutePath, validateAndReturnReadmePath } from '../specs';
33
import { SchemaConfiguration, generateSchemas, clearAutogeneratedSchemaRefs, saveAutogeneratedSchemaRefs } from '../generate';
44
import { getAutogenlist } from '../autogenlist';
55
import chalk from 'chalk';
66
import { flatten } from 'lodash';
7-
import { executeSynchronous, chunker } from '../utils';
7+
import { executeSynchronous, chunker, writeJsonFile } from '../utils';
8+
import { Package } from '../models';
89

910
interface GenerateAllParams {
1011
batchCount?: number,
1112
batchIndex?: number,
1213
localPath?: string,
1314
readmeFiles?: string[],
15+
outputPath?: string,
1416
}
1517

1618
function parseParams(): GenerateAllParams {
@@ -34,36 +36,55 @@ executeSynchronous(async () => {
3436
localPath = constants.specsRepoPath;
3537
await cloneAndGenerateBasePaths(localPath, constants.specsRepoUri, constants.specsRepoCommitHash);
3638
} else {
37-
localPath = await resolveLocalPath(localPath);
39+
localPath = await resolveAbsolutePath(localPath);
3840
}
3941

4042
if (!!params.readmeFiles) {
41-
filteredAutogenlist = filteredAutogenlist.filter(c =>
42-
!!(params.readmeFiles?.find(f => f.startsWith('specification/' + c.basePath)))
43+
filteredAutogenlist = filteredAutogenlist.filter(c => {
44+
let r = params.readmeFiles?.find(f => f.startsWith('specification/' + c.basePath));
45+
if (!!r) {
46+
c.readmeFile = r;
47+
return true;
48+
}
49+
return false;
50+
}
4351
);
4452
}
4553

4654
await clearAutogeneratedSchemaRefs(filteredAutogenlist);
4755

4856
const schemaConfigs: SchemaConfiguration[] = [];
4957
const errors = [];
58+
const packages: Package[] = [];
5059
for (const autogenlistConfig of filteredAutogenlist) {
60+
let pkg = {} as Package;
5161
try {
52-
const readme = await validateAndReturnReadmePath(localPath, autogenlistConfig.basePath);
62+
const readme = await validateAndReturnReadmePath(localPath, autogenlistConfig.readmeFile || autogenlistConfig.basePath);
63+
pkg.packageName = getPackageString(readme);
5364

5465
const newConfigs = await generateSchemas(readme, autogenlistConfig);
5566
schemaConfigs.push(...newConfigs);
67+
pkg.result = 'succeeded';
5668
} catch(error) {
69+
pkg.packageName = autogenlistConfig.basePath;
70+
pkg.result = 'failed';
5771
console.log(chalk.red(`Caught exception processing autogenlist entry ${autogenlistConfig.basePath}.`));
5872
console.log(chalk.red(error));
5973

6074
errors.push(error);
6175
}
76+
packages.push(pkg);
6277
}
6378

6479
await saveAutogeneratedSchemaRefs(flatten(schemaConfigs));
6580

66-
if (errors.length > 0) {
67-
throw new Error(`Autogeneration failed with ${errors.length} errors. See logs for detailed information.`);
81+
if (!!params.outputPath) {
82+
const outputPath = await resolveAbsolutePath(params.outputPath);
83+
await writeJsonFile(outputPath, { packages });
84+
} else {
85+
if (errors.length > 0) {
86+
throw new Error(`Autogeneration failed with ${errors.length} errors. See logs for detailed information.`);
87+
}
6888
}
89+
6990
});

generator/cmd/generatesingle.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as constants from '../constants';
2-
import { cloneAndGenerateBasePaths, resolveLocalPath, validateAndReturnReadmePath } from '../specs';
2+
import { cloneAndGenerateBasePaths, resolveAbsolutePath, validateAndReturnReadmePath, getPackageString } from '../specs';
33
import { generateSchemas, saveAutogeneratedSchemaRefs } from '../generate';
44
import process from 'process';
55
import { findAutogenEntries } from '../autogenlist';
@@ -13,7 +13,7 @@ executeSynchronous(async () => {
1313
localPath = constants.specsRepoPath;
1414
await cloneAndGenerateBasePaths(localPath, constants.specsRepoUri, constants.specsRepoCommitHash);
1515
} else {
16-
localPath = await resolveLocalPath(localPath);
16+
localPath = await resolveAbsolutePath(localPath);
1717
}
1818

1919
let readme = '';

generator/models.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export enum ScopeType {
1111
export interface AutogenlistConfig {
1212
basePath: string,
1313
namespace: string,
14+
readmeFile?: string,
1415
suffix?: string,
1516
resourceConfig?: AutogenlistResourceConfig[],
1617
postProcessor?: SchemaPostProcessor,
@@ -23,4 +24,9 @@ export interface AutogenlistResourceConfig {
2324

2425
export interface SchemaPostProcessor {
2526
(namespace: string, apiVersion: string, schema: any): void,
27+
}
28+
29+
export interface Package {
30+
packageName?: string,
31+
result: 'succeeded' | 'failed' | 'warning'
2632
}

generator/specs.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,20 @@ import * as constants from './constants'
77

88
const exists = promisify(fs.exists);
99

10-
export async function resolveLocalPath(localPath: string) {
10+
export async function resolveAbsolutePath(localPath: string) {
1111
if (path.isAbsolute(localPath)) {
1212
return path.resolve(localPath);
1313
}
1414
return path.resolve(constants.generatorRoot, localPath);
1515
}
1616

17-
export async function resolveReadmePath(localPath: string, basePath: string) {
18-
const readmePath = path.join(localPath, 'specification', basePath, 'readme.md');
19-
20-
return path.resolve(readmePath);
21-
}
22-
2317
export async function validateAndReturnReadmePath(localPath: string, basePath: string) {
24-
const readme = await resolveReadmePath(localPath, basePath);
18+
let readme = '';
19+
if (basePath.toLowerCase().endsWith('readme.md')) {
20+
readme = path.resolve(localPath, basePath);
21+
} else {
22+
readme = path.resolve(localPath, 'specification', basePath, 'readme.md')
23+
}
2524

2625
if (!await exists(readme)) {
2726
throw new Error(`Unable to find readme '${readme}' in specs repo`);
@@ -58,6 +57,12 @@ export function getBasePathString(localPath: string, basePath: string) {
5857
.join('/');
5958
}
6059

60+
export function getPackageString(readme: string) {
61+
return readme
62+
.split(path.sep)
63+
.find((_, index, obj) => index > 0 && obj[index - 1] === 'specification');
64+
}
65+
6166
function isBlocklisted(basePath: string) {
6267
return constants.blocklist.includes(basePath);
6368
}

swagger_to_sdk_config.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"path": ".sdkauto/generateScript.sh"
1313
}
1414
},
15+
"packageOptions": {
16+
"packageFolderFromFileSearch": false
17+
},
1518
"advancedOptions": {
1619
"closeIntegrationPR": false,
1720
"draftIntegrationPR": false,

0 commit comments

Comments
 (0)