From 6f4c38990400f2caea83172616d08027ede1f30f Mon Sep 17 00:00:00 2001
From: Peter Svensson <peter@sparetimecoders.com>
Date: Tue, 3 Oct 2023 12:08:17 +0200
Subject: [PATCH] feat: support extracting buildkite plugins from Bitbucket
 Cloud (#24980)

Co-authored-by: Rhys Arkins <rhys@arkins.net>
---
 .../buildkite/__fixtures__/pipeline9.yml        |  4 ++++
 lib/modules/manager/buildkite/extract.spec.ts   | 17 +++++++++++++++++
 lib/modules/manager/buildkite/extract.ts        |  8 +++++++-
 lib/modules/manager/buildkite/index.ts          |  6 +++++-
 4 files changed, 33 insertions(+), 2 deletions(-)
 create mode 100644 lib/modules/manager/buildkite/__fixtures__/pipeline9.yml

diff --git a/lib/modules/manager/buildkite/__fixtures__/pipeline9.yml b/lib/modules/manager/buildkite/__fixtures__/pipeline9.yml
new file mode 100644
index 0000000000..8baccb383c
--- /dev/null
+++ b/lib/modules/manager/buildkite/__fixtures__/pipeline9.yml
@@ -0,0 +1,4 @@
+steps:
+  - plugins:
+      - ssh://git@bitbucket.org/some-org/some-plugin.git#v3.2.7:
+      - docker-compose#v1.3.2:
diff --git a/lib/modules/manager/buildkite/extract.spec.ts b/lib/modules/manager/buildkite/extract.spec.ts
index 0edd3aada9..1fbcc9f105 100644
--- a/lib/modules/manager/buildkite/extract.spec.ts
+++ b/lib/modules/manager/buildkite/extract.spec.ts
@@ -71,5 +71,22 @@ describe('modules/manager/buildkite/extract', () => {
       };
       expect(res).toEqual([expectedPackageDependency]);
     });
+
+    it('extracts plugin tags from bitbucket', () => {
+      const res = extractPackageFile(Fixtures.get('pipeline9.yml'))?.deps;
+      const githubDependency: PackageDependency = {
+        currentValue: 'v1.3.2',
+        datasource: 'github-tags',
+        depName: 'docker-compose',
+        packageName: 'buildkite-plugins/docker-compose-buildkite-plugin',
+      };
+      const bitbucketDependency: PackageDependency = {
+        currentValue: 'v3.2.7',
+        datasource: 'bitbucket-tags',
+        depName: 'some-org/some-plugin',
+        registryUrls: ['https://bitbucket.org'],
+      };
+      expect(res).toEqual([bitbucketDependency, githubDependency]);
+    });
   });
 });
diff --git a/lib/modules/manager/buildkite/extract.ts b/lib/modules/manager/buildkite/extract.ts
index 220ba988df..87d0fdcc27 100644
--- a/lib/modules/manager/buildkite/extract.ts
+++ b/lib/modules/manager/buildkite/extract.ts
@@ -1,6 +1,7 @@
 import { logger } from '../../../logger';
 import type { SkipReason } from '../../../types';
 import { newlineRegex, regEx } from '../../../util/regex';
+import { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags';
 import { GithubTagsDatasource } from '../../datasource/github-tags';
 import { isVersion } from '../../versioning/semver';
 import type { PackageDependency, PackageFileContent } from '../types';
@@ -33,11 +34,16 @@ export function extractPackageFile(
           logger.debug('Examining git plugin');
           const { registry, gitPluginName } = gitPluginMatch.groups;
           const gitDepName = gitPluginName.replace(regEx('\\.git$'), '');
+
+          let datasource: string = GithubTagsDatasource.id;
+          if (registry === 'bitbucket.org') {
+            datasource = BitbucketTagsDatasource.id;
+          }
           const dep: PackageDependency = {
             depName: gitDepName,
             currentValue,
             registryUrls: ['https://' + registry],
-            datasource: GithubTagsDatasource.id,
+            datasource,
           };
           deps.push(dep);
           continue;
diff --git a/lib/modules/manager/buildkite/index.ts b/lib/modules/manager/buildkite/index.ts
index 1a2d2d784d..3714bd2ee6 100644
--- a/lib/modules/manager/buildkite/index.ts
+++ b/lib/modules/manager/buildkite/index.ts
@@ -1,4 +1,5 @@
 import type { Category } from '../../../constants';
+import { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags';
 import { GithubTagsDatasource } from '../../datasource/github-tags';
 import { extractPackageFile } from './extract';
 
@@ -13,4 +14,7 @@ export const defaultConfig = {
 
 export const categories: Category[] = ['ci'];
 
-export const supportedDatasources = [GithubTagsDatasource.id];
+export const supportedDatasources = [
+  GithubTagsDatasource.id,
+  BitbucketTagsDatasource.id,
+];
-- 
GitLab