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",
"version": "1.1.0",
"version": "1.1.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -9,6 +9,11 @@
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.1.tgz",
"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": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-1.1.0.tgz",
@ -156,6 +161,20 @@
"@marionebl/sander": "0.6.1",
"babel-runtime": "6.26.0",
"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": {
@ -1322,31 +1341,23 @@
}
},
"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==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.2.tgz",
"integrity": "sha512-HVvl6J3dx7CS9fWTtyZXA2ejhdq9p/GSU9EEVlJPb2pSgMuD7IWK3dERcUPsJj9SZrJJ6IIB+3Rsjx9FUDdE1Q==",
"requires": {
"dargs": "4.1.0",
"lodash.template": "4.5.0",
"meow": "4.0.1",
"split2": "2.2.0",
"through2": "2.0.5"
"through2": "3.0.1"
},
"dependencies": {
"meow": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
"integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
"through2": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
"integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
"requires": {
"camelcase-keys": "4.2.0",
"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"
"readable-stream": "2.3.6"
}
}
}
@ -1793,7 +1804,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
"integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
"dev": true,
"requires": {
"camelcase-keys": "4.2.0",
"decamelize-keys": "1.1.0",

View file

@ -16,6 +16,7 @@
"homepage": "https://github.com/wagoid/commitlint-github-action",
"dependencies": {
"@actions/core": "1.1.1",
"@actions/exec": "1.0.1",
"@actions/github": "1.1.0",
"@commitlint/config-angular": "8.2.0",
"@commitlint/config-conventional": "7.6.0",
@ -24,9 +25,9 @@
"@commitlint/format": "8.2.0",
"@commitlint/lint": "8.2.0",
"@commitlint/load": "8.2.0",
"@commitlint/read": "8.2.0",
"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": {
"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 core = require('@actions/core')
const github = require('@actions/github')
const read = require('@commitlint/read')
const exec = require('@actions/exec')
const lint = require('@commitlint/lint')
const { format } = require('@commitlint/format')
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(
process.env.GITHUB_WORKSPACE,
@ -15,7 +18,9 @@ const configPath = resolve(
)
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 { data: commits } = await octokit.pulls.listCommits({
owner,
@ -29,8 +34,30 @@ const getRangeFromPullRequest = async () => {
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 commits = await read({ from, to })
const commits = await getHistoryCommits(from, to)
const config = existsSync(configPath)
? await load({}, { file: configPath })
: {}
@ -46,18 +73,17 @@ const showLintResults = async ([from, to]) => {
},
)
if (formattedResults.length) {
process.stderr.write(formattedResults)
process.exit(1)
if (formattedResults) {
core.setFailed(
`You have commit messages with errors\n\n${formattedResults}`,
)
} else {
console.log('Lint free! 🎉')
}
}
const exitWithMessage = message => error => {
console.log(message)
console.error(error)
process.exit(1)
core.setFailed(`${message}\n${error}`)
}
const main = () =>