@suin/semantic-release-yarn
Version:
semantic-release plugin to publish a npm package with yarn@berry
138 lines (136 loc) • 11.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.publish = exports.prepare = exports.verifyConditions = void 0;
const error_1 = __importDefault(require("@semantic-release/error"));
const read_pkg_1 = __importDefault(require("read-pkg"));
const semver_1 = __importDefault(require("semver"));
const pluginConfig_js_1 = require("./pluginConfig.js");
const yarn_js_1 = require("./yarn.js");
let verified = false;
let prepared = false;
const yarn = new yarn_js_1.Yarn();
async function verifyConditions(config = undefined, context) {
config = pluginConfig_js_1.PluginConfig.normalize(config);
context.logger.log(`read ${context.cwd}/package.json`);
const pkg = await getPackage(context.cwd);
if (pkg.private === true) {
context.logger.log("skipping to verify npm auth since package is private");
return;
}
if (config.npmPublish === false) {
context.logger.log("skipping to verify npm auth since npmPublish is false");
return;
}
context.logger.log('set npmRegistryServer: "https://registry.npmjs.org"');
await yarn.setNpmRegistryServer("https://registry.npmjs.org");
context.logger.log("set NPM_TOKEN to yarn config npmAuthToken");
await yarn.setNpmAuthToken(getNpmToken(context.env));
context.logger.log("verify npm auth");
if (!(await yarn.authenticated())) {
throw PluginError.EINVALIDNPMTOKEN();
}
context.logger.log("install version plugin");
await yarn.pluginImportVersion();
verified = true;
}
exports.verifyConditions = verifyConditions;
async function prepare(config = undefined, context) {
config = pluginConfig_js_1.PluginConfig.normalize(config);
if (!verified) {
return;
}
// Reload package.json in case a previous external step updated it
context.logger.log(`read ${context.cwd}/package.json`);
const pkg = await getPackage(context.cwd);
if (pkg.private === true) {
context.logger.log("skipping to prepare since package is private");
return;
}
if (config.npmPublish === false) {
context.logger.log("skipping to prepare since npmPublish is false");
return;
}
context.logger.log(`rewrite the "version" field in the package.json: ${context.nextRelease.version}`);
const tarballDir = config.tarballDir ?? ".";
await yarn.version(context.nextRelease.version);
if (typeof tarballDir === "string") {
const tarballName = tarballDir + "/package.tgz";
context.logger.log(`creating a tarball: ${tarballName}`);
await yarn.pack(tarballName);
}
context.logger.log(`package contents:`);
const tarballContents = await yarn.packDryRun();
for (const tarballContent of tarballContents) {
context.logger.log(` ${tarballContent}`);
}
prepared = true;
}
exports.prepare = prepare;
async function publish(config = undefined, context) {
config = pluginConfig_js_1.PluginConfig.normalize(config);
if (!verified || !prepared) {
return;
}
// Reload package.json in case a previous external step updated it
context.logger.log(`read ${context.cwd}/package.json`);
const pkg = await getPackage(context.cwd);
if (pkg.private === true) {
context.logger.log("skipping to publish since package is private");
return;
}
if (config.npmPublish === false) {
context.logger.log("skipping to publish since npmPublish is false");
return;
}
const { version } = context.nextRelease;
const distTag = getChannel(context.nextRelease.channel);
context.logger.log(`Publishing version ${version} to npm registry on dist-tag ${distTag}`);
await yarn.publish(distTag);
context.logger.log(`Published ${pkg.name}@${version} to dist-tag @${distTag}`);
}
exports.publish = publish;
class PluginError extends error_1.default {
static ENOPKGNAME() {
return new PluginError("Missing `name` property in `package.json`.", "ENOPKGNAME");
}
static ENOPKG() {
return new PluginError("Missing `package.json`.", "ENOPKG");
}
static EINVALIDNPMTOKEN() {
return new PluginError("Invalid npm token.", "EINVALIDNPMTOKEN", `The npm token configured in the \`NPM_TOKEN\` environment variable must be a valid [token](https://docs.npmjs.com/getting-started/working_with_tokens) allowing to publish to the registry \`\`.
If you are using Two Factor Authentication for your account, set its level to ["Authorization only"](https://docs.npmjs.com/getting-started/using-two-factor-authentication#levels-of-authentication) in your account settings. **semantic-release** cannot publish with the default "
Authorization and writes" level.
Please make sure to set the \`NPM_TOKEN\` environment variable in your CI with the exact value of the npm token.`);
}
}
async function getPackage(cwd) {
let pkg;
try {
pkg = await (0, read_pkg_1.default)({ cwd });
}
catch (error) {
if (error.code === "ENOENT") {
throw PluginError.ENOPKG();
}
throw new AggregateError([error]);
}
if (!pkg.name) {
throw PluginError.ENOPKGNAME();
}
return pkg;
}
function getNpmToken(env) {
if (typeof env["NPM_TOKEN"] !== "string") {
throw PluginError.EINVALIDNPMTOKEN();
}
return env["NPM_TOKEN"];
}
const getChannel = (channel) => channel
? semver_1.default.validRange(channel)
? `release-${channel}`
: channel
: "latest";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvRUFBMkQ7QUFDM0Qsd0RBQW1DO0FBQ25DLG9EQUE0QjtBQUM1Qix1REFBaUQ7QUFDakQsdUNBQWlDO0FBRWpDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNyQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFJLEVBQUUsQ0FBQztBQUlqQixLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLFNBQW1DLFNBQVMsRUFDNUMsT0FBZ0I7SUFFaEIsTUFBTSxHQUFHLDhCQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7SUFDdkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMzRSxPQUFPO0tBQ1I7SUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1FBQy9CLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDNUUsT0FBTztLQUNSO0lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztJQUMxRSxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzlELE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxJQUFJLENBQUMsZUFB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