From 5e7844fb8109ebe1b1b78f9ece34498527e45ffe Mon Sep 17 00:00:00 2001 From: Maxime Brunet <max@brnt.mx> Date: Wed, 12 Oct 2022 23:53:02 -0700 Subject: [PATCH] feat(jsonnet-bundler)!: Use absolute import format for depName (#14525) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use absolute import format for depName in jsonnet-bundler. Closes #13568 BREAKING CHANGE: `depName` now uses the "absolute import" format (e.g. `bar` → `github.com/foo/bar/baz-wow`) --- .../__snapshots__/extract.spec.ts.snap | 6 ++--- .../manager/jsonnet-bundler/artifacts.spec.ts | 4 +-- .../manager/jsonnet-bundler/extract.spec.ts | 27 ++++++++++++++++--- .../manager/jsonnet-bundler/extract.ts | 22 +++++++++------ 4 files changed, 43 insertions(+), 16 deletions(-) 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 7961011859..638ef47fdf 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 b0910faa26..6a0a5f83f9 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 43d69003d5..9e130501bc 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 0907faff28..167327910c 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 }, -- GitLab