git-newtag
Version:
根据配置规则自动生成新的tag推送到远端git
72 lines (70 loc) • 2.54 kB
JavaScript
;
var path = require("path");
var fs = require("fs");
var exit = require("process").exit;
var simpleGit = require("simple-git").simpleGit;
var dayjs = require("dayjs");
var ntConfigPath = path.join(process.cwd(), "nt.config.js");
var ntConfigContent = fs.readFileSync(ntConfigPath, "utf8");
var ntConfig = {
tagHead: "release-online",
versionName: "v",
};
try {
var evalObject = eval(ntConfigContent);
if (typeof evalObject !== "object") {
throw new Error("🚨 nt.config.js 解析出错");
}
ntConfig = evalObject;
}
catch (error) {
console.error(error);
exit(0);
}
var _a = ntConfig.tagHead, tagHead = _a === void 0 ? "release-online" : _a, _b = ntConfig.versionName, versionName = _b === void 0 ? "v" : _b, tagMessage = ntConfig.tagMessage;
var message = tagMessage || process.argv[2];
function getNewTag(tagList) {
function getLastDate(tag) {
var lastDate = tag.match(/\d{1,4}-\d{1,2}-\d{1,2}/g)[0];
lastDate = lastDate.split("-")[0].length < 4 ? "20".concat(lastDate) : lastDate;
return lastDate;
}
var version = 1;
var today = dayjs().format("YYYY-MM-DD");
var lastTag = tagList.sort(function (a, b) {
var target = +dayjs(getLastDate(b)) - +dayjs(getLastDate(a));
if (target === 0) {
return (+b.toLowerCase().split("-".concat(versionName))[1] -
+a.toLowerCase().split("-".concat(versionName))[1]);
}
return target;
})[0];
if (lastTag) {
if (dayjs(getLastDate(lastTag)).format("YYYY-MM-DD") === today) {
version = +lastTag.toLowerCase().split("-".concat(versionName))[1] + 1;
}
}
return "".concat(tagHead, "-").concat(today, "-").concat(versionName).concat(version);
}
var options = {
baseDir: process.cwd(),
binary: "git",
maxConcurrentProcesses: 6,
trimmed: false,
};
// when setting all options in a single object
var git = simpleGit(options);
git.pull().tags(function (err, tags) {
var tagList = [];
(tags.all || []).forEach(function (item) {
if (new RegExp("^".concat(tagHead)).test(item)) {
tagList.push(item);
}
});
var newtag = getNewTag(tagList);
git.addAnnotatedTag(newtag, message || "", function () {
console.log("\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80 new tag name: ".concat(newtag, " \uD83D\uDE80\uD83D\uDE80\uD83D\uDE80"));
git.pushTags();
console.log("\u2728\u2728\u2728 \u53D1\u5E03\u5B8C\u6BD5 \u2728\u2728\u2728");
});
});