semantic/release.config.cjs
2025-11-05 13:55:13 +03:00

87 lines
2.0 KiB
JavaScript

const { execSync } = require("child_process");
const fs = require("fs");
function getCurrentOrigin() {
try {
const origin = execSync('git remote get-url origin', { encoding: 'utf8' }).trim();
if (origin) {
return origin;
}
return null;
} catch (error) {
return null;
}
}
function isJsProject() {
return fs.existsSync("package.json");
}
function getGitAssets() {
if (isJsProject()) {
return [
'CHANGELOG.md',
'package.json',
];
}
return [
'CHANGELOG.md',
]
}
function getGitCurrentBranch() {
try {
const branch = execSync("git branch --show-current", { encoding: "utf-8" }).trim();
if (branch) {
return branch;
}
return null;
} catch (error) {
return null;
}
}
const defaultPlugins = [
['@semantic-release/commit-analyzer', { preset: 'conventionalcommits' }],
['@semantic-release/release-notes-generator', { preset: 'conventionalcommits' }],
'@saithodev/semantic-release-gitea'
];
const releasePlugins = [
['@semantic-release/commit-analyzer', { preset: 'conventionalcommits' }],
['@semantic-release/release-notes-generator', { preset: 'conventionalcommits' }],
['@semantic-release/changelog', { changelogFile: 'CHANGELOG.md', changelogTitle: '# Changelog' }],
["@semantic-release/npm", { "npmPublish": false }],
'@saithodev/semantic-release-gitea',
['@semantic-release/git', {
assets: getGitAssets(),
message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}'
}],
];
let plugins;
const branch = getGitCurrentBranch();
const repositoryUrl = getCurrentOrigin();
if (repositoryUrl == null) {
throw new Error("Failed to retreive origin url from system");
}
if (branch == "main" || branch == "master") {
plugins = releasePlugins;
} else {
plugins = defaultPlugins;
}
module.exports = {
repositoryUrl,
branches: [
'main',
'master',
{ name: 'develop', prerelease: 'beta' },
{ name: 'release/*', prerelease: 'rc' },
],
tagFormat: 'v${version}',
plugins,
};