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