11
0
Fork 0
mirror of https://github.com/wagoid/commitlint-github-action.git synced 2026-03-31 14:56:58 +00:00

feat: handle merge_group event - get squashed commit (#806)

* feat: handle merge_group event - get squashed commit

* test: merge_group event

* chore: temporarily change docker image

* Revert "chore: temporarily change docker image"

This reverts commit 39350effdcf4bfff6d24ed897f5d9ae5c6dbb4c2.

* docs: update merge_group event support
This commit is contained in:
Yossi Saadi 2024-12-16 13:25:13 +02:00 committed by Wagner Santos
parent 3d28780bbf
commit ef2cd3b0d2
4 changed files with 158 additions and 0 deletions

View file

@ -7,6 +7,7 @@ import { format } from '@commitlint/format'
import load from '@commitlint/load'
import generateOutputs from './generateOutputs.mjs'
const mergeGroupEvent = 'merge_group'
const pullRequestEvent = 'pull_request'
const pullRequestTargetEvent = 'pull_request_target'
const pullRequestEvents = [pullRequestEvent, pullRequestTargetEvent]
@ -65,7 +66,21 @@ const getPullRequestEventCommits = async () => {
}))
}
const getMergeGroupEventCommits = async () => {
const { merge_group: mergeGroup } = eventContext.payload
return [
{
message: mergeGroup.head_commit.message,
hash: mergeGroup.head_sha,
},
]
}
const getEventCommits = async () => {
if (GITHUB_EVENT_NAME === mergeGroupEvent) {
return getMergeGroupEventCommits()
}
if (pullRequestEvents.includes(GITHUB_EVENT_NAME)) {
return getPullRequestEventCommits()
}

View file

@ -5,8 +5,10 @@ import { jest, describe, it } from '@jest/globals'
import * as td from 'testdouble'
import {
buildResponseCommit,
createMergeGroupEventPayload,
createPullRequestEventPayload,
createPushEventPayload,
updateMergeGroupEnvVars,
updatePullRequestEnvVars,
updatePushEnvVars,
} from './testUtils.mjs'
@ -952,4 +954,56 @@ describe('Commit Linter action', () => {
td.verify(mockCore.setFailed(contains(incorrectCommit.message)))
})
})
describe('when handling merge_group event', () => {
beforeEach(async () => {
cwd = await git.bootstrap('fixtures/conventional', process.cwd())
td.when(mockCore.getInput('configFile')).thenReturn(
'./commitlint.config.mjs',
)
td.replace(process, 'cwd', () => cwd)
td.replace(console, 'log')
})
it('should lint the squashed commit message successfully', async () => {
const mergeGroupData = {
head_sha: 'merge-group-head-sha',
head_commit: {
id: 'merge-group-head-sha',
message: 'feat: add new feature\n\nThis is a detailed description.',
tree_id: 'tree-sha',
},
}
await createMergeGroupEventPayload(cwd, mergeGroupData)
updateMergeGroupEnvVars(cwd)
await runAction()
td.verify(mockCore.setFailed(), { times: 0, ignoreExtraArgs: true })
td.verify(console.log('Lint free! 🎉'))
})
it('should fail if the squashed commit message has linting errors', async () => {
const mergeGroupData = {
head_sha: 'merge-group-head-sha',
head_commit: {
id: 'merge-group-head-sha',
message: 'bad commit message',
tree_id: 'tree-sha',
},
}
await createMergeGroupEventPayload(cwd, mergeGroupData)
updateMergeGroupEnvVars(cwd)
await runAction()
td.verify(
mockCore.setFailed(contains('You have commit messages with errors')),
)
td.verify(mockCore.setFailed(contains('bad commit message')))
})
})
})

View file

@ -77,3 +77,32 @@ export const buildResponseCommit = (sha, message) => ({
message,
},
})
export const createMergeGroupEventPayload = async (cwd, mergeGroupData) => {
const payload = {
action: 'checks_requested',
merge_group: mergeGroupData,
repository: {
owner: {
login: 'wagoid',
},
name: 'commitlint-github-action',
},
}
const eventPath = path.join(cwd, 'mergeGroupEventPayload.json')
updateEnvVars({
GITHUB_EVENT_PATH: eventPath,
GITHUB_EVENT_NAME: 'merge_group',
GITHUB_REPOSITORY: 'wagoid/commitlint-github-action',
})
await writeFile(eventPath, JSON.stringify(payload), 'utf8')
}
export const updateMergeGroupEnvVars = (cwd) => {
updateEnvVars({
GITHUB_WORKSPACE: cwd,
GITHUB_EVENT_NAME: 'merge_group',
})
}