UNPKG

1.71 kBJavaScriptView Raw
1#!/usr/bin/env node
2// usage: github-lint
3//
4// Run ESLint and Flow on project.
5
6const childProcess = require('child_process')
7const fs = require('fs')
8const path = require('path')
9
10function execFile(command, args) {
11 return new Promise(resolve => {
12 childProcess.execFile(command, args, (error, stdout, stderr) => {
13 resolve({code: error ? error.code : 0, stdout, stderr})
14 })
15 })
16}
17
18;(async function() {
19 let runs = 0
20 const codes = []
21 const commands = []
22
23 const packageJson = fs.existsSync('package.json') ? require(path.join(process.cwd(), 'package.json')) : {}
24
25 let eslintOptions = ['--report-unused-disable-directives', '.']
26
27 const isTypeScriptProject = fs.existsSync('tsconfig.json')
28
29 if (isTypeScriptProject) {
30 eslintOptions = eslintOptions.concat(['--ext', '.js,.ts,.tsx'])
31 }
32
33 commands.push(['eslint', eslintOptions])
34
35 if (isTypeScriptProject) {
36 commands.push(['tsc', ['--noEmit']])
37 }
38
39 if (fs.existsSync('.flowconfig')) {
40 commands.push(['flow', ['check']])
41 }
42
43 if (packageJson && packageJson.flow && packageJson.flow.coverageThreshold) {
44 commands.push(['flow-coverage', []])
45 }
46
47 for (const [command, args] of commands) {
48 if (runs > 0) process.stderr.write('\n')
49 process.stderr.write(`> ${command} ${args.join(' ')}\n`)
50
51 const {code, stdout, stderr} = await execFile(command, args)
52 codes.push(code)
53 if (stderr) process.stderr.write(stderr)
54 if (stdout) process.stdout.write(stdout)
55
56 runs++
57 }
58
59 const nonzero = codes.find(code => code !== 0)
60 if (nonzero) {
61 process.stderr.write(`\nCommand failed: ${nonzero}\n`)
62 process.exit(nonzero)
63 }
64})().catch(error => {
65 setTimeout(() => {
66 throw error
67 })
68})