From a45c5f3a3f32ee0d21140bd782ebe8d3514f83da Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Mon, 15 Mar 2021 07:11:46 +0100 Subject: [PATCH] refactor: remove git-submodules datasource (#9128) --- lib/datasource/api.ts | 2 - lib/datasource/git-submodules/index.spec.ts | 70 ------------------- lib/datasource/git-submodules/index.ts | 54 -------------- lib/manager/git-submodules/extract.spec.ts | 4 +- lib/manager/git-submodules/extract.ts | 12 ++-- lib/manager/git-submodules/update.ts | 2 +- lib/workers/branch/get-updated.spec.ts | 4 +- lib/workers/branch/get-updated.ts | 3 +- .../lookup/__snapshots__/index.spec.ts.snap | 6 +- .../repository/process/lookup/index.spec.ts | 18 +++-- .../repository/process/lookup/index.ts | 11 +-- 11 files changed, 28 insertions(+), 158 deletions(-) delete mode 100644 lib/datasource/git-submodules/index.spec.ts delete mode 100644 lib/datasource/git-submodules/index.ts diff --git a/lib/datasource/api.ts b/lib/datasource/api.ts index 3c212ed5f0..c7b07b8777 100644 --- a/lib/datasource/api.ts +++ b/lib/datasource/api.ts @@ -6,7 +6,6 @@ import * as dart from './dart'; import * as docker from './docker'; import * as galaxy from './galaxy'; import * as gitRefs from './git-refs'; -import * as gitSubmodules from './git-submodules'; import * as gitTags from './git-tags'; import * as githubReleases from './github-releases'; import * as githubTags from './github-tags'; @@ -43,7 +42,6 @@ api.set('dart', dart); api.set('docker', docker); api.set('galaxy', galaxy); api.set('git-refs', gitRefs); -api.set('git-submodules', gitSubmodules); api.set('git-tags', gitTags); api.set('github-releases', githubReleases); api.set('github-tags', githubTags); diff --git a/lib/datasource/git-submodules/index.spec.ts b/lib/datasource/git-submodules/index.spec.ts deleted file mode 100644 index da5b3b2c4d..0000000000 --- a/lib/datasource/git-submodules/index.spec.ts +++ /dev/null @@ -1,70 +0,0 @@ -import _simpleGit from 'simple-git'; -import { getPkgReleases } from '..'; -import { id as versioning } from '../../versioning/git'; -import { id as datasource, getDigest } from '.'; - -jest.mock('simple-git'); -const simpleGit: any = _simpleGit; - -const depName = 'https://github.com/example/example.git'; -const registryUrls = [depName, 'master']; - -describe('datasource/git-submoduless', () => { - describe('getReleases', () => { - it('returns null if response is wrong', async () => { - simpleGit.mockReturnValue({ - listRemote() { - return Promise.resolve(null); - }, - }); - const versions = await getPkgReleases({ - datasource, - versioning, - depName, - registryUrls, - }); - expect(versions).toBeNull(); - }); - it('returns null if remote call throws exception', async () => { - simpleGit.mockReturnValue({ - listRemote() { - throw new Error(); - }, - }); - const versions = await getPkgReleases({ - datasource, - versioning, - depName, - registryUrls, - }); - expect(versions).toBeNull(); - }); - it('returns versions filtered from tags', async () => { - simpleGit.mockReturnValue({ - listRemote() { - return Promise.resolve('commithash1\trefs/heads/master'); - }, - }); - - const versions = await getPkgReleases({ - datasource, - versioning, - depName, - registryUrls, - }); - const result = versions.releases.map((x) => x.version).sort(); - expect(result).toEqual(['commithash1']); - }); - }); - describe('getDigest', () => { - it('returns null if passed null', async () => { - const digest = await getDigest({}, null); - expect(digest).toBeNull(); - }); - it('returns value if passed value', async () => { - const commitHash = 'commithash1'; - const digest = await getDigest({}, commitHash); - expect(digest).toEqual(commitHash); - }); - }); -}); diff --git a/lib/datasource/git-submodules/index.ts b/lib/datasource/git-submodules/index.ts deleted file mode 100644 index 93b8996e32..0000000000 --- a/lib/datasource/git-submodules/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { URL } from 'url'; -import Git from 'simple-git'; - -import * as packageCache from '../../util/cache/package'; -import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types'; - -export const id = 'git-submodules'; - -export const defaultConfig = { - pinDigests: false, -}; - -export async function getReleases({ - lookupName, - registryUrls, -}: GetReleasesConfig): Promise<ReleaseResult | null> { - const cacheNamespace = 'datasource-git-submodules'; - const cacheKey = `${registryUrls[0]}-${registryUrls[1]}`; - const cachedResult = await packageCache.get<ReleaseResult>( - cacheNamespace, - cacheKey - ); - // istanbul ignore if - if (cachedResult) { - return cachedResult; - } - - const git = Git(); - const newHash = ( - await git.listRemote(['--refs', registryUrls[0], registryUrls[1]]) - ) - .trim() - .split(/\t/)[0]; - - const sourceUrl = new URL(registryUrls[0]); - sourceUrl.username = ''; - - const result = { - sourceUrl: sourceUrl.href, - releases: [ - { - version: newHash, - }, - ], - }; - const cacheMinutes = 60; - await packageCache.set(cacheNamespace, cacheKey, result, cacheMinutes); - return result; -} - -export const getDigest = ( - config: DigestConfig, - newValue?: string -): Promise<string> => Promise.resolve(newValue); diff --git a/lib/manager/git-submodules/extract.spec.ts b/lib/manager/git-submodules/extract.spec.ts index 41243f50a2..59cc242dd0 100644 --- a/lib/manager/git-submodules/extract.spec.ts +++ b/lib/manager/git-submodules/extract.spec.ts @@ -50,14 +50,14 @@ describe('lib/manager/gitsubmodules/extract', () => { ).toBeNull(); res = await extractPackageFile('', '.gitmodules.2', { localDir }); expect(res.deps).toHaveLength(1); - expect(res.deps[0].registryUrls[1]).toEqual('main'); + expect(res.deps[0].currentValue).toEqual('main'); res = await extractPackageFile('', '.gitmodules.3', { localDir }); expect(res.deps).toHaveLength(1); res = await extractPackageFile('', '.gitmodules.4', { localDir }); expect(res.deps).toHaveLength(1); res = await extractPackageFile('', '.gitmodules.5', { localDir }); expect(res.deps).toHaveLength(3); - expect(res.deps[2].registryUrls[0]).toEqual( + expect(res.deps[2].lookupName).toEqual( 'https://github.com/renovatebot/renovate-config.git' ); }); diff --git a/lib/manager/git-submodules/extract.ts b/lib/manager/git-submodules/extract.ts index 1db9535bd5..ee53dc5c70 100644 --- a/lib/manager/git-submodules/extract.ts +++ b/lib/manager/git-submodules/extract.ts @@ -1,7 +1,7 @@ import URL from 'url'; import Git, { SimpleGit } from 'simple-git'; import upath from 'upath'; -import * as datasourceGitSubmodules from '../../datasource/git-submodules'; +import * as datasourceGitRefs from '../../datasource/git-refs'; import { logger } from '../../logger'; import { getHttpUrl } from '../../util/git'; import * as hostRules from '../../util/host-rules'; @@ -105,7 +105,7 @@ export default async function extractPackageFile( await Promise.all( depNames.map(async ({ name, path }) => { try { - const [currentValue] = (await git.subModule(['status', path])) + const [currentDigest] = (await git.subModule(['status', path])) .trim() .replace(/^[-+]/, '') .split(/\s/); @@ -115,16 +115,16 @@ export default async function extractPackageFile( let httpSubModuleUrl = getHttpUrl(subModuleUrl); const hostRule = hostRules.find({ url: httpSubModuleUrl }); httpSubModuleUrl = getHttpUrl(subModuleUrl, hostRule?.token); - const submoduleBranch = await getBranch( + const currentValue = await getBranch( gitModulesPath, name, httpSubModuleUrl ); return { depName: path, - registryUrls: [httpSubModuleUrl, submoduleBranch], + lookupName: httpSubModuleUrl, currentValue, - currentDigest: currentValue, + currentDigest, }; } catch (err) /* istanbul ignore next */ { logger.warn( @@ -137,5 +137,5 @@ export default async function extractPackageFile( ) ).filter(Boolean); - return { deps, datasource: datasourceGitSubmodules.id }; + return { deps, datasource: datasourceGitRefs.id }; } diff --git a/lib/manager/git-submodules/update.ts b/lib/manager/git-submodules/update.ts index b1d1104cfc..f9694bf468 100644 --- a/lib/manager/git-submodules/update.ts +++ b/lib/manager/git-submodules/update.ts @@ -11,7 +11,7 @@ export default async function updateDependency({ try { await git.submoduleUpdate(['--init', upgrade.depName]); - await submoduleGit.checkout([upgrade.newVersion]); + await submoduleGit.checkout([upgrade.newDigest]); return fileContent; } catch (err) { return null; diff --git a/lib/workers/branch/get-updated.spec.ts b/lib/workers/branch/get-updated.spec.ts index feda05a09c..c02094f945 100644 --- a/lib/workers/branch/get-updated.spec.ts +++ b/lib/workers/branch/get-updated.spec.ts @@ -1,5 +1,5 @@ import { defaultConfig, git, mocked } from '../../../test/util'; -import * as datasourceGitSubmodules from '../../datasource/git-submodules'; +import * as datasourceGitRefs from '../../datasource/git-refs'; import * as _composer from '../../manager/composer'; import * as _gitSubmodules from '../../manager/git-submodules'; import * as _helmv3 from '../../manager/helmv3'; @@ -172,7 +172,7 @@ describe('workers/branch/get-updated', () => { it('handles git submodules', async () => { config.upgrades.push({ manager: 'git-submodules', - datasource: datasourceGitSubmodules.id, + datasource: datasourceGitRefs.id, } as never); gitSubmodules.updateDependency.mockResolvedValueOnce('existing content'); const res = await getUpdatedPackageFiles(config); diff --git a/lib/workers/branch/get-updated.ts b/lib/workers/branch/get-updated.ts index b3bc9d3f2d..069ec69b0d 100644 --- a/lib/workers/branch/get-updated.ts +++ b/lib/workers/branch/get-updated.ts @@ -1,6 +1,5 @@ import is from '@sindresorhus/is'; import { WORKER_FILE_UPDATE_FAILED } from '../../constants/error-messages'; -import * as datasourceGitSubmodules from '../../datasource/git-submodules'; import { logger } from '../../logger'; import { get } from '../../manager'; import type { ArtifactError } from '../../manager/types'; @@ -177,7 +176,7 @@ export async function getUpdatedPackageFiles( } if (newContent === packageFileContent) { // istanbul ignore else - if (upgrade.datasource === datasourceGitSubmodules.id) { + if (upgrade.manager === 'git-submodules') { updatedFileContents[packageFile] = newContent; } else if (upgrade.rangeStrategy === 'update-lockfile') { nonUpdatedFileContents[packageFile] = newContent; diff --git a/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap b/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap index c776eb437b..4949a7f74b 100644 --- a/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap +++ b/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap @@ -256,8 +256,10 @@ Object { "updates": Array [ Object { "currentVersion": undefined, - "newValue": "4b825dc642cb6eb9a060e54bf8d69288fbee4904", - "newVersion": "4b825dc642cb6eb9a060e54bf8d69288fbee4904", + "newDigest": "4b825dc642cb6eb9a060e54bf8d69288fbee4904", + "newDigestShort": "4b825dc", + "newValue": undefined, + "newVersion": undefined, "updateType": "digest", }, ], diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index 97f1b4a539..eb9c5d866f 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -10,8 +10,8 @@ import webpackJson from '../../../../config/npm/__fixtures__/webpack.json'; import { CONFIG_VALIDATION } from '../../../../constants/error-messages'; import * as datasourceDocker from '../../../../datasource/docker'; import { id as datasourceDockerId } from '../../../../datasource/docker'; -import * as datasourceGitSubmodules from '../../../../datasource/git-submodules'; -import { id as datasourceGitSubmodulesId } from '../../../../datasource/git-submodules'; +import * as datasourceGitRefs from '../../../../datasource/git-refs'; +import { id as datasourceGitRefsId } from '../../../../datasource/git-refs'; import * as datasourceGithubReleases from '../../../../datasource/github-releases'; import { id as datasourceGithubTagsId } from '../../../../datasource/github-tags'; import { id as datasourceNpmId } from '../../../../datasource/npm'; @@ -26,14 +26,14 @@ import type { LookupUpdateConfig } from './types'; import * as lookup from '.'; jest.mock('../../../../datasource/docker'); -jest.mock('../../../../datasource/git-submodules'); +jest.mock('../../../../datasource/git-refs'); jest.mock('../../../../datasource/github-releases'); qJson.latestVersion = '1.4.1'; const docker = mocked(datasourceDocker) as any; docker.defaultRegistryUrls = ['https://index.docker.io']; -const gitSubmodules = mocked(datasourceGitSubmodules); +const gitRefs = mocked(datasourceGitRefs); const githubReleases = mocked(datasourceGithubReleases); Object.assign(githubReleases, { defaultRegistryUrls: ['https://github.com'] }); @@ -1125,14 +1125,18 @@ describe('workers/repository/process/lookup', () => { it('handles git submodule update', async () => { config.depName = 'some-path'; config.versioning = gitVersioningId; - config.datasource = datasourceGitSubmodulesId; - gitSubmodules.getReleases.mockResolvedValueOnce({ + config.datasource = datasourceGitRefsId; + config.currentDigest = 'some-digest'; + gitRefs.getReleases.mockResolvedValueOnce({ releases: [ { - version: '4b825dc642cb6eb9a060e54bf8d69288fbee4904', + version: 'master', }, ], }); + gitRefs.getDigest.mockResolvedValueOnce( + '4b825dc642cb6eb9a060e54bf8d69288fbee4904' + ); const res = await lookup.lookupUpdates(config); expect(res).toMatchSnapshot(); }); diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index 7b3579f15c..0c5e6c69f6 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -7,7 +7,6 @@ import { isGetPkgReleasesConfig, supportsDigests, } from '../../../../datasource'; -import * as datasourceGitSubmodules from '../../../../datasource/git-submodules'; import { logger } from '../../../../logger'; import { getRangeStrategy } from '../../../../manager'; import type { LookupUpdate } from '../../../../manager/types'; @@ -299,7 +298,7 @@ export async function lookupUpdates( } // Add digests if necessary if (supportsDigests(config)) { - if (currentDigest && datasource !== datasourceGitSubmodules.id) { + if (currentDigest) { if (!digestOneAndOnly || !res.updates.length) { // digest update res.updates.push({ @@ -316,14 +315,6 @@ export async function lookupUpdates( newValue: currentValue, }); } - } else if (datasource === datasourceGitSubmodules.id) { - const dependency = clone(await getPkgReleases(config)); - if (dependency?.releases[0]?.version) { - res.updates.push({ - updateType: 'digest', - newValue: dependency.releases[0].version, - }); - } } if (versioning.valueToVersion) { for (const update of res.updates || []) { -- GitLab