release_workspace script in langchainjs source code.
In this article, we will review release_workspace script in langchainjs source code. we will look at:
-
release
script in package.json -
release_workspace.js file
release
script in package.json
You will find the below code in langchainjs/package.json file
"release": "node release_workspace.js --workspace"
When you run this below command
npm run release
release_workspace.js
is executed.
release_workspace.js file
In the langchainjs/release_workspace.json file, at line 507, you will find this below code:
main().catch((error) => { console.error(error); process.exit(1); });
main function is defined in the same file at line 422.
async function main() { const program = new Command(); program .description("Release a new workspace version to NPM.") .option("--workspace <workspace>", "Workspace name, eg @langchain/core") .option( "--bump-deps", "Whether or not to bump other workspaces that depend on this one." ) .option("--tag <tag>", "Optionally specify a tag to publish to."); program.parse(); /** * @type {{ workspace: string, bumpDeps?: boolean, tag?: string }} */ const options = program.opts(); if (!options.workspace) { throw new Error("--workspace is a required flag."); }
commanderjs is used to create cli as shown below:
const program = new Command();
command is imported as shown below:
const { Command } = require("commander");
Below are the functions called in this main
function:
-
hasUncommittedChanges
-
getAllWorkspaces
-
checkoutReleaseBranch
-
execSyncWithErrorHandling
-
getUserInput
-
getWorkspaceVersion
-
runYarnRelease
-
hasStagedChanges
-
hasUncommittedChanges
-
bumpDeps
Let’s take a closer look at execSyncWithErrorHandling
function.
execSyncErrorHandling
This function is defined in the same file at line 18:
/** * Handles execSync errors and logs them in a readable format. * @param {string} command * @param {{ doNotExit?: boolean }} [options] - Optional configuration * @param {boolean} [options.doNotExit] - Whether or not to exit the process on error */ function execSyncWithErrorHandling(command, options = {}) { try { execSync( command, { stdio: "inherit" } // This will stream output in real-time ); } catch (error) { console.error(error.message); if (!options.doNotExit) { process.exit(1); } } }
execsync is imported as shown below:
const { execSync } = require("child_process");
About me
Hey, my name is Ramu Narasinga. I study codebase architecture in large open-source projects.
Email: ramu.narasinga@gmail.com
References:
-
https://github.com/langchain-ai/langchainjs/blob/main/package.json#L43
-
https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L507
-
https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L422
-
https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L391
-
https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L352
-
https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L140