diff --git a/lib/modules/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap index 796101185981ee5a5f57b4028edc5510b3a172a5..638ef47fdf07a754b5029d831efdad48a545852d 100644 --- a/lib/modules/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap @@ -5,7 +5,7 @@ exports[`modules/manager/jsonnet-bundler/extract extractPackageFile() extracts d "deps": [ { "currentValue": "v0.50.0", - "depName": "prometheus-operator", + "depName": "github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator", "managerData": { "subdir": "jsonnet/prometheus-operator", }, @@ -13,7 +13,7 @@ exports[`modules/manager/jsonnet-bundler/extract extractPackageFile() extracts d }, { "currentValue": "v0.9.0", - "depName": "kube-prometheus", + "depName": "github.com/prometheus-operator/kube-prometheus/jsonnet/kube-prometheus", "managerData": { "subdir": "jsonnet/kube-prometheus", }, @@ -28,7 +28,7 @@ exports[`modules/manager/jsonnet-bundler/extract extractPackageFile() extracts d "deps": [ { "currentValue": "v0.50.0", - "depName": "prometheus-operator-mixin", + "depName": "github.com/prometheus-operator/prometheus-operator/jsonnet/mixin", "managerData": { "subdir": "jsonnet/mixin", }, diff --git a/lib/modules/manager/jsonnet-bundler/artifacts.spec.ts b/lib/modules/manager/jsonnet-bundler/artifacts.spec.ts index b0910faa2673ec631700bf0cb4f5b237692e8102..6a0a5f83f9a533812ee9c51aa41491d0a36f4793 100644 --- a/lib/modules/manager/jsonnet-bundler/artifacts.spec.ts +++ b/lib/modules/manager/jsonnet-bundler/artifacts.spec.ts @@ -82,11 +82,11 @@ describe('modules/manager/jsonnet-bundler/artifacts', () => { packageFileName: 'jsonnetfile.json', updatedDeps: [ { - depName: 'foo', + depName: 'github.com/foo/foo', packageName: 'https://github.com/foo/foo.git', }, { - depName: 'foo', + depName: 'github.com/foo/foo', packageName: 'ssh://git@github.com/foo/foo.git', managerData: { subdir: 'bar', diff --git a/lib/modules/manager/jsonnet-bundler/extract.spec.ts b/lib/modules/manager/jsonnet-bundler/extract.spec.ts index 43d69003d5530b9854456570efb35539d6295318..9e130501bc248b92dbfc2ac45e05106b208055d7 100644 --- a/lib/modules/manager/jsonnet-bundler/extract.spec.ts +++ b/lib/modules/manager/jsonnet-bundler/extract.spec.ts @@ -9,6 +9,15 @@ const jsonnetfileNoDependencies = Fixtures.get( const jsonnetfileLocalDependencies = Fixtures.get( 'jsonnetfile-local-dependencies.json' ); +const jsonnetfileEmptyGitSource = JSON.stringify({ + version: 1, + dependencies: [ + { + source: { git: {} }, + version: 'v0.50.0', + }, + ], +}); describe('modules/manager/jsonnet-bundler/extract', () => { describe('extractPackageFile()', () => { @@ -36,18 +45,29 @@ describe('modules/manager/jsonnet-bundler/extract', () => { ).toBeNull(); }); + it('returns null for dependencies with empty Git source', () => { + expect( + extractPackageFile( + jsonnetfileEmptyGitSource, + 'jsonnetfile-empty-git-source.json' + ) + ).toBeNull(); + }); + it('extracts dependency', () => { const res = extractPackageFile(jsonnetfile, 'jsonnetfile.json'); expect(res).toMatchSnapshot({ deps: [ { - depName: 'prometheus-operator', + depName: + 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator', packageName: 'https://github.com/prometheus-operator/prometheus-operator.git', currentValue: 'v0.50.0', }, { - depName: 'kube-prometheus', + depName: + 'github.com/prometheus-operator/kube-prometheus/jsonnet/kube-prometheus', packageName: 'ssh://git@github.com/prometheus-operator/kube-prometheus.git', currentValue: 'v0.9.0', @@ -61,7 +81,8 @@ describe('modules/manager/jsonnet-bundler/extract', () => { expect(res).toMatchSnapshot({ deps: [ { - depName: 'prometheus-operator-mixin', + depName: + 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin', packageName: 'https://github.com/prometheus-operator/prometheus-operator', currentValue: 'v0.50.0', diff --git a/lib/modules/manager/jsonnet-bundler/extract.ts b/lib/modules/manager/jsonnet-bundler/extract.ts index 0907faff28cbc78ffb1baf8a0555d735c5dac508..167327910cb54e646b54f6423ddf8e9b8d39d34d 100644 --- a/lib/modules/manager/jsonnet-bundler/extract.ts +++ b/lib/modules/manager/jsonnet-bundler/extract.ts @@ -1,13 +1,10 @@ +import { join } from 'upath'; import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; -import { regEx } from '../../../util/regex'; +import { parseUrl } from '../../../util/url'; import type { PackageDependency, PackageFile } from '../types'; import type { Dependency, JsonnetFile } from './types'; -const gitUrl = regEx( - /(ssh:\/\/git@|https:\/\/)([\w.]+)\/([\w:/\-~]*)\/(?<depName>[\w:/-]+)(\.git)?/ -); - export function extractPackageFile( content: string, packageFile: string @@ -46,11 +43,20 @@ function extractDependency(dependency: Dependency): PackageDependency | null { return null; } - const match = gitUrl.exec(dependency.source.git.remote); + const gitRemote = parseUrl(dependency.source.git.remote); + if (gitRemote === null) { + logger.debug({ dependency }, 'Invalid Git remote URL'); + return null; + } + + const depName = join( + gitRemote.host, + gitRemote.pathname.replace(/\.git$/, ''), + dependency.source.git.subdir + ); return { - depName: - dependency.name ?? match?.groups?.depName ?? dependency.source.git.remote, + depName, packageName: dependency.source.git.remote, currentValue: dependency.version, managerData: { subdir: dependency.source.git.subdir },