unbag
Version:
一个专门用来开发npm工具的包
131 lines • 3.08 kB
JavaScript
import { useLog } from "../../utils/log.mjs";
import { useMessage } from "../../utils/message/index.mjs";
import { $ } from "execa";
const ReleaseCommitConfigDefault = {
addAll: false,
messageFormat: async ({
finalUserConfig,
bumpRes
}) => {
const {
release
} = finalUserConfig;
const {
scope
} = release;
return `release${scope?.name ? `(${scope.name})` : ``}: ${bumpRes?.version}`;
},
filesCollect: async ({
finalUserConfig,
bumpRes,
changelogRes
}) => {
const {
release
} = finalUserConfig;
const {
bump: {
versionFileWriteDisable,
versionFilePathResolve
},
changelog: {
fileWriteDisable: changelogFileWriteDisable,
filePathResolve: changelogFilePathResolve
}
} = release;
const files = [];
if (!versionFileWriteDisable) {
if (bumpRes.oldVersion !== bumpRes.version) {
const pkgFileAbsolutePath = await versionFilePathResolve({
finalUserConfig
});
files.push(pkgFileAbsolutePath);
}
}
if (!changelogFileWriteDisable) {
if (changelogRes.body) {
const changelogFileAbsolutePath = await changelogFilePathResolve({
finalUserConfig
});
files.push(changelogFileAbsolutePath);
}
}
return files;
}
};
const commit = async params => {
const {
finalUserConfig,
bumpRes,
changelogRes
} = params;
const log = useLog({
finalUserConfig
});
const message = useMessage({
locale: finalUserConfig.locale
});
log.info(message.release.commit.processing());
const {
release: {
dry,
commit: {
disable,
message: commitMessage,
messageFormat,
filesCollect,
addAll
}
}
} = finalUserConfig;
let addFiles = [];
if (addAll) {
log.info(message.release.commit.willCommitAll());
} else {
log.info(message.release.commit.fileCollecting());
addFiles = await filesCollect({
finalUserConfig,
bumpRes,
changelogRes
});
if (addFiles.length <= 0) {
log.warn(message.release.commit.commitFilesEmpty());
return;
}
log.info(message.release.commit.commitFilesInfo({
files: [...addFiles]
}));
}
const finalCommitMsg = commitMessage || (await messageFormat({
finalUserConfig,
bumpRes,
changelogRes,
commitFiles: {
...addFiles
},
addAll
}));
if (!finalCommitMsg) {
throw new Error(message.release.commit.messageUndefined());
}
log.info(message.release.commit.messageInfo({
message: finalCommitMsg
}));
let _disable = disable;
if (dry) {
_disable = true;
log.warn(message.release.dry.commit.disable());
}
if (_disable) {
log.warn(message.release.commit.disable());
return;
}
if (addAll) {
await $`git add .`;
} else {
await $`git add ${[...addFiles]}`;
}
await $`git commit -m ${finalCommitMsg}`;
log.info(message.releaseCommitSuccess());
};
export { ReleaseCommitConfigDefault, commit };