diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..89b1663
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,6 @@
+node_modules
+.commitlintrc.yml
+commitlint.config.js
+action.yml
+.github
+CHANGELOG.md
diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml
index 631cb69..e60fa4a 100644
--- a/.github/workflows/commitlint.yml
+++ b/.github/workflows/commitlint.yml
@@ -8,6 +8,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
+ - run: sed -i -E "s/([']docker:.+)/Dockerfile/" ./action.yml
- uses: ./
commitlint-with-yml-file:
runs-on: ubuntu-latest
@@ -15,6 +16,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
+ - run: sed -i -E "s/([']docker:.+)/Dockerfile/" ./action.yml
- uses: ./
with:
configFile: './.commitlintrc.yml'
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..c882698
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,12 @@
+name: Test
+on: [push]
+
+jobs:
+ commitlint:
+ runs-on: ubuntu-latest
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ steps:
+ - uses: actions/checkout@v1
+ - run: sed -i -E "s/([']docker:.+)/Dockerfile/" ./action.yml
+ - uses: ./
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 63f63b4..9e10d3a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+
+
+## [1.2.1](https://github.com/wagoid/commitlint-github-action/compare/v1.1.1...v1.2.0) (2019-10-15)
+
+### Features
+
+- add ability to run commitlint on events that are not pull requests ([23cd801](https://github.com/wagoid/commitlint-github-action/commit/23cd801))
+- add firstParent input to ignore errors from your default branch ([598e473](https://github.com/wagoid/commitlint-github-action/commit/598e473))
+
## [1.1.1](https://github.com/wagoid/commitlint-github-action/compare/v1.1.0...v1.1.1) (2019-10-08)
diff --git a/README.md b/README.md
index cfad640..406e2ee 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,15 @@ jobs:
The path to your commitlint config file. Default `commitlint.config.js`.
+### `firstParent`
+
+When set to true, we follow only the first parent commit when seeing a merge commit.
+
+This helps to ignore errors in commits that were already present in your default branch (e.g. `master`) before adding conventional commit checks.
+More info in [git-log docs](https://git-scm.com/docs/git-log#Documentation/git-log.txt---first-parent).
+
+Default `true`
+
## About `extends` in your config file
This is a [`Docker` action](https://github.com/actions/toolkit/blob/e2adf403d6d14a9ca7474976ccaca20f72ff8209/docs/action-types.md#why-would-i-choose-a-docker-action), and was made like this so that you can run it with minimum setup, regardless of your repo's environment. It comes packed with the most famous shared configurations that you can use in your commitlint config's `extends` field:
diff --git a/action.yml b/action.yml
index edfba44..df997aa 100644
--- a/action.yml
+++ b/action.yml
@@ -5,9 +5,12 @@ inputs:
configFile:
description: 'commitlint config file'
default: './commitlint.config.js'
+ firstParent:
+ description: '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
runs:
using: 'docker'
- image: 'docker://wagoid/commitlint-github-action:1.1.1'
+ image: 'docker://wagoid/commitlint-github-action:1.2.0'
branding:
icon: 'check-square'
color: 'blue'
diff --git a/package-lock.json b/package-lock.json
index 0d8e277..b5defee 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -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",
diff --git a/package.json b/package.json
index 3435d73..e51e975 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "commitlint-github-action",
- "version": "1.1.1",
+ "version": "1.2.0",
"description": "commitlint github action",
"main": "index.js",
"scripts": {
@@ -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",
diff --git a/run.js b/run.js
index 48ba95a..885786b 100644
--- a/run.js
+++ b/run.js
@@ -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,34 @@ const getRangeFromPullRequest = async () => {
return [from, to]
}
+function getHistoryCommits(from, to) {
+ const options = {
+ from,
+ to,
+ }
+
+ if (core.getInput('firstParent') === 'true') {
+ options.firstParent = true
+ }
+
+ 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 +77,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 = () =>