in src/invoker.js [194:239]
async pull(image) {
await new Promise((resolve, reject) => {
this.docker.pull(image, (err, stream) => {
// streaming output from pull...
if (err) {
return reject(err);
}
function onFinished(err, output) {
if (err) {
return reject(err);
}
return resolve(output);
}
const events = {};
function onProgress(event) {
if (!event.progress) {
return;
}
if (event.status) {
events[event.status] = events[event.status] || {};
if (event.id) {
events[event.status][event.id] = event;
}
}
const progressMsg = Object.entries(events).reduce((result, [status, events], idx) => {
const progress = Object.values(events).reduce((sum, e) => {
if (e.progressDetail && e.progressDetail.current && e.progressDetail.total) {
sum.current += e.progressDetail.current;
sum.total += e.progressDetail.total;
}
return sum;
}, { current: 0, total: 0 });
return result + `${idx > 0 ? ", " : ""}${status}: ${prettyBytes(progress.current)} of ${prettyBytes(progress.total)}`;
}, "");
log.spinner(`Pulling docker image ${image} (${progressMsg})`);
}
this.docker.modem.followProgress(stream, onFinished, onProgress);
});
});
}