lerna
Version:
Lerna is a fast, modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository
72 lines (69 loc) • 1.82 kB
JavaScript
import {
ValidationError,
createGitHubClient,
createGitLabClient,
parseGitRepo
} from "./chunk-WC2B4V4E.js";
// libs/commands/version/src/lib/create-release.ts
import semver from "semver";
function truncateReleaseBody(body, type) {
let maxReleaseBodyLength;
switch (type) {
case "gitlab":
maxReleaseBodyLength = 1e6;
break;
case "github":
maxReleaseBodyLength = 125e3;
break;
default:
return body;
}
if (body.length > maxReleaseBodyLength) {
const ellipsis = "...";
return body.slice(0, maxReleaseBodyLength - ellipsis.length) + ellipsis;
}
return body;
}
function createReleaseClient(type) {
switch (type) {
case "gitlab":
return createGitLabClient();
case "github":
return createGitHubClient();
/* istanbul ignore next: guarded by yargs.choices() */
default:
throw new ValidationError("ERELEASE", "Invalid release client type");
}
}
function createRelease(client, {
type,
tags,
releaseNotes,
tagVersionSeparator
}, { gitRemote, execOpts }) {
const repo = parseGitRepo(gitRemote, execOpts);
return Promise.all(
releaseNotes.map(({ notes, name }) => {
const tag = name === "fixed" ? tags[0] : tags.find((t) => t.startsWith(`${name}${tagVersionSeparator}`));
if (!tag) {
return Promise.resolve();
}
const prereleaseParts = semver.prerelease(tag.replace(`${name}${tagVersionSeparator}`, "")) || [];
const body = truncateReleaseBody(notes, type);
return client.repos.createRelease({
owner: repo.owner,
repo: repo.name,
tag_name: tag,
name: tag,
body,
draft: false,
prerelease: prereleaseParts.length > 0
});
})
);
}
export {
truncateReleaseBody,
createReleaseClient,
createRelease
};