semantic-release-yarn
Version:
semantic-release plugin to publish a npm package with yarn
51 lines (50 loc) • 2.07 kB
JavaScript
import _ from "lodash";
import { addChannel as addChannelNpm } from "./add-channel.js";
import { PLUGIN_NAME } from "./definitions/constants.js";
import { getPkg } from "./get-pkg.js";
import { prepare as prepareNpm } from "./prepare.js";
import { publish as publishNpm } from "./publish.js";
import { verify } from "./verify.js";
let verified;
let prepared;
export async function verifyConditions(pluginConfig, context) {
/**
* If the plugin is used and has `npmPublish`, `tarballDir` or
* `pkgRoot` configured, validate them now in order to prevent any release if
* the configuration is wrong
*/
if (context.options?.["publish"]) {
const publishPlugin = _.castArray(context.options["publish"]).find((config) => config.path && config.path === PLUGIN_NAME) || {};
pluginConfig.npmPublish = _.defaultTo(pluginConfig.npmPublish, publishPlugin.npmPublish);
pluginConfig.tarballDir = _.defaultTo(pluginConfig.tarballDir, publishPlugin.tarballDir);
pluginConfig.pkgRoot = _.defaultTo(pluginConfig.pkgRoot, publishPlugin.pkgRoot);
pluginConfig.mainWorkspace = _.defaultTo(pluginConfig.mainWorkspace, publishPlugin.mainWorkspace);
}
await verify(pluginConfig, context);
verified = true;
}
export async function prepare(pluginConfig, context) {
if (!verified) {
await verify(pluginConfig, context);
}
const pkg = await getPkg(pluginConfig, context);
await prepareNpm(pluginConfig, pkg, context);
prepared = true;
}
export async function publish(pluginConfig, context) {
if (!verified) {
await verify(pluginConfig, context);
}
const pkg = await getPkg(pluginConfig, context);
if (!prepared) {
await prepareNpm(pluginConfig, pkg, context);
}
return publishNpm(pluginConfig, pkg, context);
}
export async function addChannel(pluginConfig, context) {
if (!verified) {
await verify(pluginConfig, context);
}
const pkg = await getPkg(pluginConfig, context);
return addChannelNpm(pluginConfig, pkg, context);
}