Napping Peanut Monsters

    cobolget
    TypeScript icon, indicating that this package has built-in type declarations

    3.13.26 • Public • Published


    logo
    COBOL Package Manager

    Command-line tool for COBOL Package Registry

    Downloads

    Features

    • List packages in the registry
    • Index (import new or update existing) packages from the repositories, such as
      • GitHub
      • GitLab
      • Gitee
    • Initialize and validate Manifest
    • Add, remove and resolve dependencies into Lockfile
    • Install COBOL packages
    • COBOL dialects
      • GnuCOBOL
      • IBM Enterprise COBOL
      • Fujitsu NetCOBOL
    • List licenses of the installed packages
    • Run scripts
    $ cobolget
    Usage: cobolget <command> [options]
    
    Options:
      -v, --version                         output the version number
      -h, --help                            output usage information
    
    Commands:
      list <keyword>                        List packages in the registry
      index [options] <name|url>            Import or update the package in the registry
      init                                  Create manifest file
      validate                              Validate manifest file
      add [options] <dependency> [version]  Add package to the manifest
      remove [options] <dependency>         Remove package from the manifest
      update                                Resolve dependencies and update lockfile
      install [options]                     Install dependencies from lockfile
      licenses                              List licenses of the installed packages
      run <script*>                         Run matching script(s) defined in the manifest
    

    Requirements

    • NodeJS 8+

    Installation

    $ npm install -g cobolget
    

    Package Management

    The Registry helps you distribute and integrate COBOL libraries into your projects by using cobolget, an open-source command-line tool. You can transparently integrate packages from GitHub, GitLab or Gitee repositories, written in gnucobol, entcobol or netcobol COBOL dialects. As well as public packages, the Registry lets you import your own private packages making COBOL code shared within your Organization only. You can manage Teams and Team Tokens granting per-team installation rights for a limited period of time.

    COBOLget

    In contrast to other Package Managers, COBOLget only analyzes Manifest files in JSON format and does not clone nor crawl the source-code. Package installation will fail if the maintainer decides restrict access to the repository or revoke the Team Token. COBOLget protects packages from a malicious take-over. Organizations, packages and origins are enforced by the Registry reserving distinct names for the maintainer upon the first indexing, forever. Disadvantage of this security policy is an inability to have mirrors of the repositories and migrate the packages between them.

    Using Packages

    To start using cobolget in your project you need the Manifest file which describes the project and its dependencies.

    $ npm install -g cobolget
    $ cobolget init
    Manifest modules.json created.
    

    Now you can add a dependency which delivers additional functionality:

    GnuCOBOL
    $ cobolget add core-datetime
    Dependency 'core-datetime' has been added to the manifest.
    
    Enterprise COBOL
    $ cobolget add main-string
    Dependency 'main-string' has been added to the manifest.
    
    NetCOBOL
    $ cobolget add fuji-bitwise
    Dependency 'fuji-bitwise' has been added to the manifest.
    

    By default, cobolget takes the latest (highest) version available in the Registry and adds it into modules.json.

    $ cobolget update
    Lockfile modules-lock.json updated.
    

    The tool resolves direct and inherited dependencies in the Manifest and creates the Lockfile which contains exact versions of the packages. Keeping modules-lock.json under a version control is important to re-install the same dependencies in other environments, e.g. Continuous Integration.

    Let's install the dependencies:

    GnuCOBOL
    $ cobolget install
    Downloading core-datetime 3.0.6
    modules/core-datetime
    modules/core-datetime/.gitignore
    modules/core-datetime/.gitlab-ci.yml
    modules/core-datetime/Dockerfile
    modules/core-datetime/LICENSE
    modules/core-datetime/README.md
    modules/core-datetime/modules.json
    modules/core-datetime/src/
    modules/core-datetime/src/datetime.cbl
    modules/core-datetime/tests/
    modules/core-datetime/tests/datetime-test.cbl
    modules/core-datetime/tests/modules.cpy
    Modules modules.cpy and modules.cbl updated.
    

    Directory modules contains source-code of the package and modules.cpy ready for inclusion into your project.

    Enterprise COBOL
    $ cobolget install
    Downloading main-string 6.2.3
    modules/main-string
    modules/main-string/.github/
    modules/main-string/.github/workflows/
    modules/main-string/.github/workflows/nodejs.yml
    modules/main-string/.gitignore
    modules/main-string/LICENSE
    modules/main-string/README.md
    modules/main-string/modules.json
    modules/main-string/src/
    modules/main-string/src/string.cbl
    modules/main-string/tests/
    modules/main-string/tests/tests.cbl
    modules/main-string/tests/tests.jcl
    Modules modules.cpy and modules.cbl updated.
    

    Directory modules contains source-code of the package and modules.cbl ready for compilation and linking with your project.

    NetCOBOL
    $ cobolget install
    Downloading fuji-bitwise 3.2.1
    modules/fuji-bitwise
    modules/fuji-bitwise/.gitignore
    modules/fuji-bitwise/LICENSE
    modules/fuji-bitwise/README.md
    modules/fuji-bitwise/modules.json
    modules/fuji-bitwise/src/
    modules/fuji-bitwise/src/bitwise.cbl
    Modules modules.cpy and modules.cbl updated.
    

    Directory modules contains source-code of the package and modules.cbl ready for compilation and linking with your project.

    For installing a private package you need the Team Token from your Organization:

    GnuCOBOL
    $ cobolget add core-network
    $ cobolget update
    $ cobolget -t bca12d6c4efed0627c87f2e576b72bdb5ab88e34 install
    
    Enterprise COBOL
    $ cobolget add main-bitwise
    $ cobolget update
    $ cobolget -t bca12d6c4efed0627c87f2e576b72bdb5ab88e34 install
    

    Publishing Packages

    To start using cobolget in your library you need the Manifest file which describes the library and its dependencies.

    $ npm install -g cobolget
    $ cobolget init
    

    Open modules.json in text editor, fix default values and validate the Manifest:

    $ cobolget validate
    

    Make sure, that in your Manifest

    • all dependencies are valid COBOLget packages;
    • all dependencies-debug are valid COBOLget packages;
    • all modules are COBOL modules (programs and functions) in desired dialect, without termination statements e.g. STOP RUN.

    Commit and push modules.json to your repository. After release, you can import the package into the Registry by a link:

    GnuCOBOL
    $ cobolget index https://gitlab.com/OlegKunitsyn/core-datetime
    
    Enterprise COBOL
    $ cobolget index https://github.com/OlegKunitsyn/main-string
    
    NetCOBOL
    $ cobolget index https://github.com/OlegKunitsyn/fuji-bitwise
    

    New releases of the package you can index by a name:

    GnuCOBOL
    $ cobolget index core-datetime
    
    Enterprise COBOL
    $ cobolget index main-string
    
    NetCOBOL
    $ cobolget index fuji-bitwise
    

    For indexing private packages you must submit Repository Token to associate a package with the Organization. Follow GitLab, GitHub or Gitee instructions. In the example below Organization is cobolget, but use your own.

    GnuCOBOL
    $ cobolget -t DMNZpM9LzMyvswqE6yzz -o cobolget index https://gitlab.com/OlegKunitsyn/core-network
    
    Enterprise COBOL
    $ cobolget -t DMNZpM9LzMyvswqE6yzz -o cobolget index https://gitlab.com/OlegKunitsyn/main-bitwise
    

    Versioning

    COBOLget implements SemVer versioning standard. You can specify constraints in the Manifest to satisfy concrete versions of the dependencies.

    Operator Constraint Example
    * Any (default) "core-string": "*"
    < Less than "core-string": "<1.0.2"
    <= Less or equal to "core-string": "<=1.0.2"
    > Greater than "core-string": ">1.0.2"
    >= Greater or equal to "core-string": ">=1.0.2"
    = Equal "core-string": "=1.0.2"
    x Stand in "core-string": "1.0.x"
    ~ Approximately equal to "core-string": "~1.0.1"

    Scripting

    You can specify a command within scripts property and run it

    $ cobolget run <script>
    

    or specify a script that runs several commands at once

    {
      ...
      "scripts": {
        "cobolget": "cobolget update && cobolget install"
      }  
    }
    

    or specify nested automation scenarios grouping scripts by a name:

    {
      ...
      "scripts": {
        "build:docs": "coboldoc generate src/* -o docs",
        "build:package:update": "cobolget update",
        "build:package:install": "cobolget install",
        "build:upload": "zowe zos-files upload file-to-data-set modules/modules.cbl <USER ID>.CBL",
        "tests:upload": "zowe zos-files upload file-to-data-set tests/tests.cbl <USER ID>.CBL",
        "tests:run": "zowe jobs submit local-file tests/tests.jcl --view-all-spool-content"
      }
    }
    

    Delimiter can be any. In this example argument build:package will match two scripts, and next example will execute all build scripts one by one:

    $ cobolget run b
    

    The batch of commands stops upon the first failure (non-zero exit code).

    Development

    Roadmap

    • Inline copybooks in modules.cbl.

    Your contribution is always welcome!

    Install

    npm i cobolget

    DownloadsWeekly Downloads

    2

    Version

    3.13.26

    License

    GPL-2.0

    Unpacked Size

    146 kB

    Total Files

    39

    Last publish

    Collaborators

    • olegkunitsyn