From c25e979aadaf7beb818a27d81430ecd5c55a7047 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Fri, 29 Jun 2018 14:28:24 +0200 Subject: [PATCH] refactor: push docker suffix filter to datasource --- lib/datasource/docker.js | 1 + lib/manager/docker/package.js | 11 ++++++----- test/datasource/docker.spec.js | 13 ++++++++++--- test/manager/docker/package.spec.js | 5 +---- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/datasource/docker.js b/lib/datasource/docker.js index 064afa6be9..0f652f7b93 100644 --- a/lib/datasource/docker.js +++ b/lib/datasource/docker.js @@ -140,6 +140,7 @@ async function getTags(registry, name, suffix) { logger.trace({ tags }); return tags .filter(tag => !suffix || tag.endsWith(`-${suffix}`)) + .map(tag => (suffix ? tag.replace(new RegExp(`-${suffix}$`), '') : tag)) .filter(isVersion); } catch (err) /* istanbul ignore next */ { logger.debug( diff --git a/lib/manager/docker/package.js b/lib/manager/docker/package.js index e4deee480b..ce03429e6c 100644 --- a/lib/manager/docker/package.js +++ b/lib/manager/docker/package.js @@ -68,12 +68,13 @@ async function getPackageUpdates(config) { const currentMajor = getMajor(tagVersion); const currentlyStable = isStable(tagVersion, unstablePattern); let versionList = []; - const allTags = await dockerApi.getTags(dockerRegistry, config.depName); + const allTags = await dockerApi.getTags( + dockerRegistry, + config.depName, + tagSuffix + ); if (allTags) { versionList = allTags - .filter(tag => getSuffix(tag) === tagSuffix) - .map(getVersion) - .filter(isValid) .filter( version => // All stable are allowed @@ -178,5 +179,5 @@ function getVersion(tag) { function getSuffix(tag) { const split = tag.indexOf('-'); - return split > 0 ? tag.slice(split + 1) : ''; + return split > 0 ? tag.slice(split + 1) : undefined; } diff --git a/test/datasource/docker.spec.js b/test/datasource/docker.spec.js index d0b1d58714..deb3bfb51f 100644 --- a/test/datasource/docker.spec.js +++ b/test/datasource/docker.spec.js @@ -41,12 +41,19 @@ describe('api/docker', () => { const res = await docker.getTags(undefined, 'node'); expect(res).toBe(null); }); - it('returns tags', async () => { - const tags = ['a', 'b']; + it('returns tags with no suffix', async () => { + const tags = ['a', 'b', '1.0.0', '1.1.0', '1.1.0-alpine']; got.mockReturnValueOnce({ headers: {}, body: { token: 'some-token ' } }); got.mockReturnValueOnce({ headers: {}, body: { tags } }); const res = await docker.getTags(undefined, 'my/node'); - expect(res).toEqual(tags); + expect(res).toEqual(['1.0.0', '1.1.0', '1.1.0-alpine']); + }); + it('returns tags with suffix', async () => { + const tags = ['a', 'b', '1.0.0', '1.1.0-alpine']; + got.mockReturnValueOnce({ headers: {}, body: { token: 'some-token ' } }); + got.mockReturnValueOnce({ headers: {}, body: { tags } }); + const res = await docker.getTags(undefined, 'my/node', 'alpine'); + expect(res).toEqual(['1.1.0']); }); it('returns null on error', async () => { got.mockReturnValueOnce({}); diff --git a/test/manager/docker/package.spec.js b/test/manager/docker/package.spec.js index 6dac154f68..97af7020f2 100644 --- a/test/manager/docker/package.spec.js +++ b/test/manager/docker/package.spec.js @@ -207,10 +207,7 @@ describe('lib/manager/docker/package', () => { config.currentTag = '1.0.0-something'; dockerApi.getDigest.mockReturnValueOnce('sha256:one'); dockerApi.getDigest.mockReturnValueOnce('sha256:two'); - dockerApi.getTags.mockReturnValueOnce([ - '1.1.0-something', - '1.2.0-otherthing', - ]); + dockerApi.getTags.mockReturnValueOnce(['1.1.0']); const res = await docker.getPackageUpdates(config); expect(res).toMatchSnapshot(); expect(res).toHaveLength(2); -- GitLab