Skip to content

standard-monorepo should be all you need to run a js monorepo effectively, no need to setup commitlint, fiddle with lerna and optimise CI environments.

License

Notifications You must be signed in to change notification settings

flaviouk/standard-monorepo

Repository files navigation

standard-monorepo

oclif Version Downloads/week License

Goal

The goal is to create a library that will help you and your team manage js monorepos. We assume that you run github flow with rebase enabled and provide everything available in the CLI programatically.

standard-monorepo should be all you need to run a js monorepo effectively, no need to setup commitlint, fiddle with lerna and optimise CI environments.

Roadmap v1

  • Conventional commits Also supports a "--scope" flag and validates against a JIRA ticket number

    • Lint (Similar to commitlint, without the configuration)
      $ standard-monorepo commit "feat: did things"
      > [SUCCESS] Commit message meets the conventional commit standard
      $ standard-monorepo commit "did things"
      ›   Error: [FAIL]
      
      ›   ####################################
      ›   did things
      ›   ####################################
      
      
      ›   Make sure you follow the conventional commit format and provide the correct scope flag for your needs.
    • Prompt (Similar to commitizen, without the configuration)
  • Detect packages (yarn workspaces glob)

  • Circular Dependencies

    • Find circular dependencies
    • "--max" and "--max-total-paths" flags to prevent addicional circular dependencies or paths being introduced (if below they will output warnings instead of a failure)
    $ standard-monorepo circular-deps --max=1 --max-total-paths=55
    
    Found 2 circular dependencies in the project, please fix these as soon as possible.
    
        |> Maximum circular dependencies allowed is 1 "--max", found: 2
    
        |> Maximum circular dependencies *paths* allowed is 55 "--max-total-paths", found: 5
    
        #######################################################################
    
        |> foo ->
            bar ->
    
    
        |> a ->
            b ->
             c ->
  • Print what packages have changed since a git ref. See standard-monorepo list

  • CI helpers (github actions / gitlab ci / circle ci / etc) so that we only build/test what has changed

  • Run command (Similar to lerna exec "echo hello" --stream and lerna exec "echo hello" --parallel)

  • Watch command (Something that doesn't exist in the ecosystem at the moment)

  • Publish (Similar to lerna publish --conventional-commits)

Usage

$ npm install -g standard-monorepo
$ standard-monorepo COMMAND
running command...
$ standard-monorepo (-v|--version|version)
standard-monorepo/0.7.1 darwin-x64 node-v14.15.1
$ standard-monorepo --help [COMMAND]
USAGE
  $ standard-monorepo COMMAND
...

Commands

standard-monorepo cache-key

USAGE
  $ standard-monorepo cache-key

OPTIONS
  -h, --help  show CLI help
  --cwd       use the context from where the command was run to determine root of the monorepo
  --github    print github actions output

EXAMPLES
  $ standard-monorepo cache-key # 93ead503b3bc9b08c2e07da10ef34162
  $ standard-monorepo cache-key --cwd # 93ead503b3bc9b08c2e07da10ef34162
  $ standard-monorepo cache-key --github # ::set-output name=cacheKey::{env.PREFIX}-93ead503b3bc9b08c2e07da10ef34162
  - name: Get nodemodules cache key
           id: cache-key
           shell: bash
           run: npx standard-monorepo cache-key
           env:
             PREFIX: ubuntu-latest-node-14.16.0
          
         - name: Cache node modules
           id: cache-node-modules
           uses: actions/cache@v2
           env:
             cache-name: cache-node-modules
           with:
             path: |
               node_modules
               **/node_modules
             key: steps.cache-key.outputs.cacheKey
             restore-keys: steps.cache-key.outputs.cacheKey

See code: src/commands/cache-key.ts

standard-monorepo circular-deps

USAGE
  $ standard-monorepo circular-deps

OPTIONS
  -h, --help                         show CLI help
  --max=max                          maximum allowed individual circular dependencies
  --max-total-paths=max-total-paths  maximum allowed circular dependencies paths

EXAMPLES
  $ standard-monorepo circular-deps
  $ standard-monorepo circular-deps --max=5 --max-total-paths=10 # default is 0 for both

See code: src/commands/circular-deps.ts

standard-monorepo commit [COMMIT]

USAGE
  $ standard-monorepo commit [COMMIT]

ARGUMENTS
  COMMIT  The commit message

OPTIONS
  -h, --help   show CLI help
  -s, --scope  should include scope in the commit message

EXAMPLES
  $ standard-monorepo commit # this will create a prompt like commitizen
  $ standard-monorepo commit --scope # this will create a prompt like commitizen
  $ standard-monorepo commit "feat: did things"
  $ standard-monorepo commit "feat!: did things"
  $ standard-monorepo commit "feat(ABC-123): did things" --scope
  $ standard-monorepo commit "feat!(ABC-123): did things" --scope
  "husky": {
     "hooks": {
       "commit-msg": "standard-monorepo commit $HUSKY_GIT_PARAMS"
     }
  }

See code: src/commands/commit.ts

standard-monorepo help [COMMAND]

USAGE
  $ standard-monorepo help [COMMAND]

ARGUMENTS
  COMMAND  command to show help for

OPTIONS
  --all  see all commands in CLI

See code: @oclif/plugin-help

standard-monorepo list

USAGE
  $ standard-monorepo list

OPTIONS
  -h, --help       show CLI help
  --filter=filter  glob to filter packages
  --nodes          list a representation of the dependency graph
  --only=only      [default: name,version,private,location] fields to return for each package
  --since=since    list all packages that have changed since a git ref

EXAMPLES
  $ standard-monorepo list
  $ standard-monorepo list >> list.json
  $ standard-monorepo list --only="name,version"
  [
     {
       "name": "a",
       "version": "1.0.0"
     },
     {
       "name": "b",
       "version": "1.0.0"
     },
     {
       "name": "c",
       "version": "1.0.0"
     }
  ]
  $ standard-monorepo list 
  --only="name,version,private,location,dependencies,devDependencies,peerDependencies,optionalDependencies"
  $ standard-monorepo list --only="name" --filter="foo"
  $ standard-monorepo list --nodes # Shows all packages and their dependencies in an indexed table
  $ standard-monorepo list --since=gitsha --only=name,version
  $ standard-monorepo list --since=$(git merge-base main HEAD)

See code: src/commands/list.ts

About

standard-monorepo should be all you need to run a js monorepo effectively, no need to setup commitlint, fiddle with lerna and optimise CI environments.

Topics

Resources

License

Stars

Watchers

Forks

Languages