Skip to content

Commit 8525c13

Browse files
committed
refactor: extract scanner into class
1 parent d9114f7 commit 8525c13

File tree

6 files changed

+88
-48
lines changed

6 files changed

+88
-48
lines changed

dist/index.js

Lines changed: 38 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as core from '@actions/core';
22
import fs from 'fs';
33
import { generateSARIFReport } from './src/sarif';
4-
import { cliScannerName, cliScannerResult, cliScannerURL, executeScan, numericPriorityForSeverity, pullScanner, ScanExecutionResult, ScanMode } from './src/scanner';
4+
import { cliScannerName, cliScannerResult, defaultScannerURL, executeScan, numericPriorityForSeverity, ScanExecutionResult, ScanMode, Scanner } from './src/scanner';
55
import { ActionInputs, defaultSecureEndpoint } from './src/action';
66
import { generateSummary } from './src/summary';
77
import { Report } from './src/report';
@@ -25,8 +25,12 @@ export async function run() {
2525
let scanFlags = opts.composeFlags();
2626

2727
let scanResult: ScanExecutionResult;
28+
29+
let scanner = new Scanner(
30+
Scanner.Options.withScannerURL(opts.cliScannerURL),
31+
);
2832
// Download CLI Scanner from 'cliScannerURL'
29-
let retCode = await pullScanner(opts.cliScannerURL);
33+
let retCode = await scanner.pullScanner();
3034
if (retCode == 0) {
3135
// Execute Scanner
3236
scanResult = await executeScan(scanFlags);
@@ -103,9 +107,8 @@ export async function processScanResult(result: ScanExecutionResult, opts: Actio
103107
}
104108

105109
export {
106-
cliScannerURL,
110+
defaultScannerURL as cliScannerURL,
107111
defaultSecureEndpoint,
108-
pullScanner,
109112
cliScannerName,
110113
executeScan,
111114
cliScannerResult,

src/action.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as core from '@actions/core';
2-
import { cliScannerResult, cliScannerURL, ComposeFlags, ScanMode, scannerURLForVersion } from './scanner';
2+
import { cliScannerResult, defaultScannerURL, ComposeFlags, ScanMode, scannerURLForVersion } from './scanner';
33

44
export const defaultSecureEndpoint = "https://secure.sysdig.com/"
55

@@ -54,7 +54,7 @@ export class ActionInputs {
5454
static overridingParsedActionInputs(overrides: { [key: string]: any }) {
5555

5656
const params: ActionInputParameters = {
57-
cliScannerURL: core.getInput('cli-scanner-url') || cliScannerURL,
57+
cliScannerURL: core.getInput('cli-scanner-url') || defaultScannerURL,
5858
cliScannerVersion: core.getInput('cli-scanner-version'),
5959
registryUser: core.getInput('registry-user'),
6060
registryPassword: core.getInput('registry-password'),
@@ -147,7 +147,7 @@ export class ActionInputs {
147147

148148
// FIXME(fede) this also modifies the opts.cliScannerURL, which is something we don't want
149149
public composeFlags(): ComposeFlags {
150-
if (this.params.cliScannerVersion && this.params.cliScannerURL == cliScannerURL) {
150+
if (this.params.cliScannerVersion && this.params.cliScannerURL == defaultScannerURL) {
151151
this.params.cliScannerURL = scannerURLForVersion(this.params.cliScannerVersion)
152152
}
153153

src/scanner.ts

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const cliScannerArch = getRunArch()
1010
const cliScannerURLBase = "https://download.sysdig.com/scanning/bin/sysdig-cli-scanner";
1111
export const cliScannerName = "sysdig-cli-scanner"
1212
export const cliScannerResult = "scan-result.json"
13-
export const cliScannerURL = `${cliScannerURLBase}/${cliScannerVersion}/${cliScannerOS}/${cliScannerArch}/${cliScannerName}`
13+
export const defaultScannerURL = `${cliScannerURLBase}/${cliScannerVersion}/${cliScannerOS}/${cliScannerArch}/${cliScannerName}`
1414

1515
export enum ScanMode {
1616
vm = "vm",
@@ -28,21 +28,40 @@ export namespace ScanMode {
2828
}
2929
}
3030

31-
export async function pullScanner(scannerURL: string) {
32-
let start = performance.now();
33-
core.info('Pulling cli-scanner from: ' + scannerURL);
34-
let cmd = `wget ${scannerURL} -O ./${cliScannerName}`;
35-
let retCode = await exec.exec(cmd, undefined, { silent: true });
36-
37-
if (retCode == 0) {
38-
cmd = `chmod u+x ./${cliScannerName}`;
39-
await exec.exec(cmd, undefined, { silent: true });
40-
} else {
41-
core.error(`Falied to pull scanner using "${scannerURL}"`)
31+
type ScannerOption = (scanner: Scanner) => void;
32+
33+
export class Scanner {
34+
protected scannerURL: string;
35+
36+
constructor(...options: ScannerOption[]) {
37+
this.scannerURL = defaultScannerURL;
38+
options.forEach(o => o(this));
39+
}
40+
41+
async pullScanner() {
42+
let start = performance.now();
43+
core.info('Pulling cli-scanner from: ' + this.scannerURL);
44+
let cmd = `wget ${this.scannerURL} -O ./${cliScannerName}`;
45+
let retCode = await exec.exec(cmd, undefined, { silent: true });
46+
47+
if (retCode == 0) {
48+
cmd = `chmod u+x ./${cliScannerName}`;
49+
await exec.exec(cmd, undefined, { silent: true });
50+
} else {
51+
core.error(`Falied to pull scanner using "${this.scannerURL}"`)
52+
}
53+
54+
core.info("Scanner pull took " + Math.round(performance.now() - start) + " milliseconds.");
55+
return retCode;
4256
}
4357

44-
core.info("Scanner pull took " + Math.round(performance.now() - start) + " milliseconds.");
45-
return retCode;
58+
static Options = class {
59+
static withScannerURL(scannerURL: string): ScannerOption {
60+
return (scanner) => {
61+
scanner.scannerURL = scannerURL
62+
}
63+
}
64+
}
4665
}
4766

4867
export interface ScanExecutionResult {

tests/index.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import * as report_test from "./fixtures/report-test.json";
77

88
import { exec } from "@actions/exec";
99
import { ActionInputs } from '../src/action';
10+
import { Scanner } from '../src/scanner';
1011
jest.mock("@actions/exec");
1112
const mockExec = jest.mocked(exec);
1213

@@ -207,7 +208,11 @@ describe("scanner pulling", () => {
207208
it("pulls the configured scanner", async () => {
208209
mockExec.mockImplementation(jest.fn());
209210

210-
await index.pullScanner("https://foo");
211+
let scanner = new Scanner(
212+
Scanner.Options.withScannerURL("https://foo"),
213+
);
214+
215+
await scanner.pullScanner();
211216
expect(mockExec).toHaveBeenCalledTimes(1);
212217
expect(mockExec.mock.calls[0][0]).toMatch(`wget https://foo -O ./${index.cliScannerName}`);
213218
});

0 commit comments

Comments
 (0)