@r4lrgx/shared-config
Version:
🔩 My customized Config of semantic release and commitlint and others.
193 lines (179 loc) • 6.75 kB
JavaScript
import dedent from 'dedent';
// @r4lrgx/shared-config v1.0.6
// MIT License
// src/release-config/plugins/analyzer.ts
var commitAnalyzerPlugin = (options = {}) => {
options = Object.fromEntries(Object.entries(options).filter(([_, v]) => v !== void 0));
const { releaseRules, config, ...customized } = options;
return [
"@semantic-release/commit-analyzer",
{
// version:1.0.0:major.minor.patch:2.0.0:1.1.0:1.0.1
releaseRules: releaseRules ?? [
{ breaking: true, release: "major" },
{ type: "feat", release: "minor" },
{ type: "feat", scope: "int-*", release: false },
{ type: "fix", release: "patch" },
{ type: "fix", scope: "int-*", release: false },
{ type: "perf", release: "patch" },
{ type: "perf", scope: "int-*", release: false },
{ type: "refactor", release: "patch" },
{ type: "refactor", scope: "int-*", release: false },
{ type: "chore", release: "patch" },
{ type: "chore", scope: "int-*", release: false },
{ type: "chore", scope: "deps", release: "patch" },
{ type: "docs", release: "patch" },
{ type: "docs", scope: "int-*", release: false },
{ type: "build", release: "patch" },
{ type: "ci", release: false },
{ type: "test", release: false },
{ type: "style", release: false },
{ type: "wip", release: false },
{ type: "revert", release: false }
],
config: config ?? "@r4lrgx/gitmoji/changelog-config",
...customized
}
];
};
var changelogPlugin = (options = {}) => {
options = Object.fromEntries(Object.entries(options).filter(([_, v]) => v !== void 0));
const { changelogFile, changelogTitle } = options;
const defaultChangelogTitle = dedent(`
<a name="changelog-top"></a>
<div align="center">
<h1>\u{1F4C5} Changelog</h1>
<p>\u{1F50E} Version History & Release Tracking.</p>
</div>
> [!IMPORTANT]
> **Maintenance Policy**
> Only the latest stable version receives active support.
> Security patches are backported for 6 months after new major releases.
> [!WARNING]
> **Breaking Changes Protocol**
> Major version updates (X.0.0) may contain backward-incompatible changes.
> Always check the migration guide before upgrading.
> [!NOTE]
> **Changelog Standards**
> This document follows [Keep a Changelog](https://keepachangelog.com/) conventions
---
`);
return [
"@semantic-release/changelog",
{
changelogFile: changelogFile ?? "CHANGELOG.md",
changelogTitle: changelogTitle ?? defaultChangelogTitle
}
];
};
// src/release-config/plugins/exec.ts
var execPlugin = (options = {}) => {
options = Object.fromEntries(Object.entries(options).filter(([_, v]) => v !== void 0));
const { prepareCmd, publishCmd, successCmd, failCmd, ...customized } = options;
return [
"@semantic-release/exec",
{
prepareCmd: prepareCmd ?? 'echo "\u{1F4E6} Preparing release ${nextRelease.tag} v${nextRelease.version}"',
publishCmd: publishCmd ?? 'echo "\u{1F680} Publishing release ${nextRelease.tag} v${nextRelease.version}"',
successCmd: successCmd ?? 'echo "\u2705 Release ${nextRelease.tag} v${nextRelease.version} published successfully!"',
failCmd: failCmd ?? 'echo "\u{1F6D1} Failed to publish release ${nextRelease.tag} v${nextRelease.version}"',
...customized
}
];
};
// src/release-config/plugins/git.ts
var gitPlugin = (options = {}) => {
options = Object.fromEntries(Object.entries(options).filter(([_, v]) => v !== void 0));
const { assets, message } = options;
const defaultAssets = ["CHANGELOG.md", "package.json", "pnpm-lock.yaml"];
const resolveAssets = () => {
if (typeof assets === "boolean") return false;
if (typeof assets === "string") return [assets];
if (Array.isArray(assets)) return [...assets, ...defaultAssets].filter(Boolean);
return defaultAssets;
};
return [
"@semantic-release/git",
{
assets: resolveAssets(),
message: message ?? [
// biome
"\u267B\uFE0F chore(RELEASE): ${nextRelease.tag} v${nextRelease.version} [skip ci]\n",
"\u{1F4DD} Release Notes:\n${nextRelease.notes}"
].join("\n")
}
];
};
// src/release-config/plugins/github.ts
var githubPlugin = (options = {}) => {
options = Object.fromEntries(Object.entries(options).filter(([_, v]) => v !== void 0));
const { successComment, failComment, releasedLabels, addReleases, assets, ...customized } = options;
return [
"@semantic-release/github",
{
successComment: successComment ?? [
// biome
"\u{1F680} Successfully released **v${nextRelease.version}** `(${nextRelease.tag})`! \u{1F389}",
"\u{1F517} [View release details](${nextRelease.url})\n",
"Thanks for contributing to the project! \u{1F64C}"
].join("\n"),
failComment: failComment ?? [
// biome
"\u274C Uh-oh! Failed to release **v${nextRelease.version}** `(${nextRelease.tag})`.",
"\u{1F4C4} Check logs or CI output for more info.\n",
"We're on it like a debugger on a stack trace. \u{1F41B}"
].join("\n"),
releasedLabels: releasedLabels ?? [
// biome
'released<%= nextRelease.channel ? `-${nextRelease.channel}` : "" %>'
],
addReleases: addReleases ?? "bottom",
assets: [
...assets ?? [],
{
path: "CHANGELOG.md",
name: "CHANGELOG",
label: "Changelog"
},
{
path: "README.md",
name: "README",
label: "Readme"
},
{
path: "license.md",
name: "license",
label: "License"
}
].filter(Boolean),
...customized
}
];
};
// src/release-config/plugins/notes.ts
var releaseNotesGeneratorPlugin = (options = {}) => {
options = Object.fromEntries(Object.entries(options).filter(([_, v]) => v !== void 0));
const { config, ...customized } = options;
return [
"@semantic-release/release-notes-generator",
{
config: config ?? "@r4lrgx/gitmoji/changelog-config",
...customized
}
];
};
// src/release-config/plugins/npm.ts
var npmPlugin = (options = {}) => {
options = Object.fromEntries(Object.entries(options).filter(([_, v]) => v !== void 0));
const { npmPublish, ...customized } = options;
return [
"@semantic-release/npm",
{
npmPublish: npmPublish ?? false,
...customized
}
];
};
export { changelogPlugin, commitAnalyzerPlugin, execPlugin, gitPlugin, githubPlugin, npmPlugin, releaseNotesGeneratorPlugin };
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map