mirror of
https://github.com/renovatebot/renovate.git
synced 2026-11-01 10:09:50 +00:00
a88ba0d16a
This feature adds initial support for renovating Dockerfiles. Renovate now: - Detects all `Dockerfile`s in repo - Searches for `FROM x` in first non-comment line, breaks x into image, tag, digest - Queries public Docker registry for image:tag combination to find latest digest - Patches Dockerfile if necessary - Creates branches/PRs as like with npm Closes #795
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
const got = require('got');
|
|
|
|
module.exports = {
|
|
getDigest,
|
|
};
|
|
|
|
async function getDigest(name, tag, logger) {
|
|
const repository = name.includes('/') ? name : `library/${name}`;
|
|
try {
|
|
const authUrl = `https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repository}:pull`;
|
|
logger.debug(`Obtaining docker registry token for ${repository}`);
|
|
const token = (await got(authUrl, { json: true })).body.token;
|
|
if (!token) {
|
|
logger.warn('Failed to obtain docker registry token');
|
|
return null;
|
|
}
|
|
logger.debug('Got docker registry token');
|
|
const url = `https://index.docker.io/v2/${repository}/manifests/${tag ||
|
|
'latest'}`;
|
|
const headers = {
|
|
Authorization: `Bearer ${token}`,
|
|
Accept: 'application/vnd.docker.distribution.manifest.v2+json',
|
|
};
|
|
const digest = (await got(url, { json: true, headers })).headers[
|
|
'docker-content-digest'
|
|
];
|
|
logger.debug({ digest }, 'Got docker digest');
|
|
return digest;
|
|
} catch (err) {
|
|
logger.warn({ err, name, tag }, 'Error getting docker image digest');
|
|
return null;
|
|
}
|
|
}
|