diff --git a/lib/modules/platform/github/scm.spec.ts b/lib/modules/platform/github/scm.spec.ts index 7e25cde834b0830a17dbf10e978fbd87fcf913b3..6242b23d56ab397709de6074837b90fbaaab86d9 100644 --- a/lib/modules/platform/github/scm.spec.ts +++ b/lib/modules/platform/github/scm.spec.ts @@ -73,4 +73,39 @@ describe('modules/platform/github/scm', () => { platformCommit: 'auto', }); }); + + describe('sanitize mentions in commit messages', () => { + it('single string', async () => { + await githubScm.commitAndPush({ + ...commitObj, + message: 'Use @octokit to irritate @octocat', + platformCommit: 'enabled', + }); + + expect(git.commitFiles).not.toHaveBeenCalled(); + expect(github.commitFiles).toHaveBeenCalledWith({ + ...commitObj, + message: 'Use @\u{8203}octokit to irritate @\u{8203}octocat', + platformCommit: 'enabled', + }); + }); + + it('array of string', async () => { + await githubScm.commitAndPush({ + ...commitObj, + message: ['Use @octokit', 'It automates the way we irritate @octocat'], + platformCommit: 'enabled', + }); + + expect(git.commitFiles).not.toHaveBeenCalled(); + expect(github.commitFiles).toHaveBeenCalledWith({ + ...commitObj, + message: [ + 'Use @\u{8203}octokit', + 'It automates the way we irritate @\u{8203}octocat', + ], + platformCommit: 'enabled', + }); + }); + }); }); diff --git a/lib/modules/platform/github/scm.ts b/lib/modules/platform/github/scm.ts index cb943b46412fa62d5fc758f07ff1b9eb1fda7907..e44daf3eebfcba19ac4990b6a3f3446d4d92abe6 100644 --- a/lib/modules/platform/github/scm.ts +++ b/lib/modules/platform/github/scm.ts @@ -1,8 +1,13 @@ +import is from '@sindresorhus/is'; import * as git from '../../../util/git'; import type { CommitFilesConfig, LongCommitSha } from '../../../util/git/types'; import { DefaultGitScm } from '../default-scm'; import { commitFiles, isGHApp } from './'; +export function sanitizeMentions(input: string): string { + return input.replaceAll('@', '@\u{8203}'); +} + export class GithubScm extends DefaultGitScm { override commitAndPush( commitConfig: CommitFilesConfig, @@ -12,6 +17,11 @@ export class GithubScm extends DefaultGitScm { platformCommit = 'enabled'; } + const sanitizedMessage = is.array(commitConfig.message) + ? commitConfig.message.map(sanitizeMentions) + : sanitizeMentions(commitConfig.message); + commitConfig.message = sanitizedMessage; + return platformCommit === 'enabled' ? commitFiles(commitConfig) : git.commitFiles(commitConfig);