Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Master] chore: Add packaging helper script #2280

Merged
merged 1 commit into from
Feb 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 0 additions & 19 deletions common/config/rush/npm-shrinkwrap.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"ai-min": "node common/scripts/install-run-rush.js ai-min",
"ai-restore": "node common/scripts/install-run-rush.js ai-restore",
"npm-pack": "node common/scripts/install-run-rush.js npm-pack --verbose",
"npm-publish": "node ./tools/release-tools/npm_publish.js"
"npm-publish": "node ./tools/release-tools/npm_publish.js",
"npm-package": "node ./tools/release-tools/npm_package.js"
},
"repository": {
"type": "git",
Expand Down
166 changes: 166 additions & 0 deletions tools/release-tools/npm_package.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
const fs = require("fs");
const child_process = require("child_process");

const packageGroupDef = "./tools/release-tools/package_groups.json";
let packageGroup;
let dropFolder;
let dryRun = "";

function showHelp() {
var scriptParts;
var scriptName = process.argv[1];
if (scriptName.indexOf("\\") !== -1) {
scriptParts = scriptName.split("\\");
scriptName = scriptParts[scriptParts.length - 1];
} else if (scriptName.indexOf("/") !== -1) {
scriptParts = scriptName.split("/");
scriptName = scriptParts[scriptParts.length - 1];
}

console.log("");
console.log(scriptName + " <group> ");
console.log("--------------------------");
console.log(" <group> - Identifies the group to publish, identifies folders, the group must be defined in package_groups.json");
console.log(" <dropFolder> - Identifies the base folder to drop the packages into, defaults to ./drop/packages/<group>");
}

function parseArgs() {
console.log("Parsing args - " + process.argv.join(" "));
if (process.argv.length < 2) {
console.error("!!! Invalid number of arguments -- " + process.argv.length);
return false;
}

let idx = 2;
while (idx < process.argv.length) {
let theArg = process.argv[idx];
if (theArg.startsWith("-")) {
if (theArg === "-test") {
dryRun = "--dry-run";
} else {
console.error("!!! Unknown switch [" + theArg + "] detected");
return false;
}
} else if (!packageGroup) {
packageGroup = theArg;
} else if (!dropFolder) {
dropFolder = theArg;
} else {
console.error("!!! Invalid Argument [" + theArg + "] detected");
return false;
}

idx++;
}

// Check for required arguments
if (!packageGroup) {
console.error("!!! Missing package group");
return false;
}

return true;
}

function removeTrailingComma(text) {
return text.replace(/,(\s*[}\],])/g, "$1");
}

function removeComments(text) {
return text.replace(/^\s*\/\/\s.*$/gm, "");
}

function getPackage(packageJsonFile) {
var packageText = removeTrailingComma(fs.readFileSync(packageJsonFile, "utf-8"));

return JSON.parse(packageText);
}

function getNpmPackageName(packageJson) {
let packageName = packageJson.name;
let packageVersion = packageJson.version;

let theNpmPackageName = packageName + "-" + packageVersion;

theNpmPackageName = theNpmPackageName.replace("@", "").replace("/", "-");

return theNpmPackageName + ".tgz";
}

function getGroupProjects() {
if (!fs.existsSync(packageGroupDef)) {
console.error("!!! Unable to locate package group definitions [" + packageGroupDef + "]");
throw new Error("!!! Unable to locate package group definitions.");
}

var groupText = removeComments(removeTrailingComma(fs.readFileSync(packageGroupDef, "utf-8")));

let groupJson = JSON.parse(groupText);
return groupJson[packageGroup] || [];
}

function movePackage(npmPackageName, packageName) {
let packageFolder = dropFolder;
if (!packageFolder) {
packageFolder = "./drop/packages";
packageFolder += "/" + packageGroup;
}

if (!fs.existsSync(packageFolder)) {
fs.mkdirSync(packageFolder, { recursive: true });
}

let packageFile = packageFolder + "/" + packageName;
if (fs.existsSync(packageFile)) {
console.log(` -- Removing existing package ${packageFile}`);
fs.unlinkSync(packageFile);
}

console.log(` -- Moving ${npmPackageName} to ${packageFile}`);
fs.renameSync(npmPackageName, packageFile);
}

if (parseArgs()) {
var packages = getGroupProjects();

console.log(`Creating [${packageGroup}] packages => ${packages.length}`);
packages.forEach((packageRoot) => {
let packageJsonFile = packageRoot + "/package.json";

if (!fs.existsSync(packageJsonFile)) {
console.error("!!! Source package.json doesn't exist [" + packageJsonFile + "]");
throw new Error("!!! Source package.json doesn't exist [" + packageJsonFile + "]");
}

const packageJson = getPackage(packageJsonFile);

const packageName = getNpmPackageName(packageJson);
console.log("\n\n##################################################################");
console.log("Packaging - " + packageName);
console.log("##################################################################");

let npmPackageName = packageRoot + "/" + packageName;
if (fs.existsSync(npmPackageName)) {
console.log(` -- Removing existing package ${npmPackageName}`);
fs.unlinkSync(npmPackageName);
}

const cwd = process.cwd();
process.chdir(packageRoot);
try {
let npmCmd = `npm pack ${dryRun}`;
console.log(`Running: \"${npmCmd}\"`);
child_process.execSync(npmCmd);
} finally {
process.chdir(cwd);
}

if (!dryRun) {
// Move the package to the package folder
movePackage(npmPackageName, packageName);
}
});
} else {
showHelp();
process.exit(1);
}
25 changes: 25 additions & 0 deletions tools/release-tools/package_groups.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,25 @@
"./extensions/applicationinsights-perfmarkmeasure-js",
"./extensions/applicationinsights-debugplugin-js"
],
// 1ds (not in the master branch)
"1ds": [
],
// aionly
"aionly": [
"./shared/AppInsightsCore",
"./shared/AppInsightsCommon",
"./AISKU",
"./AISKULight",
"./extensions/applicationinsights-analytics-js",
"./extensions/applicationinsights-properties-js",
"./channels/applicationinsights-channel-js",
"./extensions/applicationinsights-dependencies-js",
"./extensions/applicationinsights-clickanalytics-js",
"./extensions/applicationinsights-perfmarkmeasure-js",
"./extensions/applicationinsights-debugplugin-js"
],
"cfgSync": [
],
// Rollup packages
"rollup-es": [
"./tools/rollup-es3"
Expand All @@ -27,5 +46,11 @@
// Snippet packages
"snippet": [
"./tools/applicationinsights-web-snippet"
],
"examples": [
"./examples/AISKU",
"./examples/cfgSync",
"./examples/dependency",
"./examples/shared-worker"
]
}
Loading