mirror of
https://github.com/wagoid/commitlint-github-action.git
synced 2025-11-07 08:06:54 +00:00
Merge pull request #595 from Sakethtadimeti/master
feat: adds commitDepth as new input param
This commit is contained in:
commit
e6b4f2e9b4
4 changed files with 63 additions and 5 deletions
|
|
@ -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.
|
||||||
|
|
|
||||||
11
action.yml
11
action.yml
|
|
@ -3,7 +3,8 @@ description: Lints Pull Request commit messages with commitlint
|
||||||
author: Wagner Santos
|
author: Wagner Santos
|
||||||
inputs:
|
inputs:
|
||||||
configFile:
|
configFile:
|
||||||
description: Commitlint config file. If the file doesn't exist, config-conventional settings will be
|
description:
|
||||||
|
Commitlint config file. If the file doesn't exist, config-conventional settings will be
|
||||||
loaded as a fallback.
|
loaded as a fallback.
|
||||||
default: ./commitlint.config.js
|
default: ./commitlint.config.js
|
||||||
required: false
|
required: false
|
||||||
|
|
@ -12,16 +13,20 @@ inputs:
|
||||||
When set to true, we follow only the first parent commit when seeing a merge commit.
|
When set to true, we follow only the first parent commit when seeing a merge commit.
|
||||||
More info in git-log docs
|
More info in git-log docs
|
||||||
https://git-scm.com/docs/git-log#Documentation/git-log.txt---first-parent
|
https://git-scm.com/docs/git-log#Documentation/git-log.txt---first-parent
|
||||||
default: "true"
|
default: 'true'
|
||||||
required: false
|
required: false
|
||||||
failOnWarnings:
|
failOnWarnings:
|
||||||
description: Whether you want to fail on warnings or not
|
description: Whether you want to fail on warnings or not
|
||||||
default: "false"
|
default: 'false'
|
||||||
required: false
|
required: false
|
||||||
helpURL:
|
helpURL:
|
||||||
description: Link to a page explaining your commit message convention
|
description: 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
|
||||||
required: false
|
required: false
|
||||||
|
commitDepth:
|
||||||
|
description: When set to a valid Integer value - X, considers only the latest X number of commits.
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
token:
|
token:
|
||||||
description: >
|
description: >
|
||||||
Personal access token (PAT) used to interact with the GitHub API. By default, the
|
Personal access token (PAT) used to interact with the GitHub API. By default, the
|
||||||
|
|
|
||||||
|
|
@ -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)) {
|
||||||
|
|
|
||||||
|
|
@ -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')),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue