Add clean-state tests
This commit is contained in:
19
packages/monorepo-scripts/src/globals.d.ts
vendored
19
packages/monorepo-scripts/src/globals.d.ts
vendored
@@ -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';
|
||||
|
57
packages/monorepo-scripts/src/test_installation.ts
Normal file
57
packages/monorepo-scripts/src/test_installation.ts
Normal 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);
|
||||
});
|
Reference in New Issue
Block a user