From 0b6ad1c898d532ff90815367a739dcf4f8df1ef2 Mon Sep 17 00:00:00 2001
From: Grigorij Eleskin <Nyarum@users.noreply.github.com>
Date: Thu, 29 Nov 2018 11:39:45 +0400
Subject: [PATCH] fix(gomod): support remote option in go_repository (#2877)

---
 lib/manager/bazel/extract.js       | 10 ++++++
 test/manager/bazel/extract.spec.js | 55 ++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/lib/manager/bazel/extract.js b/lib/manager/bazel/extract.js
index 447f7a9d85..01ae14945e 100644
--- a/lib/manager/bazel/extract.js
+++ b/lib/manager/bazel/extract.js
@@ -101,6 +101,16 @@ function extractPackageFile(content) {
       dep.depName = depName;
       dep.currentValue = currentValue || commit.substr(0, 7);
       dep.purl = 'pkg:go/' + importpath;
+      if (remote) {
+        const remoteMatch = remote.match(
+          /https:\/\/github\.com(?:.*\/)(([a-zA-Z]+)([-])?([a-zA-Z]+))/
+        );
+        if (remoteMatch && remoteMatch[0].length === remote.length) {
+          dep.purl = 'pkg:go/' + remote.replace('https://', '');
+        } else {
+          dep.skipReason = 'unsupported-remote';
+        }
+      }
       if (commit) {
         dep.currentValue = 'v0.0.0';
         dep.currentDigest = commit;
diff --git a/test/manager/bazel/extract.spec.js b/test/manager/bazel/extract.spec.js
index 6beb164e3c..b66f0a3d0d 100644
--- a/test/manager/bazel/extract.spec.js
+++ b/test/manager/bazel/extract.spec.js
@@ -24,5 +24,60 @@ describe('lib/manager/bazel/extract', () => {
       const res = extractPackageFile(workspaceFile, config);
       expect(res.deps).toMatchSnapshot();
     });
+    it('check remote option in go_repository', () => {
+      const successStory = extractPackageFile(
+        `
+go_repository(
+  name = "test_repository",
+  importpath = "github.com/google/uuid",
+  remote = "https://github.com/test/uuid-fork",
+  commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
+)
+        `,
+        config
+      );
+      expect(successStory.deps[0].purl).toBe(
+        'pkg:go/github.com/test/uuid-fork'
+      );
+
+      const badStory = extractPackageFile(
+        `
+go_repository(
+  name = "test_repository",
+  importpath = "github.com/google/uuid",
+  remote = "https://github.com/test/uuid.git#branch",
+  commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
+)
+        `,
+        config
+      );
+      expect(badStory.deps[0].skipReason).toBe('unsupported-remote');
+
+      const gheStory = extractPackageFile(
+        `
+go_repository(
+  name = "test_repository",
+  importpath = "github.com/google/uuid",
+  remote = "https://github.mycompany.com/test/uuid",
+  commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
+)
+        `,
+        config
+      );
+      expect(gheStory.deps[0].skipReason).toBe('unsupported-remote');
+
+      const gitlabRemote = extractPackageFile(
+        `
+go_repository(
+  name = "test_repository",
+  importpath = "github.com/google/uuid",
+  remote = "https://gitlab.com/test/uuid",
+  commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
+)
+        `,
+        config
+      );
+      expect(gitlabRemote.deps[0].skipReason).toBe('unsupported-remote');
+    });
   });
 });
-- 
GitLab