From 515cec28cbf3a05a35920a98d02314bc71f5047a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maximilian=20Ga=C3=9F?= <mxey@mxey.net>
Date: Mon, 27 Aug 2018 13:16:51 +0200
Subject: [PATCH] fix(kubernetes): support image line in a YAML array (#2434)

Renovate did not recognize images where "image" was the first key in the YAML mapping inside the YAMl container list/array
---
 lib/manager/kubernetes/extract.js             |  2 +-
 test/_fixtures/kubernetes/array-syntax.yaml   | 16 ++++++++++++++++
 .../__snapshots__/extract.spec.js.snap        | 19 +++++++++++++++++++
 test/manager/kubernetes/extract.spec.js       | 10 ++++++++++
 4 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 test/_fixtures/kubernetes/array-syntax.yaml

diff --git a/lib/manager/kubernetes/extract.js b/lib/manager/kubernetes/extract.js
index ec22aa478e..a1dc5d09d1 100644
--- a/lib/manager/kubernetes/extract.js
+++ b/lib/manager/kubernetes/extract.js
@@ -16,7 +16,7 @@ function extractDependencies(content) {
   }
 
   for (const line of content.split('\n')) {
-    const match = line.match(/^\s*image:\s*'?"?([^\s'"]+)'?"?\s*$/);
+    const match = line.match(/^\s*-?\s*image:\s*'?"?([^\s'"]+)'?"?\s*$/);
     if (match) {
       const currentFrom = match[1];
       const dep = getDep(currentFrom);
diff --git a/test/_fixtures/kubernetes/array-syntax.yaml b/test/_fixtures/kubernetes/array-syntax.yaml
new file mode 100644
index 0000000000..6118eed28e
--- /dev/null
+++ b/test/_fixtures/kubernetes/array-syntax.yaml
@@ -0,0 +1,16 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+  name: local-volume-provisioner
+  namespace: kube-system
+  labels:
+    app: local-volume-provisioner
+spec:
+  selector:
+    matchLabels:
+      app: local-volume-provisioner
+  template:
+    spec:
+      containers:
+      - image: "quay.io/external_storage/local-volume-provisioner:v2.1.0"
+        name: provisioner
diff --git a/test/manager/kubernetes/__snapshots__/extract.spec.js.snap b/test/manager/kubernetes/__snapshots__/extract.spec.js.snap
index c19e2109f6..0e7de06d55 100644
--- a/test/manager/kubernetes/__snapshots__/extract.spec.js.snap
+++ b/test/manager/kubernetes/__snapshots__/extract.spec.js.snap
@@ -1,5 +1,24 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`lib/manager/kubernetes/extract extractDependencies() extracts image line in a YAML array 1`] = `
+Array [
+  Object {
+    "currentDepTag": "external_storage/local-volume-provisioner:v2.1.0",
+    "currentDepTagDigest": "external_storage/local-volume-provisioner:v2.1.0",
+    "currentDigest": undefined,
+    "currentFrom": "quay.io/external_storage/local-volume-provisioner:v2.1.0",
+    "currentTag": "v2.1.0",
+    "currentValue": "v2.1.0",
+    "depName": "external_storage/local-volume-provisioner",
+    "dockerRegistry": "quay.io",
+    "lineNumber": 14,
+    "purl": "pkg:docker/external_storage/local-volume-provisioner?registry=quay.io",
+    "tagSuffix": undefined,
+    "versionScheme": "docker",
+  },
+]
+`;
+
 exports[`lib/manager/kubernetes/extract extractDependencies() extracts multiple image lines 1`] = `
 Array [
   Object {
diff --git a/test/manager/kubernetes/extract.spec.js b/test/manager/kubernetes/extract.spec.js
index ef99c9a8d5..de28f6743c 100644
--- a/test/manager/kubernetes/extract.spec.js
+++ b/test/manager/kubernetes/extract.spec.js
@@ -13,6 +13,11 @@ const kubernetesConfigMapFile = fs.readFileSync(
   'utf8'
 );
 
+const kubernetesArraySyntaxFile = fs.readFileSync(
+  'test/_fixtures/kubernetes/array-syntax.yaml',
+  'utf8'
+);
+
 const otherYamlFile = fs.readFileSync(
   'test/_fixtures/kubernetes/gitlab-ci.yaml',
   'utf8'
@@ -34,6 +39,11 @@ describe('lib/manager/kubernetes/extract', () => {
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(2);
     });
+    it('extracts image line in a YAML array', () => {
+      const res = extractDependencies(kubernetesArraySyntaxFile, config);
+      expect(res.deps).toMatchSnapshot();
+      expect(res.deps).toHaveLength(1);
+    });
     it('ignores non-Kubernetes YAML files', () => {
       expect(extractDependencies(otherYamlFile, config)).toBe(null);
     });
-- 
GitLab