From addfd4ef837f471b44eadb1e34a89083e0b4edb8 Mon Sep 17 00:00:00 2001
From: Samuel Bodin <samuel.bodin@algolia.com>
Date: Mon, 31 Aug 2020 14:21:08 +0200
Subject: [PATCH] fix(circleci): leading dash is optional (#7143)

---
 lib/manager/circleci/__fixtures__/config3.yml | 20 ++++++++++++++
 .../__snapshots__/extract.spec.ts.snap        | 26 +++++++++++++++++++
 lib/manager/circleci/extract.spec.ts          |  8 ++++++
 lib/manager/circleci/extract.ts               |  2 +-
 4 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100644 lib/manager/circleci/__fixtures__/config3.yml

diff --git a/lib/manager/circleci/__fixtures__/config3.yml b/lib/manager/circleci/__fixtures__/config3.yml
new file mode 100644
index 0000000000..307ade4d7f
--- /dev/null
+++ b/lib/manager/circleci/__fixtures__/config3.yml
@@ -0,0 +1,20 @@
+aliases:  
+  - &nodejs
+    image: cimg/node:14.8.0
+
+version: 2
+jobs:
+  checkout: 
+    <<: *defaults
+    docker:
+      - *nodejs
+    steps:
+      - run: yarn build:runtime
+
+  release_docker:
+    <<: *defaults
+    machine:
+      image: ubuntu-1604:201903-01
+      docker_layer_caching: true
+    steps:
+      - run: ./scripts.sh
diff --git a/lib/manager/circleci/__snapshots__/extract.spec.ts.snap b/lib/manager/circleci/__snapshots__/extract.spec.ts.snap
index dafe4d2675..f5995278cb 100644
--- a/lib/manager/circleci/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/circleci/__snapshots__/extract.spec.ts.snap
@@ -1,5 +1,31 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`lib/manager/circleci/extract extractPackageFile() extracts image without leading dash 1`] = `
+Array [
+  Object {
+    "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
+    "commitMessageTopic": "Node.js",
+    "currentDigest": undefined,
+    "currentValue": "14.8.0",
+    "datasource": "docker",
+    "depName": "cimg/node",
+    "depType": "docker",
+    "replaceString": "cimg/node:14.8.0",
+    "versioning": "docker",
+  },
+  Object {
+    "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
+    "currentDigest": undefined,
+    "currentValue": "201903-01",
+    "datasource": "docker",
+    "depName": "ubuntu-1604",
+    "depType": "docker",
+    "replaceString": "ubuntu-1604:201903-01",
+    "versioning": "docker",
+  },
+]
+`;
+
 exports[`lib/manager/circleci/extract extractPackageFile() extracts multiple image lines 1`] = `
 Array [
   Object {
diff --git a/lib/manager/circleci/extract.spec.ts b/lib/manager/circleci/extract.spec.ts
index 949821fddb..a08517f43e 100644
--- a/lib/manager/circleci/extract.spec.ts
+++ b/lib/manager/circleci/extract.spec.ts
@@ -9,6 +9,10 @@ const file2 = readFileSync(
   'lib/manager/circleci/__fixtures__/config2.yml',
   'utf8'
 );
+const file3 = readFileSync(
+  'lib/manager/circleci/__fixtures__/config3.yml',
+  'utf8'
+);
 
 describe('lib/manager/circleci/extract', () => {
   describe('extractPackageFile()', () => {
@@ -25,5 +29,9 @@ describe('lib/manager/circleci/extract', () => {
       expect(res.deps).toMatchSnapshot();
       // expect(res.deps).toHaveLength(4);
     });
+    it('extracts image without leading dash', () => {
+      const res = extractPackageFile(file3);
+      expect(res.deps).toMatchSnapshot();
+    });
   });
 });
diff --git a/lib/manager/circleci/extract.ts b/lib/manager/circleci/extract.ts
index 1b091140e7..c94acb7426 100644
--- a/lib/manager/circleci/extract.ts
+++ b/lib/manager/circleci/extract.ts
@@ -39,7 +39,7 @@ export function extractPackageFile(content: string): PackageFile | null {
           }
         } while (foundOrb);
       }
-      const match = /^\s*- image:\s*'?"?([^\s'"]+)'?"?\s*$/.exec(line);
+      const match = /^\s*-? image:\s*'?"?([^\s'"]+)'?"?\s*$/.exec(line);
       if (match) {
         const currentFrom = match[1];
         const dep = getDep(currentFrom);
-- 
GitLab