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:
parent
8bf6195a48
commit
23cd801837
4 changed files with 80 additions and 32 deletions
11
.github/workflows/test.yml
vendored
Normal file
11
.github/workflows/test.yml
vendored
Normal 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
48
package-lock.json
generated
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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
48
run.js
|
|
@ -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 = () =>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue