@auto-it/git-tag
Version:
Manage your projects version through just a git tag
97 lines • 3.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@auto-it/core");
const semver_1 = require("semver");
/** Manage your projects version through just a git tag. */
class GitTagPlugin {
constructor() {
/** The name of the plugin */
this.name = "git-tag";
}
/** Tap into auto plugin points. */
apply(auto) {
/** Get the latest tag in the repo, if none then the first commit */
async function getTag() {
try {
return await auto.git.getLatestTagInBranch();
}
catch (error) {
return auto.prefixRelease("0.0.0");
}
}
auto.hooks.getPreviousVersion.tapPromise(this.name, async () => {
if (!auto.git) {
throw new Error("Can't calculate previous version without Git initialized!");
}
return getTag();
});
auto.hooks.version.tapPromise(this.name, async ({ bump, dryRun, quiet }) => {
if (!auto.git) {
return;
}
const lastTag = await getTag();
const newTag = semver_1.inc(lastTag, bump);
if (!newTag) {
auto.logger.log.info("No release found, doing nothing");
return;
}
const prefixedTag = auto.prefixRelease(newTag);
if (dryRun) {
if (quiet) {
console.log(prefixedTag);
}
else {
auto.logger.log.info(`Would have published: ${prefixedTag}`);
}
return;
}
auto.logger.log.info(`Tagging new tag: ${lastTag} => ${prefixedTag}`);
await core_1.execPromise("git", [
"tag",
prefixedTag,
"-m",
`"Update version to ${prefixedTag}"`,
]);
});
auto.hooks.next.tapPromise(this.name, async (preReleaseVersions, { bump, dryRun }) => {
var _a, _b;
if (!auto.git) {
return preReleaseVersions;
}
const prereleaseBranches = (_b = (_a = auto.config) === null || _a === void 0 ? void 0 : _a.prereleaseBranches) !== null && _b !== void 0 ? _b : core_1.DEFAULT_PRERELEASE_BRANCHES;
const branch = core_1.getCurrentBranch() || "";
const prereleaseBranch = prereleaseBranches.includes(branch)
? branch
: prereleaseBranches[0];
const lastRelease = await auto.git.getLatestRelease();
const current = (await auto.git.getLastTagNotInBaseBranch(prereleaseBranch)) ||
(await auto.getCurrentVersion(lastRelease));
const prerelease = auto.prefixRelease(core_1.determineNextVersion(lastRelease, current, bump, prereleaseBranch));
preReleaseVersions.push(prerelease);
if (dryRun) {
return preReleaseVersions;
}
await core_1.execPromise("git", [
"tag",
prerelease,
"-m",
`"Tag pre-release: ${prerelease}"`,
]);
await core_1.execPromise("git", ["push", auto.remote, branch, "--tags"]);
return preReleaseVersions;
});
auto.hooks.publish.tapPromise(this.name, async () => {
auto.logger.log.info("Pushing new tag to GitHub");
await core_1.execPromise("git", [
"push",
"--atomic",
"--follow-tags",
"--set-upstream",
auto.remote,
core_1.getCurrentBranch() || auto.baseBranch,
]);
});
}
}
exports.default = GitTagPlugin;
//# sourceMappingURL=index.js.map