Skip to content

Commit

Permalink
fix: commit message (#13197)
Browse files Browse the repository at this point in the history
* fix: introduce class SemanticCommitMessage

* fix: introduce class AbstractCommitMessage

* fix: use commit message model

* fix: clean extra whitespaces

* fix: test coverage

* fix: fix build

* fix: unit test

* fix: by comments

* fix: cover case without prefix by unit tests

* fix: coverage

* fix: regexp

* fix: revert options changes

* fix: update commit message model

* fix: add unit test

* fix: add new getter to commit message model

* fix: add unit test

* fix: update by comments

Co-authored-by: Rhys Arkins <rhys@arkins.net>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
  • Loading branch information
3 people committed Jun 13, 2022
1 parent a5e4b9e commit ed639b4
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 32 deletions.
4 changes: 4 additions & 0 deletions lib/workers/repository/model/commit-message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ export abstract class CommitMessage {
this._footer = this.normalizeInput(value);
}

get subject(): string {
return this._subject;
}

set subject(value: string) {
this._subject = this.normalizeInput(value);
this._subject = this._subject?.replace(
Expand Down
9 changes: 9 additions & 0 deletions lib/workers/repository/model/semantic-commit-message.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ describe('workers/repository/model/semantic-commit-message', () => {
expect(message.toString()).toBe('fix(scope): test');
});

it('should transform to lowercase only first letter', () => {
const message = new SemanticCommitMessage();
message.subject = 'Update My Org dependencies';
message.type = 'fix';
message.scope = 'deps ';

expect(message.toString()).toBe('fix(deps): update My Org dependencies');
});

it('should create instance from string without scope', () => {
const instance = SemanticCommitMessage.fromString('feat: ticket 123');

Expand Down
14 changes: 13 additions & 1 deletion lib/workers/repository/updates/generate.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ describe('workers/repository/updates/generate', () => {
}),
];
const res = generateBranchConfig(branch);
expect(res.prTitle).toBe('chore(): update dependency some-dep to v1.2.0');
expect(res.prTitle).toBe('chore: update dependency some-dep to v1.2.0');
});

it('scopes monorepo commits with nested package files using parent directory', () => {
Expand Down Expand Up @@ -908,5 +908,17 @@ describe('workers/repository/updates/generate', () => {
'`1.1.1` (+1)',
]);
});

it('fixes commit message with body', () => {
const branch = [
partial<BranchUpgradeConfig>({
...defaultConfig,
commitMessage: 'update to vv1.2.0',
commitBody: 'some body',
}),
];
const res = generateBranchConfig(branch);
expect(res.commitMessage).toBe('Update to v1.2.0\n\nsome body');
});
});
});
50 changes: 19 additions & 31 deletions lib/workers/repository/updates/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import semver from 'semver';
import { mergeChildConfig } from '../../../config';
import { CONFIG_SECRETS_EXPOSED } from '../../../constants/error-messages';
import { logger } from '../../../logger';
import { newlineRegex, regEx } from '../../../util/regex';
import { regEx } from '../../../util/regex';
import { sanitize } from '../../../util/sanitize';
import * as template from '../../../util/template';
import type { BranchConfig, BranchUpgradeConfig } from '../../types';
import { CommitMessage } from '../model/commit-message';
import { CommitMessageFactory } from '../model/commit-message-factory';
import { SemanticCommitMessage } from '../model/semantic-commit-message';

function isTypesGroup(branchUpgrades: BranchUpgradeConfig[]): boolean {
return (
Expand Down Expand Up @@ -166,28 +167,24 @@ export function generateBranchConfig(
} else if (semver.valid(toVersions[0])) {
upgrade.isRange = false;
}
const commitMessageFactory = new CommitMessageFactory(upgrade);
const commitMessage = commitMessageFactory.create();
// Use templates to generate strings
if (upgrade.semanticCommits === 'enabled' && !upgrade.commitMessagePrefix) {
if (SemanticCommitMessage.is(commitMessage)) {
logger.trace('Upgrade has semantic commits enabled');
let semanticPrefix = upgrade.semanticCommitType;
if (upgrade.semanticCommitScope) {
semanticPrefix += `(${template.compile(
upgrade.semanticCommitScope,
upgrade
)})`;
}
upgrade.commitMessagePrefix = CommitMessage.formatPrefix(semanticPrefix);
upgrade.toLowerCase =
regEx(/[A-Z]/).exec(upgrade.semanticCommitType) === null &&
!upgrade.semanticCommitType.startsWith(':');
commitMessage.scope = template.compile(
upgrade.semanticCommitScope,
upgrade
);
}
// Compile a few times in case there are nested templates
upgrade.commitMessage = template.compile(
commitMessage.subject = template.compile(
upgrade.commitMessage || '',
upgrade
);
upgrade.commitMessage = template.compile(upgrade.commitMessage, upgrade);
upgrade.commitMessage = template.compile(upgrade.commitMessage, upgrade);
commitMessage.subject = template.compile(commitMessage.subject, upgrade);
commitMessage.subject = template.compile(commitMessage.subject, upgrade);
upgrade.commitMessage = commitMessage.formatSubject();
// istanbul ignore if
if (upgrade.commitMessage !== sanitize(upgrade.commitMessage)) {
logger.debug(
Expand All @@ -196,23 +193,14 @@ export function generateBranchConfig(
);
throw new Error(CONFIG_SECRETS_EXPOSED);
}
upgrade.commitMessage = upgrade.commitMessage.trim(); // Trim exterior whitespace
upgrade.commitMessage = upgrade.commitMessage.replace(regEx(/\s+/g), ' '); // Trim extra whitespace inside string
upgrade.commitMessage = upgrade.commitMessage.replace(
commitMessage.subject = commitMessage.subject.replace(
regEx(/to vv(\d)/),
'to v$1'
);
if (upgrade.toLowerCase) {
// We only need to lowercase the first line
const splitMessage = upgrade.commitMessage.split(newlineRegex);
splitMessage[0] = splitMessage[0].toLowerCase();
upgrade.commitMessage = splitMessage.join('\n');
}
upgrade.commitMessage = commitMessage.formatSubject();
if (upgrade.commitBody) {
upgrade.commitMessage = `${upgrade.commitMessage}\n\n${template.compile(
upgrade.commitBody,
upgrade
)}`;
commitMessage.body = template.compile(upgrade.commitBody, upgrade);
upgrade.commitMessage = commitMessage.toString();
}
logger.trace(`commitMessage: ` + JSON.stringify(upgrade.commitMessage));
if (upgrade.prTitle) {
Expand All @@ -234,7 +222,7 @@ export function generateBranchConfig(
upgrade.prTitle = upgrade.prTitle.toLowerCase();
}
} else {
[upgrade.prTitle] = upgrade.commitMessage.split(newlineRegex);
upgrade.prTitle = commitMessage.title;
}
upgrade.prTitle += upgrade.hasBaseBranches ? ' ({{baseBranch}})' : '';
if (upgrade.isGroup) {
Expand Down

0 comments on commit ed639b4

Please sign in to comment.