release_workspace script in langchainjs source code.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MyrinNew
    Senior Member
    • Feb 2024
    • 5175

    #1

    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"






    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 name, eg @langchain/core")
    .option(
    "--bump-deps",
    "Whether or not to bump other workspaces that depend on this one."
    )
    .option("--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:

    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);
    }
    }
    }







    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:

    1. https://github.com/langchain-ai/lang...ckage.json#L43
    2. https://github.com/langchain-ai/lang...kspace.js#L507
    3. https://github.com/langchain-ai/lang...kspace.js#L422
    4. https://github.com/langchain-ai/lang...kspace.js#L391
    5. https://github.com/langchain-ai/lang...kspace.js#L352
    6. https://github.com/langchain-ai/lang...kspace.js#L140




    More...
Working...