diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..1426d60 --- /dev/null +++ b/.github/workflows/test.yml @@ -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: ./ 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..3a9f8f0 100644 --- a/package.json +++ b/package.json @@ -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..4573bb7 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,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 = () =>