snyk-docker-plugin
Version:
Snyk CLI docker plugin
78 lines • 2.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Docker = void 0;
const snyk_docker_pull_1 = require("@snyk/snyk-docker-pull");
const Debug = require("debug");
const Modem = require("docker-modem");
const fs_1 = require("fs");
const subProcess = require("./sub-process");
const debug = Debug("snyk");
class Docker {
static async binaryExists() {
try {
await subProcess.execute("docker", ["version"]);
return true;
}
catch (e) {
return false;
}
}
async pull(registry, repo, tag, imageSavePath, username, password) {
const dockerPull = new snyk_docker_pull_1.DockerPull();
const opt = {
username,
password,
loadImage: false,
imageSavePath,
};
return await dockerPull.pull(registry, repo, tag, opt);
}
async pullCli(targetImage, options) {
const opts = ["pull", targetImage];
if (options === null || options === void 0 ? void 0 : options.platform) {
opts.push(`--platform=${options.platform}`);
}
return subProcess.execute("docker", opts);
}
async save(targetImage, destination) {
const request = {
path: `/images/${targetImage}/get?`,
method: "GET",
isStream: true,
statusCodes: {
200: true,
400: "bad request",
404: "not found",
500: "server error",
},
};
debug(`Docker.save: targetImage: ${targetImage}, destination: ${destination}`);
const modem = new Modem();
return new Promise((resolve, reject) => {
modem.dial(request, (err, stream) => {
if (err) {
return reject(err);
}
const writeStream = (0, fs_1.createWriteStream)(destination);
writeStream.on("error", (err) => {
reject(err);
});
writeStream.on("finish", () => {
resolve();
});
stream.on("error", (err) => {
reject(err);
});
stream.on("end", () => {
writeStream.end();
});
stream.pipe(writeStream);
});
});
}
async inspectImage(targetImage) {
return subProcess.execute("docker", ["inspect", targetImage]);
}
}
exports.Docker = Docker;
//# sourceMappingURL=docker.js.map
;