UNPKG

1.89 kBJavaScriptView Raw
1const {template} = require('lodash');
2const debug = require('debug')('semantic-release:git');
3const resolveConfig = require('./resolve-config');
4const globAssets = require('./glob-assets.js');
5const {filterModifiedFiles, add, commit, push} = require('./git');
6
7/**
8 * Prepare a release commit including configurable files.
9 *
10 * @param {Object} pluginConfig The plugin configuration.
11 * @param {String|Array<String>} [pluginConfig.assets] Files to include in the release commit. Can be files path or globs.
12 * @param {String} [pluginConfig.message] The message for the release commit.
13 * @param {Object} context semantic-release context.
14 * @param {Object} context.options `semantic-release` configuration.
15 * @param {Object} context.lastRelease The last release.
16 * @param {Object} context.nextRelease The next release.
17 * @param {Object} logger Global logger.
18 */
19module.exports = async (pluginConfig, context) => {
20 const {
21 env,
22 cwd,
23 options: {branch, repositoryUrl},
24 lastRelease,
25 nextRelease,
26 logger,
27 } = context;
28 const {message, assets} = resolveConfig(pluginConfig, logger);
29
30 if (assets && assets.length > 0) {
31 const globbedAssets = await globAssets(context, assets);
32 debug('globed assets: %o', globbedAssets);
33
34 const filesToCommit = await filterModifiedFiles(globbedAssets, {cwd, env});
35
36 if (filesToCommit.length > 0) {
37 logger.log('Found %d file(s) to commit', filesToCommit.length);
38 await add(filesToCommit, {env, cwd});
39 debug('commited files: %o', filesToCommit);
40 await commit(
41 message
42 ? template(message)({branch, lastRelease, nextRelease})
43 : `chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}`,
44 {env, cwd}
45 );
46 }
47
48 await push(repositoryUrl, branch, {env, cwd});
49 logger.log('Prepared Git release: %s', nextRelease.gitTag);
50 }
51};