From 8e73cb5b59eceea8f8e09c90d8e47e96ff6d5b4d Mon Sep 17 00:00:00 2001 From: Timothy Johnson Date: Tue, 30 Jan 2024 16:00:44 -0500 Subject: [PATCH 1/2] Add script to build offline tgz for CLI package Signed-off-by: Timothy Johnson --- package.json | 3 ++- scripts/bundleCliTgz.js | 49 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 scripts/bundleCliTgz.js diff --git a/package.json b/package.json index 7f7a132acb..953f93846a 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "typedoc:packages": "lerna run --parallel typedoc", "audit:public": "npm audit --registry https://registry.npmjs.org/", "bundle:webHelp": "cd packages/imperative/web-help && node build.js", - "prepare": "husky install && npm run bundle:webHelp" + "prepare": "husky install && npm run bundle:webHelp", + "package": "node scripts/bundleCliTgz.js" }, "dependencies": {}, "devDependencies": { diff --git a/scripts/bundleCliTgz.js b/scripts/bundleCliTgz.js new file mode 100644 index 0000000000..ab06e9c232 --- /dev/null +++ b/scripts/bundleCliTgz.js @@ -0,0 +1,49 @@ +/* +* This program and the accompanying materials are made available under the terms of the +* Eclipse Public License v2.0 which accompanies this distribution, and is available at +* https://www.eclipse.org/legal/epl-v20.html +* +* SPDX-License-Identifier: EPL-2.0 +* +* Copyright Contributors to the Zowe Project. +* +*/ + +const childProcess = require("child_process"); +const fs = require("fs-extra"); +const path = require("path"); + +// Workaround for https://github.com/npm/cli/issues/3466 +process.chdir(__dirname + "/.."); +const cliPkgDir = path.join(process.cwd(), "packages", "cli"); +const pkgJsonFile = path.join(cliPkgDir, "package.json"); +const execCmd = (cmd) => childProcess.execSync(cmd, { cwd: cliPkgDir, stdio: "inherit" }); +fs.mkdirpSync("dist"); +fs.renameSync(path.join(cliPkgDir, "node_modules"), path.join(cliPkgDir, "node_modules_old")); +fs.copyFileSync(pkgJsonFile, pkgJsonFile + ".bak"); + +try { + // Install node_modules directly inside packages/cli + execCmd("npm run preshrinkwrap"); + execCmd("npm install --ignore-scripts --workspaces=false"); + for (const zowePkgDir of fs.readdirSync(path.join(cliPkgDir, "node_modules", "@zowe"))) { + const srcDir = path.join("node_modules", "@zowe", zowePkgDir); + const destDir = path.join(cliPkgDir, srcDir); + fs.rmSync(destDir, { recursive: true, force: true }); + fs.copySync(fs.realpathSync(srcDir), destDir); + } + + // Define bundled dependencies in package.json and package the TGZ + const pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, "utf-8")); + pkgJson.bundledDependencies = [ + ...Object.keys(pkgJson.dependencies), + ...Object.keys(pkgJson.optionalDependencies ?? {}) + ]; + fs.writeFileSync(pkgJsonFile, JSON.stringify(pkgJson, null, 2)); + execCmd("npm pack --pack-destination=../../dist"); +} finally { + fs.rmSync(path.join(cliPkgDir, "node_modules"), { recursive: true, force: true }); + fs.renameSync(path.join(cliPkgDir, "node_modules_old"), path.join(cliPkgDir, "node_modules")); + fs.rmSync(path.join(cliPkgDir, "npm-shrinkwrap.json"), { force: true }); + fs.renameSync(pkgJsonFile + ".bak", pkgJsonFile); +} From 3dcafb94544439678181936223768d44daac97f1 Mon Sep 17 00:00:00 2001 From: Timothy Johnson Date: Tue, 30 Jan 2024 16:00:54 -0500 Subject: [PATCH 2/2] Add dist to gitignore and fix lint warning Signed-off-by: Timothy Johnson --- .gitignore | 1 + .../imperative/src/plugins/utilities/npm-interface/uninstall.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ce098d3bf2..c056f35af1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ CCS141/ src/brightside.iml package-lock.json /packages/cli/npm-shrinkwrap.json +/dist/ # Sonar Files .sonar_lock .scannerwork/ diff --git a/packages/imperative/src/imperative/src/plugins/utilities/npm-interface/uninstall.ts b/packages/imperative/src/imperative/src/plugins/utilities/npm-interface/uninstall.ts index f3661a7687..c03909a690 100644 --- a/packages/imperative/src/imperative/src/plugins/utilities/npm-interface/uninstall.ts +++ b/packages/imperative/src/imperative/src/plugins/utilities/npm-interface/uninstall.ts @@ -62,7 +62,7 @@ export const updateAndGetRemovedTypes = (npmPackage: string): string[] => { } return typesToRemove; -} +}; /** * @TODO - allow multiple packages to be uninstalled?