Skip to content

Commit 4a23816

Browse files
committed
[trivy.ts] Refactoring
1 parent 4705edc commit 4a23816

File tree

3 files changed

+66
-71
lines changed

3 files changed

+66
-71
lines changed

__tests__/trivy.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ describe('getDownloadUrl', () => {
5555
await expect(
5656
downloader['getDownloadUrl'](version, os)
5757
).rejects.toThrowError(
58-
'The Trivy version that you specified does not exist.'
58+
'Cloud not be found a Trivy asset that you specified.'
5959
);
6060
});
6161

@@ -65,7 +65,7 @@ describe('getDownloadUrl', () => {
6565
await expect(
6666
downloader['getDownloadUrl'](version, os)
6767
).rejects.toThrowError(
68-
'Cloud not be found Trivy asset that You specified.'
68+
'Cloud not be found a Trivy asset that you specified.'
6969
);
7070
});
7171
});

dist/index.js

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13199,13 +13199,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1319913199
step((generator = generator.apply(thisArg, _arguments || [])).next());
1320013200
});
1320113201
};
13202-
var __asyncValues = (this && this.__asyncValues) || function (o) {
13203-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13204-
var m = o[Symbol.asyncIterator], i;
13205-
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
13206-
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
13207-
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
13208-
};
1320913202
var __importDefault = (this && this.__importDefault) || function (mod) {
1321013203
return (mod && mod.__esModule) ? mod : { "default": mod };
1321113204
};
@@ -13244,53 +13237,49 @@ class Downloader {
1324413237
}
1324513238
}
1324613239
getDownloadUrl(version, os) {
13247-
var e_1, _a;
1324813240
return __awaiter(this, void 0, void 0, function* () {
13249-
let response;
1325013241
try {
13251-
if (version === 'latest') {
13252-
response = yield this.githubClient.repos.getLatestRelease(Object.assign({}, Downloader.trivyRepository));
13253-
version = response.data.tag_name.replace(/v/, '');
13254-
}
13255-
else {
13256-
response = yield this.githubClient.repos.getReleaseByTag(Object.assign(Object.assign({}, Downloader.trivyRepository), { tag: `v${version}` }));
13242+
const response = yield this.getAssets(version);
13243+
const filename = `trivy_${response.version}_${os}-64bit.tar.gz`;
13244+
for (const asset of response.assets) {
13245+
if (asset.name === filename) {
13246+
return asset.browser_download_url;
13247+
}
1325713248
}
13249+
throw new Error();
1325813250
}
1325913251
catch (error) {
13260-
throw new Error(`The Trivy version that you specified does not exist.
13252+
const errorMsg = `
13253+
Cloud not be found a Trivy asset that you specified.
1326113254
Version: ${version}
13262-
`);
13255+
OS: ${os}
13256+
`;
13257+
throw new Error(errorMsg);
1326313258
}
13264-
const filename = `trivy_${version}_${os}-64bit.tar.gz`;
13265-
try {
13266-
for (var _b = __asyncValues(response.data.assets), _c; _c = yield _b.next(), !_c.done;) {
13267-
const asset = _c.value;
13268-
if (asset.name === filename) {
13269-
return asset.browser_download_url;
13270-
}
13271-
}
13259+
});
13260+
}
13261+
getAssets(version) {
13262+
return __awaiter(this, void 0, void 0, function* () {
13263+
let response;
13264+
if (version === 'latest') {
13265+
response = yield this.githubClient.repos.getLatestRelease(Object.assign({}, Downloader.trivyRepository));
13266+
version = response.data.tag_name.replace(/v/, '');
1327213267
}
13273-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
13274-
finally {
13275-
try {
13276-
if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
13277-
}
13278-
finally { if (e_1) throw e_1.error; }
13268+
else {
13269+
response = yield this.githubClient.repos.getReleaseByTag(Object.assign(Object.assign({}, Downloader.trivyRepository), { tag: `v${version}` }));
1327913270
}
13280-
const errorMsg = `Cloud not be found Trivy asset that You specified.
13281-
Version: ${version}
13282-
OS: ${os}`;
13283-
throw new Error(errorMsg);
13271+
return { assets: response.data.assets, version };
1328413272
});
1328513273
}
1328613274
downloadTrivyCmd(downloadUrl, savedPath = '.') {
1328713275
return __awaiter(this, void 0, void 0, function* () {
1328813276
const response = yield node_fetch_1.default(downloadUrl);
1328913277
return new Promise((resolve, reject) => {
13278+
const gunzip = zlib_1.default.createGunzip();
1329013279
const extract = tar_1.default.extract({ C: savedPath }, ['trivy']);
1329113280
response.body
1329213281
.on('error', reject)
13293-
.pipe(zlib_1.default.createGunzip())
13282+
.pipe(gunzip)
1329413283
.on('error', reject)
1329513284
.pipe(extract)
1329613285
.on('error', reject)

src/trivy.ts

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
import fs from 'fs';
22
import zlib from 'zlib';
33
import tar from 'tar';
4-
import Octokit, { ReposGetLatestReleaseResponse } from '@octokit/rest';
4+
import Octokit, {
5+
ReposGetLatestReleaseResponse,
6+
ReposGetLatestReleaseResponseAssetsItem,
7+
} from '@octokit/rest';
58
import fetch, { Response } from 'node-fetch';
69
import { spawnSync, SpawnSyncReturns } from 'child_process';
710

811
import { TrivyOption, Vulnerability } from './interface';
9-
import { defaultCoreCipherList } from 'constants';
10-
11-
interface Repository {
12-
owner: string;
13-
repo: string;
14-
}
1512

1613
export class Downloader {
1714
githubClient: Octokit;
1815

19-
static readonly trivyRepository: Repository = {
16+
static readonly trivyRepository = {
2017
owner: 'aquasecurity',
2118
repo: 'trivy',
2219
};
@@ -55,37 +52,45 @@ export class Downloader {
5552
}
5653

5754
private async getDownloadUrl(version: string, os: string): Promise<string> {
58-
let response: Octokit.Response<ReposGetLatestReleaseResponse>;
59-
6055
try {
61-
if (version === 'latest') {
62-
response = await this.githubClient.repos.getLatestRelease({
63-
...Downloader.trivyRepository,
64-
});
65-
version = response.data.tag_name.replace(/v/, '');
66-
} else {
67-
response = await this.githubClient.repos.getReleaseByTag({
68-
...Downloader.trivyRepository,
69-
tag: `v${version}`,
70-
});
56+
const response = await this.getAssets(version);
57+
const filename: string = `trivy_${response.version}_${os}-64bit.tar.gz`;
58+
for (const asset of response.assets) {
59+
if (asset.name === filename) {
60+
return asset.browser_download_url;
61+
}
7162
}
63+
throw new Error();
7264
} catch (error) {
73-
throw new Error(`The Trivy version that you specified does not exist.
65+
const errorMsg: string = `
66+
Cloud not be found a Trivy asset that you specified.
7467
Version: ${version}
75-
`);
68+
OS: ${os}
69+
`;
70+
throw new Error(errorMsg);
7671
}
72+
}
7773

78-
const filename: string = `trivy_${version}_${os}-64bit.tar.gz`;
79-
for await (const asset of response.data.assets) {
80-
if (asset.name === filename) {
81-
return asset.browser_download_url;
82-
}
83-
}
74+
private async getAssets(
75+
version: string
76+
): Promise<{
77+
assets: ReposGetLatestReleaseResponseAssetsItem[];
78+
version: string;
79+
}> {
80+
let response: Octokit.Response<ReposGetLatestReleaseResponse>;
8481

85-
const errorMsg: string = `Cloud not be found Trivy asset that You specified.
86-
Version: ${version}
87-
OS: ${os}`;
88-
throw new Error(errorMsg);
82+
if (version === 'latest') {
83+
response = await this.githubClient.repos.getLatestRelease({
84+
...Downloader.trivyRepository,
85+
});
86+
version = response.data.tag_name.replace(/v/, '');
87+
} else {
88+
response = await this.githubClient.repos.getReleaseByTag({
89+
...Downloader.trivyRepository,
90+
tag: `v${version}`,
91+
});
92+
}
93+
return { assets: response.data.assets, version };
8994
}
9095

9196
private async downloadTrivyCmd(
@@ -95,10 +100,11 @@ export class Downloader {
95100
const response: Response = await fetch(downloadUrl);
96101

97102
return new Promise((resolve, reject) => {
103+
const gunzip = zlib.createGunzip();
98104
const extract = tar.extract({ C: savedPath }, ['trivy']);
99105
response.body
100106
.on('error', reject)
101-
.pipe(zlib.createGunzip())
107+
.pipe(gunzip)
102108
.on('error', reject)
103109
.pipe(extract)
104110
.on('error', reject)

0 commit comments

Comments
 (0)