From 397dda5bd0a2730edb3e0c31765c12f0e06ad059 Mon Sep 17 00:00:00 2001
From: Yun Lai <lyonlai1984@gmail.com>
Date: Fri, 15 Mar 2024 19:51:23 +1100
Subject: [PATCH] feat: allow packageScope in template compilation and add
 packageScope in maven datasource (#27925)

Co-authored-by: Rhys Arkins <rhys@arkins.net>
---
 .../datasource/clojure/__snapshots__/index.spec.ts.snap     | 4 ++++
 .../datasource/maven/__snapshots__/index.spec.ts.snap       | 6 ++++++
 lib/modules/datasource/maven/index.spec.ts                  | 4 ++++
 lib/modules/datasource/maven/util.ts                        | 5 +++++
 lib/modules/datasource/types.ts                             | 1 +
 lib/util/template/index.ts                                  | 1 +
 lib/workers/repository/process/lookup/index.ts              | 1 +
 7 files changed, 22 insertions(+)

diff --git a/lib/modules/datasource/clojure/__snapshots__/index.spec.ts.snap b/lib/modules/datasource/clojure/__snapshots__/index.spec.ts.snap
index 54e15f3e17..483eac0146 100644
--- a/lib/modules/datasource/clojure/__snapshots__/index.spec.ts.snap
+++ b/lib/modules/datasource/clojure/__snapshots__/index.spec.ts.snap
@@ -6,6 +6,7 @@ exports[`modules/datasource/clojure/index falls back to next registry url 1`] =
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://clojars.org/repo",
   "releases": [
     {
@@ -53,6 +54,7 @@ exports[`modules/datasource/clojure/index returns releases from custom repositor
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://custom.registry.renovatebot.com",
   "releases": [
     {
@@ -80,6 +82,7 @@ exports[`modules/datasource/clojure/index skips registry with invalid XML 1`] =
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://clojars.org/repo",
   "releases": [
     {
@@ -107,6 +110,7 @@ exports[`modules/datasource/clojure/index skips registry with invalid metadata s
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://clojars.org/repo",
   "releases": [
     {
diff --git a/lib/modules/datasource/maven/__snapshots__/index.spec.ts.snap b/lib/modules/datasource/maven/__snapshots__/index.spec.ts.snap
index bdc86e88e0..d6ca5371d2 100644
--- a/lib/modules/datasource/maven/__snapshots__/index.spec.ts.snap
+++ b/lib/modules/datasource/maven/__snapshots__/index.spec.ts.snap
@@ -6,6 +6,7 @@ exports[`modules/datasource/maven/index falls back to next registry url 1`] = `
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://repo.maven.apache.org/maven2",
   "releases": [
     {
@@ -53,6 +54,7 @@ exports[`modules/datasource/maven/index removes authentication header after redi
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://frontend_for_private_s3_repository/maven2",
   "releases": [
     {
@@ -89,6 +91,7 @@ exports[`modules/datasource/maven/index returns releases 1`] = `
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://repo.maven.apache.org/maven2",
   "releases": [
     {
@@ -116,6 +119,7 @@ exports[`modules/datasource/maven/index returns releases from custom repository
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://custom.registry.renovatebot.com",
   "releases": [
     {
@@ -143,6 +147,7 @@ exports[`modules/datasource/maven/index skips registry with invalid XML 1`] = `
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://repo.maven.apache.org/maven2",
   "releases": [
     {
@@ -170,6 +175,7 @@ exports[`modules/datasource/maven/index skips registry with invalid metadata str
   "group": "org.example",
   "homepage": "https://package.example.org/about",
   "name": "package",
+  "packageScope": "org.example",
   "registryUrl": "https://repo.maven.apache.org/maven2",
   "releases": [
     {
diff --git a/lib/modules/datasource/maven/index.spec.ts b/lib/modules/datasource/maven/index.spec.ts
index f0d931a336..d51f6f1f02 100644
--- a/lib/modules/datasource/maven/index.spec.ts
+++ b/lib/modules/datasource/maven/index.spec.ts
@@ -240,6 +240,7 @@ describe('modules/datasource/maven/index', () => {
       group: 'org.example',
       homepage: 'https://package.example.org/about',
       name: 'package',
+      packageScope: 'org.example',
       registryUrl: 'https://repo.maven.apache.org/maven2',
       releases: [
         {
@@ -268,6 +269,7 @@ describe('modules/datasource/maven/index', () => {
       group: 'org.example',
       homepage: 'https://package.example.org/about',
       name: 'package',
+      packageScope: 'org.example',
       registryUrl: 'https://repo.maven.apache.org/maven2',
       releases: [
         { version: '1.0.0', releaseTimestamp: '2021-02-22T14:43:00.000Z' },
@@ -484,6 +486,7 @@ describe('modules/datasource/maven/index', () => {
       group: 'org.example',
       homepage: 'https://package.example.org/about',
       name: 'package',
+      packageScope: 'org.example',
       registryUrl:
         'artifactregistry://maven.pkg.dev/some-project/some-repository',
       releases: [
@@ -535,6 +538,7 @@ describe('modules/datasource/maven/index', () => {
       group: 'org.example',
       homepage: 'https://package.example.org/about',
       name: 'package',
+      packageScope: 'org.example',
       registryUrl:
         'artifactregistry://maven.pkg.dev/some-project/some-repository',
       releases: [
diff --git a/lib/modules/datasource/maven/util.ts b/lib/modules/datasource/maven/util.ts
index 072699cc2c..f45d48e4bd 100644
--- a/lib/modules/datasource/maven/util.ts
+++ b/lib/modules/datasource/maven/util.ts
@@ -449,6 +449,11 @@ export async function getDependencyInfo(
     }
   }
 
+  const groupId = pomContent.valueWithPath('groupId');
+  if (groupId) {
+    result.packageScope = groupId;
+  }
+
   const parent = pomContent.childNamed('parent');
   if (recursionLimit > 0 && parent && (!result.sourceUrl || !result.homepage)) {
     // if we found a parent and are missing some information
diff --git a/lib/modules/datasource/types.ts b/lib/modules/datasource/types.ts
index c08a04ae3f..196d933565 100644
--- a/lib/modules/datasource/types.ts
+++ b/lib/modules/datasource/types.ts
@@ -87,6 +87,7 @@ export interface ReleaseResult {
   replacementName?: string;
   replacementVersion?: string;
   lookupName?: string;
+  packageScope?: string;
 }
 
 export type RegistryStrategy = 'first' | 'hunt' | 'merge';
diff --git a/lib/util/template/index.ts b/lib/util/template/index.ts
index 66ff1847ed..b70864e22f 100644
--- a/lib/util/template/index.ts
+++ b/lib/util/template/index.ts
@@ -123,6 +123,7 @@ export const allowedFields = {
   packageFileDir:
     'The directory with full path where the packageFile was found',
   packageName: 'The full name that was used to look up the dependency',
+  packageScope: 'The scope of the package name. Supports Maven group ID only',
   parentDir:
     'The name of the directory that the dependency was found in, without full path',
   platform: 'VCS platform in use, e.g. "github", "gitlab", etc.',
diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts
index 51ac22891d..d6c7cc5c73 100644
--- a/lib/workers/repository/process/lookup/index.ts
+++ b/lib/workers/repository/process/lookup/index.ts
@@ -165,6 +165,7 @@ export async function lookupUpdates(
         'changelogUrl',
         'dependencyUrl',
         'lookupName',
+        'packageScope',
       ]);
 
       const latestVersion = dependency.tags?.latest;
-- 
GitLab