5
0
Fork 0
mirror of https://github.com/wagoid/commitlint-github-action.git synced 2025-11-07 08:06:54 +00:00

feat: adds commitDepth as new input param

This commit is contained in:
Sakethtadimeti 2022-11-20 13:45:17 +05:30
parent 861b4d9f10
commit b0982e3b0a
3 changed files with 59 additions and 2 deletions

View file

@ -58,6 +58,12 @@ Link to a page explaining your commit message convention.
default: `https://github.com/conventional-changelog/commitlint/#what-is-commitlint` default: `https://github.com/conventional-changelog/commitlint/#what-is-commitlint`
### `commitDepth`
When set to a valid Integer value - X, considers only the latest X number of commits.
default: `null` (Equivalent to linting all commits)
### `token` ### `token`
Personal access token (PAT) used to interact with the GitHub API. Personal access token (PAT) used to interact with the GitHub API.
@ -144,6 +150,10 @@ jobs:
# Run the commitlint action, considering its own dependencies and yours as well 🚀 # Run the commitlint action, considering its own dependencies and yours as well 🚀
# `github.workspace` is the path to your repository. # `github.workspace` is the path to your repository.
- uses: wagoid/commitlint-github-action@v5 - uses: wagoid/commitlint-github-action@v5
# Optinally, add a commitDepth parameter
# This example would only consider the last 10 commits.
with:
commitDepth: 10
env: env:
NODE_PATH: ${{ github.workspace }}/node_modules NODE_PATH: ${{ github.workspace }}/node_modules
``` ```

View file

@ -16,6 +16,13 @@ const { GITHUB_EVENT_NAME, GITHUB_SHA } = process.env
const configPath = resolve(process.env.GITHUB_WORKSPACE, getInput('configFile')) const configPath = resolve(process.env.GITHUB_WORKSPACE, getInput('configFile'))
const getCommitDepth = () => {
const commitDepthString = getInput('commitDepth')
if (!commitDepthString?.trim()) return null
const commitDepth = parseInt(commitDepthString, 10)
return Number.isNaN(commitDepth) ? null : Math.max(commitDepth, 0)
}
const pushEventHasOnlyOneCommit = (from) => { const pushEventHasOnlyOneCommit = (from) => {
const gitEmptySha = '0000000000000000000000000000000000000000' const gitEmptySha = '0000000000000000000000000000000000000000'
@ -118,7 +125,11 @@ const handleOnlyWarnings = (formattedResults) => {
} }
const showLintResults = async ([from, to]) => { const showLintResults = async ([from, to]) => {
const commits = await getHistoryCommits(from, to) let commits = await getHistoryCommits(from, to)
const commitDepth = getCommitDepth()
if (commitDepth) {
commits = commits?.slice(0, commitDepth)
}
const config = existsSync(configPath) const config = existsSync(configPath)
? await load({}, { file: configPath }) ? await load({}, { file: configPath })
: await load({ extends: ['@commitlint/config-conventional'] }) : await load({ extends: ['@commitlint/config-conventional'] })
@ -130,7 +141,6 @@ const showLintResults = async ([from, to]) => {
})), })),
) )
const formattedResults = formatErrors(lintedCommits, { config }) const formattedResults = formatErrors(lintedCommits, { config })
generateOutputs(lintedCommits) generateOutputs(lintedCommits)
if (hasOnlyWarnings(lintedCommits)) { if (hasOnlyWarnings(lintedCommits)) {

View file

@ -605,4 +605,41 @@ describe('Commit Linter action', () => {
td.verify(core.setFailed(contains(' https://example.org'))) td.verify(core.setFailed(contains(' https://example.org')))
}) })
}) })
describe('when commitDepth is provided in the config', () => {
beforeEach(async () => {
cwd = await git.bootstrap('fixtures/conventional')
await gitEmptyCommit(cwd, 'message from before push')
await gitEmptyCommit(cwd, 'incorrect message within commit depth')
await gitEmptyCommit(cwd, 'chore: correct message 2')
const [before, , to] = await getCommitHashes(cwd)
await createPushEventPayload(cwd, { before, to })
updatePushEnvVars(cwd, to)
td.replace(process, 'cwd', () => cwd)
td.replace(console, 'log')
})
it('should pass when only considering messages defined by commitDepth', async () => {
td.when(core.getInput('commitDepth')).thenReturn('1')
await runAction()
td.verify(core.setFailed(), { times: 0, ignoreExtraArgs: true })
td.verify(console.log('Lint free! 🎉'))
})
it('should fail when older commits have lint errors', async () => {
td.when(core.getInput('commitDepth')).thenReturn('2')
await runAction()
td.verify(
core.setFailed(contains('incorrect message within commit depth')),
)
})
it('should consider all commits when an invalid commit depth is passed in config', async () => {
td.when(core.getInput('commitDepth')).thenReturn('xzy')
await runAction()
td.verify(
core.setFailed(contains('incorrect message within commit depth')),
)
})
})
}) })