Skip to content

Commit

Permalink
feat(diff): add Lerna diff as optional command
Browse files Browse the repository at this point in the history
  • Loading branch information
ghiscoding committed Jun 30, 2022
1 parent e032e66 commit 44dabb2
Show file tree
Hide file tree
Showing 21 changed files with 561 additions and 13 deletions.
29 changes: 16 additions & 13 deletions README.md
Expand Up @@ -30,6 +30,7 @@
- 📑 [`version`](https://github.com/ghiscoding/lerna-lite/tree/main/packages/version#readme) - create new version for each workspace packages
- optional (**separate install**, refer to [installation](#installation) table shown below)
- 🕜 [`changed`](https://github.com/ghiscoding/lerna-lite/tree/main/packages/changed#readme) - list local packages that changed since last tagged release
- 🌓 [`diff`](https://github.com/ghiscoding/lerna-lite/tree/main/packages/diff#readme) - git diff all packages or a single package since the last release
- 👷 [`exec`](https://github.com/ghiscoding/lerna-lite/tree/main/packages/exec#readme) - execute shell command in each workspace package
- 📖 [`list`](https://github.com/ghiscoding/lerna-lite/tree/main/packages/list#readme) - list local packages
- 🏃 [`run`](https://github.com/ghiscoding/lerna-lite/tree/main/packages/run#readme) - run npm script in each workspace packages
Expand Down Expand Up @@ -137,6 +138,7 @@ If you are new to Lerna-Lite, you could also run the [lerna init](https://github
| 📑 [version](https://github.com/ghiscoding/lerna-lite/tree/main/packages/version#readme) | `npm i @lerna-lite/cli -D -W` | create new version for each workspace package | Yes |
| ☁️ [publish](https://github.com/ghiscoding/lerna-lite/tree/main/packages/publish#readme) | `npm i @lerna-lite/cli -D -W` | publish each workspace package | Yes |
| 🕜 [changed](https://github.com/ghiscoding/lerna-lite/tree/main/packages/changed#readme) | `npm i @lerna-lite/changed -D -W` | list local packages changed since last release | Optional |
| 🌓 [diff](https://github.com/ghiscoding/lerna-lite/tree/main/packages/diff#readme) | `npm i @lerna-lite/diff -D -W` | git diff all packages since the last release | Optional |
| 👷 [exec](https://github.com/ghiscoding/lerna-lite/tree/main/packages/exec#readme) | `npm i @lerna-lite/exec -D -W` | execute an command in each workspace package | Optional |
| 📖 [list](https://github.com/ghiscoding/lerna-lite/tree/main/packages/list#readme) | `npm i @lerna-lite/list -D -W` | list local packages | Optional |
| 🏃 [run](https://github.com/ghiscoding/lerna-lite/tree/main/packages/run#readme) | `npm i @lerna-lite/run -D -W` | run npm script in each workspace package | Optional |
Expand Down Expand Up @@ -228,17 +230,18 @@ If you have problems running the lib and your problems are related to Git comman

## Lerna-Lite Full List of Packages

| Package Name | Version | Description | Changes |
| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| [@lerna-lite/cli](https://github.com/ghiscoding/lerna-lite/tree/main/packages/cli) | [![npm](https://img.shields.io/npm/v/@lerna-lite/cli.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/cli) | Lerna-Lite Init/Info/Version/Publish comands CLI | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/cli/CHANGELOG.md) |
| [@lerna-lite/core](https://github.com/ghiscoding/lerna-lite/tree/main/packages/core) | [![npm](https://img.shields.io/npm/v/@lerna-lite/core.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/core) | Lerna-Lite core & shared methods (internal use) | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/core/CHANGELOG.md) |
| [@lerna-lite/info](https://github.com/ghiscoding/lerna-lite/tree/main/packages/info) | [![npm](https://img.shields.io/npm/v/@lerna-lite/info.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/info) | Print local environment information | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/info/CHANGELOG.md) |
| [@lerna-lite/init](https://github.com/ghiscoding/lerna-lite/tree/main/packages/init) | [![npm](https://img.shields.io/npm/v/@lerna-lite/init.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/init) | create a new Lerna-Lite repo | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/init/CHANGELOG.md) |
| [@lerna-lite/publish](https://github.com/ghiscoding/lerna-lite/tree/main/packages/publish) | [![npm](https://img.shields.io/npm/v/@lerna-lite/publish.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/publish) | Publish packages in the current workspace | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/publish/CHANGELOG.md) |
| [@lerna-lite/version](https://github.com/ghiscoding/lerna-lite/tree/main/packages/version) | [![npm](https://img.shields.io/npm/v/@lerna-lite/version.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/version) | Bump Version & write Changelogs | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/version/CHANGELOG.md) |
| [@lerna-lite/exec](https://github.com/ghiscoding/lerna-lite/tree/main/packages/exec) | [![npm](https://img.shields.io/npm/v/@lerna-lite/exec.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/exec) | Execute shell command in current workspace | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/exec/CHANGELOG.md) |
| [@lerna-lite/changed](https://github.com/ghiscoding/lerna-lite/tree/main/packages/changed) | [![npm](https://img.shields.io/npm/v/@lerna-lite/changed.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/changed) | List local packages that changed since last release | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/changed/CHANGELOG.md) |
| [@lerna-lite/list](https://github.com/ghiscoding/lerna-lite/tree/main/packages/list) | [![npm](https://img.shields.io/npm/v/@lerna-lite/list.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/list) | List local packages | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/list/CHANGELOG.md) |
| [@lerna-lite/listable](https://github.com/ghiscoding/lerna-lite/tree/main/packages/listable) | [![npm](https://img.shields.io/npm/v/@lerna-lite/listable.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/listable) | Listable utils used by `list` and `changed` commands | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/listable/CHANGELOG.md) |
| [@lerna-lite/run](https://github.com/ghiscoding/lerna-lite/tree/main/packages/run) | [![npm](https://img.shields.io/npm/v/@lerna-lite/run.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/run) | Run npm scripts in current workspace | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/run/CHANGELOG.md) |
| Package Name | Version | Description | Changes |
| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| [@lerna-lite/cli](https://github.com/ghiscoding/lerna-lite/tree/main/packages/cli) | [![npm](https://img.shields.io/npm/v/@lerna-lite/cli.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/cli) | Lerna-Lite Init/Info/Version/Publish comands CLI | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/cli/CHANGELOG.md) |
| [@lerna-lite/core](https://github.com/ghiscoding/lerna-lite/tree/main/packages/core) | [![npm](https://img.shields.io/npm/v/@lerna-lite/core.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/core) | Lerna-Lite core & shared methods (internal use) | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/core/CHANGELOG.md) |
| [@lerna-lite/info](https://github.com/ghiscoding/lerna-lite/tree/main/packages/info) | [![npm](https://img.shields.io/npm/v/@lerna-lite/info.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/info) | Print local environment information | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/info/CHANGELOG.md) |
| [@lerna-lite/init](https://github.com/ghiscoding/lerna-lite/tree/main/packages/init) | [![npm](https://img.shields.io/npm/v/@lerna-lite/init.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/init) | create a new Lerna-Lite repo | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/init/CHANGELOG.md) |
| [@lerna-lite/publish](https://github.com/ghiscoding/lerna-lite/tree/main/packages/publish) | [![npm](https://img.shields.io/npm/v/@lerna-lite/publish.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/publish) | Publish packages in the current workspace | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/publish/CHANGELOG.md) |
| [@lerna-lite/version](https://github.com/ghiscoding/lerna-lite/tree/main/packages/version) | [![npm](https://img.shields.io/npm/v/@lerna-lite/version.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/version) | Bump Version & write Changelogs | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/version/CHANGELOG.md) |
| [@lerna-lite/exec](https://github.com/ghiscoding/lerna-lite/tree/main/packages/exec) | [![npm](https://img.shields.io/npm/v/@lerna-lite/exec.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/exec) | Execute shell command in current workspace | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/exec/CHANGELOG.md) |
| [@lerna-lite/changed](https://github.com/ghiscoding/lerna-lite/tree/main/packages/changed) | [![npm](https://img.shields.io/npm/v/@lerna-lite/changed.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/changed) | List local packages that changed since last release | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/changed/CHANGELOG.md) |
| [@lerna-lite/diff](https://github.com/ghiscoding/lerna-lite/tree/main/packages/diff) | [![npm](https://img.shields.io/npm/v/@lerna-lite/diff.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/diff) | Diff all packages or a single package since the last release | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/changed/CHANGELOG.md) |
| [@lerna-lite/list](https://github.com/ghiscoding/lerna-lite/tree/main/packages/list) | [![npm](https://img.shields.io/npm/v/@lerna-lite/list.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/list) | List local packages | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/list/CHANGELOG.md) |
| [@lerna-lite/listable](https://github.com/ghiscoding/lerna-lite/tree/main/packages/listable) | [![npm](https://img.shields.io/npm/v/@lerna-lite/listable.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/listable) | Listable utils used by `list` and `changed` commands | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/listable/CHANGELOG.md) |
| [@lerna-lite/run](https://github.com/ghiscoding/lerna-lite/tree/main/packages/run) | [![npm](https://img.shields.io/npm/v/@lerna-lite/run.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/run) | Run npm scripts in current workspace | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/run/CHANGELOG.md) |
| [@lerna-lite/optional-cmd-common](https://github.com/ghiscoding/lerna-lite/tree/main/packages/optional-cmd-common) | [![npm](https://img.shields.io/npm/v/@lerna-lite/optional-cmd-common.svg?logo=npm&logoColor=fff&label=npm)](https://www.npmjs.com/package/@lerna-lite/optional-cmd-common) | Lerna-Lite common utils for optional commands Exec/List/Run (internal use) | [changelog](https://github.com/ghiscoding/lerna-lite/blob/main/packages/optional-cmd-common/CHANGELOG.md) |
2 changes: 2 additions & 0 deletions package.json
Expand Up @@ -11,6 +11,7 @@
"dist-info-cmd": "node ./packages/cli/dist/cli.js info",
"dist-init-cmd": "node ./packages/cli/dist/cli.js init --independent --exact --use-workspaces",
"dist-changed-cmd": "node ./packages/cli/dist/cli.js changed --all",
"dist-diff-cmd": "node ./packages/cli/dist/cli.js diff",
"dist-list-cmd": "node ./packages/cli/dist/cli.js list --all",
"dist-roll-version": "node ./packages/cli/dist/cli.js version",
"dist-roll-publish": "node ./packages/cli/dist/cli.js publish from-package",
Expand Down Expand Up @@ -49,6 +50,7 @@
"@lerna-lite/changed": "workspace:*",
"@lerna-lite/cli": "workspace:*",
"@lerna-lite/core": "workspace:*",
"@lerna-lite/diff": "workspace:*",
"@lerna-lite/exec": "workspace:*",
"@lerna-lite/info": "workspace:*",
"@lerna-lite/list": "workspace:*",
Expand Down
14 changes: 14 additions & 0 deletions packages/cli/src/cli-commands/__tests__/cli-diff-commands.spec.ts
@@ -0,0 +1,14 @@
jest.mock('@lerna-lite/diff', () => null);
const cliDiff = require('../cli-diff-commands');

describe('DiffCommand CLI options', () => {
it('should log a console error when DiffCommand is not provided', async () => {
const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => {});

await cliDiff.handler();

expect(consoleSpy).toHaveBeenCalledWith(
expect.stringContaining('"@lerna-lite/diff" is optional and was not found.')
);
});
});
26 changes: 26 additions & 0 deletions packages/cli/src/cli-commands/cli-diff-commands.ts
@@ -0,0 +1,26 @@
/**
* @see https://github.com/yargs/yargs/blob/master/docs/advanced.md#providing-a-command-module
*/
exports.command = 'diff [pkgName]';
exports.describe = 'Diff all packages or a single package since the last release';

exports.builder = {
'ignore-changes': {
group: 'Command Options:',
describe: 'Ignore changes in files matched by glob(s).',
type: 'array',
},
};

exports.handler = async function handler(argv) {
try {
// @ts-ignore
// eslint-disable-next-line import/no-unresolved
const { DiffCommand } = await import('@lerna-lite/diff');
new DiffCommand(argv);
} catch (e) {
console.error(
'"@lerna-lite/diff" is optional and was not found. Please install it with `npm install @lerna-lite/diff -D -W`'
);
}
};
2 changes: 2 additions & 0 deletions packages/cli/src/lerna-entry.ts
Expand Up @@ -2,6 +2,7 @@ const cli = require('./lerna-cli');
const pkg = require('../package.json');

const changedCmd = require('./cli-commands/cli-changed-commands');
const diffCmd = require('./cli-commands/cli-diff-commands');
const execCmd = require('./cli-commands/cli-exec-commands');
const initCmd = require('./cli-commands/cli-init-commands');
const infoCmd = require('./cli-commands/cli-info-commands');
Expand All @@ -17,6 +18,7 @@ export function lerna(argv: any[]) {

return cli()
.command(changedCmd)
.command(diffCmd)
.command(execCmd)
.command(infoCmd)
.command(initCmd)
Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/command.ts
Expand Up @@ -14,6 +14,7 @@ import { ValidationError } from './validation-error';
import {
ChangedCommandOption,
CommandType,
DiffCommandOption,
ExecCommandOption,
ExecOpts,
InitCommandOption,
Expand All @@ -29,6 +30,7 @@ const DEFAULT_CONCURRENCY = os.cpus().length;

type AvailableCommandOption =
| ChangedCommandOption
| DiffCommandOption
| ExecCommandOption
| InitCommandOption
| ListCommandOption
Expand Down
8 changes: 8 additions & 0 deletions packages/core/src/models/command-options.ts
Expand Up @@ -15,6 +15,14 @@ export interface ChangedCommandOption {
includeMergedTags?: boolean;
}

export interface DiffCommandOption {
/** ignore changes in files matched by glob(s) when detecting changed packages. Pass --no-ignore-changes to completely disable. */
ignoreChanges: string[];

/** package name */
pkgName: string;
}

export interface ExecCommandOption {
/** command to execute by the command */
cmd?: string;
Expand Down
38 changes: 38 additions & 0 deletions packages/diff/README.md
@@ -0,0 +1,38 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)
[![npm](https://img.shields.io/npm/dy/@lerna-lite/diff?color=forest)](https://www.npmjs.com/package/@lerna-lite/diff)
[![npm](https://img.shields.io/npm/v/@lerna-lite/diff.svg?logo=npm&logoColor=fff)](https://www.npmjs.com/package/@lerna-lite/diff)

# @lerna-lite/diff

## (`lerna diff`) - Diff command [optional] 🌓

Diff all packages or a single package since the last release

---

## Installation

```sh
npm install @lerna-lite/diff -D -W

# then use it (see usage below)
lerna diff

# OR use npx
npx lerna diff
```

## Usage

```sh
$ lerna diff [package]

$ lerna diff
# diff a specific package
$ lerna diff package-name
```

Diff all packages or a single package since the last release.

> Similar to `lerna changed`. This command runs `git diff`.

0 comments on commit 44dabb2

Please sign in to comment.