Skip to content

Commit

Permalink
Merge pull request #595 from Sakethtadimeti/master
Browse files Browse the repository at this point in the history
feat: adds commitDepth as new input param
  • Loading branch information
wagoid committed Nov 24, 2022
2 parents 861b4d9 + 1e32deb commit e6b4f2e
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 5 deletions.
6 changes: 6 additions & 0 deletions README.md
Expand Up @@ -58,6 +58,12 @@ Link to a page explaining your commit message convention.

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`

Personal access token (PAT) used to interact with the GitHub API.
Expand Down
11 changes: 8 additions & 3 deletions action.yml
Expand Up @@ -3,7 +3,8 @@ description: Lints Pull Request commit messages with commitlint
author: Wagner Santos
inputs:
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.
default: ./commitlint.config.js
required: false
Expand All @@ -12,16 +13,20 @@ inputs:
When set to true, we follow only the first parent commit when seeing a merge commit.
More info in git-log docs
https://git-scm.com/docs/git-log#Documentation/git-log.txt---first-parent
default: "true"
default: 'true'
required: false
failOnWarnings:
description: Whether you want to fail on warnings or not
default: "false"
default: 'false'
required: false
helpURL:
description: Link to a page explaining your commit message convention
default: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
required: false
commitDepth:
description: When set to a valid Integer value - X, considers only the latest X number of commits.
default: ''
required: false
token:
description: >
Personal access token (PAT) used to interact with the GitHub API. By default, the
Expand Down
14 changes: 12 additions & 2 deletions src/action.js
Expand Up @@ -16,6 +16,13 @@ const { GITHUB_EVENT_NAME, GITHUB_SHA } = process.env

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 gitEmptySha = '0000000000000000000000000000000000000000'

Expand Down Expand Up @@ -118,7 +125,11 @@ const handleOnlyWarnings = (formattedResults) => {
}

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)
? await load({}, { file: configPath })
: await load({ extends: ['@commitlint/config-conventional'] })
Expand All @@ -130,7 +141,6 @@ const showLintResults = async ([from, to]) => {
})),
)
const formattedResults = formatErrors(lintedCommits, { config })

generateOutputs(lintedCommits)

if (hasOnlyWarnings(lintedCommits)) {
Expand Down
37 changes: 37 additions & 0 deletions src/action.test.js
Expand Up @@ -605,4 +605,41 @@ describe('Commit Linter action', () => {
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')),
)
})
})
})

0 comments on commit e6b4f2e

Please sign in to comment.