Skip to content

Commit

Permalink
fix: relevant commit messages not analyzed
Browse files Browse the repository at this point in the history
  • Loading branch information
jonaslagoni committed May 26, 2022
1 parent 08b496e commit d362012
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 12 deletions.
5 changes: 3 additions & 2 deletions src/bumper.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ module.exports = async (
}

const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange(majorWording, minorWording, patchWording, rcWording, commitMessages);

logInfo(`Should do version change? ${JSON.stringify({doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion})}`);

//Should we do any version updates?
if (!doMajorVersion && !doMinorVersion && !doPatchVersion && !doPreReleaseVersion) {
logInfo('Could not find any version bump to make, skipping.');
Expand Down Expand Up @@ -104,7 +105,7 @@ module.exports = async (
} else if (type === 'assembly') {
newContent = getCurrentVersionAssembly(projectFile);
}
logInfo(`new project file: ${newContent}`);
logInfo(`New project file: ${newContent}`);
// eslint-disable-next-line security/detect-non-literal-fs-filename
await promises.writeFile(pathToDocument, newContent);
logInfo('New project file written');
Expand Down
19 changes: 13 additions & 6 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -261,30 +261,37 @@ function analyseVersionChange(majorWording, minorWording, patchWording, rcWordin
// patch is by default empty, and '' would always be true in the includes(''), thats why we handle it separately
const patchWords = patchWording ? patchWording.split(',') : null;
const preReleaseWords = rcWording ? rcWording.split(',') : null;
logInfo(`config words: ${JSON.stringify({ majorWords, minorWords, patchWords, preReleaseWords })}`);
logInfo(`Config words: ${JSON.stringify({ majorWords, minorWords, patchWords, preReleaseWords })}`);

//Only use the first part of a commit message i.e.
// 'ci: feat test' becomes 'ci' as it's the only relevant part up until the first ':'
const mappedCommitMessages = commitMessages.map((commitMessage) => {
return commitMessage.split(':')[0];
});
logInfo(`Mapped commit messages: ${JSON.stringify(mappedCommitMessages)}`);

let doMajorVersion = false;
let doMinorVersion = false;
let doPatchVersion = false;
let doPreReleaseVersion = false;
// case: if wording for MAJOR found
if (
commitMessages.some(
mappedCommitMessages.some(
// eslint-disable-next-line security/detect-unsafe-regex
(message) => (/^([a-zA-Z]+)(\(.+\))?(\!)\:/).test(message) || majorWords.some((word) => message.includes(word)),
(message) => majorWords.some((word) => message.includes(word)),
)
) {
doMajorVersion = true;
} else if (commitMessages.some((message) => minorWords.some((word) => message.includes(word)))) {
} else if (mappedCommitMessages.some((message) => minorWords.some((word) => message.includes(word)))) {
// case: if wording for MINOR found
doMinorVersion = true;
} else if (patchWords &&
commitMessages.some((message) => patchWords.some((word) => message.includes(word)))) {
mappedCommitMessages.some((message) => patchWords.some((word) => message.includes(word)))) {
// case: if wording for PATCH found
doPatchVersion = true;
} else if (
preReleaseWords &&
commitMessages.some((message) => preReleaseWords.some((word) => message.includes(word)))) {
mappedCommitMessages.some((message) => preReleaseWords.some((word) => message.includes(word)))) {
// case: if wording for PRE-RELEASE found
doPreReleaseVersion = true;
}
Expand Down
39 changes: 35 additions & 4 deletions test/utils.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { logInfo, logError, bumpVersion, analyseVersionChange, getCurrentVersionCsproj, getNewProjectContentCsproj, getCurrentVersionAssembly, getNewProjectContentAssembly } = require('../src/utils');
const { logInfo, logError, bumpVersion, analyseVersionChange, getCurrentVersionCsproj, getNewProjectContentCsproj, getCurrentVersionAssembly, getNewProjectContentAssembly, getRelevantCommitMessages } = require('../src/utils');
describe('Utils', () => {
afterEach(() => {
jest.clearAllMocks();
Expand Down Expand Up @@ -46,23 +46,54 @@ describe('Utils', () => {
});
});

describe('getRelevantCommitMessages', () => {
test('should return relevant commit messages up until release commit', () => {
const messages = [
'feat: new test something description\n',
'ci: fixed commit message not matched\n',
'chore(release): test something v0.3.0 (#6)\n',
'feat: new test something description\n'
];
const relevantCommitMessages = getRelevantCommitMessages(messages, 'chore\\(release\\): test something v{{version}}', '');
expect(relevantCommitMessages).toEqual([
'feat: new test something description\n',
'ci: fixed commit message not matched\n'
]);
});
test('should return no commits if release is the latest commit', () => {
const messages = [
'chore(release): test something v0.3.0 (#6)\n',
'feat: new test something description\n'
];
const relevantCommitMessages = getRelevantCommitMessages(messages, 'chore\\(release\\): test something v{{version}}', '');
expect(relevantCommitMessages).toEqual([]);
});
});

describe('analyseVersionChange', () => {
test('wording in commit message', () => {
const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange('feat!', 'feat', 'fix', 'pre', ['ci: feat! test']);
expect(doMajorVersion).toEqual(false);
expect(doMinorVersion).toEqual(false);
expect(doPatchVersion).toEqual(false);
expect(doPreReleaseVersion).toEqual(false);
});
test('figure out to bump major version', () => {
const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange('feat!', '', '', '', ['feat!: change request']);
const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange('feat!', 'feat', 'fix', 'pre', ['feat!: change request']);
expect(doMajorVersion).toEqual(true);
expect(doMinorVersion).toEqual(false);
expect(doPatchVersion).toEqual(false);
expect(doPreReleaseVersion).toEqual(false);
});
test('figure out to bump minor version', () => {
const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange('feat!', 'feat', '', '', ['feat: change request']);
const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange('feat!', 'feat', 'fix', 'pre', ['feat: change request']);
expect(doMajorVersion).toEqual(false);
expect(doMinorVersion).toEqual(true);
expect(doPatchVersion).toEqual(false);
expect(doPreReleaseVersion).toEqual(false);
});
test('figure out to bump patch version', () => {
const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange('feat!', 'feat', 'fix', '', ['fix: change request']);
const {doMajorVersion, doMinorVersion, doPatchVersion, doPreReleaseVersion} = analyseVersionChange('feat!', 'feat', 'fix', 'pre', ['fix: change request']);
expect(doMajorVersion).toEqual(false);
expect(doMinorVersion).toEqual(false);
expect(doPatchVersion).toEqual(true);
Expand Down

0 comments on commit d362012

Please sign in to comment.