From fe2ed94b44ea6031bf0bcab8cfc5f8d293b8278a Mon Sep 17 00:00:00 2001
From: ajhcpt <andrew.henderson79@gmail.com>
Date: Tue, 27 Sep 2022 14:46:41 +0200
Subject: [PATCH] feat(go): Continue processing if an error occurs trying to
 get sourceUrl (#17981)

---
 .../datasource/go/releases-goproxy.spec.ts    | 26 +++++++++++++++++++
 lib/modules/datasource/go/releases-goproxy.ts | 14 +++++++---
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/lib/modules/datasource/go/releases-goproxy.spec.ts b/lib/modules/datasource/go/releases-goproxy.spec.ts
index e200726491..952971e260 100644
--- a/lib/modules/datasource/go/releases-goproxy.spec.ts
+++ b/lib/modules/datasource/go/releases-goproxy.spec.ts
@@ -515,5 +515,31 @@ describe('modules/datasource/go/releases-goproxy', () => {
 
       expect(res).toBeNull();
     });
+
+    it('handles soureUrl fetch errors', async () => {
+      process.env.GOPROXY = baseUrl;
+
+      httpMock
+        .scope(`${baseUrl}/custom.com/lib/btree`)
+        .get('/@v/list')
+        .reply(200, ['v1.0.0 2018-08-13T15:31:12Z', 'v1.0.1'].join('\n'))
+        .get('/@v/v1.0.1.info')
+        .reply(200, { Version: 'v1.0.1', Time: '2019-10-16T16:15:28Z' });
+      httpMock
+        .scope('https://custom.com/lib/btree')
+        .get('?go-get=1')
+        .reply(500);
+
+      const res = await datasource.getReleases({
+        packageName: 'custom.com/lib/btree',
+      });
+
+      expect(res).toEqual({
+        releases: [
+          { releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
+          { releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
+        ],
+      });
+    });
   });
 });
diff --git a/lib/modules/datasource/go/releases-goproxy.ts b/lib/modules/datasource/go/releases-goproxy.ts
index 405bcb801a..d1b468c59d 100644
--- a/lib/modules/datasource/go/releases-goproxy.ts
+++ b/lib/modules/datasource/go/releases-goproxy.ts
@@ -68,9 +68,17 @@ export class GoProxyDatasource extends Datasource {
           }
         });
         if (releases.length) {
-          const datasource = await BaseGoDatasource.getDatasource(packageName);
-          const sourceUrl = getSourceUrl(datasource);
-          result = { releases, sourceUrl };
+          try {
+            const datasource = await BaseGoDatasource.getDatasource(
+              packageName
+            );
+            const sourceUrl = getSourceUrl(datasource);
+            result = { releases, sourceUrl };
+          } catch (err) {
+            logger.trace({ err }, `Can't get datasource for ${packageName}`);
+            result = { releases };
+          }
+
           break;
         }
       } catch (err) {
-- 
GitLab