From a7d4f52b3c4ff82b1adb043a11049dd955e33943 Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Sat, 12 Feb 2022 12:51:40 +0300
Subject: [PATCH] refactor(datasource/go): Unify delegation to bitbucket
 (#14189)

---
 .../go/__snapshots__/index.spec.ts.snap       | 25 +------------------
 lib/datasource/go/base.ts                     |  4 +--
 lib/datasource/go/common.ts                   |  4 +--
 lib/datasource/go/index.spec.ts               | 22 ++++------------
 lib/datasource/go/index.ts                    |  6 ++---
 lib/datasource/go/releases-direct.ts          |  9 ++++---
 6 files changed, 18 insertions(+), 52 deletions(-)

diff --git a/lib/datasource/go/__snapshots__/index.spec.ts.snap b/lib/datasource/go/__snapshots__/index.spec.ts.snap
index 805059866e..88edf44457 100644
--- a/lib/datasource/go/__snapshots__/index.spec.ts.snap
+++ b/lib/datasource/go/__snapshots__/index.spec.ts.snap
@@ -54,27 +54,4 @@ Array [
 
 exports[`datasource/go/index getDigest support bitbucket digest 1`] = `"123"`;
 
-exports[`datasource/go/index getDigest support bitbucket digest 2`] = `
-Array [
-  Object {
-    "headers": Object {
-      "accept": "application/json",
-      "accept-encoding": "gzip, deflate, br",
-      "host": "api.bitbucket.org",
-      "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
-    },
-    "method": "GET",
-    "url": "https://api.bitbucket.org/2.0/repositories/golang/text",
-  },
-  Object {
-    "headers": Object {
-      "accept": "application/json",
-      "accept-encoding": "gzip, deflate, br",
-      "host": "api.bitbucket.org",
-      "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
-    },
-    "method": "GET",
-    "url": "https://api.bitbucket.org/2.0/repositories/golang/text/commits/master",
-  },
-]
-`;
+exports[`datasource/go/index getDigest support bitbucket digest 2`] = `Array []`;
diff --git a/lib/datasource/go/base.ts b/lib/datasource/go/base.ts
index 3b84220bab..1dfc69c12f 100644
--- a/lib/datasource/go/base.ts
+++ b/lib/datasource/go/base.ts
@@ -5,9 +5,9 @@ import * as hostRules from '../../util/host-rules';
 import { Http } from '../../util/http';
 import { regEx } from '../../util/regex';
 import { trimTrailingSlash } from '../../util/url';
+import { BitBucketTagsDatasource } from '../bitbucket-tags';
 import * as github from '../github-tags';
 import { GitlabTagsDatasource } from '../gitlab-tags';
-import { bitbucket } from './common';
 import type { DataSource } from './types';
 
 // TODO: figure out class hierarchy (#10532)
@@ -47,7 +47,7 @@ export class BaseGoDatasource {
       const split = goModule.split('/');
       const lookupName = split[1] + '/' + split[2];
       return {
-        datasource: bitbucket.id,
+        datasource: BitBucketTagsDatasource.id,
         lookupName,
         registryUrl: 'https://bitbucket.org',
       };
diff --git a/lib/datasource/go/common.ts b/lib/datasource/go/common.ts
index 3a81f223c8..335d4ef952 100644
--- a/lib/datasource/go/common.ts
+++ b/lib/datasource/go/common.ts
@@ -6,8 +6,6 @@ import { getSourceUrl as gitlabSourceUrl } from '../gitlab-tags/util';
 
 import type { DataSource } from './types';
 
-export const bitbucket = new BitBucketTagsDatasource();
-
 // eslint-disable-next-line typescript-enum/no-enum
 export enum GoproxyFallback {
   WhenNotFoundOrGone = ',',
@@ -26,7 +24,7 @@ export function getSourceUrl(dataSource?: DataSource): string | undefined {
       return gitlabSourceUrl(lookupName, registryUrl);
     }
 
-    if (datasource === bitbucket.id) {
+    if (datasource === BitBucketTagsDatasource.id) {
       return BitBucketTagsDatasource.getSourceUrl(lookupName, registryUrl);
     }
   }
diff --git a/lib/datasource/go/index.spec.ts b/lib/datasource/go/index.spec.ts
index ce2348f934..b9020f5b08 100644
--- a/lib/datasource/go/index.spec.ts
+++ b/lib/datasource/go/index.spec.ts
@@ -8,12 +8,16 @@ const hostRules = mocked(_hostRules);
 
 const getReleasesDirectMock = jest.fn();
 const getDigestGitlabMock = jest.fn();
+const getDigestBitbucketMock = jest.fn();
 jest.mock('./releases-direct', () => {
   return {
     GoDirectDatasource: jest.fn().mockImplementation(() => ({
       gitlab: {
         getDigest: () => getDigestGitlabMock(),
       },
+      bitbucket: {
+        getDigest: () => getDigestBitbucketMock(),
+      },
       getReleases: () => getReleasesDirectMock(),
     })),
   };
@@ -152,23 +156,7 @@ describe('datasource/go/index', () => {
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
     it('support bitbucket digest', async () => {
-      httpMock
-        .scope('https://api.bitbucket.org')
-        .get('/2.0/repositories/golang/text')
-        .reply(200, { mainbranch: { name: 'master' } });
-      httpMock
-        .scope('https://api.bitbucket.org')
-        .get('/2.0/repositories/golang/text/commits/master')
-        .reply(200, {
-          pagelen: 1,
-          values: [
-            {
-              hash: '123',
-              date: '2020-11-19T09:05:35+00:00',
-            },
-          ],
-          page: 1,
-        });
+      getDigestBitbucketMock.mockResolvedValueOnce('123');
       const res = await datasource.getDigest(
         {
           lookupName: 'bitbucket.org/golang/text',
diff --git a/lib/datasource/go/index.ts b/lib/datasource/go/index.ts
index d7ba8e3bb0..7ae6da4560 100644
--- a/lib/datasource/go/index.ts
+++ b/lib/datasource/go/index.ts
@@ -1,10 +1,10 @@
 import { cache } from '../../util/cache/package/decorator';
+import { BitBucketTagsDatasource } from '../bitbucket-tags';
 import { Datasource } from '../datasource';
 import * as github from '../github-tags';
 import { GitlabTagsDatasource } from '../gitlab-tags';
 import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types';
 import { BaseGoDatasource } from './base';
-import { bitbucket } from './common';
 import { GoDirectDatasource } from './releases-direct';
 import { GoProxyDatasource } from './releases-goproxy';
 
@@ -60,8 +60,8 @@ export class GoDatasource extends Datasource {
       case github.id: {
         return github.getDigest(source, tag);
       }
-      case bitbucket.id: {
-        return bitbucket.getDigest(source, tag);
+      case BitBucketTagsDatasource.id: {
+        return this.direct.bitbucket.getDigest(source, tag);
       }
       case GitlabTagsDatasource.id: {
         return this.direct.gitlab.getDigest(source, tag);
diff --git a/lib/datasource/go/releases-direct.ts b/lib/datasource/go/releases-direct.ts
index bdce22d9ff..71e9089bcf 100644
--- a/lib/datasource/go/releases-direct.ts
+++ b/lib/datasource/go/releases-direct.ts
@@ -1,21 +1,24 @@
 import { logger } from '../../logger';
 import { cache } from '../../util/cache/package/decorator';
 import { regEx } from '../../util/regex';
+import { BitBucketTagsDatasource } from '../bitbucket-tags';
 import { Datasource } from '../datasource';
 import * as github from '../github-tags';
 import { GitlabTagsDatasource } from '../gitlab-tags';
 import type { DatasourceApi, GetReleasesConfig, ReleaseResult } from '../types';
 import { BaseGoDatasource } from './base';
-import { bitbucket, getSourceUrl } from './common';
+import { getSourceUrl } from './common';
 
 export class GoDirectDatasource extends Datasource {
   static readonly id = 'go-direct';
 
   gitlab: DatasourceApi;
+  bitbucket: DatasourceApi;
 
   constructor() {
     super(GoDirectDatasource.id);
     this.gitlab = new GitlabTagsDatasource();
+    this.bitbucket = new BitBucketTagsDatasource();
   }
 
   /**
@@ -58,8 +61,8 @@ export class GoDirectDatasource extends Datasource {
         res = await this.gitlab.getReleases(source);
         break;
       }
-      case bitbucket.id: {
-        res = await bitbucket.getReleases(source);
+      case BitBucketTagsDatasource.id: {
+        res = await this.bitbucket.getReleases(source);
         break;
       }
       /* istanbul ignore next: can never happen, makes lint happy */
-- 
GitLab