diff --git a/lib/datasource/api.ts b/lib/datasource/api.ts index 3c212ed5f03367ad7cf1fff8e823ddb200726252..c7b07b8777fed5beaea8b74ce30bb4fb1625f7a9 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 da5b3b2c4d5a5431aaa1f7215374e2141dec3858..0000000000000000000000000000000000000000 --- 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 93b8996e32b79296cb5a8b1dd9c1d7fee79b3ffb..0000000000000000000000000000000000000000 --- 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 41243f50a2ea6b7906a0fe5e6829f5eaff7eba30..59cc242dd0621c7f60804508fb6ff14c8a7cf15e 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 1db9535bd5559d457d31673f31481d8fbb1f5265..ee53dc5c707853b1e82aaba7eb439c238de86b97 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 b1d1104cfc51e0c8b1b33b1182b6caee0ea80920..f9694bf4684a5edb6ca5fe34fce85c9839271e40 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 feda05a09c79cc9d10dbe437ca5335c2a28c3e2e..c02094f945624b9f2fafb7535f370e2e3469c4c2 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 b3bc9d3f2dc2fb581c852d6bfb9c04942574cbb4..069ec69b0def6f247ce601909652d8a29460710e 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 c776eb437b286c97f1efe303b2f986a3967b3b9a..4949a7f74b6b6448376afbb1dd099524ee8f58f9 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 97f1b4a5396975aec04c577570629e6a157a2da9..eb9c5d866ffa2e74d605557938eeee32b34dc069 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 7b3579f15c253c0270a020b876097a2a103d8239..0c5e6c69f6bdccd15dc04da4a2524d615526e3b9 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 || []) {