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

feat: add ability to run commitlint on events that are not pull requests

For any event that is not of type `pull_request`, we consider there will be a `GITHBU_SHA` defined and run lint against only this specific commit
sha.
This supports not only events of type `pull` but also other events that provide us a `GITHBU_SHA`, like `check_suite`.
This commit is contained in:
Wagner Santos 2019-10-15 10:07:40 -03:00
parent 8bf6195a48
commit 23cd801837
4 changed files with 80 additions and 32 deletions

11
.github/workflows/test.yml vendored Normal file
View file

@ -0,0 +1,11 @@
name: Test
on: [push]
jobs:
commitlint:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
- uses: ./

48
package-lock.json generated
View file

@ -1,6 +1,6 @@
{ {
"name": "commitlint-github-action", "name": "commitlint-github-action",
"version": "1.1.0", "version": "1.1.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -9,6 +9,11 @@
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.1.tgz", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.1.tgz",
"integrity": "sha512-O5G6EmlzTVsng7VSpNtszIoQq6kOgMGNTFB/hmwKNNA4V71JyxImCIrL27vVHCt2Cb3ImkaCr6o27C2MV9Ylwg==" "integrity": "sha512-O5G6EmlzTVsng7VSpNtszIoQq6kOgMGNTFB/hmwKNNA4V71JyxImCIrL27vVHCt2Cb3ImkaCr6o27C2MV9Ylwg=="
}, },
"@actions/exec": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.1.tgz",
"integrity": "sha512-nvFkxwiicvpzNiCBF4wFBDfnBvi7xp/as7LE1hBxBxKG2L29+gkIPBiLKMVORL+Hg3JNf07AKRfl0V5djoypjQ=="
},
"@actions/github": { "@actions/github": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@actions/github/-/github-1.1.0.tgz",
@ -156,6 +161,20 @@
"@marionebl/sander": "0.6.1", "@marionebl/sander": "0.6.1",
"babel-runtime": "6.26.0", "babel-runtime": "6.26.0",
"git-raw-commits": "1.3.6" "git-raw-commits": "1.3.6"
},
"dependencies": {
"git-raw-commits": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
"integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
"requires": {
"dargs": "4.1.0",
"lodash.template": "4.5.0",
"meow": "4.0.1",
"split2": "2.2.0",
"through2": "2.0.5"
}
}
} }
}, },
"@commitlint/resolve-extends": { "@commitlint/resolve-extends": {
@ -1322,31 +1341,23 @@
} }
}, },
"git-raw-commits": { "git-raw-commits": {
"version": "1.3.6", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.2.tgz",
"integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", "integrity": "sha512-HVvl6J3dx7CS9fWTtyZXA2ejhdq9p/GSU9EEVlJPb2pSgMuD7IWK3dERcUPsJj9SZrJJ6IIB+3Rsjx9FUDdE1Q==",
"requires": { "requires": {
"dargs": "4.1.0", "dargs": "4.1.0",
"lodash.template": "4.5.0", "lodash.template": "4.5.0",
"meow": "4.0.1", "meow": "4.0.1",
"split2": "2.2.0", "split2": "2.2.0",
"through2": "2.0.5" "through2": "3.0.1"
}, },
"dependencies": { "dependencies": {
"meow": { "through2": {
"version": "4.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
"integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
"requires": { "requires": {
"camelcase-keys": "4.2.0", "readable-stream": "2.3.6"
"decamelize-keys": "1.1.0",
"loud-rejection": "1.6.0",
"minimist": "1.2.0",
"minimist-options": "3.0.2",
"normalize-package-data": "2.5.0",
"read-pkg-up": "3.0.0",
"redent": "2.0.0",
"trim-newlines": "2.0.0"
} }
} }
} }
@ -1793,7 +1804,6 @@
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
"integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
"dev": true,
"requires": { "requires": {
"camelcase-keys": "4.2.0", "camelcase-keys": "4.2.0",
"decamelize-keys": "1.1.0", "decamelize-keys": "1.1.0",

View file

@ -16,6 +16,7 @@
"homepage": "https://github.com/wagoid/commitlint-github-action", "homepage": "https://github.com/wagoid/commitlint-github-action",
"dependencies": { "dependencies": {
"@actions/core": "1.1.1", "@actions/core": "1.1.1",
"@actions/exec": "1.0.1",
"@actions/github": "1.1.0", "@actions/github": "1.1.0",
"@commitlint/config-angular": "8.2.0", "@commitlint/config-angular": "8.2.0",
"@commitlint/config-conventional": "7.6.0", "@commitlint/config-conventional": "7.6.0",
@ -24,9 +25,9 @@
"@commitlint/format": "8.2.0", "@commitlint/format": "8.2.0",
"@commitlint/lint": "8.2.0", "@commitlint/lint": "8.2.0",
"@commitlint/load": "8.2.0", "@commitlint/load": "8.2.0",
"@commitlint/read": "8.2.0",
"commitlint-config-jira": "1.0.9", "commitlint-config-jira": "1.0.9",
"conventional-changelog-lint-config-canonical": "1.0.0" "conventional-changelog-lint-config-canonical": "1.0.0",
"git-raw-commits": "2.0.2"
}, },
"devDependencies": { "devDependencies": {
"conventional-changelog-cli": "2.0.23", "conventional-changelog-cli": "2.0.23",

48
run.js
View file

@ -1,13 +1,16 @@
const { existsSync, readFileSync } = require('fs') const { existsSync } = require('fs')
const { resolve } = require('path') const { resolve } = require('path')
const core = require('@actions/core') const core = require('@actions/core')
const github = require('@actions/github') const github = require('@actions/github')
const read = require('@commitlint/read') const exec = require('@actions/exec')
const lint = require('@commitlint/lint') const lint = require('@commitlint/lint')
const { format } = require('@commitlint/format') const { format } = require('@commitlint/format')
const load = require('@commitlint/load') const load = require('@commitlint/load')
const gitRawCommits = require('git-raw-commits')
const githubToken = process.env.GITHUB_TOKEN const pullRequestEvent = 'pull_request'
const { GITHUB_TOKEN, GITHUB_EVENT_NAME, GITHUB_SHA } = process.env
const configPath = resolve( const configPath = resolve(
process.env.GITHUB_WORKSPACE, process.env.GITHUB_WORKSPACE,
@ -15,7 +18,9 @@ const configPath = resolve(
) )
const getRangeFromPullRequest = async () => { const getRangeFromPullRequest = async () => {
const octokit = new github.GitHub(githubToken) if (GITHUB_EVENT_NAME !== pullRequestEvent) return [null, GITHUB_SHA]
const octokit = new github.GitHub(GITHUB_TOKEN)
const { owner, repo, number } = github.context.issue const { owner, repo, number } = github.context.issue
const { data: commits } = await octokit.pulls.listCommits({ const { data: commits } = await octokit.pulls.listCommits({
owner, owner,
@ -29,8 +34,30 @@ const getRangeFromPullRequest = async () => {
return [from, to] return [from, to]
} }
function getHistoryCommits(from, to) {
const options = {
from,
to,
}
if (!from) {
options.maxCount = 1
}
return new Promise((resolve, reject) => {
const data = []
gitRawCommits(options)
.on('data', chunk => data.push(chunk.toString('utf-8')))
.on('error', reject)
.on('end', () => {
resolve(data)
})
})
}
const showLintResults = async ([from, to]) => { const showLintResults = async ([from, to]) => {
const commits = await read({ from, to }) const commits = await getHistoryCommits(from, to)
const config = existsSync(configPath) const config = existsSync(configPath)
? await load({}, { file: configPath }) ? await load({}, { file: configPath })
: {} : {}
@ -46,18 +73,17 @@ const showLintResults = async ([from, to]) => {
}, },
) )
if (formattedResults.length) { if (formattedResults) {
process.stderr.write(formattedResults) core.setFailed(
process.exit(1) `You have commit messages with errors\n\n${formattedResults}`,
)
} else { } else {
console.log('Lint free! 🎉') console.log('Lint free! 🎉')
} }
} }
const exitWithMessage = message => error => { const exitWithMessage = message => error => {
console.log(message) core.setFailed(`${message}\n${error}`)
console.error(error)
process.exit(1)
} }
const main = () => const main = () =>