Add clean-state tests

This commit is contained in:
Leonid Logvinov
2018-03-26 13:00:56 +02:00
parent 26e9696ddb
commit a2e4aaa9a3
101 changed files with 1696 additions and 1378 deletions

View File

@@ -6,3 +6,22 @@ declare module 'es6-promisify';
declare module 'semver-sort' {
const desc: (versions: string[]) => string[];
}
declare interface LernaPackage {
location: string;
package: {
private?: boolean;
name: string;
main?: string;
config?: {
additionalTsTypings?: string[];
};
};
}
declare function lernaGetPackages(path: string): LernaPackage[];
// lerna-get-packages declarations
declare module 'lerna-get-packages' {
export = lernaGetPackages;
}
declare module 'promisify-child-process';

View File

@@ -0,0 +1,57 @@
#!/usr/bin/env node
import * as fs from 'fs';
import lernaGetPackages = require('lerna-get-packages');
import * as _ from 'lodash';
import * as path from 'path';
import { exec as execAsync } from 'promisify-child-process';
import * as rimraf from 'rimraf';
import { utils } from './utils';
(async () => {
const monorepoRootPath = path.join(__dirname, '../../..');
const lernaPackages = lernaGetPackages(monorepoRootPath);
const installablePackages = _.filter(
lernaPackages,
lernaPackage =>
!lernaPackage.package.private &&
!_.isUndefined(lernaPackage.package.main) &&
lernaPackage.package.main.endsWith('.js'),
);
for (const installableLernaPackage of installablePackages) {
const packagePath = installableLernaPackage.location;
const packageName = installableLernaPackage.package.name;
utils.log(`Testing ${packageName}`);
let result = await execAsync('npm pack', { cwd: packagePath });
const packedPackageFileName = result.stdout.trim();
const testDirectory = path.join(monorepoRootPath, '../test-env');
fs.mkdirSync(testDirectory);
result = await execAsync('yarn init --yes', { cwd: testDirectory });
utils.log(`Installing ${packedPackageFileName}`);
result = await execAsync(`yarn add ${packagePath}/${packedPackageFileName}`, { cwd: testDirectory });
const indexFilePath = path.join(testDirectory, 'index.ts');
fs.writeFileSync(indexFilePath, `import * as Package from '${packageName}'`);
const tsConfig = {
compilerOptions: {
module: 'commonjs',
target: 'es5',
lib: ['es2017', 'dom'],
declaration: true,
noImplicitReturns: true,
pretty: true,
strict: true,
},
include: ['index.ts'],
};
const tsconfigFilePath = path.join(testDirectory, 'tsconfig.json');
fs.writeFileSync(tsconfigFilePath, JSON.stringify(tsConfig, null, 4));
utils.log(`Compiling ${packageName}`);
await execAsync('../node_modules/typescript/bin/tsc', { cwd: testDirectory });
utils.log(`Successfully compiled with ${packageName} as a dependency`);
rimraf.sync(testDirectory);
}
})().catch(err => {
utils.log(err.stdout);
process.exit(1);
});