From b1ffc66d8628c2e35ca17387a06e933417a6196b Mon Sep 17 00:00:00 2001
From: Mikko Piuhola <mikkopiu@users.noreply.github.com>
Date: Sun, 30 Apr 2023 18:07:48 +0300
Subject: [PATCH] fix(manager/gitlabci): support multi-line !reference tags
 (#21896)

---
 .../gitlabci/__fixtures__/gitlab-ci.reference.yaml    | 11 +++++++++++
 lib/modules/manager/gitlabci/utils.spec.ts            | 11 ++++++++++-
 lib/modules/manager/gitlabci/utils.ts                 |  2 +-
 3 files changed, 22 insertions(+), 2 deletions(-)
 create mode 100644 lib/modules/manager/gitlabci/__fixtures__/gitlab-ci.reference.yaml

diff --git a/lib/modules/manager/gitlabci/__fixtures__/gitlab-ci.reference.yaml b/lib/modules/manager/gitlabci/__fixtures__/gitlab-ci.reference.yaml
new file mode 100644
index 0000000000..3ceebb9778
--- /dev/null
+++ b/lib/modules/manager/gitlabci/__fixtures__/gitlab-ci.reference.yaml
@@ -0,0 +1,11 @@
+test:
+  script:
+    - !reference [.setup, script]
+    - !reference [arbitrary job name with space and no starting dot, nested1, nested2, nested3]
+    - !reference [
+      .multiline,
+      reference,
+    ]
+    - !reference [
+        .another, multilineref
+      ]
diff --git a/lib/modules/manager/gitlabci/utils.spec.ts b/lib/modules/manager/gitlabci/utils.spec.ts
index f68e151191..a52b8927c4 100644
--- a/lib/modules/manager/gitlabci/utils.spec.ts
+++ b/lib/modules/manager/gitlabci/utils.spec.ts
@@ -1,5 +1,6 @@
+import { Fixtures } from '../../../../test/fixtures';
 import type { PackageDependency } from '../types';
-import { getGitlabDep } from './utils';
+import { getGitlabDep, replaceReferenceTags } from './utils';
 
 describe('modules/manager/gitlabci/utils', () => {
   describe('getGitlabDep', () => {
@@ -81,4 +82,12 @@ describe('modules/manager/gitlabci/utils', () => {
       });
     });
   });
+
+  describe('replaceReferenceTags', () => {
+    it('replaces all !reference tags with empty strings', () => {
+      const yamlFileReferenceConfig = Fixtures.get('gitlab-ci.reference.yaml');
+      const replaced = replaceReferenceTags(yamlFileReferenceConfig);
+      expect(replaced).not.toContain('!reference');
+    });
+  });
 });
diff --git a/lib/modules/manager/gitlabci/utils.ts b/lib/modules/manager/gitlabci/utils.ts
index 15f094742b..13904a8d32 100644
--- a/lib/modules/manager/gitlabci/utils.ts
+++ b/lib/modules/manager/gitlabci/utils.ts
@@ -2,7 +2,7 @@ import { regEx } from '../../../util/regex';
 import { getDep } from '../dockerfile/extract';
 import type { PackageDependency } from '../types';
 
-const re = /!reference \[(.*?)\]/g;
+const re = /!reference \[[^\]]+\]/g;
 
 /**
  * Replaces GitLab reference tags before parsing, because our yaml parser cannot process them anyway.
-- 
GitLab