Skip to content

Commit

Permalink
Add target option
Browse files Browse the repository at this point in the history
  • Loading branch information
razor-x committed Jan 2, 2023
1 parent e42e372 commit 22af696
Show file tree
Hide file tree
Showing 10 changed files with 76 additions and 1 deletion.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ You can set any or all of the following input parameters:
|`package` |string |./package.json |The path of your package.json file
|`tag` |string |"latest" |The tag to publish to. This allows people to install the package using `npm install <package-name>@<tag>`.
|`access` |string |"public" for non-scoped packages. "restricted" for scoped packages.|Determines whether the published package should be publicly visible, or restricted to members of your NPM organization.
|`target` |string |"" |The package to publish (the first argument to npm publish).
|`dry-run` |boolean |false |Run NPM publish with the `--dry-run` flag to prevent publication
|`check-version` |boolean |true |Only publish to NPM if the version number in `package.json` differs from the latest on NPM
|`greater-version-only`|boolean |false |Only publish to NPM if the version number in `package.json` is greater than the latest on NPM |
Expand Down Expand Up @@ -135,6 +136,7 @@ As shown in the example above, you can pass options to the `npmPublish()` functi
| `tag` | string | "latest" | The tag to publish to. This allows people to install the package using `npm install <package-name>@<tag>`. |
| `access` | string | "public" for non-scoped packages. "restricted" for scoped packages. | Determines whether the published package should be publicly visible, or restricted to members of your NPM organization. |
| `dryRun` | boolean | false | Run NPM publish with the `--dry-run` flag to prevent publication |
| `target` | string | "" | The package to publish (the first argument to npm publish) |
| `checkVersion` | boolean | true | Only publish to NPM if the version number in `package.json` differs from the latest on NPM |
| `greaterVersionOnly` | boolean | false | Only publish to NPM if the version number in `package.json` is greater then the latest on NPM |
| `quiet` | boolean | false | Suppress console output from NPM and npm-publish |
Expand Down
5 changes: 5 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ inputs:
This only applies to scoped packages.
required: false

target:
description: The package to publish (the first argument to npm publish).
required: false
default: ""

dry-run:
description: If true, run with the --dry-run flag
required: false
Expand Down
5 changes: 5 additions & 0 deletions dist/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/index.js.map

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/action/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ async function main(): Promise<void> {
getInput("check-version", { required: true }).toLowerCase() === "true",
tag: getInput("tag"),
access: getInput("access") as Access,
target: getInput("target"),
dryRun: getInput("dry-run").toLowerCase() === "true",
greaterVersionOnly: getInput("greater-version-only").toLowerCase() === "true",
debug: debugHandler,
Expand Down
1 change: 1 addition & 0 deletions src/cli/parse-args.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export function parseArgs(argv: string[]): ParsedArgs {
package: args.package as string,
tag: args.tag as string,
access: args.access as Access,
target: args.target as string,
dryRun: args["dry-run"] as boolean,
debug: args.debug ? console.debug : undefined,
quiet: args.quiet as boolean,
Expand Down
2 changes: 2 additions & 0 deletions src/normalize-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export interface NormalizedOptions {
package: string;
tag: string;
access?: Access;
target: string;
dryRun: boolean;
checkVersion: boolean;
greaterVersionOnly: boolean;
Expand All @@ -34,6 +35,7 @@ export function normalizeOptions(options: Options): NormalizedOptions {
package: options.package || "package.json",
tag: options.tag || "latest",
access: options.access,
target: options.target || "",
dryRun: options.dryRun || false,
checkVersion:
options.checkVersion === undefined ? true : Boolean(options.checkVersion),
Expand Down
4 changes: 4 additions & 0 deletions src/npm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ export const npm = {
command.push("--dry-run");
}

if (options.target) {
command.push(options.target);
}

// Run "npm publish" in the package.json directory
let cwd = resolve(dirname(options.package));

Expand Down
8 changes: 8 additions & 0 deletions src/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@ export interface Options {
*/
access?: Access;

/**
* The package to publish.
* This is the first argument to npm publish.
*
* Defaults to "" which is the default behavior of npm publish.
*/
target?: string;

/**
* If true, run npm publish with the --dry-run flag
* so that the package is not published. Used for
Expand Down
47 changes: 47 additions & 0 deletions test/specs/lib/success.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,53 @@ describe("NPM package - success tests", () => {
npm.assert.ran(2);
});

it("should pass target option as argument to npm publish", async () => {
files.create([
{ path: "workspace/package.json", contents: { name: "my-lib", version: "2.0.0" }},
]);

npm.mock({
args: ["config", "get", "userconfig"],
stdout: `${paths.npmrc}${EOL}`,
});

npm.mock({
args: ["view", "my-lib", "version"],
stdout: `1.0.0${EOL}`,
});

npm.mock({
args: ["config", "get", "userconfig"],
stdout: `${paths.npmrc}${EOL}`,
});

npm.mock({
args: ["publish", "my-lib-2.0.0.tgz"],
stdout: `my-lib 2.0.0${EOL}`,
});

let results = await npmPublish({ target: "my-lib-2.0.0.tgz", quiet: true });

expect(results).to.deep.equal({
type: "major",
package: "my-lib",
registry: new URL("https://registry.npmjs.org/"),
version: "2.0.0",
oldVersion: "1.0.0",
tag: "latest",
access: "public",
dryRun: false,
});

files.assert.contents("home/.npmrc",
`//registry.npmjs.org/:_authToken=\${INPUT_TOKEN}${EOL}` +
`registry=https://registry.npmjs.org/${EOL}`
);

npm.assert.ran(4);
});


it("should use the specified NPM token to publish the package", async () => {
files.create([
{ path: "workspace/package.json", contents: { name: "my-lib", version: "1.0.0-beta.1" }},
Expand Down

0 comments on commit 22af696

Please sign in to comment.