From 1b28501d30fefa502235b886518133f998db4ea0 Mon Sep 17 00:00:00 2001
From: scemily13 <68038396+scemily13@users.noreply.github.com>
Date: Sun, 22 May 2022 00:42:08 -0400
Subject: [PATCH] fix(buildkite): Catch '?' yaml syntax for plugins (#15666)

---
 .../manager/buildkite/__fixtures__/pipeline8.yml      |  4 ++++
 lib/modules/manager/buildkite/extract.spec.ts         | 11 +++++++++++
 lib/modules/manager/buildkite/extract.ts              |  2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)
 create mode 100644 lib/modules/manager/buildkite/__fixtures__/pipeline8.yml

diff --git a/lib/modules/manager/buildkite/__fixtures__/pipeline8.yml b/lib/modules/manager/buildkite/__fixtures__/pipeline8.yml
new file mode 100644
index 0000000000..a5d57559c6
--- /dev/null
+++ b/lib/modules/manager/buildkite/__fixtures__/pipeline8.yml
@@ -0,0 +1,4 @@
+steps:
+  - plugins:
+      - ? ssh://git@github.company.com/some-org/some-plugin.git#v3.2.7
+        : enforce_peer_deps: false
diff --git a/lib/modules/manager/buildkite/extract.spec.ts b/lib/modules/manager/buildkite/extract.spec.ts
index 234a8a9bb1..5ab5f64322 100644
--- a/lib/modules/manager/buildkite/extract.spec.ts
+++ b/lib/modules/manager/buildkite/extract.spec.ts
@@ -60,5 +60,16 @@ describe('modules/manager/buildkite/extract', () => {
       };
       expect(res).toEqual([expectedPackageDependency]);
     });
+
+    it('extracts plugin with preceding ?', () => {
+      const res = extractPackageFile(Fixtures.get('pipeline8.yml'))?.deps;
+      const expectedPackageDependency: PackageDependency = {
+        currentValue: 'v3.2.7',
+        datasource: 'github-tags',
+        depName: 'some-org/some-plugin',
+        registryUrls: ['https://github.company.com'],
+      };
+      expect(res).toEqual([expectedPackageDependency]);
+    });
   });
 });
diff --git a/lib/modules/manager/buildkite/extract.ts b/lib/modules/manager/buildkite/extract.ts
index 83131c4487..3a6c63c108 100644
--- a/lib/modules/manager/buildkite/extract.ts
+++ b/lib/modules/manager/buildkite/extract.ts
@@ -13,7 +13,7 @@ export function extractPackageFile(content: string): PackageFile | null {
     for (const line of lines) {
       // Search each line for plugin names
       const depLineMatch = regEx(
-        /^[\s-]*(?<depName>[^#\s]+)#(?<currentValue>[^:]+)/
+        /^\s*(?:-\s+(?:\?\s+)?)?(?<depName>[^#\s]+)#(?<currentValue>[^:]+)/
       ).exec(line);
 
       if (depLineMatch?.groups) {
-- 
GitLab