@halospv3/hce.shared-config
Version:
Automate commit message quality, changelogs, and CI/CD releases. Exports a semantic-release shareable configuration deserialized from this package's '.releaserc.yml'. Shared resources for .NET projects are also distributed with this package.
68 lines (61 loc) • 2.68 kB
JavaScript
;
const GitPluginId = '@semantic-release/git';
/** As specified at https://github.com/semantic-release/git#options */
const DefaultOptions = {
assets: ['README.md', 'CHANGELOG.md', 'package.json', 'package-lock.json', 'npm-shrinkwrap.json'],
message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}'
};
function gitAssetsToArray(assets) {
if (assets === undefined || assets === false) return [];
if (Array.isArray(assets)) return assets;
if (typeof assets === 'string') return [assets];
return assets.path === 'string' ? [assets.path] : [];
}
/**
* https://github.com/semantic-release/git#options
*
* This plugin may be deprecated at a later date.
* Why do you need to commit during release?
* If you don't need to update a changelog or version in a file, then you don't need this.
*
* @returns A {@link PluginSpec} array with {@link PluginSpec<GitOptions>}. If Git plugin not in original array, returns the original array.
* todo: deprecate for generic or parameterized function
*/
function setupGitPluginSpec(plugins) {
let newPlugins = plugins;
let gitPluginIndex = -1;
function pluginSpecIsGit(pluginSpec, pluginSpecIndex) {
if (pluginSpec === GitPluginId || pluginSpec[0] === GitPluginId) {
gitPluginIndex = pluginSpecIndex;
return true;
}
return false;
}
// if Git plugin not in load order, return as-is.
if (!newPlugins.some(pluginSpecIsGit)) return plugins;
// if string, replace with tuple with default options.
newPlugins = newPlugins.map(plugin => plugin === GitPluginId ? [GitPluginId, DefaultOptions] : plugin);
// ensure assets is an array
newPlugins[gitPluginIndex][1].assets = gitAssetsToArray(newPlugins[gitPluginIndex][1].assets);
const discardPile = [];
// de-duplicate Git plugin entries; assign single entry to newPlugins[gitPluginIndex]
newPlugins.forEach((current, i) => {
if (i > gitPluginIndex && pluginSpecIsGit(current, gitPluginIndex)) {
// convert its assets to an array
const assets = newPlugins[i][1].assets;
const message = newPlugins[i][1].message;
// push unique assets to first entry's assets array
if (assets !== undefined) newPlugins[gitPluginIndex][1].assets.push(...gitAssetsToArray(assets));
if (message !== undefined) newPlugins[gitPluginIndex][1].message = message;
discardPile.push(i);
}
});
for (const i of discardPile.sort().reverse()) {
newPlugins.splice(i, 1);
}
return newPlugins;
}
exports.DefaultOptions = DefaultOptions;
exports.GitPluginId = GitPluginId;
exports.setupGitPluginSpec = setupGitPluginSpec;
//# sourceMappingURL=setupGitPluginSpec.cjs.map