1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00

Tools: Added tool to get the list of package licenses

This commit is contained in:
Laurent Cozic 2022-03-10 16:03:51 +00:00
parent dc60da219a
commit 50890a7b2b
4 changed files with 85 additions and 1 deletions

View File

@ -1966,6 +1966,9 @@ packages/tools/generate-images.js.map
packages/tools/git-changelog.d.ts
packages/tools/git-changelog.js
packages/tools/git-changelog.js.map
packages/tools/licenseChecker.d.ts
packages/tools/licenseChecker.js
packages/tools/licenseChecker.js.map
packages/tools/release-android.d.ts
packages/tools/release-android.js
packages/tools/release-android.js.map

3
.gitignore vendored
View File

@ -1956,6 +1956,9 @@ packages/tools/generate-images.js.map
packages/tools/git-changelog.d.ts
packages/tools/git-changelog.js
packages/tools/git-changelog.js.map
packages/tools/licenseChecker.d.ts
packages/tools/licenseChecker.js
packages/tools/licenseChecker.js.map
packages/tools/release-android.d.ts
packages/tools/release-android.js
packages/tools/release-android.js.map

View File

@ -0,0 +1,78 @@
import { readdir, stat, writeFile } from 'fs-extra';
import { chdir, cwd } from 'process';
import { execCommand2, rootDir } from './tool-utils';
interface LicenseInfo {
licenses: string;
repository: string;
path: string;
}
const getLicenses = async (directory: string): Promise<Record<string, LicenseInfo>> => {
const previousDir = cwd();
await chdir(directory);
const result = await execCommand2(['license-checker-rseidelsohn', '--production', '--json'], { quiet: true });
const info: Record<string, LicenseInfo> = JSON.parse(result);
if (!info) throw new Error(`Could not parse JSON: ${directory}`);
await chdir(previousDir);
return info;
};
const createCsvLine = (items: string[]) => {
try {
return `"${items.map(i => i.replace(/"/g, '""')).join('", "')}"`;
} catch (error) {
error.message = `Could not process line: ${JSON.stringify(items)}: ${error.message}`;
throw error;
}
};
const enforceString = (line: any): string => {
if (Array.isArray(line)) return line.join(', ');
return line ? (`${line}`) : '';
};
async function main() {
const directories: string[] = [];
const packageItems = await readdir(`${rootDir}/packages`);
for (const item of packageItems) {
const fullPath = `${rootDir}/packages/${item}`;
const info = await stat(fullPath);
if (info.isDirectory()) directories.push(fullPath);
}
directories.push(rootDir);
let licenses: Record<string, LicenseInfo> = {};
for (const dir of directories) {
console.info(`Processing ${dir}...`);
const dirLicenses = await getLicenses(dir);
for (const [, v] of Object.entries(dirLicenses)) {
v.path = dir.substr(rootDir.length);
}
licenses = { ...licenses, ...dirLicenses };
}
const csv: string[][] = [];
csv.push(['Package', 'Licenses', 'Repository', 'Path']);
for (const [packageName, info] of Object.entries(licenses)) {
csv.push([
enforceString(packageName),
enforceString(info.licenses),
enforceString(info.repository),
enforceString(info.path),
]);
}
const outputFile = `${rootDir}/licenses.csv`;
await writeFile(outputFile, csv.map(line => createCsvLine(line)).join('\n'));
console.info(`Created summary in ${outputFile}`);
}
main().catch((error) => {
console.error('Fatal error');
console.error(error);
process.exit(1);
});

View File

@ -127,7 +127,7 @@ async function saveGitHubUsernameCache(cache: any) {
}
// Returns the project root dir
export const rootDir = require('path').dirname(require('path').dirname(__dirname));
export const rootDir: string = require('path').dirname(require('path').dirname(__dirname));
export function execCommand(command: string, options: any = null): Promise<string> {
options = options || {};