feat(config): Use cosmiconfig defaults to support .cjs config files (#1815)
This change adds support for `*.cjs` config files by removing the explicit use of `searchPlaces` options and relying and the default search places generated by `cosmicconfig`. As per the docs for [`cosmicconfig`][cc], the defaults include all the extensions/formats previously supported by semantic-release in addition to the new .cjs variants. Resolves [#1814][issue]. [issue]: https://github.com/semantic-release/semantic-release/issues/1814 [cc]: https://github.com/davidtheclark/cosmiconfig#searchplaces
This commit is contained in:
parent
acf8bc4d21
commit
3ecc196d8a
@ -9,19 +9,10 @@ const plugins = require('./plugins');
|
|||||||
const {validatePlugin, parseConfig} = require('./plugins/utils');
|
const {validatePlugin, parseConfig} = require('./plugins/utils');
|
||||||
|
|
||||||
const CONFIG_NAME = 'release';
|
const CONFIG_NAME = 'release';
|
||||||
const CONFIG_FILES = [
|
|
||||||
'package.json',
|
|
||||||
`.${CONFIG_NAME}rc`,
|
|
||||||
`.${CONFIG_NAME}rc.json`,
|
|
||||||
`.${CONFIG_NAME}rc.yaml`,
|
|
||||||
`.${CONFIG_NAME}rc.yml`,
|
|
||||||
`.${CONFIG_NAME}rc.js`,
|
|
||||||
`${CONFIG_NAME}.config.js`,
|
|
||||||
];
|
|
||||||
|
|
||||||
module.exports = async (context, cliOptions) => {
|
module.exports = async (context, cliOptions) => {
|
||||||
const {cwd, env} = context;
|
const {cwd, env} = context;
|
||||||
const {config, filepath} = (await cosmiconfig(CONFIG_NAME, {searchPlaces: CONFIG_FILES}).search(cwd)) || {};
|
const {config, filepath} = (await cosmiconfig(CONFIG_NAME).search(cwd)) || {};
|
||||||
|
|
||||||
debug('load config from: %s', filepath);
|
debug('load config from: %s', filepath);
|
||||||
|
|
||||||
|
@ -191,6 +191,28 @@ test('Read options from .releaserc.js', async (t) => {
|
|||||||
t.deepEqual(t.context.plugins.args[0][0], {options: expected, cwd});
|
t.deepEqual(t.context.plugins.args[0][0], {options: expected, cwd});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Read options from .releaserc.cjs', async (t) => {
|
||||||
|
// Create a git repository, set the current working directory at the root of the repo
|
||||||
|
const {cwd} = await gitRepo();
|
||||||
|
const options = {
|
||||||
|
analyzeCommits: {path: 'analyzeCommits', param: 'analyzeCommits_param'},
|
||||||
|
branches: ['test_branch'],
|
||||||
|
repositoryUrl: 'https://host.null/owner/module.git',
|
||||||
|
tagFormat: `v\${version}`,
|
||||||
|
plugins: false,
|
||||||
|
};
|
||||||
|
// Create .releaserc.cjs in repository root
|
||||||
|
await writeFile(path.resolve(cwd, '.releaserc.cjs'), `module.exports = ${JSON.stringify(options)}`);
|
||||||
|
|
||||||
|
const {options: result} = await t.context.getConfig({cwd});
|
||||||
|
|
||||||
|
const expected = {...options, branches: ['test_branch']};
|
||||||
|
// Verify the options contains the plugin config from .releaserc.cjs
|
||||||
|
t.deepEqual(result, expected);
|
||||||
|
// Verify the plugins module is called with the plugin options from .releaserc.cjs
|
||||||
|
t.deepEqual(t.context.plugins.args[0][0], {options: expected, cwd});
|
||||||
|
});
|
||||||
|
|
||||||
test('Read options from release.config.js', async (t) => {
|
test('Read options from release.config.js', async (t) => {
|
||||||
// Create a git repository, set the current working directory at the root of the repo
|
// Create a git repository, set the current working directory at the root of the repo
|
||||||
const {cwd} = await gitRepo();
|
const {cwd} = await gitRepo();
|
||||||
@ -213,6 +235,28 @@ test('Read options from release.config.js', async (t) => {
|
|||||||
t.deepEqual(t.context.plugins.args[0][0], {options: expected, cwd});
|
t.deepEqual(t.context.plugins.args[0][0], {options: expected, cwd});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Read options from release.config.cjs', async (t) => {
|
||||||
|
// Create a git repository, set the current working directory at the root of the repo
|
||||||
|
const {cwd} = await gitRepo();
|
||||||
|
const options = {
|
||||||
|
analyzeCommits: {path: 'analyzeCommits', param: 'analyzeCommits_param'},
|
||||||
|
branches: ['test_branch'],
|
||||||
|
repositoryUrl: 'https://host.null/owner/module.git',
|
||||||
|
tagFormat: `v\${version}`,
|
||||||
|
plugins: false,
|
||||||
|
};
|
||||||
|
// Create release.config.cjs in repository root
|
||||||
|
await writeFile(path.resolve(cwd, 'release.config.cjs'), `module.exports = ${JSON.stringify(options)}`);
|
||||||
|
|
||||||
|
const {options: result} = await t.context.getConfig({cwd});
|
||||||
|
|
||||||
|
const expected = {...options, branches: ['test_branch']};
|
||||||
|
// Verify the options contains the plugin config from release.config.cjs
|
||||||
|
t.deepEqual(result, expected);
|
||||||
|
// Verify the plugins module is called with the plugin options from release.config.cjs
|
||||||
|
t.deepEqual(t.context.plugins.args[0][0], {options: expected, cwd});
|
||||||
|
});
|
||||||
|
|
||||||
test('Prioritise CLI/API parameters over file configuration and git repo', async (t) => {
|
test('Prioritise CLI/API parameters over file configuration and git repo', async (t) => {
|
||||||
// Create a git repository, set the current working directory at the root of the repo
|
// Create a git repository, set the current working directory at the root of the repo
|
||||||
let {cwd, repositoryUrl} = await gitRepo();
|
let {cwd, repositoryUrl} = await gitRepo();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user