From 4c21322ada67d70d7c85f2df2ac2540b2ef6a524 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 21 Nov 2019 08:18:30 +0100
Subject: [PATCH] fix(docker): detect local registries without FQDN (#4837)

Closes #4836
---
 lib/datasource/docker/index.ts                    | 9 ++++++---
 test/datasource/__snapshots__/docker.spec.ts.snap | 7 +++++++
 test/datasource/docker.spec.ts                    | 6 ++++++
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/lib/datasource/docker/index.ts b/lib/datasource/docker/index.ts
index 65fe046632..815f7af94d 100644
--- a/lib/datasource/docker/index.ts
+++ b/lib/datasource/docker/index.ts
@@ -15,10 +15,13 @@ import { PkgReleaseConfig, ReleaseResult } from '../common';
 
 const ecrRegex = /\d+\.dkr\.ecr\.([-a-z0-9]+)\.amazonaws\.com/;
 
-function getRegistryRepository(lookupName: string, registryUrls: string[]) {
+export function getRegistryRepository(
+  lookupName: string,
+  registryUrls: string[]
+) {
   let registry: string;
   const split = lookupName.split('/');
-  if (split.length > 1 && split[0].includes('.')) {
+  if (split.length > 1 && (split[0].includes('.') || split[0].includes(':'))) {
     [registry] = split;
     split.shift();
   }
@@ -33,7 +36,7 @@ function getRegistryRepository(lookupName: string, registryUrls: string[]) {
     registry = `https://${registry}`;
   }
   const opts = hostRules.find({ url: registry });
-  if (opts.insecureRegistry) {
+  if (opts && opts.insecureRegistry) {
     registry = registry.replace('https', 'http');
   }
   if (registry.endsWith('.docker.io') && !repository.includes('/')) {
diff --git a/test/datasource/__snapshots__/docker.spec.ts.snap b/test/datasource/__snapshots__/docker.spec.ts.snap
index 90e322975c..88b83ee46b 100644
--- a/test/datasource/__snapshots__/docker.spec.ts.snap
+++ b/test/datasource/__snapshots__/docker.spec.ts.snap
@@ -396,3 +396,10 @@ exports[`api/docker getPkgReleases uses lower tag limit for ECR deps 1`] = `
   ],
 }
 `;
+
+exports[`api/docker getRegistryRepository handles local registries 1`] = `
+Object {
+  "registry": "https://registry:5000",
+  "repository": "org/package",
+}
+`;
diff --git a/test/datasource/docker.spec.ts b/test/datasource/docker.spec.ts
index 1140f1e22a..8d32c136c4 100644
--- a/test/datasource/docker.spec.ts
+++ b/test/datasource/docker.spec.ts
@@ -12,6 +12,12 @@ jest.mock('../../lib/util/got');
 jest.mock('../../lib/util/host-rules');
 
 describe('api/docker', () => {
+  describe('getRegistryRepository', () => {
+    it('handles local registries', () => {
+      const res = docker.getRegistryRepository('registry:5000/org/package', []);
+      expect(res).toMatchSnapshot();
+    });
+  });
   describe('getDigest', () => {
     beforeEach(() => {
       jest.resetAllMocks();
-- 
GitLab