chore(v2): ensure publishConfig.access presence with tests (#3786)

This commit is contained in:
Sébastien Lorber 2020-11-19 17:14:45 +01:00 committed by GitHub
parent a4e0992b27
commit 04f307cf66
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -12,21 +12,63 @@ import fsCb from 'fs';
const glob = util.promisify(globCb); const glob = util.promisify(globCb);
const readFile = util.promisify(fsCb.readFile); const readFile = util.promisify(fsCb.readFile);
describe('packages', () => { type PackageJsonFile = {
test('should contain repository and directory for every package', async () => { file: string;
const allPackageJson = await glob('packages/*/package.json'); content: any;
expect(allPackageJson.length).toBeGreaterThan(0); };
/* eslint-disable no-await-in-loop,no-restricted-syntax */ async function getPackagesJsonFiles(): Promise<PackageJsonFile[]> {
for (const packageJson of allPackageJson) { const files = await glob('packages/*/package.json');
const content = JSON.parse(await readFile(packageJson, 'utf8')); return Promise.all(
if (content.private !== true) { files.map(async (file) => {
expect(content.repository).toEqual({ return {
file,
content: JSON.parse(await readFile(file, 'utf8')),
};
}),
);
}
describe('packages', () => {
test('should be found', async () => {
const packageJsonFiles = await getPackagesJsonFiles();
expect(packageJsonFiles.length).toBeGreaterThan(0);
});
test('should contain repository and directory for every package', async () => {
const packageJsonFiles = await getPackagesJsonFiles();
packageJsonFiles.forEach((packageJsonFile) => {
if (packageJsonFile.content.private !== true) {
expect(packageJsonFile.content.repository).toEqual({
type: 'git', type: 'git',
url: 'https://github.com/facebook/docusaurus.git', url: 'https://github.com/facebook/docusaurus.git',
directory: packageJson.replace(/\/package\.json$/, ''), directory: packageJsonFile.file.replace(/\/package\.json$/, ''),
}); });
} }
} });
});
/*
If a package starts with @, if won't be published to public npm registry
without an additional publishConfig.acces: "public" config
This will make you publish an incomplete list of Docusaurus packages
when trying to release with lerna-publish
*/
test('should have publishConfig.access: "public" when name starts with @', async () => {
const packageJsonFiles = await getPackagesJsonFiles();
packageJsonFiles.forEach((packageJsonFile) => {
if (packageJsonFile.content.name.startsWith('@')) {
// Unfortunately jest custom message do not exist in loops, so using an exception instead to show failing package file
// (see https://github.com/facebook/jest/issues/3293)
// expect(packageJsonFile.content.publishConfig?.access).toEqual('public');
if (packageJsonFile.content.publishConfig?.access !== 'public') {
throw new Error(
`Package ${packageJsonFile.file} does not have publishConfig.access: 'public'`,
);
}
}
});
}); });
}); });