diff --git a/src/action.mjs b/src/action.mjs index 64761f5..6c74eb1 100644 --- a/src/action.mjs +++ b/src/action.mjs @@ -22,21 +22,13 @@ const getCommitDepth = () => { return Number.isNaN(commitDepth) ? null : Math.max(commitDepth, 0) } -const getPushEventCommits = async () => { - const octokit = getOctokit(getInput('token')) - const { owner, repo } = eventContext.issue - const { before } = eventContext.payload - const { data: commits } = await octokit.rest.repos.listCommits({ - owner, - repo, - sha: before, - per_page: 100, - }) - - return commits.map((commit) => ({ - message: commit.commit.message, - hash: commit.sha, +const getPushEventCommits = () => { + const mappedCommits = eventContext.payload.commits.map((commit) => ({ + message: commit.message, + hash: commit.id, })) + + return mappedCommits } const getPullRequestEventCommits = async () => { diff --git a/src/action.test.mjs b/src/action.test.mjs index 43e16ca..4eaaa10 100644 --- a/src/action.test.mjs +++ b/src/action.test.mjs @@ -19,8 +19,7 @@ const { const initialEnv = { ...process.env } -const mockListPullCommits = td.func('listCommits') -const mockListPushCommits = td.func('listCommits') +const mockListCommits = td.func('listCommits') const mockCore = td.object(['getInput', 'setFailed', 'setOutput']) @@ -31,10 +30,7 @@ jest.unstable_mockModule('@actions/github', () => { constructor() { this.rest = { pulls: { - listCommits: mockListPullCommits, - }, - repos: { - listCommits: mockListPushCommits, + listCommits: mockListCommits, }, } } @@ -76,18 +72,15 @@ describe('Commit Linter action', () => { './not-existing-config.mjs', ) cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [buildResponseCommit('wrong-message', 'wrong message')], + await createPushEventPayload(cwd, { + commits: [ + { + id: 'wrong-message', + message: 'wrong message', + }, + ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) await runAction() @@ -109,18 +102,15 @@ describe('Commit Linter action', () => { './commitlint.config.js', ) cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [buildResponseCommit('wrong-message', 'wrong message')], + await createPushEventPayload(cwd, { + commits: [ + { + id: 'wrong-message', + message: 'wrong message', + }, + ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) await runAction() @@ -130,19 +120,15 @@ describe('Commit Linter action', () => { it('should fail for single push with incorrect message', async () => { cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [buildResponseCommit('wrong-message', 'wrong message')], + await createPushEventPayload(cwd, { + commits: [ + { + id: 'wrong-message', + message: 'wrong message', + }, + ], }) - + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) await runAction() @@ -154,21 +140,19 @@ describe('Commit Linter action', () => { it('should fail for push range with wrong messages', async () => { cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit('wrong-message-1', 'wrong message 1'), - buildResponseCommit('wrong-message-2', 'wrong message 2'), + await createPushEventPayload(cwd, { + commits: [ + { + id: 'wrong-message-1', + message: 'wrong message 1', + }, + { + id: 'wrong-message-2', + message: 'wrong message 2', + }, ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) await runAction() @@ -179,21 +163,19 @@ describe('Commit Linter action', () => { it('should pass for push range with wrong messages with failOnErrors set to false', async () => { td.when(mockCore.getInput('failOnErrors')).thenReturn('false') cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit('wrong-message-1', 'wrong message 1'), - buildResponseCommit('wrong-message-2', 'wrong message 2'), + await createPushEventPayload(cwd, { + commits: [ + { + id: 'wrong-message-1', + message: 'wrong message 1', + }, + { + id: 'wrong-message-2', + message: 'wrong message 2', + }, ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -208,21 +190,19 @@ describe('Commit Linter action', () => { it('should pass for push range with correct messages with failOnErrors set to false', async () => { td.when(mockCore.getInput('failOnErrors')).thenReturn('false') cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit('correct-message-1', 'chore: correct message 1'), - buildResponseCommit('correct-message-2', 'chore: correct message 2'), + await createPushEventPayload(cwd, { + commits: [ + { + id: 'correct-message-1', + message: 'chore: correct message 1', + }, + { + id: 'correct-message-2', + message: 'chore: correct message 2', + }, ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -234,21 +214,19 @@ describe('Commit Linter action', () => { it('should pass for push range with correct messages', async () => { cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit('correct-message-1', 'chore: correct message 1'), - buildResponseCommit('correct-message-2', 'chore: correct message 2'), + await createPushEventPayload(cwd, { + commits: [ + { + id: 'correct-message-1', + message: 'chore: correct message 1', + }, + { + id: 'correct-message-2', + message: 'chore: correct message 2', + }, ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -263,23 +241,14 @@ describe('Commit Linter action', () => { td.when(mockCore.getInput('configFile')).thenReturn( './commitlint.config.yml', ) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit( - 'correct-message', - 'chore(wrong): not including package scope', - ), + await createPushEventPayload(cwd, { + commits: [ + { + message: 'chore(wrong): not including package scope', + }, ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) await runAction() @@ -294,23 +263,15 @@ describe('Commit Linter action', () => { td.when(mockCore.getInput('configFile')).thenReturn( './commitlint.config.yml', ) - await createPushEventPayload(cwd) - updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit( - 'correct-message', - 'chore(second-package): this works', - ), + await createPushEventPayload(cwd, { + commits: [ + { + id: 'correct-message', + message: 'chore(second-package): this works', + }, ], }) + updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -324,20 +285,12 @@ describe('Commit Linter action', () => { td.when(mockCore.getInput('configFile')).thenReturn( './commitlint.config.mjs', ) - await createPushEventPayload(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit( - 'wrong-message', - 'ib-21212121212121: without jira ticket', - ), + await createPushEventPayload(cwd, { + commits: [ + { + id: 'wrong-message', + message: 'ib-21212121212121: without jira ticket', + }, ], }) updatePushEnvVars(cwd) @@ -372,18 +325,8 @@ describe('Commit Linter action', () => { './commitlint.config.mjs', ) cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd, { commits: [] }, '12345') + await createPushEventPayload(cwd, {}) updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '12345', - }), - ).thenResolve({ - data: [], - }) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -411,7 +354,7 @@ describe('Commit Linter action', () => { await createPullRequestEventPayload(cwd) updatePullRequestEnvVars(cwd, { eventName }) td.when( - mockListPullCommits({ + mockListCommits({ owner: 'wagoid', repo: 'commitlint-github-action', pull_number: '1', @@ -477,7 +420,7 @@ describe('Commit Linter action', () => { await createPullRequestEventPayload(cwd) updatePullRequestEnvVars(cwd) td.when( - mockListPullCommits({ + mockListCommits({ owner: 'wagoid', repo: 'commitlint-github-action', pull_number: '1', @@ -505,25 +448,15 @@ describe('Commit Linter action', () => { }) describe("when there's a single commit with correct message", () => { - const commit = buildResponseCommit( - 'correct-commit', - 'chore: correct message', - ) + const commit = { + id: 'correct-message', + message: 'chore: correct message', + } beforeEach(async () => { cwd = await git.bootstrap('fixtures/conventional', process.cwd()) - await createPushEventPayload(cwd) + await createPushEventPayload(cwd, { commits: [commit] }) updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [commit], - }) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') }) @@ -543,8 +476,8 @@ describe('Commit Linter action', () => { it('should generate a JSON output of the messages', async () => { const expectedResultsOutput = [ { - hash: commit.sha, - message: commit.commit.message, + hash: commit.id, + message: commit.message, valid: true, errors: [], warnings: [], @@ -574,19 +507,6 @@ describe('Commit Linter action', () => { await createPushEventPayload(cwd, { commits: [commitWithWarning, correctCommit], }) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit(commitWithWarning.id, commitWithWarning.message), - buildResponseCommit(correctCommit.id, correctCommit.message), - ], - }) updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -660,20 +580,6 @@ describe('Commit Linter action', () => { await createPushEventPayload(cwd, { commits: [wrongCommit, commitWithWarning], }) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit(wrongCommit.id, wrongCommit.message), - buildResponseCommit(commitWithWarning.id, commitWithWarning.message), - ], - }) - updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -729,23 +635,15 @@ describe('Commit Linter action', () => { describe('when commit contains required signed-off-by message', () => { beforeEach(async () => { cwd = await git.bootstrap('fixtures/signed-off-by', process.cwd()) - await createPushEventPayload(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit( - 'correct-commit', - 'chore: correct message\n\nsome context without leading blank line.\n\nSigned-off-by: John Doe ', - ), + await createPushEventPayload(cwd, { + commits: [ + { + id: 'correct-commit', + message: + 'chore: correct message\n\nsome context without leading blank line.\n\nSigned-off-by: John Doe ', + }, ], }) - updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') @@ -762,16 +660,13 @@ describe('Commit Linter action', () => { describe('when a different helpUrl is provided in the config', () => { beforeEach(async () => { cwd = await git.bootstrap('fixtures/custom-help-url', process.cwd()) - await createPushEventPayload(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [buildResponseCommit('wrong-commit', 'wrong message')], + await createPushEventPayload(cwd, { + commits: [ + { + id: 'wrong-commit', + message: 'wrong message', + }, + ], }) updatePushEnvVars(cwd) td.replace(process, 'cwd', () => cwd) @@ -803,19 +698,6 @@ describe('Commit Linter action', () => { ], }) updatePushEnvVars(cwd) - td.when( - mockListPushCommits({ - owner: 'wagoid', - repo: 'commitlint-github-action', - per_page: 100, - sha: '00000', - }), - ).thenResolve({ - data: [ - buildResponseCommit('correct-commit', 'chore: correct message 2'), - buildResponseCommit(incorrectCommit.id, incorrectCommit.message), - ], - }) td.replace(process, 'cwd', () => cwd) td.replace(console, 'log') }) diff --git a/src/testUtils.mjs b/src/testUtils.mjs index 47b678b..33abb10 100644 --- a/src/testUtils.mjs +++ b/src/testUtils.mjs @@ -19,26 +19,16 @@ export const updatePushEnvVars = (cwd) => { export const createPushEventPayload = async ( cwd, - commits = null, - before = null, + { forced = false, headCommit = null, commits = [] }, ) => { const payload = { - forced: false, - head_commit: null, - before: before || '00000', - commits: commits || [ - { - id: 'ignored', - message: 'but needed for triggering', - }, - ], + forced, + head_commit: headCommit, + commits, } const eventPath = path.join(cwd, 'pushEventPayload.json') - updateEnvVars({ - GITHUB_EVENT_PATH: eventPath, - GITHUB_REPOSITORY: 'wagoid/commitlint-github-action', - }) + updateEnvVars({ GITHUB_EVENT_PATH: eventPath }) await writeFile(eventPath, JSON.stringify(payload), 'utf8') }