diff --git a/index.js b/index.js index da9c457..5ad32ff 100644 --- a/index.js +++ b/index.js @@ -20,7 +20,7 @@ Toolkit.run(async (tools) => { const messages = event.commits ? event.commits.map((commit) => commit.message + '\n' + commit.body) : []; const commitMessage = process.env['INPUT_COMMIT-MESSAGE'] || 'ci: version bump to {{version}}'; - console.log('messages:', messages); + console.log('commit messages:', messages); const commitMessageRegex = new RegExp(commitMessage.replace(/{{version}}/g, `${tagPrefix}\\d+\\.\\d+\\.\\d+`), 'ig'); const isVersionBump = messages.find((message) => commitMessageRegex.test(message)) !== undefined; @@ -29,25 +29,39 @@ Toolkit.run(async (tools) => { return; } + // input wordings for MAJOR, MINOR, PATCH, PRE-RELEASE const majorWords = process.env['INPUT_MAJOR-WORDING'].split(','); const minorWords = process.env['INPUT_MINOR-WORDING'].split(','); + // patch is by default empty, and '' would always be true in the includes(''), thats why we handle it separately + const patchWords = process.env['INPUT_PATCH-WORDING'] ? process.env['INPUT_PATCH-WORDING'].split(',') : null; const preReleaseWords = process.env['INPUT_RC-WORDING'].split(','); - // if patch words aren't specified, any commit message qualifies as a patch - const patchWords = process.env['INPUT_PATCH-WORDING'] ? process.env['INPUT_PATCH-WORDING'].split(',') : null; + console.log('config words:', { majorWords, minorWords, patchWords, preReleaseWords }); + // get default version bump let version = process.env.INPUT_DEFAULT; let foundWord = null; + // get the pre-release prefix specified in action let preid = process.env.INPUT_PREID; + + // case: if wording for MAJOR found if ( messages.some( (message) => /^([a-zA-Z]+)(\(.+\))?(\!)\:/.test(message) || majorWords.some((word) => message.includes(word)), ) ) { version = 'major'; - } else if (messages.some((message) => minorWords.some((word) => message.includes(word)))) { + } + // case: if wording for MINOR found + else if (messages.some((message) => minorWords.some((word) => message.includes(word)))) { version = 'minor'; - } else if ( + } + // case: if wording for PATCH found + else if (patchWords && messages.some((message) => patchWords.some((word) => message.includes(word)))) { + version = 'patch'; + } + // case: if wording for PRE-RELEASE found + else if ( messages.some((message) => preReleaseWords.some((word) => { if (message.includes(word)) { @@ -61,27 +75,37 @@ Toolkit.run(async (tools) => { ) { preid = foundWord.split('-')[1]; version = 'prerelease'; - } else if (Array.isArray(patchWords) && patchWords.length) { - if (!messages.some((message) => patchWords.some((word) => message.includes(word)))) { - version = null; - } } - // case: if default=prerelease, but rc-wording is also set - // then unset it and do not run, when no rc words found in message - if (version === 'prerelease' && !messages.some((message) => preReleaseWords.some((word) => message.includes(word)))) { + console.log('version action after first waterfall:', version); + + // case: if default=prerelease, + // rc-wording is also set + // and does not include any of rc-wording + // then unset it and do not run + if ( + version === 'prerelease' && + preReleaseWords !== '' && + !messages.some((message) => preReleaseWords.some((word) => message.includes(word))) + ) { version = null; } + // case: if default=prerelease, but rc-wording is NOT set if (version === 'prerelease' && preid) { + version = 'prerelease'; version = `${version} --preid=${preid}`; } + console.log('version action after final decision:', version); + + // case: if nothing of the above matches if (version === null) { tools.exit.success('No version keywords found, skipping bump.'); return; } + // GIT logic try { const current = pkg.version.toString(); // set git user diff --git a/package.json b/package.json index af50d31..0cb9bd6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gh-action-bump-version", - "version": "8.2.20", + "version": "8.3.0", "repository": { "type": "git", "url": "git+https://github.com/phips28/gh-action-bump-version.git"