From 8a77914e864e6de1d6fd5f855cf63c813fc9791d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 29 Nov 2018 12:38:32 +0100
Subject: [PATCH] fix(buildkite): handle arrays

---
 lib/manager/buildkite/extract.js              |  2 +-
 .../__snapshots__/extract.spec.js.snap        | 21 +++++++++++++++++++
 test/manager/buildkite/extract.spec.js        |  9 ++++++++
 test/manager/buildkite/update.spec.js         | 13 ++++++++++++
 4 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/lib/manager/buildkite/extract.js b/lib/manager/buildkite/extract.js
index 013bb8fc6b..d6b6a53c3e 100644
--- a/lib/manager/buildkite/extract.js
+++ b/lib/manager/buildkite/extract.js
@@ -17,7 +17,7 @@ function extractPackageFile(content) {
         logger.trace(`Matched plugins on line ${lineNumber}`);
         const depLine = lines[lineNumber + 1];
         logger.debug(`serviceImageLine: "${depLine}"`);
-        const depLineMatch = depLine.match(/^\s+([^#]+)#([^:]+):/);
+        const depLineMatch = depLine.match(/^\s+(?:-\s+)?([^#]+)#([^:]+):/);
         if (depLineMatch) {
           logger.trace('depLineMatch');
           lineNumber += 1;
diff --git a/test/manager/buildkite/__snapshots__/extract.spec.js.snap b/test/manager/buildkite/__snapshots__/extract.spec.js.snap
index 048e3c120d..d28c474130 100644
--- a/test/manager/buildkite/__snapshots__/extract.spec.js.snap
+++ b/test/manager/buildkite/__snapshots__/extract.spec.js.snap
@@ -29,6 +29,27 @@ Array [
 ]
 `;
 
+exports[`lib/manager/buildkite/extract extractPackageFile() extracts arrays of plugins 1`] = `
+Array [
+  Object {
+    "currentValue": "v2.0.1",
+    "depName": "docker-login",
+    "lineNumber": 2,
+    "purl": "pkg:github/buildkite-plugins/docker-login-buildkite-plugin",
+    "skipReason": undefined,
+    "versionScheme": "semver",
+  },
+  Object {
+    "currentValue": "v2.0.1",
+    "depName": "docker-login",
+    "lineNumber": 10,
+    "purl": "pkg:github/buildkite-plugins/docker-login-buildkite-plugin",
+    "skipReason": undefined,
+    "versionScheme": "semver",
+  },
+]
+`;
+
 exports[`lib/manager/buildkite/extract extractPackageFile() extracts multiple plugins in same file 1`] = `
 Array [
   Object {
diff --git a/test/manager/buildkite/extract.spec.js b/test/manager/buildkite/extract.spec.js
index 95cd39326c..b18f3a150c 100644
--- a/test/manager/buildkite/extract.spec.js
+++ b/test/manager/buildkite/extract.spec.js
@@ -15,6 +15,10 @@ const pipeline3 = fs.readFileSync(
   'test/_fixtures/buildkite/pipeline3.yml',
   'utf8'
 );
+const pipeline4 = fs.readFileSync(
+  'test/_fixtures/buildkite/pipeline4.yml',
+  'utf8'
+);
 
 describe('lib/manager/buildkite/extract', () => {
   describe('extractPackageFile()', () => {
@@ -40,5 +44,10 @@ describe('lib/manager/buildkite/extract', () => {
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(3);
     });
+    it('extracts arrays of plugins', () => {
+      const res = extractPackageFile(pipeline4, config).deps;
+      expect(res).toMatchSnapshot();
+      expect(res).toHaveLength(2); // TODO: should be 4
+    });
   });
 });
diff --git a/test/manager/buildkite/update.spec.js b/test/manager/buildkite/update.spec.js
index fbd0143b64..648d3360cf 100644
--- a/test/manager/buildkite/update.spec.js
+++ b/test/manager/buildkite/update.spec.js
@@ -9,6 +9,10 @@ const pipeline2 = fs.readFileSync(
   'test/_fixtures/buildkite/pipeline2.yml',
   'utf8'
 );
+const pipeline4 = fs.readFileSync(
+  'test/_fixtures/buildkite/pipeline4.yml',
+  'utf8'
+);
 
 describe('manager/buildkite/update', () => {
   describe('updateDependency', () => {
@@ -21,6 +25,15 @@ describe('manager/buildkite/update', () => {
       expect(res).not.toEqual(pipeline1);
       expect(res.includes(upgrade.newValue)).toBe(true);
     });
+    it('replaces arrays', () => {
+      const upgrade = {
+        lineNumber: 10,
+        newValue: 'v2.2.0',
+      };
+      const res = bkUpdate.updateDependency(pipeline4, upgrade);
+      expect(res).not.toEqual(pipeline4);
+      expect(res.includes(upgrade.newValue)).toBe(true);
+    });
     it('replaces two values in one file', () => {
       const upgrade1 = {
         lineNumber: 4,
-- 
GitLab