From 5d73738ddefd1ffa5c5f5c5942707b18f68689dc Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 27 Feb 2018 10:28:31 +0100 Subject: [PATCH] refactor: move docker registry to datasource --- .../registry.js => datasource/docker.js} | 47 ++++++++++--------- lib/manager/docker/package.js | 2 +- .../docker.spec.js} | 2 +- test/manager/docker/package.spec.js | 2 +- 4 files changed, 28 insertions(+), 25 deletions(-) rename lib/{manager/docker/registry.js => datasource/docker.js} (50%) rename test/{manager/docker/registry.spec.js => datasource/docker.spec.js} (96%) diff --git a/lib/manager/docker/registry.js b/lib/datasource/docker.js similarity index 50% rename from lib/manager/docker/registry.js rename to lib/datasource/docker.js index 0318c34620..18d571b860 100644 --- a/lib/manager/docker/registry.js +++ b/lib/datasource/docker.js @@ -5,8 +5,13 @@ module.exports = { getTags, }; -async function getDigest(name, tag = 'latest') { - const repository = name.includes('/') ? name : `library/${name}`; +const registry = 'https://index.docker.io/v2'; + +function getRepository(pkgName) { + return pkgName.includes('/') ? pkgName : `library/${pkgName}`; +} + +async function getHeaders(repository) { try { const authUrl = `https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repository}:pull`; logger.debug(`Obtaining docker registry token for ${repository}`); @@ -15,12 +20,21 @@ async function getDigest(name, tag = 'latest') { 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}`; - const headers = { + return { Authorization: `Bearer ${token}`, Accept: 'application/vnd.docker.distribution.manifest.v2+json', }; + } catch (err) { + logger.info('Error obtaining docker token'); + return null; + } +} + +async function getDigest(name, tag = 'latest') { + try { + const repository = getRepository(name); + const headers = await getHeaders(repository); + const url = `${registry}/${repository}/manifests/${tag}`; const digest = (await got(url, { json: true, headers })).headers[ 'docker-content-digest' ]; @@ -33,24 +47,13 @@ async function getDigest(name, tag = 'latest') { } async function getTags(name) { - 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; - 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}/tags/list?n=10000`; - const headers = { - Authorization: `Bearer ${token}`, - Accept: 'application/vnd.docker.distribution.manifest.v2+json', - }; - const res = await got(url, { json: true, headers }); - logger.debug({ tags: res.body.tags }, 'Got docker tags'); - return res.body.tags; + const repository = getRepository(name); + const url = `${registry}/${repository}/tags/list?n=10000`; + const headers = await getHeaders(repository); + const { tags } = (await got(url, { json: true, headers })).body; + logger.debug({ tags }, 'Got docker tags'); + return tags; } catch (err) { logger.warn({ err, name }, 'Error getting docker image tags'); return null; diff --git a/lib/manager/docker/package.js b/lib/manager/docker/package.js index 0783dc1a54..ddf6a47557 100644 --- a/lib/manager/docker/package.js +++ b/lib/manager/docker/package.js @@ -1,5 +1,5 @@ const semver = require('semver'); -const dockerApi = require('./registry'); +const dockerApi = require('../../datasource/docker'); const versions = require('../../workers/package/versions'); const compareVersions = require('compare-versions'); diff --git a/test/manager/docker/registry.spec.js b/test/datasource/docker.spec.js similarity index 96% rename from test/manager/docker/registry.spec.js rename to test/datasource/docker.spec.js index 5d2509c489..cbd7efaa10 100644 --- a/test/manager/docker/registry.spec.js +++ b/test/datasource/docker.spec.js @@ -1,4 +1,4 @@ -const docker = require('../../../lib/manager/docker/registry'); +const docker = require('../../lib/datasource/docker'); const got = require('got'); jest.mock('got'); diff --git a/test/manager/docker/package.spec.js b/test/manager/docker/package.spec.js index 97b560ef6d..7ee98d2fa5 100644 --- a/test/manager/docker/package.spec.js +++ b/test/manager/docker/package.spec.js @@ -1,4 +1,4 @@ -const dockerApi = require('../../../lib/manager/docker/registry'); +const dockerApi = require('../../../lib/datasource/docker'); const docker = require('../../../lib/manager/docker/package'); const defaultConfig = require('../../../lib/config/defaults').getConfig(); -- GitLab