Skip to content

Commit

Permalink
Remove examples and other unwanted artifacts from installed dependencies
Browse files Browse the repository at this point in the history
Signed-off-by: Miki <miki@amazon.com>
  • Loading branch information
AMoo-Miki committed Sep 1, 2023
1 parent 83cd7f6 commit 6af2d23
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"author": "opensearch-project",
"scripts": {
"preinstall": "scripts/use_node ./preinstall_check",
"postinstall": "scripts/use_node scripts/postinstall",
"osd": "scripts/use_node scripts/osd",
"opensearch": "scripts/use_node scripts/opensearch",
"test": "grunt test",
Expand Down
41 changes: 41 additions & 0 deletions scripts/postinstall.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

/* eslint no-restricted-syntax: 0 */

const fs = require('fs/promises');

/**
* Some libraries pack their demos and examples into their release artifacts.
* This unwanted content makes our release artifacts larger but more importantly,
* some contain in-browser references to outdated and vulnerable versions of
* libraries that are not even mentioned in the dependency tree. This is a
* problem when vulnerability scanners point them out, and we have no way to fix
* them. This function looks for folders that are unwanted and deletes them.
*/
const removeUnwantedFolders = async (root, unwantedNames) => {
const items = await fs.readdir(root, { withFileTypes: true });
const promises = [];
for (const item of items) {
if (!item.isDirectory()) continue;

if (unwantedNames.includes(item.name)) {
promises.push(fs.rm(`${root}/${item.name}`, { recursive: true, force: true }));
} else {
promises.push(...(await removeUnwantedFolders(`${root}/${item.name}`, unwantedNames)));
}
}

return promises;
};
const run = async () => {
const promises = await removeUnwantedFolders('node_modules', ['demo', 'example', 'examples']);
await Promise.all(promises);
};

run().catch((err) => {
console.error(err);
process.exit(1);
});

0 comments on commit 6af2d23

Please sign in to comment.