mirror of
https://github.com/aspnet/JavaScriptServices.git
synced 2025-12-23 01:58:29 +00:00
Add Appveyor builds and webdriver.io tests (tests cover Angular2Spa template only at present)
This commit is contained in:
52
test/templates/util/yeoman.ts
Normal file
52
test/templates/util/yeoman.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import * as childProcess from 'child_process';
|
||||
import * as path from 'path';
|
||||
import * as rimraf from 'rimraf';
|
||||
import * as mkdirp from 'mkdirp';
|
||||
|
||||
const generatorDirRelative = '../templates/package-builder/dist/generator-aspnetcore-spa';
|
||||
const yoPackageDirAbsolute = path.resolve('./node_modules/yo');
|
||||
|
||||
export interface GeneratorOptions {
|
||||
framework: string;
|
||||
name: string;
|
||||
tests?: boolean;
|
||||
}
|
||||
|
||||
export function generateProjectSync(targetDir: string, generatorOptions: GeneratorOptions) {
|
||||
const generatorDirAbsolute = path.resolve(generatorDirRelative);
|
||||
console.log(`Running NPM install to prepare Yeoman generator at ${ generatorDirAbsolute }`);
|
||||
childProcess.execSync(`npm install`, { stdio: 'inherit', cwd: generatorDirAbsolute });
|
||||
|
||||
console.log(`Ensuring empty output directory at ${ targetDir }`);
|
||||
rimraf.sync(targetDir);
|
||||
mkdirp.sync(targetDir);
|
||||
|
||||
const yoExecutableAbsolute = findYeomanCliScript();
|
||||
console.log(`Will invoke Yeoman at ${ yoExecutableAbsolute } to generate application in ${ targetDir } with options:`);
|
||||
console.log(JSON.stringify(generatorOptions, null, 2));
|
||||
const command = `node "${ yoExecutableAbsolute }" "${ path.resolve(generatorDirAbsolute, './app/index.js') }"`;
|
||||
const args = makeYeomanCommandLineArgs(generatorOptions);
|
||||
childProcess.execSync(`${ command } ${ args }`, {
|
||||
stdio: 'inherit',
|
||||
cwd: targetDir
|
||||
});
|
||||
}
|
||||
|
||||
function findYeomanCliScript() {
|
||||
// On Windows, you can't invoke ./node_modules/.bin/yo from the shell for some reason.
|
||||
// So instead, we'll locate the CLI entrypoint that yeoman would expose if it was installed globally.
|
||||
const yeomanPackageJsonPath = path.join(yoPackageDirAbsolute, './package.json');
|
||||
const yeomanPackageJson = require(yeomanPackageJsonPath);
|
||||
const yeomanCliScriptRelative = yeomanPackageJson.bin.yo;
|
||||
if (!yeomanCliScriptRelative) {
|
||||
throw new Error(`Could not find Yeoman CLI script. Looked for a bin/yo entry in ${ yeomanPackageJsonPath }`);
|
||||
}
|
||||
|
||||
return path.join(yoPackageDirAbsolute, yeomanCliScriptRelative);
|
||||
}
|
||||
|
||||
function makeYeomanCommandLineArgs(generatorOptions: GeneratorOptions) {
|
||||
return Object.getOwnPropertyNames(generatorOptions)
|
||||
.map(key => `--${ key }="${ generatorOptions[key] }"`)
|
||||
.join(' ');
|
||||
}
|
||||
Reference in New Issue
Block a user