import dockerParseImage from 'docker-parse-image';
module.exports = function({
getContainers,
getBuilds,
}) {
return function manifestContainerBuilds(projectId, manifest) {
const containers = getContainers(manifest);
const builds = getBuilds(manifest);
const accum = [];
if (!builds) {
return accum;
}
return containers.reduce((accum, {name, image}) => {
const build = getBuild(builds, name);
const parsedImage = dockerParseImage(image);
const {registry, namespace, tag} = parsedImage;
if (!(build &&
registry === 'gcr.io' &&
namespace === projectId &&
tag !== null &&
tag !== 'latest')) {
return accum;
}
const is = isBranch(tag);
accum.push({
image: parsedImage,
build,
...(is && {branch: tag}),
...(!is && {commitSha: tag}),
});
return accum;
}, accum);
};
}
function isBranch(str) {
return Buffer.from(str, 'hex').length !== 20;
}
function getBuild(builds, name) {
return builds.filter(({container}) => container === name)[0] || null;
}
|