ci(docs-infra): test docs examples with Ivy (#28463)

PR Close #28463
This commit is contained in:
Brandon
2019-02-05 21:20:05 +00:00
committed by Miško Hevery
parent 570f735a2a
commit 99e3a04ea2
10 changed files with 1142 additions and 601 deletions

View File

@ -78,23 +78,38 @@ BOILERPLATE_PATHS.universal = [
'package.json'
];
BOILERPLATE_PATHS.ivy = {
systemjs: [
'rollup-config.js',
'tsconfig-aot.json'
],
cli: [
'src/tsconfig.app.json'
]
};
const EXAMPLE_CONFIG_FILENAME = 'example-config.json';
class ExampleBoilerPlate {
/**
* Add boilerplate files to all the examples
*/
add() {
add(ivy = false) {
// Get all the examples folders, indicated by those that contain a `example-config.json` file
const exampleFolders = this.getFoldersContaining(EXAMPLES_BASE_PATH, EXAMPLE_CONFIG_FILENAME, 'node_modules');
if (!fs.existsSync(SHARED_NODE_MODULES_PATH)) {
throw new Error(`The shared node_modules folder for the examples (${SHARED_NODE_MODULES_PATH}) is missing.\n` +
`Perhaps you need to run "yarn example-use-npm" or "yarn example-use-local" to install the dependencies?`);
}
if (ivy) {
shelljs.exec(`yarn --cwd ${SHARED_PATH} ivy-ngcc`);
}
exampleFolders.forEach(exampleFolder => {
const exampleConfig = this.loadJsonFile(path.resolve(exampleFolder, EXAMPLE_CONFIG_FILENAME));
if (!fs.existsSync(SHARED_NODE_MODULES_PATH)) {
throw new Error(`The shared node_modules folder for the examples (${SHARED_NODE_MODULES_PATH}) is missing.\n` +
`Perhaps you need to run "yarn example-use-npm" or "yarn example-use-local" to install the dependencies?`);
}
// Link the node modules - requires admin access (on Windows) because it adds symlinks
const destinationNodeModules = path.resolve(exampleFolder, 'node_modules');
fs.ensureSymlinkSync(SHARED_NODE_MODULES_PATH, destinationNodeModules);
@ -107,6 +122,12 @@ class ExampleBoilerPlate {
// Copy the boilerplate common files
BOILERPLATE_PATHS.common.forEach(filePath => this.copyFile(BOILERPLATE_COMMON_BASE_PATH, exampleFolder, filePath));
// Copy Ivy specific files
if (ivy && BOILERPLATE_PATHS.ivy[boilerPlateType]) {
const ivyBoilerPlateBasePath = path.resolve(BOILERPLATE_BASE_PATH, 'ivy', boilerPlateType);
BOILERPLATE_PATHS.ivy[boilerPlateType].forEach(filePath => this.copyFile(ivyBoilerPlateBasePath, exampleFolder, filePath));
}
});
}
@ -114,13 +135,13 @@ class ExampleBoilerPlate {
* Remove all the boilerplate files from all the examples
*/
remove() {
shelljs.exec('git clean -xdfq', {cwd: EXAMPLES_BASE_PATH});
shelljs.exec('git clean -xdfq', { cwd: EXAMPLES_BASE_PATH });
}
main() {
yargs
.usage('$0 <cmd> [args]')
.command('add', 'add the boilerplate to each example', () => this.add())
.command('add', 'add the boilerplate to each example', (yrgs) => this.add(yrgs.argv.ivy))
.command('remove', 'remove the boilerplate from each example', () => this.remove())
.demandCommand(1, 'Please supply a command from the list above')
.argv;
@ -144,7 +165,7 @@ class ExampleBoilerPlate {
}
loadJsonFile(filePath) {
return fs.readJsonSync(filePath, {throws: false}) || {};
return fs.readJsonSync(filePath, { throws: false }) || {};
}
normalizePath(filePath) {