Fixing circular reference, adding prettier.

This commit is contained in:
Federico Builes
2022-06-01 12:09:11 +02:00
parent db9f724163
commit f9a13e70f4
8 changed files with 153 additions and 206 deletions

View File

@@ -1,37 +1,33 @@
import * as fs from 'fs'
import YAML from 'yaml'
import { ConfigurationOptions, ConfigurationOptionsSchema } from './schemas'
import {ConfigurationOptions, ConfigurationOptionsSchema} from './schemas'
import path from 'path'
export type Severity = "critical" | "high" | "moderate" | "low"
export const CONFIG_FILEPATH = './.github/dep-review.yml'
export const SEVERITIES = ["critical", "high", "moderate", "low"] as const
export const CONFIG_FILEPATH = "./.github/dep-review.yml"
export function readConfigFile(
filePath: string = CONFIG_FILEPATH
): ConfigurationOptions {
// By default we want to fail on all severities and allow all licenses.
const defaultOptions: ConfigurationOptions = {
fail_on_severity: 'low',
allow_licenses: []
}
export function readConfigFile(filePath: string = CONFIG_FILEPATH): ConfigurationOptions {
// By default we want to fail on all severities and allow all licenses.
const defaultOptions: ConfigurationOptions = {
fail_on_severity: 'low',
allow_licenses: []
let data
try {
data = fs.readFileSync(path.resolve(filePath), 'utf-8')
} catch (error: any) {
if (error.code && error.code === 'ENOENT') {
return defaultOptions
} else {
throw error
}
}
let data
const values = YAML.parse(data)
const parsed = ConfigurationOptionsSchema.parse(values)
try {
data = fs.readFileSync(path.resolve(filePath), "utf-8");
} catch (error: any) {
if (error.code && error.code === 'ENOENT') {
return defaultOptions
} else {
throw error
}
}
// This is a copy of line 34, not sure why this is failing!
ConfigurationOptionsSchema.parse({ fail_on_severity: 'critical', allow_licenses: ['BSD', 'GPL 2'] })
const values = YAML.parse(data)
const parsed = ConfigurationOptionsSchema.parse(values)
return parsed;
return parsed
}

View File

@@ -1,24 +1,31 @@
import { Changes } from './schemas'
import { Severity, SEVERITIES } from './config'
import {Changes} from './schemas'
import {Severity, SEVERITIES} from './schemas'
export function filterChangesBySeverity(severity: Severity, changes: Changes): Changes {
const severityIdx = SEVERITIES.indexOf(severity)
export function filterChangesBySeverity(
severity: Severity,
changes: Changes
): Changes {
const severityIdx = SEVERITIES.indexOf(severity)
for (let change of changes) {
if (change === undefined ||
change.vulnerabilities === undefined ||
change.vulnerabilities.length === 0) {
continue
}
change.vulnerabilities = change.vulnerabilities.filter((vuln: any) => {
const vulnIdx = SEVERITIES.indexOf(vuln.severity)
if (vulnIdx <= severityIdx) {
return true
}
})
for (let change of changes) {
if (
change === undefined ||
change.vulnerabilities === undefined ||
change.vulnerabilities.length === 0
) {
continue
}
change.vulnerabilities = change.vulnerabilities.filter(vuln => {
const vulnIdx = SEVERITIES.indexOf(vuln.severity)
if (vulnIdx <= severityIdx) {
return true
}
})
}
// don't want to deal with changes with no vulnerabilities
let filteredChanges = changes.filter((change: any) => change.vulnerabilities.length > 0)
return filteredChanges
// don't want to deal with changes with no vulnerabilities
let filteredChanges = changes.filter(
change => change.vulnerabilities.length > 0
)
return filteredChanges
}

View File

@@ -2,10 +2,10 @@ import * as core from '@actions/core'
import * as dependencyGraph from './dependency-graph'
import * as github from '@actions/github'
import styles from 'ansi-styles'
import { RequestError } from '@octokit/request-error'
import { Change, PullRequestSchema } from './schemas'
import { Severity, readConfigFile } from '../src/config'
import { filterChangesBySeverity } from '../src/filter'
import {RequestError} from '@octokit/request-error'
import {Change, PullRequestSchema, Severity} from './schemas'
import {readConfigFile} from '../src/config'
import {filterChangesBySeverity} from '../src/filter'
async function run(): Promise<void> {
try {
@@ -30,7 +30,10 @@ async function run(): Promise<void> {
let minSeverity = config.fail_on_severity
let failed = false
let filteredChanges = filterChangesBySeverity(minSeverity as Severity, changes)
let filteredChanges = filterChangesBySeverity(
minSeverity as Severity,
changes
)
for (const change of filteredChanges) {
if (
@@ -70,7 +73,8 @@ async function run(): Promise<void> {
function printChangeVulnerabilities(change: Change) {
for (const vuln of change.vulnerabilities) {
core.info(
`${styles.bold.open}${change.manifest} » ${change.name}@${change.version
`${styles.bold.open}${change.manifest} » ${change.name}@${
change.version
}${styles.bold.close} ${vuln.advisory_summary} ${renderSeverity(
vuln.severity
)}`

View File

@@ -1,5 +1,6 @@
import * as z from 'zod'
import { SEVERITIES } from './config'
export const SEVERITIES = ['critical', 'high', 'moderate', 'low'] as const
export const ChangeSchema = z.object({
change_type: z.enum(['added', 'removed']),
@@ -25,19 +26,25 @@ export const ChangeSchema = z.object({
export const PullRequestSchema = z.object({
number: z.number(),
base: z.object({ sha: z.string() }),
head: z.object({ sha: z.string() })
base: z.object({sha: z.string()}),
head: z.object({sha: z.string()})
})
export const ConfigurationOptionsSchema = z.object({
fail_on_severity: z.enum(SEVERITIES).default("low"),
allow_licenses: z.array(z.string()).default([]),
deny_licenses: z.array(z.string()).default([])
}).partial()
.refine(obj => !(obj.allow_licenses && obj.deny_licenses), "Can't specify both allow_licenses and deny_licenses")
export const ConfigurationOptionsSchema = z
.object({
fail_on_severity: z.enum(SEVERITIES).default('low'),
allow_licenses: z.array(z.string()).default([]),
deny_licenses: z.array(z.string()).default([])
})
.partial()
.refine(
obj => !(obj.allow_licenses && obj.deny_licenses),
"Can't specify both allow_licenses and deny_licenses"
)
export const ChangesSchema = z.array(ChangeSchema)
export type Change = z.infer<typeof ChangeSchema>
export type Changes = z.infer<typeof ChangesSchema>
export type ConfigurationOptions = z.infer<typeof ConfigurationOptionsSchema>
export type Severity = typeof SEVERITIES[number]