Compare commits
15 Commits
9d1405ca66
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 7243ea3674 | |||
| 62c5b5d727 | |||
| b0960e8b14 | |||
| 954a55271a | |||
| 265328e917 | |||
| ec9386f924 | |||
|
|
6e7555e536 | ||
|
|
d9c972fcaf | ||
|
|
b03f2090d6 | ||
|
|
02f8d16e0b | ||
|
|
8bcfb9c6f9 | ||
|
|
3749fc3adf | ||
|
|
9da7585e9a | ||
|
|
a2d0c6c890 | ||
|
|
6ba328c294 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -18,3 +18,4 @@ bin-release/
|
||||
# should NOT be excluded as they contain compiler settings and other important
|
||||
# information for Eclipse / Flash Builder.
|
||||
|
||||
node_modules
|
||||
33
docker-scout/action.yml
Normal file
33
docker-scout/action.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
# https://help.github.com/en/articles/metadata-syntax-for-github-actions
|
||||
name: 'Docker scout'
|
||||
description: 'Check vulnerabilities'
|
||||
|
||||
inputs:
|
||||
command:
|
||||
description: 'actions to be performed'
|
||||
default: 'cves'
|
||||
required: true
|
||||
version:
|
||||
description: 'Docker scout version'
|
||||
default: 'latest'
|
||||
required: true
|
||||
format:
|
||||
description: 'Output format'
|
||||
default: 'packages'
|
||||
required: true
|
||||
image:
|
||||
description: 'Name of the image'
|
||||
required: true
|
||||
output-file:
|
||||
description: 'whether the program outputs a file at all'
|
||||
default: false
|
||||
required: false
|
||||
|
||||
outputs:
|
||||
result-file:
|
||||
description: 'File output result'
|
||||
value: ${{ steps.run.outputs.result-file }}
|
||||
|
||||
runs:
|
||||
using: node20
|
||||
main: dist/index.js
|
||||
27662
docker-scout/dist/index.js
vendored
Normal file
27662
docker-scout/dist/index.js
vendored
Normal file
File diff suppressed because one or more lines are too long
17
docker-scout/package.json
Normal file
17
docker-scout/package.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "docker-scout",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"tunnel": "^0.0.6",
|
||||
"undici": "^8.0.0"
|
||||
},
|
||||
"devDependencies": {},
|
||||
"scripts": {
|
||||
"test": "node dist/index.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
102
docker-scout/src/index.js
Normal file
102
docker-scout/src/index.js
Normal file
@@ -0,0 +1,102 @@
|
||||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
const core = require('@actions/core');
|
||||
const exec = require('@actions/exec');
|
||||
const path = require('path');
|
||||
|
||||
async function pullDockerImage(version) {
|
||||
await core.group(`Pull docker/scout-cli image`, async () => {
|
||||
await exec.exec(`docker pull docker.io/docker/scout-cli:${version}`);
|
||||
});
|
||||
}
|
||||
|
||||
async function copyBinary(version) {
|
||||
await core.group(`Copy binary`, async () => {
|
||||
const res = await exec.getExecOutput('docker', ['create', `docker.io/docker/scout-cli:${version}`], {
|
||||
ignoreReturnCode: true
|
||||
});
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
throw new Error(res.stderr);
|
||||
}
|
||||
const ctnid = res.stdout.trim();
|
||||
const dockerCfgPath = process.env.DOCKER_CONFIG || path.join(os.homedir(), '.docker');
|
||||
const pluginsPath = path.join(dockerCfgPath, 'cli-plugins');
|
||||
fs.mkdirSync(pluginsPath, { recursive: true });
|
||||
await exec.exec(`docker cp ${ctnid}:/docker-scout ${pluginsPath}`);
|
||||
await exec.exec(`docker rm -v ${ctnid}`);
|
||||
});
|
||||
}
|
||||
|
||||
async function dockerInfo() {
|
||||
await core.group(`Docker info`, async () => {
|
||||
await exec.exec(`docker info`);
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
async function getScoutVersion() {
|
||||
let version;
|
||||
await core.group(`Docker scout version`, async () => {
|
||||
const res = await exec.getExecOutput('docker', ['scout', 'version'], {
|
||||
ignoreReturnCode: true,
|
||||
silent: true
|
||||
});
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
throw new Error(res.stderr);
|
||||
}
|
||||
const matchVersion = res.stdout.trim().match(/version:\s(.*?)\s/);
|
||||
version = matchVersion ? matchVersion[1] : null;
|
||||
if (!version) {
|
||||
throw new Error('Failed to get Docker scout version');
|
||||
}
|
||||
core.info(version);
|
||||
});
|
||||
return version;
|
||||
}
|
||||
*/
|
||||
|
||||
async function runScoutCommand(commands, image, format, outputFile) {
|
||||
const resultPath = path.join(fs.mkdtempSync(path.join(os.tmpdir(), 'docker-scout-action-')), 'result.txt');
|
||||
core.setOutput('result-file', resultPath);
|
||||
|
||||
for (const cmd of commands) {
|
||||
const args = ['scout', cmd, image];
|
||||
if (cmd == 'cves') {
|
||||
args.push('--format', format);
|
||||
}
|
||||
|
||||
if (outputFile) {
|
||||
const res = await exec.getExecOutput('docker', args, { silent: true });
|
||||
if (res.stderr && res.stderr.length > 0) {
|
||||
throw new Error(res.stderr);
|
||||
}
|
||||
fs.appendFile(resultPath, res.stdout);
|
||||
} else {
|
||||
await exec.exec('docker', args);
|
||||
}
|
||||
}
|
||||
return resultPath;
|
||||
}
|
||||
|
||||
async function main(inputs) {
|
||||
try {
|
||||
const commandInput = core.getInput('command');
|
||||
const commands = commandInput.split(',').map(cmd => cmd.trim()).filter(cmd => cmd.length > 0);
|
||||
const scoutVersion = core.getInput('version');
|
||||
const outputFormat = core.getInput('format');
|
||||
const imageName = core.getInput('image');
|
||||
const outputFile = core.getInput('output-file') === 'true';
|
||||
|
||||
await pullDockerImage(scoutVersion);
|
||||
await copyBinary(scoutVersion);
|
||||
await dockerInfo();
|
||||
//const version = await getScoutVersion();
|
||||
// TODO: cache binary (no changes per your request)
|
||||
await runScoutCommand(commands, imageName, outputFormat, outputFile);
|
||||
}
|
||||
catch (error) {
|
||||
core.setFailed(error.message);
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
main()
|
||||
3
renovate.json
Normal file
3
renovate.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
|
||||
}
|
||||
Reference in New Issue
Block a user