Skip to content

Commit

Permalink
feat(publish/index.js): Added OutputJson Command
Browse files Browse the repository at this point in the history
Outputs the packages and versions from publishing to a JSON file.
  • Loading branch information
HamishBuckmaster committed May 25, 2021
1 parent 6cb8ab2 commit 43f8ff4
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 47 deletions.
22 changes: 22 additions & 0 deletions commands/publish/README.md
Expand Up @@ -65,6 +65,7 @@ This is useful when a previous `lerna publish` failed to publish all packages to
- [`--tag-version-prefix`](#--tag-version-prefix)
- [`--temp-tag`](#--temp-tag)
- [`--yes`](#--yes)
- [`--summary-file <dir/filename>`](#--summary-file)

### `--canary`

Expand Down Expand Up @@ -291,6 +292,27 @@ lerna publish --canary --yes
When run with this flag, `lerna publish` will skip all confirmation prompts.
Useful in [Continuous integration (CI)](https://en.wikipedia.org/wiki/Continuous_integration) to automatically answer the publish confirmation prompt.

### `--summary-file`

```sh
lerna publish --canary --yes --summary-file ./output.json
```

When run with this flag, once a successfully publish it will create a json summary report(see below for an example).

```json
[
{
"packageName": "package1",
"version": "v1.0.1-alpha"
},
{
"packageName": "package2",
"version": "v2.0.1-alpha"
}
]
```

## Deprecated Options

### `--skip-npm`
Expand Down
27 changes: 27 additions & 0 deletions commands/publish/__tests__/publish-command.test.js
Expand Up @@ -34,6 +34,8 @@ const initFixture = require("@lerna-test/init-fixture")(__dirname);
const path = require("path");
const fs = require("fs-extra");

const fsmain = require("fs");

// file under test
const lernaPublish = require("@lerna-test/command-runner")(require("../command"));

Expand Down Expand Up @@ -306,6 +308,31 @@ Map {
});
});

describe("--summary-file", () => {
it("skips creating the summary file", async () => {
const cwd = await initFixture("normal");
const fsSpy = jest.spyOn(fs, "writeFileSync");
await lernaPublish(cwd);

expect(fsSpy).not.toHaveBeenCalled();
});

it("creates the summary file", async () => {
const cwd = await initFixture("normal");
const fsSpy = jest.spyOn(fsmain, "writeFileSync");
await lernaPublish(cwd)("--summary-file", "./output.json");

const expectedJsonResponse = [
{ packageName: "package-1", version: "1.0.1" },
{ packageName: "package-2", version: "1.0.1" },
{ packageName: "package-3", version: "1.0.1" },
{ packageName: "package-4", version: "1.0.1" },
];
expect(fsSpy).toHaveBeenCalled();
expect(fsSpy).toHaveBeenCalledWith("./output.json", JSON.stringify(expectedJsonResponse));
});
});

describe("--no-verify-access", () => {
it("skips package access verification", async () => {
const cwd = await initFixture("normal");
Expand Down
5 changes: 5 additions & 0 deletions commands/publish/command.js
Expand Up @@ -110,6 +110,11 @@ exports.builder = (yargs) => {
hidden: true,
type: "boolean",
},
"summary-file": {
// Json output.
hidden: true,
type: "string",
},
// y: {
// describe: "Skip all confirmation prompts.",
// alias: "yes",
Expand Down

0 comments on commit 43f8ff4

Please sign in to comment.