Set Issue labels by inputs & add unit test (#12)

* Set Issue labels by inputs

* Add unit test
This commit is contained in:
Naoki Oketani
2019-12-09 12:43:13 +09:00
committed by GitHub
parent 9931b4d0d0
commit 14d92785e4
7 changed files with 122 additions and 25 deletions

30
src/audit.ts Normal file
View File

@@ -0,0 +1,30 @@
import {spawnSync, SpawnSyncReturns} from 'child_process'
export class Audit {
stdout: string = ''
status: number | null = null
public async run(): Promise<void> {
const result: SpawnSyncReturns<string> = spawnSync('npm', ['audit'], {
encoding: 'utf-8'
})
if (result.error) {
throw result.error
}
if (result.status === null) {
throw new Error('the subprocess terminated due to a signal.')
}
if (result.stderr && result.stderr.length > 0) {
throw new Error(result.stderr)
}
this.status = result.status
this.stdout = result.stdout
}
public foundVulnerability(): boolean {
// `npm audit` return 1 when it found vulnerabilities
return this.status === 1
}
}

View File

@@ -2,21 +2,16 @@ import * as core from '@actions/core'
import * as github from '@actions/github'
import stripAnsi from 'strip-ansi'
import Octokit, {IssuesCreateResponse} from '@octokit/rest'
import {spawnSync, SpawnSyncReturns} from 'child_process'
import {Audit} from './audit'
async function run(): Promise<void> {
try {
const result: SpawnSyncReturns<string> = spawnSync('npm', ['audit'], {
encoding: 'utf-8'
})
const audit = new Audit()
audit.run()
if (result.stderr && result.stderr.length > 0) {
throw new Error(result.stderr)
}
core.info(audit.stdout)
core.info(result.stdout)
if (result.status === 0) {
if (!audit.foundVulnerability()) {
// vulnerabilities are not found
return
}
@@ -26,13 +21,17 @@ async function run(): Promise<void> {
const client: Octokit = new github.GitHub(token)
// remove control characters and create a code block
const issueBody = `\`\`\`\n${stripAnsi(result.stdout)}\n\`\`\``
const issueBody = `\`\`\`\n${stripAnsi(audit.stdout)}\n\`\`\``
const issueOptions = {
title: core.getInput('issue_title'),
body: issueBody,
assignees: core
.getInput('issue_assignees')
.replace(/\s+/g, '')
.split(','),
labels: core
.getInput('issue_labels')
.replace(/\s+/g, '')
.split(',')
}
const {