DEV Community

Ramu Narasinga
Ramu Narasinga

Posted on • Edited on • Originally published at thinkthroo.com

release_workspace script in langchainjs source code.

In this article, we will review release_workspace script in langchainjs source code. we will look at:

  1. release script in package.json

  2. 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"
Enter fullscreen mode Exit fullscreen mode

When you run this below command

npm run release
Enter fullscreen mode Exit fullscreen mode

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);
});
Enter fullscreen mode Exit fullscreen mode

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.");
  }
Enter fullscreen mode Exit fullscreen mode

commanderjs is used to create cli as shown below:

 const program = new Command();
Enter fullscreen mode Exit fullscreen mode

command is imported as shown below:

const { Command } = require("commander");
Enter fullscreen mode Exit fullscreen mode

Below are the functions called in this main function:

  1. hasUncommittedChanges

  2. getAllWorkspaces

  3. checkoutReleaseBranch

  4. execSyncWithErrorHandling

  5. getUserInput

  6. getWorkspaceVersion

  7. runYarnRelease

  8. hasStagedChanges

  9. hasUncommittedChanges

  10. 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);
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

execsync is imported as shown below:

const { execSync } = require("child_process");
Enter fullscreen mode Exit fullscreen mode

About me

Hey, my name is Ramu Narasinga. I study codebase architecture in large open-source projects.

Email: [email protected]

Build Shadcn CLI from scratch.

References:

  1. https://github.com/langchain-ai/langchainjs/blob/main/package.json#L43

  2. https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L507

  3. https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L422

  4. https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L391

  5. https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L352

  6. https://github.com/langchain-ai/langchainjs/blob/main/release_workspace.js#L140

Top comments (0)