renovate 40.11.0 → 40.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modules/datasource/crate/index.js +2 -2
- package/dist/modules/datasource/crate/index.js.map +1 -1
- package/dist/modules/datasource/git-refs/base.js +2 -7
- package/dist/modules/datasource/git-refs/base.js.map +1 -1
- package/dist/modules/manager/git-submodules/extract.js +2 -7
- package/dist/modules/manager/git-submodules/extract.js.map +1 -1
- package/dist/modules/manager/git-submodules/update.js +2 -7
- package/dist/modules/manager/git-submodules/update.js.map +1 -1
- package/dist/modules/manager/npm/post-update/index.js +4 -2
- package/dist/modules/manager/npm/post-update/index.js.map +1 -1
- package/dist/util/exec/env.js +5 -7
- package/dist/util/exec/env.js.map +1 -1
- package/dist/util/exec/utils.d.ts +1 -1
- package/dist/util/exec/utils.js +1 -1
- package/dist/util/exec/utils.js.map +1 -1
- package/dist/util/git/index.js +1 -1
- package/dist/util/git/index.js.map +1 -1
- package/package.json +1 -1
@@ -8,7 +8,7 @@ const global_1 = require("../../../config/global");
|
|
8
8
|
const logger_1 = require("../../../logger");
|
9
9
|
const memCache = tslib_1.__importStar(require("../../../util/cache/memory"));
|
10
10
|
const decorator_1 = require("../../../util/cache/package/decorator");
|
11
|
-
const
|
11
|
+
const utils_1 = require("../../../util/exec/utils");
|
12
12
|
const fs_1 = require("../../../util/fs");
|
13
13
|
const config_1 = require("../../../util/git/config");
|
14
14
|
const hash_1 = require("../../../util/hash");
|
@@ -214,7 +214,7 @@ class CrateDatasource extends datasource_1.Datasource {
|
|
214
214
|
const git = (0, simple_git_1.default)({
|
215
215
|
...(0, config_1.simpleGitConfig)(),
|
216
216
|
maxConcurrentProcesses: 1,
|
217
|
-
}).env((0,
|
217
|
+
}).env((0, utils_1.getChildEnv)());
|
218
218
|
const clonePromise = git.clone(registryFetchUrl, clonePath, {
|
219
219
|
'--depth': 1,
|
220
220
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildProcessEnv } from '../../../util/exec/env';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({\n ...simpleGitConfig(),\n maxConcurrentProcesses: 1,\n }).env(getChildProcessEnv());\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n { cacheProvider: memCacheProvider },\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildEnv } from '../../../util/exec/utils';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({\n ...simpleGitConfig(),\n maxConcurrentProcesses: 1,\n }).env(getChildEnv());\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n { cacheProvider: memCacheProvider },\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
|
@@ -6,7 +6,7 @@ const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
|
|
6
6
|
const simple_git_1 = require("simple-git");
|
7
7
|
const logger_1 = require("../../../logger");
|
8
8
|
const decorator_1 = require("../../../util/cache/package/decorator");
|
9
|
-
const
|
9
|
+
const utils_1 = require("../../../util/exec/utils");
|
10
10
|
const auth_1 = require("../../../util/git/auth");
|
11
11
|
const config_1 = require("../../../util/git/config");
|
12
12
|
const url_1 = require("../../../util/git/url");
|
@@ -25,12 +25,7 @@ class GitDatasource extends datasource_1.Datasource {
|
|
25
25
|
const gitSubmoduleAuthEnvironmentVariables = (0, auth_1.getGitEnvironmentVariables)([
|
26
26
|
this.id,
|
27
27
|
]);
|
28
|
-
const gitEnv = {
|
29
|
-
// pass all existing env variables
|
30
|
-
...(0, env_1.getChildProcessEnv)(),
|
31
|
-
// add all known git Variables
|
32
|
-
...gitSubmoduleAuthEnvironmentVariables,
|
33
|
-
};
|
28
|
+
const gitEnv = (0, utils_1.getChildEnv)({ env: gitSubmoduleAuthEnvironmentVariables });
|
34
29
|
const git = (0, simple_git_1.simpleGit)((0, config_1.simpleGitConfig)()).env(gitEnv);
|
35
30
|
// fetch remote tags
|
36
31
|
const lsRemote = await git.listRemote([
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/git-refs/base.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,2CAAuC;AACvC,4CAAyC;AACzC,qEAA8D;AAC9D,
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/git-refs/base.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,2CAAuC;AACvC,4CAAyC;AACzC,qEAA8D;AAC9D,oDAAuD;AACvD,iDAAoE;AACpE,qDAA2D;AAC3D,+CAA8D;AAC9D,+CAA0D;AAC1D,8CAA2C;AAI3C,MAAM,QAAQ,GAAG,IAAA,aAAK,EAAC,iDAAiD,CAAC,CAAC;AAC1E,MAAM,SAAS,GAAG,IAAA,aAAK,EAAC,qBAAqB,CAAC,CAAC;AAE/C,MAAM,KAAK,GAAG,KAAK,CAAC;AAEpB,2DAA2D;AAC3D,MAAsB,aAAc,SAAQ,uBAAU;IACpD,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;IAElB,YAAY,EAAU;QACpB,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAMK,AAAN,KAAK,CAAC,UAAU,CAAC,EACf,WAAW,GACO;QAClB,MAAM,oCAAoC,GAAG,IAAA,iCAA0B,EAAC;YACtE,IAAI,CAAC,EAAE;SACR,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,EAAE,GAAG,EAAE,oCAAoC,EAAE,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAA,sBAAS,EAAC,IAAA,wBAAe,GAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAErD,oBAAoB;QACpB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;YACpC,IAAA,2BAAqB,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ;aAClB,IAAI,EAAE;aACN,KAAK,CAAC,oBAAY,CAAC;aACnB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;gBAClB,OAAO;oBACL,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;oBACvB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;oBACzB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;iBACxB,CAAC;YACJ,CAAC;YACD,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;gBAClB,OAAO;oBACL,IAAI,EAAE,EAAE;oBACR,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;iBACxB,CAAC;YACJ,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,MAAM,CAAC,YAAE,CAAC,MAAM,CAAC;aACjB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAEtE,OAAO,IAAI,CAAC;IACd,CAAC;;AAxDH,sCAyDC;AA9CO;IAJL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,KAAK,EAAE;QAChC,GAAG,EAAE,CAAC,EAAE,WAAW,EAAqB,EAAE,EAAE,CAAC,WAAW;KACzD,CAAC;+CA8CD","sourcesContent":["import is from '@sindresorhus/is';\nimport { simpleGit } from 'simple-git';\nimport { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildEnv } from '../../../util/exec/utils';\nimport { getGitEnvironmentVariables } from '../../../util/git/auth';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { getRemoteUrlWithToken } from '../../../util/git/url';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig } from '../types';\nimport type { RawRefs } from './types';\n\nconst refMatch = regEx(/(?<hash>.*?)\\s+refs\\/(?<type>.*?)\\/(?<value>.*)/);\nconst headMatch = regEx(/(?<hash>.*?)\\s+HEAD/);\n\nconst gitId = 'git';\n\n// TODO: extract to a separate directory structure (#10532)\nexport abstract class GitDatasource extends Datasource {\n static id = gitId;\n\n constructor(id: string) {\n super(id);\n }\n\n @cache({\n namespace: `datasource-${gitId}`,\n key: ({ packageName }: GetReleasesConfig) => packageName,\n })\n async getRawRefs({\n packageName,\n }: GetReleasesConfig): Promise<RawRefs[] | null> {\n const gitSubmoduleAuthEnvironmentVariables = getGitEnvironmentVariables([\n this.id,\n ]);\n const gitEnv = getChildEnv({ env: gitSubmoduleAuthEnvironmentVariables });\n const git = simpleGit(simpleGitConfig()).env(gitEnv);\n\n // fetch remote tags\n const lsRemote = await git.listRemote([\n getRemoteUrlWithToken(packageName, this.id),\n ]);\n if (!lsRemote) {\n return null;\n }\n\n const refs = lsRemote\n .trim()\n .split(newlineRegex)\n .map((line) => line.trim())\n .map((line) => {\n let match = refMatch.exec(line);\n if (match?.groups) {\n return {\n type: match.groups.type,\n value: match.groups.value,\n hash: match.groups.hash,\n };\n }\n match = headMatch.exec(line);\n if (match?.groups) {\n return {\n type: '',\n value: 'HEAD',\n hash: match.groups.hash,\n };\n }\n logger.trace(`malformed ref: ${line}`);\n return null;\n })\n .filter(is.truthy)\n .filter((ref) => ref.type !== 'pull' && !ref.value.endsWith('^{}'));\n\n return refs;\n }\n}\n"]}
|
@@ -7,7 +7,7 @@ const simple_git_1 = tslib_1.__importDefault(require("simple-git"));
|
|
7
7
|
const upath_1 = tslib_1.__importDefault(require("upath"));
|
8
8
|
const global_1 = require("../../../config/global");
|
9
9
|
const logger_1 = require("../../../logger");
|
10
|
-
const
|
10
|
+
const utils_1 = require("../../../util/exec/utils");
|
11
11
|
const auth_1 = require("../../../util/git/auth");
|
12
12
|
const config_1 = require("../../../util/git/config");
|
13
13
|
const url_1 = require("../../../util/git/url");
|
@@ -34,12 +34,7 @@ async function getDefaultBranch(subModuleUrl) {
|
|
34
34
|
'git-tags',
|
35
35
|
'git-refs',
|
36
36
|
]);
|
37
|
-
const gitEnv = {
|
38
|
-
// pass all existing env variables
|
39
|
-
...(0, env_1.getChildProcessEnv)(),
|
40
|
-
// add all known git Variables
|
41
|
-
...gitSubmoduleAuthEnvironmentVariables,
|
42
|
-
};
|
37
|
+
const gitEnv = (0, utils_1.getChildEnv)({ env: gitSubmoduleAuthEnvironmentVariables });
|
43
38
|
const val = await (0, simple_git_1.default)((0, config_1.simpleGitConfig)())
|
44
39
|
.env(gitEnv)
|
45
40
|
.listRemote(['--symref', subModuleUrl, 'HEAD']);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../../lib/modules/manager/git-submodules/extract.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../../lib/modules/manager/git-submodules/extract.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport type { SimpleGit } from 'simple-git';\nimport Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport { getChildEnv } from '../../../util/exec/utils';\nimport { getGitEnvironmentVariables } from '../../../util/git/auth';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { getHttpUrl } from '../../../util/git/url';\nimport { regEx } from '../../../util/regex';\nimport { GitRefsDatasource } from '../../datasource/git-refs';\nimport * as semVerVersioning from '../../versioning/semver';\nimport type { ExtractConfig, PackageFileContent } from '../types';\nimport type { GitModule } from './types';\n\nasync function getUrl(\n git: SimpleGit,\n gitModulesPath: string,\n submoduleName: string,\n): Promise<string> {\n const path = (\n await Git(simpleGitConfig()).raw([\n 'config',\n '--file',\n gitModulesPath,\n '--get',\n `submodule.${submoduleName}.url`,\n ])\n )?.trim();\n if (!path?.startsWith('../')) {\n return path;\n }\n const remoteUrl = (\n await git.raw(['config', '--get', 'remote.origin.url'])\n ).trim();\n return URL.resolve(`${remoteUrl}/`, path);\n}\n\nconst headRefRe = regEx(/ref: refs\\/heads\\/(?<branch>\\w+)\\s/);\n\nasync function getDefaultBranch(subModuleUrl: string): Promise<string> {\n const gitSubmoduleAuthEnvironmentVariables = getGitEnvironmentVariables([\n 'git-tags',\n 'git-refs',\n ]);\n const gitEnv = getChildEnv({ env: gitSubmoduleAuthEnvironmentVariables });\n const val = await Git(simpleGitConfig())\n .env(gitEnv)\n .listRemote(['--symref', subModuleUrl, 'HEAD']);\n return headRefRe.exec(val)?.groups?.branch ?? 'master';\n}\n\nasync function getBranch(\n git: SimpleGit,\n gitModulesPath: string,\n submoduleName: string,\n subModuleUrl: string,\n): Promise<string> {\n const branchFromConfig = (\n await Git(simpleGitConfig()).raw([\n 'config',\n '--file',\n gitModulesPath,\n '--get',\n `submodule.${submoduleName}.branch`,\n ])\n ).trim();\n\n return branchFromConfig === '.'\n ? (await git.branch(['--list'])).current.trim()\n : branchFromConfig || (await getDefaultBranch(subModuleUrl)).trim();\n}\n\nasync function getModules(\n git: SimpleGit,\n gitModulesPath: string,\n): Promise<GitModule[]> {\n const res: GitModule[] = [];\n try {\n const modules = (\n (await git.raw([\n 'config',\n '--file',\n gitModulesPath,\n '--get-regexp',\n '\\\\.path',\n ])) ?? /* istanbul ignore next: should never happen */ ''\n )\n .trim()\n .split(regEx(/\\n/))\n .filter((s) => !!s);\n\n for (const line of modules) {\n const [, name, path] = line.split(regEx(/submodule\\.(.+?)\\.path\\s(.+)/));\n res.push({ name, path });\n }\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err }, 'Error getting git submodules during extract');\n }\n return res;\n}\n\nexport default async function extractPackageFile(\n _content: string,\n packageFile: string,\n _config: ExtractConfig,\n): Promise<PackageFileContent | null> {\n const localDir = GlobalConfig.get('localDir');\n const git = Git(localDir, simpleGitConfig());\n const gitModulesPath = upath.join(localDir, packageFile);\n\n const depNames = await getModules(git, gitModulesPath);\n\n if (!depNames.length) {\n return null;\n }\n\n const deps = [];\n for (const { name, path } of depNames) {\n try {\n const [currentDigest] = (\n await git.subModule(['status', '--cached', path])\n )\n .trim()\n .replace(regEx(/^[-+]/), '')\n .split(regEx(/\\s/));\n const subModuleUrl = await getUrl(git, gitModulesPath, name);\n const httpSubModuleUrl = getHttpUrl(subModuleUrl);\n const currentValue = await getBranch(\n git,\n gitModulesPath,\n name,\n httpSubModuleUrl,\n );\n deps.push({\n depName: path,\n packageName: httpSubModuleUrl,\n currentValue,\n currentDigest,\n ...(semVerVersioning.api.isVersion(currentValue)\n ? { versioning: semVerVersioning.id }\n : {}),\n });\n } catch (err) /* istanbul ignore next */ {\n logger.warn(\n { err, packageFile },\n 'Error mapping git submodules during extraction',\n );\n }\n }\n\n return { deps, datasource: GitRefsDatasource.id };\n}\n"]}
|
@@ -6,7 +6,7 @@ const simple_git_1 = tslib_1.__importDefault(require("simple-git"));
|
|
6
6
|
const upath_1 = tslib_1.__importDefault(require("upath"));
|
7
7
|
const global_1 = require("../../../config/global");
|
8
8
|
const logger_1 = require("../../../logger");
|
9
|
-
const
|
9
|
+
const utils_1 = require("../../../util/exec/utils");
|
10
10
|
const fs_1 = require("../../../util/fs");
|
11
11
|
const auth_1 = require("../../../util/git/auth");
|
12
12
|
async function updateDependency({ fileContent, upgrade, }) {
|
@@ -15,12 +15,7 @@ async function updateDependency({ fileContent, upgrade, }) {
|
|
15
15
|
'git-tags',
|
16
16
|
'git-refs',
|
17
17
|
]);
|
18
|
-
const gitEnv = {
|
19
|
-
// pass all existing env variables
|
20
|
-
...(0, env_1.getChildProcessEnv)(),
|
21
|
-
// add all known git Variables
|
22
|
-
...gitSubmoduleAuthEnvironmentVariables,
|
23
|
-
};
|
18
|
+
const gitEnv = (0, utils_1.getChildEnv)({ env: gitSubmoduleAuthEnvironmentVariables });
|
24
19
|
const git = (0, simple_git_1.default)(localDir).env(gitEnv);
|
25
20
|
const submoduleGit = (0, simple_git_1.default)(upath_1.default.join(localDir, upgrade.depName)).env(gitEnv);
|
26
21
|
try {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../lib/modules/manager/git-submodules/update.ts"],"names":[],"mappings":";;AASA,
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../lib/modules/manager/git-submodules/update.ts"],"names":[],"mappings":";;AASA,mCAkCC;;AA3CD,oEAA6B;AAC7B,0DAA0B;AAC1B,mDAAsD;AACtD,4CAAyC;AACzC,oDAAuD;AACvD,yCAAiD;AACjD,iDAAoE;AAGrD,KAAK,UAAU,gBAAgB,CAAC,EAC7C,WAAW,EACX,OAAO,GACgB;IACvB,MAAM,QAAQ,GAAG,qBAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,oCAAoC,GAAG,IAAA,iCAA0B,EAAC;QACtE,UAAU;QACV,UAAU;KACX,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,EAAE,GAAG,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAA,oBAAG,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,IAAA,oBAAG,EAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAQ,CAAC,CAAC,CAAC;QACtE,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClE,MAAM,GAAG,CAAC,SAAS,CAAC;gBAClB,YAAY;gBACZ,UAAU;gBACV,OAAO,CAAC,QAAQ;gBAChB,OAAO,CAAC,OAAQ;aACjB,CAAC,CAAC;YACH,MAAM,qBAAqB,GAAG,MAAM,IAAA,kBAAa,EAC/C,OAAO,CAAC,WAAY,EACpB,MAAM,CACP,CAAC;YACF,OAAO,qBAAsB,CAAC;QAChC,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport { getChildEnv } from '../../../util/exec/utils';\nimport { readLocalFile } from '../../../util/fs';\nimport { getGitEnvironmentVariables } from '../../../util/git/auth';\nimport type { UpdateDependencyConfig } from '../types';\n\nexport default async function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): Promise<string | null> {\n const localDir = GlobalConfig.get('localDir');\n const gitSubmoduleAuthEnvironmentVariables = getGitEnvironmentVariables([\n 'git-tags',\n 'git-refs',\n ]);\n const gitEnv = getChildEnv({ env: gitSubmoduleAuthEnvironmentVariables });\n const git = Git(localDir).env(gitEnv);\n const submoduleGit = Git(upath.join(localDir, upgrade.depName)).env(gitEnv);\n\n try {\n await git.submoduleUpdate(['--checkout', '--init', upgrade.depName!]);\n await submoduleGit.checkout([upgrade.newDigest!]);\n if (upgrade.newValue && upgrade.currentValue !== upgrade.newValue) {\n await git.subModule([\n 'set-branch',\n '--branch',\n upgrade.newValue,\n upgrade.depName!,\n ]);\n const updatedPackageContent = await readLocalFile(\n upgrade.packageFile!,\n 'utf8',\n );\n return updatedPackageContent!;\n }\n return fileContent;\n } catch (err) {\n logger.debug({ err }, 'submodule checkout error');\n return null;\n }\n}\n"]}
|
@@ -12,7 +12,7 @@ const deepmerge_1 = tslib_1.__importDefault(require("deepmerge"));
|
|
12
12
|
const upath_1 = tslib_1.__importDefault(require("upath"));
|
13
13
|
const logger_1 = require("../../../../logger");
|
14
14
|
const external_host_error_1 = require("../../../../types/errors/external-host-error");
|
15
|
-
const env_1 = require("../../../../util/
|
15
|
+
const env_1 = require("../../../../util/env");
|
16
16
|
const fs_1 = require("../../../../util/fs");
|
17
17
|
const git_1 = require("../../../../util/git");
|
18
18
|
const hostRules = tslib_1.__importStar(require("../../../../util/host-rules"));
|
@@ -305,8 +305,10 @@ async function getAdditionalFiles(config, packageFiles) {
|
|
305
305
|
await writeExistingFiles(config, packageFiles);
|
306
306
|
await writeUpdatedPackageFiles(config);
|
307
307
|
const { additionalNpmrcContent, additionalYarnRcYml } = (0, rules_1.processHostRules)();
|
308
|
+
// This isn't passed directly to the child process, so no need to filter.
|
309
|
+
// But pass custom env and user vars.
|
308
310
|
const env = {
|
309
|
-
...(0, env_1.
|
311
|
+
...(0, env_1.getEnv)(),
|
310
312
|
NPM_CONFIG_CACHE: await (0, fs_1.ensureCacheDir)('npm'),
|
311
313
|
YARN_CACHE_FOLDER: await (0, fs_1.ensureCacheDir)('yarn'),
|
312
314
|
YARN_GLOBAL_FOLDER: await (0, fs_1.ensureCacheDir)('berry'),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/modules/manager/npm/post-update/index.ts"],"names":[],"mappings":";;AA+CA,sDAoEC;AAED,gDAsGC;AAED,4DAkCC;AAwDD,4CAkDC;AAED,gDA6QC;;AAxnBD,uBAAuB;AACvB,kEAAkC;AAClC,kEAAkC;AAClC,0DAA0B;AAC1B,+CAA4C;AAC5C,sFAAiF;AACjF,mDAA+D;AAC/D,4CAK6B;AAC7B,8CAA8D;AAE9D,+EAAyD;AACzD,kDAA6D;AAC7D,8CAA2D;AAC3D,gDAA8D;AAC9D,iDAAwD;AACxD,+CAA4C;AAE5C,0CAAsD;AAEtD,oCAMkB;AAClB,mDAA6B;AAC7B,qDAA+B;AAC/B,mCAA2C;AAQ3C,qDAA+B;AAE/B,gFAAgF;AAChF,MAAM,OAAO,GAAG,CAAC,GAAkC,EAAY,EAAE,CAC/D,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,YAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE7C,SAAgB,qBAAqB,CACnC,MAAwB,EACxB,YAAoC;IAEpC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,MAAM,kBAAkB,GAA2B,EAAE,CAAC;IAEtD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IACE,OAAO,CAAC,UAAU,KAAK,qBAAqB;YAC5C,OAAO,CAAC,aAAa,KAAK,IAAI;YAC9B,OAAO,CAAC,gBAAgB,KAAK,IAAI,EACjC,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,IACE,MAAM,CAAC,QAAQ,CAAC,KAAK,CACnB,CAAC,OAAgB,EAAE,EAAE,CACnB,OAAO,CAAC,UAAU,KAAK,qBAAqB;QAC5C,OAAO,CAAC,gBAAgB,CAC3B,EACD,CAAC;QACD,OAAO;YACL,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;YACjC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,SAAS,cAAc,CACrB,QAAgB;QAEhB,eAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,QAAQ,CAAC,CAAC;QAErD,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,GAAI,EAAE,CAAC;YAC5C,IAAI,WAAW,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACzC,eAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBACnD,OAAO,WAAW,CAAC;YACrB,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,cAAc;IACd,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,mBAAoB,EAAE,CAAC;QAC5C,eAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,qBAAqB;QACrB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,mDAAmD;QACnD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpD,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;QACjC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,CAAC;KAChD,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,MAAwB,EACxB,YAAoC;IAEpC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC;IAClC,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EACpD,4BAA4B,CAC7B,CAAC;IACF,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,qBAAqB;QACrB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,cAAc;QACd,MAAM,OAAO,GAAG,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,WAAY,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,MAAM,aAAa,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,YAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAA,mBAAc,EAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;gBACxC,eAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;QAChD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,OAAO,CAAC;YAC5B,eAAM,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YACnC,IAAI,eAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,eAAe,GAAG,CAAC,MAAM,IAAA,aAAO,EAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,CAAC;YAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;gBACxC,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,6BAA6B,CAAC,CAAC;gBACpD,eAAe,GAAG,EAAE,CAAC;YACvB,CAAC;YACD,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,GACrD,IAAA,qBAAa,EAAC,eAAe,CAAC,CAAC;YACjC,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,YAAY,GAChB,UAAU,IAAI,aAAa;oBACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;oBACrC,CAAC,CAAC,EAAE,CAAC;gBACT,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,eAAe,GAAG,KAAK,CAAC;gBAC5B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACtC,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC9D,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;wBACzB,SAAS;oBACX,CAAC;oBACD,IACE,OAAO,CAAC,aAAa,KAAK,OAAO;wBACjC,OAAO,CAAC,WAAW,CAAC,OAAO,KAAK,OAAO,EACvC,CAAC;wBACD,cAAc;wBACd,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC;oBAChC,CAAC;oBACD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;oBAC5B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;wBACvC,IACE,UAAU,IAAI,aAAa;4BAC3B,CAAC,WAAW,KAAK,gBAAgB,OAAO,EAAE;gCACxC,WAAW,CAAC,UAAU,CAAC,gBAAgB,OAAO,GAAG,CAAC,CAAC,EACrD,CAAC;4BACD,eAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,4BAA4B,CAAC,CAAC;4BAC5D,eAAe,GAAG,IAAI,CAAC;4BACvB,OAAO,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,eAAM,CAAC,KAAK,CACV,YAAY,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,qBAAqB,CAChE,CAAC;oBACF,eAAe,GAAG,IAAI,CAAC;oBACvB,IAAI,CAAC;wBACH,IAAI,cAAc,IAAI,aAAa,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;4BAClE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gCACzB,cAAc;gCACd,OAAO,aAAa,CAAC,YAAa,CAAC,OAAO,CAAC,CAAC;4BAC9C,CAAC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAAC,MAAM,0BAA0B,CAAC,CAAC;wBAClC,eAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,EACX,6CAA6C,CAC9C,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,IAAI,eAAe,EAAE,CAAC;oBACpB,eAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;oBAC/D,eAAe,GAAG,IAAA,uBAAe,EAAC,aAAa,EAAE,cAAc,CAAC,CAAC;gBACnE,CAAC;gBACD,MAAM,IAAA,mBAAc,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,MAAwB;IAExB,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC;IACrD,eAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAChC,eAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,MAAM,kBAAkB,GAAG,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IAC9D,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACrD,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IACE,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAC1E,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,sBAAsB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,cAAc;YAEd,MAAM,IAAA,mBAAc,EAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,QAAS,CAAC,CAAC;YAC9D,SAAS;QACX,CAAC;QACD,IACE,CAAC,CACC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YACzC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACjD,EACD,CAAC;YACD,SAAS;QACX,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,WAAW,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAA,mBAAc,EAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,QAAS,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,uBAAuB;AACvB,KAAK,UAAU,iBAAiB,CAC9B,WAAmB,EACnB,gBAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,IAAA,aAAO,EAAC,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAA,aAAO,EAAC,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;QAEjE,oEAAoE;QACpE,uDAAuD;QACvD,IAAI,SAAS,EAAE,CAAC;YACd,2CAA2C;YAC3C,MAAM,KAAK,GAAG,IAAA,0BAAmB,EAAC,SAAS,CAAC,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,0BAA0B;YAC1B,MAAM,UAAU,GAAG,MAAM;iBACtB,KAAK,CAAC,oBAAY,CAAC;iBACnB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,UAAU,GAAG,IAAA,yBAAmB,EACpC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAClD,CAAC;gBACF,aAAa,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,EAAE,iCAAiC,CAAC,CAAC;QAEnE,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAa,GAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/C,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,CAAC;wBACP,QAAQ,EAAE,MAAM,IAAA,kBAAa,EAAC,CAAC,CAAC;qBACjC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBACrC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/C,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,sCAAsC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,uBAAuB;AAChB,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,gBAA8B,EAC9B,wBAAmD;IAEnD,IAAI,SAAS,GAAG,wBAAwB,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACjE,SAAS,KAAK,CAAC,MAAM,IAAA,aAAO,EAAC,iBAAiB,CAAC,CAAC,IAAI,SAAS,CAAC;QAC9D,MAAM,YAAY,GAAG,MAAM,IAAA,kBAAa,EAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,YAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACtD,OAAO,wBAAwB,CAAC;QAClC,CAAC;QAED,2BAA2B;QAC3B,MAAM,WAAW,GAAG,IAAA,sBAAe,EAAgB,SAAS,CAAC,EAAE,QAAQ,CAAC;QACxE,MAAM,WAAW,GAAG,IAAA,sBAAe,EAAgB,YAAY,CAAC,EAAE,QAAQ,CAAC;QAC3E,IACE,CAAC,YAAE,CAAC,8BAA8B,CAAC,WAAW,CAAC;YAC/C,CAAC,YAAE,CAAC,8BAA8B,CAAC,WAAW,CAAC,EAC/C,CAAC;YACD,OAAO,wBAAwB,CAAC;QAClC,CAAC;QAED,MAAM,eAAe,GAAG,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAG,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC7D,eAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAExE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACxD,gBAAgB,CAAC,IAAI,CACnB;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,SAAS;SACpB,EACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,eAAe;SACtB,EACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,MAAM,IAAA,kBAAa,EAAC,eAAe,EAAE,MAAM,CAAC;YACtD,YAAY,EAAE,IAAI;SACnB,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,wBAAwB,IAAI,SAAS,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,MAAwC,EACxC,YAAoC;IAEpC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAoB,EAAE,CAAC;IAC3C,MAAM,gBAAgB,GAAiB,EAAE,CAAC;IAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;IAC9C,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3C,IACE,MAAM,CAAC,qBAAqB;QAC5B,MAAM,CAAC,mBAAmB;QAC1B,CAAC,MAAM,SAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAC3C,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACpD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzD,eAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACzC,MAAM,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,GAAG,IAAA,wBAAgB,GAAE,CAAC;IAE3E,MAAM,GAAG,GAAG;QACV,GAAG,IAAA,wBAAkB,GAAE;QACvB,gBAAgB,EAAE,MAAM,IAAA,mBAAc,EAAC,KAAK,CAAC;QAC7C,iBAAiB,EAAE,MAAM,IAAA,mBAAc,EAAC,MAAM,CAAC;QAC/C,kBAAkB,EAAE,MAAM,IAAA,mBAAc,EAAC,OAAO,CAAC;QACjD,gBAAgB,EAAE,MAAM,IAAA,mBAAc,EAAC,MAAM,CAAC;QAC9C,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,QAAQ;YAClB,GAAG,EAAE,yBAAyB;SAC/B,CAAC,CAAC,CAAC;QACJ,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,GAAG,KAAK,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,eAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,IAAA,uBAAe,EAAC,WAAW,CAAC,CAAC;QACxD,MAAM,IAAA,0BAAkB,EAAC,WAAW,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,eAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzC,eAAM,CAAC,KAAK,CAAC,cAAc,QAAQ,QAAQ,WAAW,EAAE,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CACrC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CACtD,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,gBAAgB,CACpC,WAAW,EACX,GAAG,EACH,QAAQ,EACR,MAAM,EACN,QAAQ,CACT,CAAC;QACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,qBAAqB;YACrB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBAC1D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACtC,IACE,GAAG,CAAC,MAAM,CAAC,QAAQ,CACjB,iCAAiC,OAAO,CAAC,OAAO,EAAE,CACnD,EACD,CAAC;wBACD,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAC5C,8EAA8E,CAC/E,CAAC;wBACF,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,8EAA8E,CAC/E,CAAC;wBACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,EAAE,mBAAa,CAAC,EAAE,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,cAAc,CAAC,IAAI,CAAC;gBAClB,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,MAAM,IAAA,aAAO,EACnC,OAAO,EACP,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CACnE,CAAC;YACF,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;gBACrC,eAAM,CAAC,KAAK,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;gBAC1C,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,OAAO;oBACb,wCAAwC;oBAExC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,IAAA,yBAAiB,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,eAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAA,uBAAe,EAAC,WAAW,CAAC,CAAC;QACxD,MAAM,IAAA,0BAAkB,EAAC,WAAW,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;QAC5E,IAAI,iBAAqC,CAAC;QAC1C,IAAI,wBAAmD,CAAC;QACxD,IAAI,mBAAmB,EAAE,CAAC;YACxB,iBAAiB,GAAG,IAAA,uBAAkB,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAChE,wBAAwB,GAAG,MAAM,IAAA,kBAAa,EAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAC1E,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,2BAA2B;oBAC3B,MAAM,kBAAkB,GAAG,IAAA,sBAAe,EACxC,wBAAwB,CACzB,CAAC;oBAEF,MAAM,iBAAiB,GAAG,IAAA,mBAAS,EACjC,kBAAkB,EAClB,IAAI,CAAC,6BAA6B,CAChC,mBAAmB,EACnB,kBAAkB,CACnB,CACF,CAAC;oBAEF,MAAM,IAAA,mBAAc,EAAC,iBAAiB,EAAE,IAAA,WAAI,EAAC,iBAAiB,CAAC,CAAC,CAAC;oBACjE,eAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACtD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,qCAAqC,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CACrC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,KAAK,QAAQ,CACxD,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,qBAAqB;YACrB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,gCAAgC,CAAC,EAAE,CAAC;gBAC3D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACtC,sCAAsC;oBACtC,IACE,GAAG,CAAC,MAAM,CAAC,QAAQ,CACjB,sCAAsC,OAAO,CAAC,OAAO,MAAM,CAC5D,EACD,CAAC;wBACD,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAC7C,8EAA8E,CAC/E,CAAC;wBACF,MAAM,IAAI,uCAAiB,CACzB,IAAI,KAAK,CACP,8EAA8E,CAC/E,EACD,mBAAa,CAAC,EAAE,CACjB,CAAC;oBACJ,CAAC;oBACD,qCAAqC;gBACvC,CAAC;YACH,CAAC;YACD,cAAc,CAAC,IAAI,CAAC;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,wEAAwE;gBACxE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;aACjC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,eAAe,GAAG,MAAM,IAAA,aAAO,EACnC,YAAY,EACZ,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CACnE,CAAC;YACF,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;gBACrC,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBACzC,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,YAAY;oBAClB,cAAc;oBACd,QAAQ,EAAE,GAAG,CAAC,QAAS;iBACxB,CAAC,CAAC;gBACH,MAAM,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;YACzD,CAAC;YAED,wEAAwE;YACxE,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,wBAAwB,GAAG,MAAM,gBAAgB,CAC/C,WAAW,EACX,gBAAgB,EAChB,wBAAwB,CACzB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,IAAA,yBAAiB,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACnD,iCAAiC;QACjC,IAAI,wBAAwB,EAAE,CAAC;YAC7B,cAAc;YACd,MAAM,IAAA,mBAAc,EAAC,iBAAkB,EAAE,wBAAwB,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACrD,MAAM,WAAW,GAAG,eAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,IAAA,uBAAe,EAAC,WAAW,CAAC,CAAC;QACxD,MAAM,IAAA,0BAAkB,EAAC,WAAW,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;QAC5E,eAAM,CAAC,KAAK,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CACrC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,KAAK,cAAc,CACpE,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,qBAAqB;YACrB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;gBACzD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACtC,IACE,GAAG,CAAC,MAAM,CAAC,QAAQ,CACjB,gCAAgC,OAAO,CAAC,OAAO,EAAE,CAClD,EACD,CAAC;wBACD,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAC7C,8EAA8E,CAC/E,CAAC;wBACF,MAAM,IAAI,uCAAiB,CACzB,KAAK,CACH,8EAA8E,CAC/E,EACD,mBAAa,CAAC,EAAE,CACjB,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YACD,cAAc,CAAC,IAAI,CAAC;gBAClB,QAAQ,EAAE,cAAc;gBACxB,wEAAwE;gBACxE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;aACjC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,eAAe,GAAG,MAAM,IAAA,aAAO,EACnC,cAAc,EACd,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CACnE,CAAC;YACF,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;gBACrC,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC9C,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,cAAc;oBACpB,mCAAmC;oBACnC,QAAQ,EAAE,GAAG,CAAC,QAAS;iBACxB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,IAAA,yBAAiB,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAC9C,CAAC","sourcesContent":["// TODO: types (#22198)\nimport is from '@sindresorhus/is';\nimport deepmerge from 'deepmerge';\nimport upath from 'upath';\nimport { logger } from '../../../../logger';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getChildProcessEnv } from '../../../../util/exec/env';\nimport {\n ensureCacheDir,\n getSiblingFileName,\n readLocalFile,\n writeLocalFile,\n} from '../../../../util/fs';\nimport { getFile, getRepoStatus } from '../../../../util/git';\nimport type { FileChange } from '../../../../util/git/types';\nimport * as hostRules from '../../../../util/host-rules';\nimport { newlineRegex, regEx } from '../../../../util/regex';\nimport { ensureTrailingSlash } from '../../../../util/url';\nimport { dump, parseSingleYaml } from '../../../../util/yaml';\nimport { NpmDatasource } from '../../../datasource/npm';\nimport { scm } from '../../../platform/scm';\nimport type { PackageFile, PostUpdateConfig, Upgrade } from '../../types';\nimport { getZeroInstallPaths } from '../extract/yarn';\nimport type { NpmManagerData } from '../types';\nimport {\n composeLockFile,\n getNpmrcContent,\n parseLockFile,\n resetNpmrcContent,\n updateNpmrcContent,\n} from '../utils';\nimport * as npm from './npm';\nimport * as pnpm from './pnpm';\nimport { processHostRules } from './rules';\nimport type {\n AdditionalPackageFiles,\n ArtifactError,\n DetermineLockFileDirsResult,\n WriteExistingFilesResult,\n YarnRcYmlFile,\n} from './types';\nimport * as yarn from './yarn';\n\n// Strips empty values, deduplicates, and returns the directories from filenames\nconst getDirs = (arr: (string | null | undefined)[]): string[] =>\n Array.from(new Set(arr.filter(is.string)));\n\nexport function determineLockFileDirs(\n config: PostUpdateConfig,\n packageFiles: AdditionalPackageFiles,\n): DetermineLockFileDirsResult {\n const npmLockDirs: (string | undefined)[] = [];\n const yarnLockDirs: (string | undefined)[] = [];\n const pnpmShrinkwrapDirs: (string | undefined)[] = [];\n\n for (const upgrade of config.upgrades) {\n if (\n upgrade.updateType === 'lockFileMaintenance' ||\n upgrade.isRemediation === true ||\n upgrade.isLockfileUpdate === true\n ) {\n yarnLockDirs.push(upgrade.managerData?.yarnLock);\n npmLockDirs.push(upgrade.managerData?.npmLock);\n pnpmShrinkwrapDirs.push(upgrade.managerData?.pnpmShrinkwrap);\n }\n }\n\n if (\n config.upgrades.every(\n (upgrade: Upgrade) =>\n upgrade.updateType === 'lockFileMaintenance' ||\n upgrade.isLockfileUpdate,\n )\n ) {\n return {\n yarnLockDirs: getDirs(yarnLockDirs),\n npmLockDirs: getDirs(npmLockDirs),\n pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs),\n };\n }\n\n function getPackageFile(\n fileName: string,\n ): Partial<PackageFile<NpmManagerData>> {\n logger.trace('Looking for packageFile: ' + fileName);\n\n for (const packageFile of packageFiles.npm!) {\n if (packageFile.packageFile === fileName) {\n logger.trace({ packageFile }, 'Found packageFile');\n return packageFile;\n }\n logger.trace('No match');\n }\n return {};\n }\n\n // TODO #22198\n for (const p of config.updatedPackageFiles!) {\n logger.trace(`Checking ${String(p.path)} for lock files`);\n const packageFile = getPackageFile(p.path);\n // istanbul ignore if\n if (!packageFile.managerData) {\n continue;\n }\n // push full lock file names and convert them later\n yarnLockDirs.push(packageFile.managerData.yarnLock);\n npmLockDirs.push(packageFile.managerData.npmLock);\n pnpmShrinkwrapDirs.push(packageFile.managerData.pnpmShrinkwrap);\n }\n\n return {\n yarnLockDirs: getDirs(yarnLockDirs),\n npmLockDirs: getDirs(npmLockDirs),\n pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs),\n };\n}\n\nexport async function writeExistingFiles(\n config: PostUpdateConfig,\n packageFiles: AdditionalPackageFiles,\n): Promise<void> {\n if (!packageFiles.npm) {\n return;\n }\n const npmFiles = packageFiles.npm;\n logger.debug(\n { packageFiles: npmFiles.map((n) => n.packageFile) },\n 'Writing package.json files',\n );\n for (const packageFile of npmFiles) {\n // istanbul ignore if\n if (!packageFile.managerData) {\n continue;\n }\n // TODO #22198\n const basedir = upath.dirname(packageFile.packageFile!);\n const npmrc = packageFile.npmrc;\n const npmrcFilename = upath.join(basedir, '.npmrc');\n if (is.string(npmrc)) {\n try {\n await writeLocalFile(npmrcFilename, npmrc.replace(/\\n?$/, '\\n'));\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ npmrcFilename, err }, 'Error writing .npmrc');\n }\n }\n const npmLock = packageFile.managerData.npmLock;\n if (npmLock) {\n const npmLockPath = npmLock;\n logger.debug(`Writing ${npmLock}`);\n let existingNpmLock: string;\n try {\n existingNpmLock = (await getFile(npmLock)) ?? '';\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err }, 'Error reading npm lock file');\n existingNpmLock = '';\n }\n const { detectedIndent, lockFileParsed: npmLockParsed } =\n parseLockFile(existingNpmLock);\n if (npmLockParsed) {\n const packageNames =\n 'packages' in npmLockParsed\n ? Object.keys(npmLockParsed.packages)\n : [];\n const widens: string[] = [];\n let lockFileChanged = false;\n for (const upgrade of config.upgrades) {\n if (upgrade.lockFiles && !upgrade.lockFiles.includes(npmLock)) {\n continue;\n }\n if (!upgrade.managerData) {\n continue;\n }\n if (\n upgrade.rangeStrategy === 'widen' &&\n upgrade.managerData.npmLock === npmLock\n ) {\n // TODO #22198\n widens.push(upgrade.depName!);\n }\n const { depName } = upgrade;\n for (const packageName of packageNames) {\n if (\n 'packages' in npmLockParsed &&\n (packageName === `node_modules/${depName}` ||\n packageName.startsWith(`node_modules/${depName}/`))\n ) {\n logger.trace({ packageName }, 'Massaging out package name');\n lockFileChanged = true;\n delete npmLockParsed.packages[packageName];\n }\n }\n }\n if (widens.length) {\n logger.debug(\n `Removing ${String(widens)} from ${npmLock} to force an update`,\n );\n lockFileChanged = true;\n try {\n if ('dependencies' in npmLockParsed && npmLockParsed.dependencies) {\n widens.forEach((depName) => {\n // TODO #22198\n delete npmLockParsed.dependencies![depName];\n });\n }\n } catch /* istanbul ignore next */ {\n logger.warn(\n { npmLock },\n 'Error massaging package-lock.json for widen',\n );\n }\n }\n if (lockFileChanged) {\n logger.debug('Massaging npm lock file before writing to disk');\n existingNpmLock = composeLockFile(npmLockParsed, detectedIndent);\n }\n await writeLocalFile(npmLockPath, existingNpmLock);\n }\n }\n }\n}\n\nexport async function writeUpdatedPackageFiles(\n config: PostUpdateConfig,\n): Promise<void> {\n logger.trace({ config }, 'writeUpdatedPackageFiles');\n logger.debug('Writing any updated package files');\n if (!config.updatedPackageFiles) {\n logger.debug('No files found');\n return;\n }\n const supportedLockFiles = ['package-lock.json', 'yarn.lock'];\n for (const packageFile of config.updatedPackageFiles) {\n if (packageFile.type !== 'addition') {\n continue;\n }\n if (\n supportedLockFiles.some((fileName) => packageFile.path.endsWith(fileName))\n ) {\n logger.debug(`Writing lock file: ${packageFile.path}`);\n // TODO #22198\n\n await writeLocalFile(packageFile.path, packageFile.contents!);\n continue;\n }\n if (\n !(\n packageFile.path.endsWith('package.json') ||\n packageFile.path.endsWith('pnpm-workspace.yaml')\n )\n ) {\n continue;\n }\n logger.debug(`Writing ${packageFile.path}`);\n await writeLocalFile(packageFile.path, packageFile.contents!);\n }\n}\n\n// istanbul ignore next\nasync function updateYarnOffline(\n lockFileDir: string,\n updatedArtifacts: FileChange[],\n): Promise<void> {\n try {\n const resolvedPaths: string[] = [];\n const yarnrcYml = await getFile(upath.join(lockFileDir, '.yarnrc.yml'));\n const yarnrc = await getFile(upath.join(lockFileDir, '.yarnrc'));\n\n // As .yarnrc.yml overrides .yarnrc in Yarn 1 (https://git.io/JUcco)\n // both files may exist, so check for .yarnrc.yml first\n if (yarnrcYml) {\n // Yarn 2 (offline cache and zero-installs)\n const paths = getZeroInstallPaths(yarnrcYml);\n resolvedPaths.push(...paths.map((p) => upath.join(lockFileDir, p)));\n } else if (yarnrc) {\n // Yarn 1 (offline mirror)\n const mirrorLine = yarnrc\n .split(newlineRegex)\n .find((line) => line.startsWith('yarn-offline-mirror '));\n if (mirrorLine) {\n const mirrorPath = ensureTrailingSlash(\n mirrorLine.split(' ')[1].replace(regEx(/\"/g), ''),\n );\n resolvedPaths.push(upath.join(lockFileDir, mirrorPath));\n }\n }\n logger.debug({ resolvedPaths }, 'updateYarnOffline resolvedPaths');\n\n if (resolvedPaths.length) {\n const status = await getRepoStatus();\n for (const f of status.modified.concat(status.not_added)) {\n if (resolvedPaths.some((p) => f.startsWith(p))) {\n updatedArtifacts.push({\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n });\n }\n }\n for (const f of status.deleted || []) {\n if (resolvedPaths.some((p) => f.startsWith(p))) {\n updatedArtifacts.push({ type: 'deletion', path: f });\n }\n }\n }\n } catch (err) {\n logger.error({ err }, 'Error updating yarn offline packages');\n }\n}\n\n// TODO: move to ./yarn.ts\n// exported for testing\nexport async function updateYarnBinary(\n lockFileDir: string,\n updatedArtifacts: FileChange[],\n existingYarnrcYmlContent: string | undefined | null,\n): Promise<string | undefined | null> {\n let yarnrcYml = existingYarnrcYmlContent;\n try {\n const yarnrcYmlFilename = upath.join(lockFileDir, '.yarnrc.yml');\n yarnrcYml ??= (await getFile(yarnrcYmlFilename)) ?? undefined;\n const newYarnrcYml = await readLocalFile(yarnrcYmlFilename, 'utf8');\n if (!is.string(yarnrcYml) || !is.string(newYarnrcYml)) {\n return existingYarnrcYmlContent;\n }\n\n // TODO: use schema (#9610)\n const oldYarnPath = parseSingleYaml<YarnRcYmlFile>(yarnrcYml)?.yarnPath;\n const newYarnPath = parseSingleYaml<YarnRcYmlFile>(newYarnrcYml)?.yarnPath;\n if (\n !is.nonEmptyStringAndNotWhitespace(oldYarnPath) ||\n !is.nonEmptyStringAndNotWhitespace(newYarnPath)\n ) {\n return existingYarnrcYmlContent;\n }\n\n const oldYarnFullPath = upath.join(lockFileDir, oldYarnPath);\n const newYarnFullPath = upath.join(lockFileDir, newYarnPath);\n logger.debug({ oldYarnPath, newYarnPath }, 'Found updated Yarn binary');\n\n yarnrcYml = yarnrcYml.replace(oldYarnPath, newYarnPath);\n updatedArtifacts.push(\n {\n type: 'addition',\n path: yarnrcYmlFilename,\n contents: yarnrcYml,\n },\n {\n type: 'deletion',\n path: oldYarnFullPath,\n },\n {\n type: 'addition',\n path: newYarnFullPath,\n contents: await readLocalFile(newYarnFullPath, 'utf8'),\n isExecutable: true,\n },\n );\n } catch (err) /* istanbul ignore next */ {\n logger.error({ err }, 'Error updating Yarn binary');\n }\n return existingYarnrcYmlContent && yarnrcYml;\n}\n\nexport async function getAdditionalFiles(\n config: PostUpdateConfig<NpmManagerData>,\n packageFiles: AdditionalPackageFiles,\n): Promise<WriteExistingFilesResult> {\n logger.trace({ config }, 'getAdditionalFiles');\n const artifactErrors: ArtifactError[] = [];\n const updatedArtifacts: FileChange[] = [];\n if (!packageFiles.npm?.length) {\n return { artifactErrors, updatedArtifacts };\n }\n if (!config.updateLockFiles) {\n logger.debug('Skipping lock file generation');\n return { artifactErrors, updatedArtifacts };\n }\n logger.debug('Getting updated lock files');\n if (\n config.isLockFileMaintenance &&\n config.reuseExistingBranch &&\n (await scm.branchExists(config.branchName))\n ) {\n logger.debug('Skipping lockFileMaintenance update');\n return { artifactErrors, updatedArtifacts };\n }\n const dirs = determineLockFileDirs(config, packageFiles);\n logger.trace({ dirs }, 'lock file dirs');\n await writeExistingFiles(config, packageFiles);\n await writeUpdatedPackageFiles(config);\n\n const { additionalNpmrcContent, additionalYarnRcYml } = processHostRules();\n\n const env = {\n ...getChildProcessEnv(),\n NPM_CONFIG_CACHE: await ensureCacheDir('npm'),\n YARN_CACHE_FOLDER: await ensureCacheDir('yarn'),\n YARN_GLOBAL_FOLDER: await ensureCacheDir('berry'),\n npm_config_store: await ensureCacheDir('pnpm'),\n NODE_ENV: 'dev',\n };\n\n let token: string | undefined;\n try {\n ({ token } = hostRules.find({\n hostType: 'github',\n url: 'https://api.github.com/',\n }));\n token = token ? /* istanbul ignore next */ `${token}@` : token;\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err }, 'Error getting token for packageFile');\n }\n const tokenRe = regEx(`${token ?? ''}`, 'g', false);\n for (const npmLock of dirs.npmLockDirs) {\n const lockFileDir = upath.dirname(npmLock);\n const npmrcContent = await getNpmrcContent(lockFileDir);\n await updateNpmrcContent(lockFileDir, npmrcContent, additionalNpmrcContent);\n const fileName = upath.basename(npmLock);\n logger.debug(`Generating ${fileName} for ${lockFileDir}`);\n const upgrades = config.upgrades.filter(\n (upgrade) => upgrade.managerData?.npmLock === npmLock,\n );\n const res = await npm.generateLockFile(\n lockFileDir,\n env,\n fileName,\n config,\n upgrades,\n );\n if (res.error) {\n // istanbul ignore if\n if (res.stderr?.includes('No matching version found for')) {\n for (const upgrade of config.upgrades) {\n if (\n res.stderr.includes(\n `No matching version found for ${upgrade.depName}`,\n )\n ) {\n logger.debug(\n { dependency: upgrade.depName, type: 'npm' },\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n const err = new Error(\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n throw new ExternalHostError(err, NpmDatasource.id);\n }\n }\n }\n artifactErrors.push({\n lockFile: npmLock,\n stderr: res.stderr,\n });\n } else if (res.lockFile) {\n const existingContent = await getFile(\n npmLock,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n if (res.lockFile === existingContent) {\n logger.debug(`${npmLock} hasn't changed`);\n } else {\n logger.debug(`${npmLock} needs updating`);\n updatedArtifacts.push({\n type: 'addition',\n path: npmLock,\n // TODO: can this be undefined? (#22198)\n\n contents: res.lockFile.replace(tokenRe, ''),\n });\n }\n }\n await resetNpmrcContent(lockFileDir, npmrcContent);\n }\n\n for (const yarnLock of dirs.yarnLockDirs) {\n const lockFileDir = upath.dirname(yarnLock);\n const npmrcContent = await getNpmrcContent(lockFileDir);\n await updateNpmrcContent(lockFileDir, npmrcContent, additionalNpmrcContent);\n let yarnRcYmlFilename: string | undefined;\n let existingYarnrcYmlContent: string | undefined | null;\n if (additionalYarnRcYml) {\n yarnRcYmlFilename = getSiblingFileName(yarnLock, '.yarnrc.yml');\n existingYarnrcYmlContent = await readLocalFile(yarnRcYmlFilename, 'utf8');\n if (existingYarnrcYmlContent) {\n try {\n // TODO: use schema (#9610)\n const existingYarnrRcYml = parseSingleYaml<Record<string, unknown>>(\n existingYarnrcYmlContent,\n );\n\n const updatedYarnYrcYml = deepmerge(\n existingYarnrRcYml,\n yarn.fuzzyMatchAdditionalYarnrcYml(\n additionalYarnRcYml,\n existingYarnrRcYml,\n ),\n );\n\n await writeLocalFile(yarnRcYmlFilename, dump(updatedYarnYrcYml));\n logger.debug('Added authentication to .yarnrc.yml');\n } catch (err) {\n logger.warn({ err }, 'Error appending .yarnrc.yml content');\n }\n }\n }\n logger.debug(`Generating yarn.lock for ${lockFileDir}`);\n const lockFileName = upath.join(lockFileDir, 'yarn.lock');\n const upgrades = config.upgrades.filter(\n (upgrade) => upgrade.managerData?.yarnLock === yarnLock,\n );\n const res = await yarn.generateLockFile(lockFileDir, env, config, upgrades);\n if (res.error) {\n // istanbul ignore if\n if (res.stderr?.includes(`Couldn't find any versions for`)) {\n for (const upgrade of config.upgrades) {\n /* eslint-disable no-useless-escape */\n if (\n res.stderr.includes(\n `Couldn't find any versions for \\\\\\\"${upgrade.depName}\\\\\\\"`,\n )\n ) {\n logger.debug(\n { dependency: upgrade.depName, type: 'yarn' },\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n throw new ExternalHostError(\n new Error(\n 'lock file failed for the dependency being updated - skipping branch creation',\n ),\n NpmDatasource.id,\n );\n }\n /* eslint-enable no-useless-escape */\n }\n }\n artifactErrors.push({\n lockFile: yarnLock,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n stderr: res.stderr || res.stdout,\n });\n } else {\n const existingContent = await getFile(\n lockFileName,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n if (res.lockFile === existingContent) {\n logger.debug(\"yarn.lock hasn't changed\");\n } else {\n logger.debug('yarn.lock needs updating');\n updatedArtifacts.push({\n type: 'addition',\n path: lockFileName,\n // TODO #22198\n contents: res.lockFile!,\n });\n await updateYarnOffline(lockFileDir, updatedArtifacts);\n }\n\n // istanbul ignore if: already tested seperately, needs additional test?\n if (upgrades.some(yarn.isYarnUpdate)) {\n existingYarnrcYmlContent = await updateYarnBinary(\n lockFileDir,\n updatedArtifacts,\n existingYarnrcYmlContent,\n );\n }\n }\n await resetNpmrcContent(lockFileDir, npmrcContent);\n // istanbul ignore if: needs test\n if (existingYarnrcYmlContent) {\n // TODO #22198\n await writeLocalFile(yarnRcYmlFilename!, existingYarnrcYmlContent);\n }\n }\n\n for (const pnpmShrinkwrap of dirs.pnpmShrinkwrapDirs) {\n const lockFileDir = upath.dirname(pnpmShrinkwrap);\n const npmrcContent = await getNpmrcContent(lockFileDir);\n await updateNpmrcContent(lockFileDir, npmrcContent, additionalNpmrcContent);\n logger.debug(`Generating pnpm-lock.yaml for ${lockFileDir}`);\n const upgrades = config.upgrades.filter(\n (upgrade) => upgrade.managerData?.pnpmShrinkwrap === pnpmShrinkwrap,\n );\n const res = await pnpm.generateLockFile(lockFileDir, env, config, upgrades);\n if (res.error) {\n // istanbul ignore if\n if (res.stdout?.includes(`No compatible version found:`)) {\n for (const upgrade of config.upgrades) {\n if (\n res.stdout.includes(\n `No compatible version found: ${upgrade.depName}`,\n )\n ) {\n logger.debug(\n { dependency: upgrade.depName, type: 'pnpm' },\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n throw new ExternalHostError(\n Error(\n 'lock file failed for the dependency being updated - skipping branch creation',\n ),\n NpmDatasource.id,\n );\n }\n }\n }\n artifactErrors.push({\n lockFile: pnpmShrinkwrap,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n stderr: res.stderr || res.stdout,\n });\n } else {\n const existingContent = await getFile(\n pnpmShrinkwrap,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n if (res.lockFile === existingContent) {\n logger.debug(\"pnpm-lock.yaml hasn't changed\");\n } else {\n logger.debug('pnpm-lock.yaml needs updating');\n updatedArtifacts.push({\n type: 'addition',\n path: pnpmShrinkwrap,\n // TODO: can be undefined? (#22198)\n contents: res.lockFile!,\n });\n }\n }\n await resetNpmrcContent(lockFileDir, npmrcContent);\n }\n\n return { artifactErrors, updatedArtifacts };\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/modules/manager/npm/post-update/index.ts"],"names":[],"mappings":"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","sourcesContent":["// TODO: types (#22198)\nimport is from '@sindresorhus/is';\nimport deepmerge from 'deepmerge';\nimport upath from 'upath';\nimport { logger } from '../../../../logger';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getEnv } from '../../../../util/env';\nimport {\n ensureCacheDir,\n getSiblingFileName,\n readLocalFile,\n writeLocalFile,\n} from '../../../../util/fs';\nimport { getFile, getRepoStatus } from '../../../../util/git';\nimport type { FileChange } from '../../../../util/git/types';\nimport * as hostRules from '../../../../util/host-rules';\nimport { newlineRegex, regEx } from '../../../../util/regex';\nimport { ensureTrailingSlash } from '../../../../util/url';\nimport { dump, parseSingleYaml } from '../../../../util/yaml';\nimport { NpmDatasource } from '../../../datasource/npm';\nimport { scm } from '../../../platform/scm';\nimport type { PackageFile, PostUpdateConfig, Upgrade } from '../../types';\nimport { getZeroInstallPaths } from '../extract/yarn';\nimport type { NpmManagerData } from '../types';\nimport {\n composeLockFile,\n getNpmrcContent,\n parseLockFile,\n resetNpmrcContent,\n updateNpmrcContent,\n} from '../utils';\nimport * as npm from './npm';\nimport * as pnpm from './pnpm';\nimport { processHostRules } from './rules';\nimport type {\n AdditionalPackageFiles,\n ArtifactError,\n DetermineLockFileDirsResult,\n WriteExistingFilesResult,\n YarnRcYmlFile,\n} from './types';\nimport * as yarn from './yarn';\n\n// Strips empty values, deduplicates, and returns the directories from filenames\nconst getDirs = (arr: (string | null | undefined)[]): string[] =>\n Array.from(new Set(arr.filter(is.string)));\n\nexport function determineLockFileDirs(\n config: PostUpdateConfig,\n packageFiles: AdditionalPackageFiles,\n): DetermineLockFileDirsResult {\n const npmLockDirs: (string | undefined)[] = [];\n const yarnLockDirs: (string | undefined)[] = [];\n const pnpmShrinkwrapDirs: (string | undefined)[] = [];\n\n for (const upgrade of config.upgrades) {\n if (\n upgrade.updateType === 'lockFileMaintenance' ||\n upgrade.isRemediation === true ||\n upgrade.isLockfileUpdate === true\n ) {\n yarnLockDirs.push(upgrade.managerData?.yarnLock);\n npmLockDirs.push(upgrade.managerData?.npmLock);\n pnpmShrinkwrapDirs.push(upgrade.managerData?.pnpmShrinkwrap);\n }\n }\n\n if (\n config.upgrades.every(\n (upgrade: Upgrade) =>\n upgrade.updateType === 'lockFileMaintenance' ||\n upgrade.isLockfileUpdate,\n )\n ) {\n return {\n yarnLockDirs: getDirs(yarnLockDirs),\n npmLockDirs: getDirs(npmLockDirs),\n pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs),\n };\n }\n\n function getPackageFile(\n fileName: string,\n ): Partial<PackageFile<NpmManagerData>> {\n logger.trace('Looking for packageFile: ' + fileName);\n\n for (const packageFile of packageFiles.npm!) {\n if (packageFile.packageFile === fileName) {\n logger.trace({ packageFile }, 'Found packageFile');\n return packageFile;\n }\n logger.trace('No match');\n }\n return {};\n }\n\n // TODO #22198\n for (const p of config.updatedPackageFiles!) {\n logger.trace(`Checking ${String(p.path)} for lock files`);\n const packageFile = getPackageFile(p.path);\n // istanbul ignore if\n if (!packageFile.managerData) {\n continue;\n }\n // push full lock file names and convert them later\n yarnLockDirs.push(packageFile.managerData.yarnLock);\n npmLockDirs.push(packageFile.managerData.npmLock);\n pnpmShrinkwrapDirs.push(packageFile.managerData.pnpmShrinkwrap);\n }\n\n return {\n yarnLockDirs: getDirs(yarnLockDirs),\n npmLockDirs: getDirs(npmLockDirs),\n pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs),\n };\n}\n\nexport async function writeExistingFiles(\n config: PostUpdateConfig,\n packageFiles: AdditionalPackageFiles,\n): Promise<void> {\n if (!packageFiles.npm) {\n return;\n }\n const npmFiles = packageFiles.npm;\n logger.debug(\n { packageFiles: npmFiles.map((n) => n.packageFile) },\n 'Writing package.json files',\n );\n for (const packageFile of npmFiles) {\n // istanbul ignore if\n if (!packageFile.managerData) {\n continue;\n }\n // TODO #22198\n const basedir = upath.dirname(packageFile.packageFile!);\n const npmrc = packageFile.npmrc;\n const npmrcFilename = upath.join(basedir, '.npmrc');\n if (is.string(npmrc)) {\n try {\n await writeLocalFile(npmrcFilename, npmrc.replace(/\\n?$/, '\\n'));\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ npmrcFilename, err }, 'Error writing .npmrc');\n }\n }\n const npmLock = packageFile.managerData.npmLock;\n if (npmLock) {\n const npmLockPath = npmLock;\n logger.debug(`Writing ${npmLock}`);\n let existingNpmLock: string;\n try {\n existingNpmLock = (await getFile(npmLock)) ?? '';\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err }, 'Error reading npm lock file');\n existingNpmLock = '';\n }\n const { detectedIndent, lockFileParsed: npmLockParsed } =\n parseLockFile(existingNpmLock);\n if (npmLockParsed) {\n const packageNames =\n 'packages' in npmLockParsed\n ? Object.keys(npmLockParsed.packages)\n : [];\n const widens: string[] = [];\n let lockFileChanged = false;\n for (const upgrade of config.upgrades) {\n if (upgrade.lockFiles && !upgrade.lockFiles.includes(npmLock)) {\n continue;\n }\n if (!upgrade.managerData) {\n continue;\n }\n if (\n upgrade.rangeStrategy === 'widen' &&\n upgrade.managerData.npmLock === npmLock\n ) {\n // TODO #22198\n widens.push(upgrade.depName!);\n }\n const { depName } = upgrade;\n for (const packageName of packageNames) {\n if (\n 'packages' in npmLockParsed &&\n (packageName === `node_modules/${depName}` ||\n packageName.startsWith(`node_modules/${depName}/`))\n ) {\n logger.trace({ packageName }, 'Massaging out package name');\n lockFileChanged = true;\n delete npmLockParsed.packages[packageName];\n }\n }\n }\n if (widens.length) {\n logger.debug(\n `Removing ${String(widens)} from ${npmLock} to force an update`,\n );\n lockFileChanged = true;\n try {\n if ('dependencies' in npmLockParsed && npmLockParsed.dependencies) {\n widens.forEach((depName) => {\n // TODO #22198\n delete npmLockParsed.dependencies![depName];\n });\n }\n } catch /* istanbul ignore next */ {\n logger.warn(\n { npmLock },\n 'Error massaging package-lock.json for widen',\n );\n }\n }\n if (lockFileChanged) {\n logger.debug('Massaging npm lock file before writing to disk');\n existingNpmLock = composeLockFile(npmLockParsed, detectedIndent);\n }\n await writeLocalFile(npmLockPath, existingNpmLock);\n }\n }\n }\n}\n\nexport async function writeUpdatedPackageFiles(\n config: PostUpdateConfig,\n): Promise<void> {\n logger.trace({ config }, 'writeUpdatedPackageFiles');\n logger.debug('Writing any updated package files');\n if (!config.updatedPackageFiles) {\n logger.debug('No files found');\n return;\n }\n const supportedLockFiles = ['package-lock.json', 'yarn.lock'];\n for (const packageFile of config.updatedPackageFiles) {\n if (packageFile.type !== 'addition') {\n continue;\n }\n if (\n supportedLockFiles.some((fileName) => packageFile.path.endsWith(fileName))\n ) {\n logger.debug(`Writing lock file: ${packageFile.path}`);\n // TODO #22198\n\n await writeLocalFile(packageFile.path, packageFile.contents!);\n continue;\n }\n if (\n !(\n packageFile.path.endsWith('package.json') ||\n packageFile.path.endsWith('pnpm-workspace.yaml')\n )\n ) {\n continue;\n }\n logger.debug(`Writing ${packageFile.path}`);\n await writeLocalFile(packageFile.path, packageFile.contents!);\n }\n}\n\n// istanbul ignore next\nasync function updateYarnOffline(\n lockFileDir: string,\n updatedArtifacts: FileChange[],\n): Promise<void> {\n try {\n const resolvedPaths: string[] = [];\n const yarnrcYml = await getFile(upath.join(lockFileDir, '.yarnrc.yml'));\n const yarnrc = await getFile(upath.join(lockFileDir, '.yarnrc'));\n\n // As .yarnrc.yml overrides .yarnrc in Yarn 1 (https://git.io/JUcco)\n // both files may exist, so check for .yarnrc.yml first\n if (yarnrcYml) {\n // Yarn 2 (offline cache and zero-installs)\n const paths = getZeroInstallPaths(yarnrcYml);\n resolvedPaths.push(...paths.map((p) => upath.join(lockFileDir, p)));\n } else if (yarnrc) {\n // Yarn 1 (offline mirror)\n const mirrorLine = yarnrc\n .split(newlineRegex)\n .find((line) => line.startsWith('yarn-offline-mirror '));\n if (mirrorLine) {\n const mirrorPath = ensureTrailingSlash(\n mirrorLine.split(' ')[1].replace(regEx(/\"/g), ''),\n );\n resolvedPaths.push(upath.join(lockFileDir, mirrorPath));\n }\n }\n logger.debug({ resolvedPaths }, 'updateYarnOffline resolvedPaths');\n\n if (resolvedPaths.length) {\n const status = await getRepoStatus();\n for (const f of status.modified.concat(status.not_added)) {\n if (resolvedPaths.some((p) => f.startsWith(p))) {\n updatedArtifacts.push({\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n });\n }\n }\n for (const f of status.deleted || []) {\n if (resolvedPaths.some((p) => f.startsWith(p))) {\n updatedArtifacts.push({ type: 'deletion', path: f });\n }\n }\n }\n } catch (err) {\n logger.error({ err }, 'Error updating yarn offline packages');\n }\n}\n\n// TODO: move to ./yarn.ts\n// exported for testing\nexport async function updateYarnBinary(\n lockFileDir: string,\n updatedArtifacts: FileChange[],\n existingYarnrcYmlContent: string | undefined | null,\n): Promise<string | undefined | null> {\n let yarnrcYml = existingYarnrcYmlContent;\n try {\n const yarnrcYmlFilename = upath.join(lockFileDir, '.yarnrc.yml');\n yarnrcYml ??= (await getFile(yarnrcYmlFilename)) ?? undefined;\n const newYarnrcYml = await readLocalFile(yarnrcYmlFilename, 'utf8');\n if (!is.string(yarnrcYml) || !is.string(newYarnrcYml)) {\n return existingYarnrcYmlContent;\n }\n\n // TODO: use schema (#9610)\n const oldYarnPath = parseSingleYaml<YarnRcYmlFile>(yarnrcYml)?.yarnPath;\n const newYarnPath = parseSingleYaml<YarnRcYmlFile>(newYarnrcYml)?.yarnPath;\n if (\n !is.nonEmptyStringAndNotWhitespace(oldYarnPath) ||\n !is.nonEmptyStringAndNotWhitespace(newYarnPath)\n ) {\n return existingYarnrcYmlContent;\n }\n\n const oldYarnFullPath = upath.join(lockFileDir, oldYarnPath);\n const newYarnFullPath = upath.join(lockFileDir, newYarnPath);\n logger.debug({ oldYarnPath, newYarnPath }, 'Found updated Yarn binary');\n\n yarnrcYml = yarnrcYml.replace(oldYarnPath, newYarnPath);\n updatedArtifacts.push(\n {\n type: 'addition',\n path: yarnrcYmlFilename,\n contents: yarnrcYml,\n },\n {\n type: 'deletion',\n path: oldYarnFullPath,\n },\n {\n type: 'addition',\n path: newYarnFullPath,\n contents: await readLocalFile(newYarnFullPath, 'utf8'),\n isExecutable: true,\n },\n );\n } catch (err) /* istanbul ignore next */ {\n logger.error({ err }, 'Error updating Yarn binary');\n }\n return existingYarnrcYmlContent && yarnrcYml;\n}\n\nexport async function getAdditionalFiles(\n config: PostUpdateConfig<NpmManagerData>,\n packageFiles: AdditionalPackageFiles,\n): Promise<WriteExistingFilesResult> {\n logger.trace({ config }, 'getAdditionalFiles');\n const artifactErrors: ArtifactError[] = [];\n const updatedArtifacts: FileChange[] = [];\n if (!packageFiles.npm?.length) {\n return { artifactErrors, updatedArtifacts };\n }\n if (!config.updateLockFiles) {\n logger.debug('Skipping lock file generation');\n return { artifactErrors, updatedArtifacts };\n }\n logger.debug('Getting updated lock files');\n if (\n config.isLockFileMaintenance &&\n config.reuseExistingBranch &&\n (await scm.branchExists(config.branchName))\n ) {\n logger.debug('Skipping lockFileMaintenance update');\n return { artifactErrors, updatedArtifacts };\n }\n const dirs = determineLockFileDirs(config, packageFiles);\n logger.trace({ dirs }, 'lock file dirs');\n await writeExistingFiles(config, packageFiles);\n await writeUpdatedPackageFiles(config);\n\n const { additionalNpmrcContent, additionalYarnRcYml } = processHostRules();\n\n // This isn't passed directly to the child process, so no need to filter.\n // But pass custom env and user vars.\n const env = {\n ...getEnv(),\n NPM_CONFIG_CACHE: await ensureCacheDir('npm'),\n YARN_CACHE_FOLDER: await ensureCacheDir('yarn'),\n YARN_GLOBAL_FOLDER: await ensureCacheDir('berry'),\n npm_config_store: await ensureCacheDir('pnpm'),\n NODE_ENV: 'dev',\n };\n\n let token: string | undefined;\n try {\n ({ token } = hostRules.find({\n hostType: 'github',\n url: 'https://api.github.com/',\n }));\n token = token ? /* istanbul ignore next */ `${token}@` : token;\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err }, 'Error getting token for packageFile');\n }\n const tokenRe = regEx(`${token ?? ''}`, 'g', false);\n for (const npmLock of dirs.npmLockDirs) {\n const lockFileDir = upath.dirname(npmLock);\n const npmrcContent = await getNpmrcContent(lockFileDir);\n await updateNpmrcContent(lockFileDir, npmrcContent, additionalNpmrcContent);\n const fileName = upath.basename(npmLock);\n logger.debug(`Generating ${fileName} for ${lockFileDir}`);\n const upgrades = config.upgrades.filter(\n (upgrade) => upgrade.managerData?.npmLock === npmLock,\n );\n const res = await npm.generateLockFile(\n lockFileDir,\n env,\n fileName,\n config,\n upgrades,\n );\n if (res.error) {\n // istanbul ignore if\n if (res.stderr?.includes('No matching version found for')) {\n for (const upgrade of config.upgrades) {\n if (\n res.stderr.includes(\n `No matching version found for ${upgrade.depName}`,\n )\n ) {\n logger.debug(\n { dependency: upgrade.depName, type: 'npm' },\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n const err = new Error(\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n throw new ExternalHostError(err, NpmDatasource.id);\n }\n }\n }\n artifactErrors.push({\n lockFile: npmLock,\n stderr: res.stderr,\n });\n } else if (res.lockFile) {\n const existingContent = await getFile(\n npmLock,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n if (res.lockFile === existingContent) {\n logger.debug(`${npmLock} hasn't changed`);\n } else {\n logger.debug(`${npmLock} needs updating`);\n updatedArtifacts.push({\n type: 'addition',\n path: npmLock,\n // TODO: can this be undefined? (#22198)\n\n contents: res.lockFile.replace(tokenRe, ''),\n });\n }\n }\n await resetNpmrcContent(lockFileDir, npmrcContent);\n }\n\n for (const yarnLock of dirs.yarnLockDirs) {\n const lockFileDir = upath.dirname(yarnLock);\n const npmrcContent = await getNpmrcContent(lockFileDir);\n await updateNpmrcContent(lockFileDir, npmrcContent, additionalNpmrcContent);\n let yarnRcYmlFilename: string | undefined;\n let existingYarnrcYmlContent: string | undefined | null;\n if (additionalYarnRcYml) {\n yarnRcYmlFilename = getSiblingFileName(yarnLock, '.yarnrc.yml');\n existingYarnrcYmlContent = await readLocalFile(yarnRcYmlFilename, 'utf8');\n if (existingYarnrcYmlContent) {\n try {\n // TODO: use schema (#9610)\n const existingYarnrRcYml = parseSingleYaml<Record<string, unknown>>(\n existingYarnrcYmlContent,\n );\n\n const updatedYarnYrcYml = deepmerge(\n existingYarnrRcYml,\n yarn.fuzzyMatchAdditionalYarnrcYml(\n additionalYarnRcYml,\n existingYarnrRcYml,\n ),\n );\n\n await writeLocalFile(yarnRcYmlFilename, dump(updatedYarnYrcYml));\n logger.debug('Added authentication to .yarnrc.yml');\n } catch (err) {\n logger.warn({ err }, 'Error appending .yarnrc.yml content');\n }\n }\n }\n logger.debug(`Generating yarn.lock for ${lockFileDir}`);\n const lockFileName = upath.join(lockFileDir, 'yarn.lock');\n const upgrades = config.upgrades.filter(\n (upgrade) => upgrade.managerData?.yarnLock === yarnLock,\n );\n const res = await yarn.generateLockFile(lockFileDir, env, config, upgrades);\n if (res.error) {\n // istanbul ignore if\n if (res.stderr?.includes(`Couldn't find any versions for`)) {\n for (const upgrade of config.upgrades) {\n /* eslint-disable no-useless-escape */\n if (\n res.stderr.includes(\n `Couldn't find any versions for \\\\\\\"${upgrade.depName}\\\\\\\"`,\n )\n ) {\n logger.debug(\n { dependency: upgrade.depName, type: 'yarn' },\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n throw new ExternalHostError(\n new Error(\n 'lock file failed for the dependency being updated - skipping branch creation',\n ),\n NpmDatasource.id,\n );\n }\n /* eslint-enable no-useless-escape */\n }\n }\n artifactErrors.push({\n lockFile: yarnLock,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n stderr: res.stderr || res.stdout,\n });\n } else {\n const existingContent = await getFile(\n lockFileName,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n if (res.lockFile === existingContent) {\n logger.debug(\"yarn.lock hasn't changed\");\n } else {\n logger.debug('yarn.lock needs updating');\n updatedArtifacts.push({\n type: 'addition',\n path: lockFileName,\n // TODO #22198\n contents: res.lockFile!,\n });\n await updateYarnOffline(lockFileDir, updatedArtifacts);\n }\n\n // istanbul ignore if: already tested seperately, needs additional test?\n if (upgrades.some(yarn.isYarnUpdate)) {\n existingYarnrcYmlContent = await updateYarnBinary(\n lockFileDir,\n updatedArtifacts,\n existingYarnrcYmlContent,\n );\n }\n }\n await resetNpmrcContent(lockFileDir, npmrcContent);\n // istanbul ignore if: needs test\n if (existingYarnrcYmlContent) {\n // TODO #22198\n await writeLocalFile(yarnRcYmlFilename!, existingYarnrcYmlContent);\n }\n }\n\n for (const pnpmShrinkwrap of dirs.pnpmShrinkwrapDirs) {\n const lockFileDir = upath.dirname(pnpmShrinkwrap);\n const npmrcContent = await getNpmrcContent(lockFileDir);\n await updateNpmrcContent(lockFileDir, npmrcContent, additionalNpmrcContent);\n logger.debug(`Generating pnpm-lock.yaml for ${lockFileDir}`);\n const upgrades = config.upgrades.filter(\n (upgrade) => upgrade.managerData?.pnpmShrinkwrap === pnpmShrinkwrap,\n );\n const res = await pnpm.generateLockFile(lockFileDir, env, config, upgrades);\n if (res.error) {\n // istanbul ignore if\n if (res.stdout?.includes(`No compatible version found:`)) {\n for (const upgrade of config.upgrades) {\n if (\n res.stdout.includes(\n `No compatible version found: ${upgrade.depName}`,\n )\n ) {\n logger.debug(\n { dependency: upgrade.depName, type: 'pnpm' },\n 'lock file failed for the dependency being updated - skipping branch creation',\n );\n throw new ExternalHostError(\n Error(\n 'lock file failed for the dependency being updated - skipping branch creation',\n ),\n NpmDatasource.id,\n );\n }\n }\n }\n artifactErrors.push({\n lockFile: pnpmShrinkwrap,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n stderr: res.stderr || res.stdout,\n });\n } else {\n const existingContent = await getFile(\n pnpmShrinkwrap,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n if (res.lockFile === existingContent) {\n logger.debug(\"pnpm-lock.yaml hasn't changed\");\n } else {\n logger.debug('pnpm-lock.yaml needs updating');\n updatedArtifacts.push({\n type: 'addition',\n path: pnpmShrinkwrap,\n // TODO: can be undefined? (#22198)\n contents: res.lockFile!,\n });\n }\n }\n await resetNpmrcContent(lockFileDir, npmrcContent);\n }\n\n return { artifactErrors, updatedArtifacts };\n}\n"]}
|
package/dist/util/exec/env.js
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.getChildProcessEnv = getChildProcessEnv;
|
4
4
|
const global_1 = require("../../config/global");
|
5
|
-
const env_1 = require("../env");
|
6
5
|
const basicEnvVars = [
|
7
6
|
'HTTP_PROXY',
|
8
7
|
'HTTPS_PROXY',
|
@@ -42,21 +41,20 @@ const basicEnvVars = [
|
|
42
41
|
'COREPACK_ROOT',
|
43
42
|
];
|
44
43
|
function getChildProcessEnv(customEnvVars = []) {
|
45
|
-
const combinedEnv = (0, env_1.getEnv)();
|
46
44
|
const env = {};
|
47
45
|
if (global_1.GlobalConfig.get('exposeAllEnv')) {
|
48
|
-
return { ...
|
46
|
+
return { ...process.env };
|
49
47
|
}
|
50
48
|
const envVars = [...basicEnvVars, ...customEnvVars];
|
51
49
|
envVars.forEach((envVar) => {
|
52
|
-
if (typeof
|
53
|
-
env[envVar] =
|
50
|
+
if (typeof process.env[envVar] !== 'undefined') {
|
51
|
+
env[envVar] = process.env[envVar];
|
54
52
|
}
|
55
53
|
});
|
56
54
|
// Copy containerbase url replacements
|
57
|
-
for (const key of Object.keys(
|
55
|
+
for (const key of Object.keys(process.env)) {
|
58
56
|
if (/^URL_REPLACE_\d+_(?:FROM|TO)$/.test(key)) {
|
59
|
-
env[key] =
|
57
|
+
env[key] = process.env[key];
|
60
58
|
}
|
61
59
|
}
|
62
60
|
return env;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../lib/util/exec/env.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../lib/util/exec/env.ts"],"names":[],"mappings":";;AAyCA,gDAqBC;AA9DD,gDAAmD;AAEnD,MAAM,YAAY,GAAG;IACnB,YAAY;IACZ,aAAa;IACb,UAAU;IACV,YAAY;IACZ,aAAa;IACb,UAAU;IACV,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,8BAA8B;IAC9B,yEAAyE;IACzE,cAAc;IACd,eAAe;IACf,qBAAqB;IACrB,yCAAyC;IACzC,cAAc;IACd,mBAAmB;IACnB,SAAS;IACT,cAAc;IACd,+CAA+C;IAC/C,4BAA4B;IAC5B,yBAAyB;IACzB,wBAAwB;IACxB,8BAA8B;IAC9B,oCAAoC;IACpC,eAAe;IACf,yBAAyB;IACzB,uBAAuB;IACvB,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,eAAe;CAChB,CAAC;AAEF,SAAgB,kBAAkB,CAChC,gBAA0B,EAAE;IAE5B,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,IAAI,qBAAY,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAC;IACpD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE,CAAC;YAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAI,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { GlobalConfig } from '../../config/global';\n\nconst basicEnvVars = [\n 'HTTP_PROXY',\n 'HTTPS_PROXY',\n 'NO_PROXY',\n 'http_proxy',\n 'https_proxy',\n 'no_proxy',\n 'HOME',\n 'PATH',\n 'LC_ALL',\n 'LANG',\n 'DOCKER_HOST',\n 'DOCKER_TLS_VERIFY',\n 'DOCKER_CERT_PATH',\n // Custom certificte variables\n // https://github.com/containerbase/base/blob/main/docs/custom-root-ca.md\n 'SSL_CERT_DIR',\n 'SSL_CERT_FILE',\n 'NODE_EXTRA_CA_CERTS',\n // Required for NuGet to work on Windows.\n 'PROGRAMFILES',\n 'PROGRAMFILES(X86)',\n 'APPDATA',\n 'LOCALAPPDATA',\n // Corepack: https://github.com/nodejs/corepack\n 'COREPACK_DEFAULT_TO_LATEST',\n 'COREPACK_ENABLE_NETWORK',\n 'COREPACK_ENABLE_STRICT',\n 'COREPACK_ENABLE_PROJECT_SPEC',\n 'COREPACK_ENABLE_UNSAFE_CUSTOM_URLS',\n 'COREPACK_HOME',\n 'COREPACK_INTEGRITY_KEYS',\n 'COREPACK_NPM_REGISTRY',\n 'COREPACK_NPM_TOKEN',\n 'COREPACK_NPM_USERNAME',\n 'COREPACK_NPM_PASSWORD',\n 'COREPACK_ROOT',\n];\n\nexport function getChildProcessEnv(\n customEnvVars: string[] = [],\n): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = {};\n if (GlobalConfig.get('exposeAllEnv')) {\n return { ...process.env };\n }\n const envVars = [...basicEnvVars, ...customEnvVars];\n envVars.forEach((envVar) => {\n if (typeof process.env[envVar] !== 'undefined') {\n env[envVar] = process.env[envVar];\n }\n });\n\n // Copy containerbase url replacements\n for (const key of Object.keys(process.env)) {\n if (/^URL_REPLACE_\\d+_(?:FROM|TO)$/.test(key)) {\n env[key] = process.env[key];\n }\n }\n return env;\n}\n"]}
|
@@ -1,2 +1,2 @@
|
|
1
1
|
import type { ExecOptions } from './types';
|
2
|
-
export declare function getChildEnv({ extraEnv, env: forcedEnv, }
|
2
|
+
export declare function getChildEnv({ extraEnv, env: forcedEnv, }?: Pick<ExecOptions, 'env' | 'extraEnv'>): Record<string, string>;
|
package/dist/util/exec/utils.js
CHANGED
@@ -5,7 +5,7 @@ const tslib_1 = require("tslib");
|
|
5
5
|
const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
|
6
6
|
const env_1 = require("../env");
|
7
7
|
const env_2 = require("./env");
|
8
|
-
function getChildEnv({ extraEnv, env: forcedEnv = {}, }) {
|
8
|
+
function getChildEnv({ extraEnv, env: forcedEnv = {}, } = {}) {
|
9
9
|
const globalConfigEnv = (0, env_1.getCustomEnv)();
|
10
10
|
const userConfiguredEnv = (0, env_1.getUserEnv)();
|
11
11
|
const inheritedKeys = [];
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/util/exec/utils.ts"],"names":[],"mappings":";;AAKA,kCA+BC;;AApCD,kEAAkC;AAClC,gCAAkD;AAClD,+BAA2C;AAG3C,SAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,GAAG,EAAE,SAAS,GAAG,EAAE,
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/util/exec/utils.ts"],"names":[],"mappings":";;AAKA,kCA+BC;;AApCD,kEAAkC;AAClC,gCAAkD;AAClD,+BAA2C;AAG3C,SAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,GAAG,EAAE,SAAS,GAAG,EAAE,MACsB,EAAE;IAC3C,MAAM,eAAe,GAAG,IAAA,kBAAY,GAAE,CAAC;IACvC,MAAM,iBAAiB,GAAG,IAAA,gBAAU,GAAE,CAAC;IAEvC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,wBAAkB,EAAC,aAAa,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG;QAClB,GAAG,QAAQ;QACX,GAAG,SAAS;QACZ,GAAG,eAAe;QAClB,GAAG,iBAAiB;QACpB,GAAG,SAAS;KACb,CAAC;IAEF,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { getCustomEnv, getUserEnv } from '../env';\nimport { getChildProcessEnv } from './env';\nimport type { ExecOptions } from './types';\n\nexport function getChildEnv({\n extraEnv,\n env: forcedEnv = {},\n}: Pick<ExecOptions, 'env' | 'extraEnv'> = {}): Record<string, string> {\n const globalConfigEnv = getCustomEnv();\n const userConfiguredEnv = getUserEnv();\n\n const inheritedKeys: string[] = [];\n for (const [key, val] of Object.entries(extraEnv ?? {})) {\n if (is.string(val)) {\n inheritedKeys.push(key);\n }\n }\n\n const parentEnv = getChildProcessEnv(inheritedKeys);\n const combinedEnv = {\n ...extraEnv,\n ...parentEnv,\n ...globalConfigEnv,\n ...userConfiguredEnv,\n ...forcedEnv,\n };\n\n const result: Record<string, string> = {};\n for (const [key, val] of Object.entries(combinedEnv)) {\n if (is.string(val)) {\n result[key] = `${val}`;\n }\n }\n\n return result;\n}\n"]}
|
package/dist/util/git/index.js
CHANGED
@@ -224,7 +224,7 @@ async function initRepo(args) {
|
|
224
224
|
config.ignoredAuthors = [];
|
225
225
|
config.additionalBranches = [];
|
226
226
|
config.branchIsModified = {};
|
227
|
-
// TODO: safe to pass all env variables?
|
227
|
+
// TODO: safe to pass all env variables? use `getChildEnv` instead?
|
228
228
|
git = (0, simple_git_1.simpleGit)(global_1.GlobalConfig.get('localDir'), (0, config_1.simpleGitConfig)()).env({
|
229
229
|
...(0, env_1.getEnv)(),
|
230
230
|
LANG: 'C.UTF-8',
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/git/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { setTimeout } from 'timers/promises';\nimport is from '@sindresorhus/is';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport type { Options, SimpleGit, TaskOptions } from 'simple-git';\nimport { ResetMode, simpleGit } from 'simple-git';\nimport upath from 'upath';\nimport { configFileNames } from '../../config/app-strings';\nimport { GlobalConfig } from '../../config/global';\nimport type { RenovateConfig } from '../../config/types';\nimport {\n CONFIG_VALIDATION,\n INVALID_PATH,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport type { GitProtocol } from '../../types/git';\nimport { incLimitedValue } from '../../workers/global/limits';\nimport { getCache } from '../cache/repository';\nimport { getEnv } from '../env';\nimport { newlineRegex, regEx } from '../regex';\nimport { matchRegexOrGlobList } from '../string-match';\nimport { parseGitAuthor } from './author';\nimport {\n getCachedBehindBaseResult,\n setCachedBehindBaseResult,\n} from './behind-base-branch-cache';\nimport { getNoVerify, simpleGitConfig } from './config';\nimport {\n getCachedConflictResult,\n setCachedConflictResult,\n} from './conflicts-cache';\nimport {\n bulkChangesDisallowed,\n checkForPlatformFailure,\n handleCommitError,\n} from './error';\nimport {\n getCachedModifiedResult,\n setCachedModifiedResult,\n} from './modified-cache';\nimport { configSigningKey, writePrivateKey } from './private-key';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LocalConfig,\n LongCommitSha,\n PushFilesConfig,\n StatusResult,\n StorageConfig,\n TreeItem,\n} from './types';\n\nexport { setNoVerify } from './config';\nexport { setPrivateKey } from './private-key';\n\n// Retry parameters\nconst retryCount = 5;\nconst delaySeconds = 3;\nconst delayFactor = 2;\n\n// A generic wrapper for simpleGit.* calls to make them more fault-tolerant\nexport async function gitRetry<T>(gitFunc: () => Promise<T>): Promise<T> {\n let round = 0;\n let lastError: Error | undefined;\n\n while (round <= retryCount) {\n if (round > 0) {\n logger.debug(`gitRetry round ${round}`);\n }\n try {\n const res = await gitFunc();\n if (round > 1) {\n logger.debug('Successful retry of git function');\n }\n return res;\n } catch (err) {\n lastError = err;\n logger.debug({ err }, `Git function thrown`);\n // Try to transform the Error to ExternalHostError\n const errChecked = checkForPlatformFailure(err);\n if (errChecked instanceof ExternalHostError) {\n logger.debug(\n { err: errChecked },\n `ExternalHostError thrown in round ${\n round + 1\n } of ${retryCount} - retrying in the next round`,\n );\n } else {\n throw err;\n }\n }\n\n const nextDelay = delayFactor ^ ((round - 1) * delaySeconds);\n logger.trace({ nextDelay }, `Delay next round`);\n await setTimeout(1000 * nextDelay);\n\n round++;\n }\n\n // Can't be `undefined` here.\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw lastError;\n}\n\nasync function isDirectory(dir: string): Promise<boolean> {\n try {\n return (await fs.stat(dir)).isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function getDefaultBranch(git: SimpleGit): Promise<string> {\n // see https://stackoverflow.com/a/62352647/3005034\n try {\n let res = await git.raw(['rev-parse', '--abbrev-ref', 'origin/HEAD']);\n /* v8 ignore start -- TODO: add test */\n if (!res) {\n logger.debug('Could not determine default branch using git rev-parse');\n const headPrefix = 'HEAD branch: ';\n res = (await git.raw(['remote', 'show', 'origin']))\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith(headPrefix))!\n .replace(headPrefix, '');\n }\n /* v8 ignore stop */\n return res.replace('origin/', '').trim();\n /* v8 ignore start -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (\n err.message.startsWith(\n 'fatal: ref refs/remotes/origin/HEAD is not a symbolic ref',\n )\n ) {\n throw new Error(REPOSITORY_EMPTY);\n }\n if (err.message.includes(\"fatal: ambiguous argument 'origin/HEAD'\")) {\n logger.warn({ err }, 'Error getting default branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n /* v8 ignore stop */\n}\n\nlet config: LocalConfig = {} as any;\n\n// TODO: can be undefined\nlet git: SimpleGit;\nlet gitInitialized: boolean;\nlet submodulesInitizialized: boolean;\n\nlet privateKeySet = false;\n\nexport const GIT_MINIMUM_VERSION = '2.33.0'; // git show-current\n\nexport async function validateGitVersion(): Promise<boolean> {\n let version: string | undefined;\n const globalGit = simpleGit();\n try {\n const { major, minor, patch, installed } = await globalGit.version();\n /* v8 ignore next 4 -- TODO: add test */\n if (!installed) {\n logger.error('Git not installed');\n return false;\n }\n version = `${major}.${minor}.${patch}`;\n /* v8 ignore next 4 */\n } catch (err) {\n logger.error({ err }, 'Error fetching git version');\n return false;\n }\n /* v8 ignore next 7 -- TODO: add test */\n if (!(version && semver.gte(version, GIT_MINIMUM_VERSION))) {\n logger.error(\n { detectedVersion: version, minimumVersion: GIT_MINIMUM_VERSION },\n 'Git version needs upgrading',\n );\n return false;\n }\n logger.debug(`Found valid git version: ${version}`);\n return true;\n}\n\nasync function fetchBranchCommits(): Promise<void> {\n config.branchCommits = {};\n const opts = ['ls-remote', '--heads', config.url];\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.unshift(e[0], `${e[1]!}`),\n );\n }\n try {\n const lsRemoteRes = await gitRetry(() => git.raw(opts));\n logger.trace({ lsRemoteRes }, 'git ls-remote result');\n lsRemoteRes\n .split(newlineRegex)\n .filter(Boolean)\n .map((line) => line.trim().split(regEx(/\\s+/)))\n .forEach(([sha, ref]) => {\n config.branchCommits[ref.replace('refs/heads/', '')] =\n sha as LongCommitSha;\n });\n logger.trace({ branchCommits: config.branchCommits }, 'branch commits');\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug({ err }, 'git error');\n if (err.message?.includes('Please ask the owner to check their account')) {\n throw new Error(REPOSITORY_DISABLED);\n }\n throw err;\n }\n}\n\nexport async function fetchRevSpec(revSpec: string): Promise<void> {\n await gitRetry(() => git.fetch(['origin', revSpec]));\n}\n\nexport async function initRepo(args: StorageConfig): Promise<void> {\n config = { ...args } as any;\n config.ignoredAuthors = [];\n config.additionalBranches = [];\n config.branchIsModified = {};\n // TODO: safe to pass all env variables?\n git = simpleGit(GlobalConfig.get('localDir'), simpleGitConfig()).env({\n ...getEnv(),\n LANG: 'C.UTF-8',\n LC_ALL: 'C.UTF-8',\n });\n gitInitialized = false;\n submodulesInitizialized = false;\n await fetchBranchCommits();\n}\n\nasync function resetToBranch(branchName: string): Promise<void> {\n logger.debug(`resetToBranch(${branchName})`);\n await git.raw(['reset', '--hard']);\n await gitRetry(() => git.checkout(branchName));\n await git.raw(['reset', '--hard', 'origin/' + branchName]);\n await git.raw(['clean', '-fd']);\n}\n\n/* v8 ignore next 4 -- TODO: add test */\nexport async function resetToCommit(commit: LongCommitSha): Promise<void> {\n logger.debug(`resetToCommit(${commit})`);\n await git.raw(['reset', '--hard', commit]);\n}\n\nasync function deleteLocalBranch(branchName: string): Promise<void> {\n await git.branch(['-D', branchName]);\n}\n\nasync function cleanLocalBranches(): Promise<void> {\n const existingBranches = (await git.raw(['branch']))\n .split(newlineRegex)\n .map((branch) => branch.trim())\n .filter((branch) => branch.length > 0 && !branch.startsWith('* '));\n logger.debug({ existingBranches });\n for (const branchName of existingBranches) {\n await deleteLocalBranch(branchName);\n }\n}\n\nexport function setGitAuthor(gitAuthor: string | undefined): void {\n const gitAuthorParsed = parseGitAuthor(\n gitAuthor ?? 'Renovate Bot <renovate@whitesourcesoftware.com>',\n );\n if (!gitAuthorParsed) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'None';\n error.validationError = 'Invalid gitAuthor';\n error.validationMessage = `\\`gitAuthor\\` is not parsed as valid RFC5322 format: \\`${gitAuthor!}\\``;\n throw error;\n }\n config.gitAuthorName = gitAuthorParsed.name;\n config.gitAuthorEmail = gitAuthorParsed.address;\n}\n\nexport async function writeGitAuthor(): Promise<void> {\n const { gitAuthorName, gitAuthorEmail, writeGitDone } = config;\n /* v8 ignore next 3 -- TODO: add test */\n if (writeGitDone) {\n return;\n }\n config.writeGitDone = true;\n try {\n if (gitAuthorName) {\n logger.debug(`Setting git author name: ${gitAuthorName}`);\n await git.addConfig('user.name', gitAuthorName);\n }\n if (gitAuthorEmail) {\n logger.debug(`Setting git author email: ${gitAuthorEmail}`);\n await git.addConfig('user.email', gitAuthorEmail);\n }\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(\n { err, gitAuthorName, gitAuthorEmail },\n 'Error setting git author config',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n}\n\nexport function setUserRepoConfig({\n gitIgnoredAuthors,\n gitAuthor,\n}: RenovateConfig): void {\n config.ignoredAuthors = gitIgnoredAuthors ?? [];\n setGitAuthor(gitAuthor);\n}\n\nexport async function getSubmodules(): Promise<string[]> {\n try {\n return (\n (await git.raw([\n 'config',\n '--file',\n '.gitmodules',\n '--get-regexp',\n '\\\\.path',\n ])) || ''\n )\n .trim()\n .split(regEx(/[\\n\\s]/))\n .filter((_e: string, i: number) => i % 2);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'Error getting submodules');\n return [];\n }\n}\n\nexport async function cloneSubmodules(\n shouldClone: boolean,\n cloneSubmodulesFilter: string[] | undefined,\n): Promise<void> {\n if (!shouldClone || submodulesInitizialized) {\n return;\n }\n submodulesInitizialized = true;\n await syncGit();\n const submodules = await getSubmodules();\n for (const submodule of submodules) {\n if (!matchRegexOrGlobList(submodule, cloneSubmodulesFilter ?? ['*'])) {\n logger.debug(\n { cloneSubmodulesFilter },\n `Skipping submodule ${submodule}`,\n );\n continue;\n }\n try {\n logger.debug(`Cloning git submodule at ${submodule}`);\n await gitRetry(() =>\n git.submoduleUpdate(['--init', '--recursive', submodule]),\n );\n } catch (err) {\n logger.warn({ err, submodule }, `Unable to initialise git submodule`);\n }\n }\n}\n\nexport function isCloned(): boolean {\n return gitInitialized;\n}\n\nexport async function syncGit(): Promise<void> {\n if (gitInitialized) {\n /* v8 ignore next 3 -- TODO: add test */\n if (getEnv().RENOVATE_X_CLEAR_HOOKS) {\n await git.raw(['config', 'core.hooksPath', '/dev/null']);\n }\n return;\n }\n /* v8 ignore next 3 -- failsafe TODO: add test */\n if (GlobalConfig.get('platform') === 'local') {\n throw new Error('Cannot sync git when platform=local');\n }\n gitInitialized = true;\n const localDir = GlobalConfig.get('localDir')!;\n logger.debug(`Initializing git repository into ${localDir}`);\n const gitHead = upath.join(localDir, '.git/HEAD');\n let clone = true;\n\n if (await fs.pathExists(gitHead)) {\n try {\n await git.raw(['remote', 'set-url', 'origin', config.url]);\n const fetchStart = Date.now();\n await gitRetry(() => git.fetch(['--prune', 'origin']));\n config.currentBranch =\n config.currentBranch || (await getDefaultBranch(git));\n await resetToBranch(config.currentBranch);\n await cleanLocalBranches();\n const durationMs = Math.round(Date.now() - fetchStart);\n logger.info({ durationMs }, 'git fetch completed');\n clone = false;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n logger.info({ err }, 'git fetch error');\n }\n }\n if (clone) {\n const cloneStart = Date.now();\n try {\n const opts: string[] = [];\n if (config.defaultBranch) {\n opts.push('-b', config.defaultBranch);\n }\n if (config.fullClone) {\n logger.debug('Performing full clone');\n } else {\n logger.debug('Performing blobless clone');\n opts.push('--filter=blob:none');\n }\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.push(e[0], `${e[1]!}`),\n );\n }\n const emptyDirAndClone = async (): Promise<void> => {\n await fs.emptyDir(localDir);\n await git.clone(config.url, '.', opts);\n };\n await gitRetry(() => emptyDirAndClone());\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'git clone error');\n if (err.message?.includes('No space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n throw new ExternalHostError(err, 'git');\n }\n const durationMs = Math.round(Date.now() - cloneStart);\n logger.debug({ durationMs }, 'git clone completed');\n }\n try {\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: not a git repository')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n // This will only happen now if set in global config\n await cloneSubmodules(!!config.cloneSubmodules, config.cloneSubmodulesFilter);\n try {\n const latestCommit = (await git.log({ n: 1 })).latest;\n logger.debug({ latestCommit }, 'latest repository commit');\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message.includes('does not have any commits yet')) {\n throw new Error(REPOSITORY_EMPTY);\n }\n logger.warn({ err }, 'Cannot retrieve latest commit');\n }\n config.currentBranch =\n config.currentBranch ??\n config.defaultBranch ??\n (await getDefaultBranch(git));\n /* v8 ignore next -- TODO: add test */\n delete getCache()?.semanticCommits;\n}\n\nexport async function getRepoStatus(path?: string): Promise<StatusResult> {\n if (is.string(path)) {\n const localDir = GlobalConfig.get('localDir');\n const localPath = upath.resolve(localDir, path);\n if (!localPath.startsWith(upath.resolve(localDir))) {\n logger.warn(\n { localPath, localDir },\n 'Preventing access to file outside the local directory',\n );\n throw new Error(INVALID_PATH);\n }\n }\n\n await syncGit();\n return git.status(path ? [path] : []);\n}\n\nexport function branchExists(branchName: string): boolean {\n return !!config.branchCommits[branchName];\n}\n\n// Return the commit SHA for a branch\nexport function getBranchCommit(branchName: string): LongCommitSha | null {\n return config.branchCommits[branchName] || null;\n}\n\nexport async function getCommitMessages(): Promise<string[]> {\n logger.debug('getCommitMessages');\n if (GlobalConfig.get('platform') !== 'local') {\n await syncGit();\n }\n try {\n const res = await git.log({\n n: 20,\n format: { message: '%s' },\n });\n return res.all.map((commit) => commit.message);\n /* v8 ignore next 3 -- TODO: add test */\n } catch {\n return [];\n }\n}\n\nexport async function checkoutBranch(\n branchName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Setting current branch to ${branchName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkout(\n submodulesInitizialized\n ? ['-f', '--recurse-submodules', branchName, '--']\n : ['-f', branchName, '--'],\n ),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n const latestCommitDate = (await git.log({ n: 1 }))?.latest?.date;\n if (latestCommitDate) {\n logger.debug({ branchName, latestCommitDate }, 'latest commit');\n }\n await git.reset(ResetMode.HARD);\n return config.currentBranchSha;\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function getFileList(): Promise<string[]> {\n await syncGit();\n const branch = config.currentBranch;\n let files: string;\n try {\n files = await git.raw(['ls-tree', '-r', branch]);\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: Not a valid object name')) {\n logger.debug(\n { err },\n 'Branch not found when checking branch list - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n /* v8 ignore next 3 -- TODO: add test */\n if (!files) {\n return [];\n }\n // submodules are starting with `160000 commit`\n return files\n .split(newlineRegex)\n .filter(is.string)\n .filter((line) => line.startsWith('100'))\n .map((line) => line.split(regEx(/\\t/)).pop()!);\n}\n\nexport function getBranchList(): string[] {\n return Object.keys(config.branchCommits ?? {});\n}\n\nexport async function isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branchName);\n let isBehind = getCachedBehindBaseResult(\n branchName,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBehind !== null) {\n logger.debug(`branch.isBehindBase(): using cached result \"${isBehind}\"`);\n return isBehind;\n }\n\n logger.debug('branch.isBehindBase(): using git to calculate');\n\n await syncGit();\n try {\n const behindCount = (\n await git.raw(['rev-list', '--count', `${branchSha!}..${baseBranchSha!}`])\n ).trim();\n isBehind = behindCount !== '0';\n logger.debug(\n { baseBranch, branchName },\n `branch.isBehindBase(): ${isBehind}`,\n );\n setCachedBehindBaseResult(branchName, isBehind);\n return isBehind;\n /* v8 ignore next 7 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n throw err;\n }\n}\n\nexport async function isBranchModified(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n if (!branchExists(branchName)) {\n logger.debug('branch.isModified(): no cache');\n return false;\n }\n // First check local config\n if (config.branchIsModified[branchName] !== undefined) {\n return config.branchIsModified[branchName];\n }\n // Second check repository cache\n const isModified = getCachedModifiedResult(\n branchName,\n getBranchCommit(branchName), // branch sha\n );\n if (isModified !== null) {\n logger.debug(`branch.isModified(): using cached result \"${isModified}\"`);\n config.branchIsModified[branchName] = isModified;\n return isModified;\n }\n\n logger.debug('branch.isModified(): using git to calculate');\n\n await syncGit();\n const committedAuthors = new Set<string>();\n try {\n const commits = await git.log([\n `origin/${baseBranch}..origin/${branchName}`,\n ]);\n\n for (const commit of commits.all) {\n committedAuthors.add(commit.author_email);\n }\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: bad revision')) {\n logger.debug(\n { err },\n 'Remote branch not found when checking last commit author - aborting run',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.warn({ err }, 'Error checking last author for isBranchModified');\n }\n const { gitAuthorEmail, ignoredAuthors } = config;\n\n const includedAuthors = new Set(committedAuthors);\n\n if (gitAuthorEmail) {\n includedAuthors.delete(gitAuthorEmail);\n }\n\n for (const ignoredAuthor of ignoredAuthors) {\n includedAuthors.delete(ignoredAuthor);\n }\n\n if (includedAuthors.size === 0) {\n // authors all match - branch has not been modified\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = false',\n );\n logger.debug('branch.isModified() = false');\n config.branchIsModified[branchName] = false;\n setCachedModifiedResult(branchName, false);\n return false;\n }\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = true',\n );\n logger.debug(\n { branchName, unrecognizedAuthors: [...includedAuthors] },\n 'branch.isModified() = true',\n );\n config.branchIsModified[branchName] = true;\n setCachedModifiedResult(branchName, true);\n return true;\n}\n\nexport async function isBranchConflicted(\n baseBranch: string,\n branch: string,\n): Promise<boolean> {\n logger.debug(`isBranchConflicted(${baseBranch}, ${branch})`);\n\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branch);\n if (!baseBranchSha || !branchSha) {\n logger.warn(\n { baseBranch, branch },\n 'isBranchConflicted: branch does not exist',\n );\n return true;\n }\n\n const isConflicted = getCachedConflictResult(\n branch,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (is.boolean(isConflicted)) {\n logger.debug(\n `branch.isConflicted(): using cached result \"${isConflicted}\"`,\n );\n return isConflicted;\n }\n\n logger.debug('branch.isConflicted(): using git to calculate');\n\n let result = false;\n await syncGit();\n await writeGitAuthor();\n\n const origBranch = config.currentBranch;\n try {\n await git.reset(ResetMode.HARD);\n //TODO: see #18600\n if (origBranch !== baseBranch) {\n await git.checkout(baseBranch);\n }\n await git.merge(['--no-commit', '--no-ff', `origin/${branch}`]);\n } catch (err) {\n result = true;\n /* v8 ignore next 6 -- TODO: add test */\n if (!err?.git?.conflicts?.length) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: unknown error',\n );\n }\n } finally {\n try {\n await git.merge(['--abort']);\n if (origBranch !== baseBranch) {\n await git.checkout(origBranch);\n }\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: cleanup error',\n );\n }\n }\n\n setCachedConflictResult(branch, result);\n logger.debug(`branch.isConflicted(): ${result}`);\n return result;\n}\n\nexport async function deleteBranch(branchName: string): Promise<void> {\n await syncGit();\n try {\n const deleteCommand = ['push', '--delete', 'origin', branchName];\n\n if (getNoVerify().includes('push')) {\n deleteCommand.push('--no-verify');\n }\n\n await gitRetry(() => git.raw(deleteCommand));\n logger.debug(`Deleted remote branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No remote branch to delete with name: ${branchName}`);\n }\n try {\n /* v8 ignore next 2 -- TODO: add test (always throws) */\n await deleteLocalBranch(branchName);\n logger.debug(`Deleted local branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No local branch to delete with name: ${branchName}`);\n }\n delete config.branchCommits[branchName];\n}\n\nexport async function mergeToLocal(refSpecToMerge: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await fetchRevSpec(refSpecToMerge);\n await gitRetry(() => git.merge(['FETCH_HEAD']));\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n refSpecToMerge,\n status,\n err,\n },\n 'mergeLocally error',\n );\n throw err;\n }\n}\n\nexport async function mergeBranch(branchName: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + branchName]),\n );\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await gitRetry(() => git.merge(['--ff-only', branchName]));\n await gitRetry(() => git.push('origin', config.currentBranch));\n incLimitedValue('Commits');\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n branchName,\n branchSha: getBranchCommit(branchName),\n status,\n err,\n },\n 'mergeBranch error',\n );\n throw err;\n }\n}\n\nexport async function getBranchLastCommitTime(\n branchName: string,\n): Promise<Date> {\n await syncGit();\n try {\n const time = await git.show(['-s', '--format=%ai', 'origin/' + branchName]);\n return new Date(Date.parse(time));\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return new Date();\n }\n}\n\nexport async function getBranchFiles(\n branchName: string,\n): Promise<string[] | null> {\n await syncGit();\n try {\n const diff = await gitRetry(() =>\n git.diffSummary([`origin/${branchName}`, `origin/${branchName}^`]),\n );\n return diff.files.map((file) => file.file);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'getBranchFiles error');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFile(\n filePath: string,\n branchName?: string,\n): Promise<string | null> {\n await syncGit();\n try {\n const content = await git.show([\n 'origin/' + (branchName ?? config.currentBranch) + ':' + filePath,\n ]);\n return content;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFiles(\n fileNames: string[],\n): Promise<Record<string, string | null>> {\n const fileContentMap: Record<string, string | null> = {};\n\n for (const fileName of fileNames) {\n fileContentMap[fileName] = await getFile(fileName);\n }\n\n return fileContentMap;\n}\n\nexport async function hasDiff(\n sourceRef: string,\n targetRef: string,\n): Promise<boolean> {\n await syncGit();\n try {\n return (\n (await gitRetry(() => git.diff([sourceRef, targetRef, '--']))) !== ''\n );\n } catch {\n return true;\n }\n}\n\nasync function handleCommitAuth(localDir: string): Promise<void> {\n if (!privateKeySet) {\n await writePrivateKey();\n privateKeySet = true;\n }\n await configSigningKey(localDir);\n await writeGitAuthor();\n}\n\n/**\n *\n * Prepare local branch with commit\n *\n * 0. Hard reset\n * 1. Creates local branch with `origin/` prefix\n * 2. Perform `git add` (respecting mode) and `git remove` for each file\n * 3. Perform commit\n * 4. Check whether resulting commit is empty or not (due to .gitignore)\n * 5. If not empty, return commit info for further processing\n *\n */\nexport async function prepareCommit({\n branchName,\n files,\n message,\n force = false,\n}: CommitFilesConfig): Promise<CommitResult | null> {\n const localDir = GlobalConfig.get('localDir')!;\n await syncGit();\n logger.debug(`Preparing files for committing to branch ${branchName}`);\n await handleCommitAuth(localDir);\n try {\n await git.reset(ResetMode.HARD);\n await git.raw(['clean', '-fd']);\n const parentCommitSha = config.currentBranchSha;\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + config.currentBranch]),\n );\n const deletedFiles: string[] = [];\n const addedModifiedFiles: string[] = [];\n const ignoredFiles: string[] = [];\n for (const file of files) {\n const fileName = file.path;\n if (file.type === 'deletion') {\n try {\n await git.rm([fileName]);\n deletedFiles.push(fileName);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.trace({ err, fileName }, 'Cannot delete file');\n ignoredFiles.push(fileName);\n }\n } else {\n if (await isDirectory(upath.join(localDir, fileName))) {\n // This is usually a git submodule update\n logger.trace({ fileName }, 'Adding directory commit');\n } else if (file.contents === null) {\n continue;\n } else {\n let contents: Buffer;\n if (typeof file.contents === 'string') {\n contents = Buffer.from(file.contents);\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n contents = file.contents;\n }\n // some file systems including Windows don't support the mode\n // so the index should be manually updated after adding the file\n if (file.isSymlink) {\n await fs.symlink(file.contents, upath.join(localDir, fileName));\n } else {\n await fs.outputFile(upath.join(localDir, fileName), contents, {\n mode: file.isExecutable ? 0o777 : 0o666,\n });\n }\n }\n try {\n /* v8 ignore next 2 -- TODO: add test */\n const addParams =\n fileName === configFileNames[0] ? ['-f', fileName] : fileName;\n await git.add(addParams);\n if (file.isExecutable) {\n await git.raw(['update-index', '--chmod=+x', fileName]);\n }\n addedModifiedFiles.push(fileName);\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n if (\n !err.message.includes(\n 'The following paths are ignored by one of your .gitignore files',\n )\n ) {\n throw err;\n }\n logger.debug(`Cannot commit ignored file: ${fileName}`);\n ignoredFiles.push(file.path);\n }\n }\n }\n\n const commitOptions: Options = {};\n if (getNoVerify().includes('commit')) {\n commitOptions['--no-verify'] = null;\n }\n\n const commitRes = await git.commit(message, [], commitOptions);\n if (\n commitRes.summary &&\n commitRes.summary.changes === 0 &&\n commitRes.summary.insertions === 0 &&\n commitRes.summary.deletions === 0\n ) {\n logger.warn({ commitRes }, 'Detected empty commit - aborting git push');\n return null;\n }\n logger.debug(\n { deletedFiles, ignoredFiles, result: commitRes },\n `git commit`,\n );\n if (!force && !(await hasDiff('HEAD', `origin/${branchName}`))) {\n logger.debug(\n { branchName, deletedFiles, addedModifiedFiles, ignoredFiles },\n 'No file changes detected. Skipping commit',\n );\n return null;\n }\n\n const commitSha = (\n await git.revparse([branchName])\n ).trim() as LongCommitSha;\n const result: CommitResult = {\n parentCommitSha,\n commitSha,\n files: files.filter((fileChange) => {\n if (fileChange.type === 'deletion') {\n return deletedFiles.includes(fileChange.path);\n }\n return addedModifiedFiles.includes(fileChange.path);\n }),\n };\n\n return result;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName, files);\n }\n}\n\nexport async function pushCommit({\n sourceRef,\n targetRef,\n files,\n}: PushFilesConfig): Promise<boolean> {\n await syncGit();\n logger.debug(`Pushing refSpec ${sourceRef}:${targetRef ?? sourceRef}`);\n let result = false;\n try {\n const pushOptions: TaskOptions = {\n '--force-with-lease': null,\n '-u': null,\n };\n if (getNoVerify().includes('push')) {\n pushOptions['--no-verify'] = null;\n }\n\n const pushRes = await gitRetry(() =>\n git.push('origin', `${sourceRef}:${targetRef ?? sourceRef}`, pushOptions),\n );\n delete pushRes.repo;\n logger.debug({ result: pushRes }, 'git push');\n incLimitedValue('Commits');\n result = true;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n handleCommitError(err, sourceRef, files);\n }\n return result;\n}\n\nexport async function fetchBranch(\n branchName: string,\n): Promise<LongCommitSha | null> {\n await syncGit();\n logger.debug(`Fetching branch ${branchName}`);\n try {\n const ref = `refs/heads/${branchName}:refs/remotes/origin/${branchName}`;\n await gitRetry(() => git.pull(['origin', ref, '--force']));\n const commit = (await git.revparse([branchName])).trim() as LongCommitSha;\n config.branchCommits[branchName] = commit;\n config.branchIsModified[branchName] = false;\n return commit;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName);\n }\n}\n\nexport async function commitFiles(\n commitConfig: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n try {\n const commitResult = await prepareCommit(commitConfig);\n if (commitResult) {\n const pushResult = await pushCommit({\n sourceRef: commitConfig.branchName,\n files: commitConfig.files,\n });\n if (pushResult) {\n const { branchName } = commitConfig;\n const { commitSha } = commitResult;\n config.branchCommits[branchName] = commitSha;\n config.branchIsModified[branchName] = false;\n return commitSha;\n }\n }\n return null;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message.includes('[rejected] (stale info)')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport function getUrl({\n protocol,\n auth,\n hostname,\n host,\n repository,\n}: {\n protocol?: GitProtocol;\n auth?: string;\n hostname?: string;\n host?: string;\n repository: string;\n}): string {\n if (protocol === 'ssh') {\n // TODO: types (#22198)\n return `git@${hostname!}:${repository}.git`;\n }\n return URL.format({\n protocol: protocol ?? 'https',\n auth,\n hostname,\n host,\n pathname: repository + '.git',\n });\n}\n\nlet remoteRefsExist = false;\n\n/**\n *\n * Non-branch refs allow us to store git objects without triggering CI pipelines.\n * It's useful for API-based branch rebasing.\n *\n * @see https://stackoverflow.com/questions/63866947/pushing-git-non-branch-references-to-a-remote/63868286\n *\n */\nexport async function pushCommitToRenovateRef(\n commitSha: string,\n refName: string,\n): Promise<void> {\n const fullRefName = `refs/renovate/branches/${refName}`;\n await git.raw(['update-ref', fullRefName, commitSha]);\n await git.push(['--force', 'origin', fullRefName]);\n remoteRefsExist = true;\n}\n\n/**\n *\n * Removes all remote \"refs/renovate/branches/*\" refs in two steps:\n *\n * Step 1: list refs\n *\n * $ git ls-remote origin \"refs/renovate/branches/*\"\n *\n * > cca38e9ea6d10946bdb2d0ca5a52c205783897aa refs/renovate/branches/foo\n * > 29ac154936c880068994e17eb7f12da7fdca70e5 refs/renovate/branches/bar\n * > 3fafaddc339894b6d4f97595940fd91af71d0355 refs/renovate/branches/baz\n * > ...\n *\n * Step 2:\n *\n * $ git push --delete origin refs/renovate/branches/foo refs/renovate/branches/bar refs/renovate/branches/baz\n *\n * If Step 2 fails because the repo doesn't allow bulk changes, we'll remove them one by one instead:\n *\n * $ git push --delete origin refs/renovate/branches/foo\n * $ git push --delete origin refs/renovate/branches/bar\n * $ git push --delete origin refs/renovate/branches/baz\n */\nexport async function clearRenovateRefs(): Promise<void> {\n if (!gitInitialized || !remoteRefsExist) {\n return;\n }\n\n logger.debug(`Cleaning up Renovate refs: refs/renovate/branches/*`);\n const renovateRefs: string[] = [];\n\n try {\n const rawOutput = await git.listRemote([\n config.url,\n 'refs/renovate/branches/*',\n ]);\n const refs = rawOutput\n .split(newlineRegex)\n .map((line) => line.replace(regEx(/[0-9a-f]+\\s+/i), '').trim())\n .filter((line) => line.startsWith('refs/renovate/branches/'));\n renovateRefs.push(...refs);\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, `Renovate refs cleanup error`);\n }\n\n if (renovateRefs.length) {\n try {\n const pushOpts = ['--delete', 'origin', ...renovateRefs];\n await git.push(pushOpts);\n } catch (err) {\n if (bulkChangesDisallowed(err)) {\n for (const ref of renovateRefs) {\n try {\n const pushOpts = ['--delete', 'origin', ref];\n await git.push(pushOpts);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n break;\n }\n }\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n logger.warn({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n }\n }\n }\n\n remoteRefsExist = false;\n}\n\nconst treeItemRegex = regEx(\n /^(?<mode>\\d{6})\\s+(?<type>blob|tree|commit)\\s+(?<sha>[0-9a-f]{40})\\s+(?<path>.*)$/,\n);\n\nconst treeShaRegex = regEx(/tree\\s+(?<treeSha>[0-9a-f]{40})\\s*/);\n\n/**\n *\n * Obtain top-level items of commit tree.\n * We don't need subtree items, so here are 2 steps only.\n *\n * Step 1: commit SHA -> tree SHA\n *\n * $ git cat-file -p <commit-sha>\n *\n * > tree <tree-sha>\n * > parent 59b8b0e79319b7dc38f7a29d618628f3b44c2fd7\n * > ...\n *\n * Step 2: tree SHA -> tree items (top-level)\n *\n * $ git cat-file -p <tree-sha>\n *\n * > 040000 tree 389400684d1f004960addc752be13097fe85d776 src\n * > ...\n * > 100644 blob 7d2edde437ad4e7bceb70dbfe70e93350d99c98b package.json\n *\n */\nexport async function listCommitTree(\n commitSha: LongCommitSha,\n): Promise<TreeItem[]> {\n const commitOutput = await git.catFile(['-p', commitSha]);\n const { treeSha } =\n /* v8 ignore next -- will never happen ? */\n treeShaRegex.exec(commitOutput)?.groups ?? {};\n const contents = await git.catFile(['-p', treeSha]);\n const lines = contents.split(newlineRegex);\n const result: TreeItem[] = [];\n for (const line of lines) {\n const matchGroups = treeItemRegex.exec(line)?.groups;\n if (matchGroups) {\n const { path, mode, type, sha } = matchGroups;\n result.push({ path, mode, type, sha: sha as LongCommitSha });\n }\n }\n return result;\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/git/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { setTimeout } from 'timers/promises';\nimport is from '@sindresorhus/is';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport type { Options, SimpleGit, TaskOptions } from 'simple-git';\nimport { ResetMode, simpleGit } from 'simple-git';\nimport upath from 'upath';\nimport { configFileNames } from '../../config/app-strings';\nimport { GlobalConfig } from '../../config/global';\nimport type { RenovateConfig } from '../../config/types';\nimport {\n CONFIG_VALIDATION,\n INVALID_PATH,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport type { GitProtocol } from '../../types/git';\nimport { incLimitedValue } from '../../workers/global/limits';\nimport { getCache } from '../cache/repository';\nimport { getEnv } from '../env';\nimport { newlineRegex, regEx } from '../regex';\nimport { matchRegexOrGlobList } from '../string-match';\nimport { parseGitAuthor } from './author';\nimport {\n getCachedBehindBaseResult,\n setCachedBehindBaseResult,\n} from './behind-base-branch-cache';\nimport { getNoVerify, simpleGitConfig } from './config';\nimport {\n getCachedConflictResult,\n setCachedConflictResult,\n} from './conflicts-cache';\nimport {\n bulkChangesDisallowed,\n checkForPlatformFailure,\n handleCommitError,\n} from './error';\nimport {\n getCachedModifiedResult,\n setCachedModifiedResult,\n} from './modified-cache';\nimport { configSigningKey, writePrivateKey } from './private-key';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LocalConfig,\n LongCommitSha,\n PushFilesConfig,\n StatusResult,\n StorageConfig,\n TreeItem,\n} from './types';\n\nexport { setNoVerify } from './config';\nexport { setPrivateKey } from './private-key';\n\n// Retry parameters\nconst retryCount = 5;\nconst delaySeconds = 3;\nconst delayFactor = 2;\n\n// A generic wrapper for simpleGit.* calls to make them more fault-tolerant\nexport async function gitRetry<T>(gitFunc: () => Promise<T>): Promise<T> {\n let round = 0;\n let lastError: Error | undefined;\n\n while (round <= retryCount) {\n if (round > 0) {\n logger.debug(`gitRetry round ${round}`);\n }\n try {\n const res = await gitFunc();\n if (round > 1) {\n logger.debug('Successful retry of git function');\n }\n return res;\n } catch (err) {\n lastError = err;\n logger.debug({ err }, `Git function thrown`);\n // Try to transform the Error to ExternalHostError\n const errChecked = checkForPlatformFailure(err);\n if (errChecked instanceof ExternalHostError) {\n logger.debug(\n { err: errChecked },\n `ExternalHostError thrown in round ${\n round + 1\n } of ${retryCount} - retrying in the next round`,\n );\n } else {\n throw err;\n }\n }\n\n const nextDelay = delayFactor ^ ((round - 1) * delaySeconds);\n logger.trace({ nextDelay }, `Delay next round`);\n await setTimeout(1000 * nextDelay);\n\n round++;\n }\n\n // Can't be `undefined` here.\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw lastError;\n}\n\nasync function isDirectory(dir: string): Promise<boolean> {\n try {\n return (await fs.stat(dir)).isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function getDefaultBranch(git: SimpleGit): Promise<string> {\n // see https://stackoverflow.com/a/62352647/3005034\n try {\n let res = await git.raw(['rev-parse', '--abbrev-ref', 'origin/HEAD']);\n /* v8 ignore start -- TODO: add test */\n if (!res) {\n logger.debug('Could not determine default branch using git rev-parse');\n const headPrefix = 'HEAD branch: ';\n res = (await git.raw(['remote', 'show', 'origin']))\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith(headPrefix))!\n .replace(headPrefix, '');\n }\n /* v8 ignore stop */\n return res.replace('origin/', '').trim();\n /* v8 ignore start -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (\n err.message.startsWith(\n 'fatal: ref refs/remotes/origin/HEAD is not a symbolic ref',\n )\n ) {\n throw new Error(REPOSITORY_EMPTY);\n }\n if (err.message.includes(\"fatal: ambiguous argument 'origin/HEAD'\")) {\n logger.warn({ err }, 'Error getting default branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n /* v8 ignore stop */\n}\n\nlet config: LocalConfig = {} as any;\n\n// TODO: can be undefined\nlet git: SimpleGit;\nlet gitInitialized: boolean;\nlet submodulesInitizialized: boolean;\n\nlet privateKeySet = false;\n\nexport const GIT_MINIMUM_VERSION = '2.33.0'; // git show-current\n\nexport async function validateGitVersion(): Promise<boolean> {\n let version: string | undefined;\n const globalGit = simpleGit();\n try {\n const { major, minor, patch, installed } = await globalGit.version();\n /* v8 ignore next 4 -- TODO: add test */\n if (!installed) {\n logger.error('Git not installed');\n return false;\n }\n version = `${major}.${minor}.${patch}`;\n /* v8 ignore next 4 */\n } catch (err) {\n logger.error({ err }, 'Error fetching git version');\n return false;\n }\n /* v8 ignore next 7 -- TODO: add test */\n if (!(version && semver.gte(version, GIT_MINIMUM_VERSION))) {\n logger.error(\n { detectedVersion: version, minimumVersion: GIT_MINIMUM_VERSION },\n 'Git version needs upgrading',\n );\n return false;\n }\n logger.debug(`Found valid git version: ${version}`);\n return true;\n}\n\nasync function fetchBranchCommits(): Promise<void> {\n config.branchCommits = {};\n const opts = ['ls-remote', '--heads', config.url];\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.unshift(e[0], `${e[1]!}`),\n );\n }\n try {\n const lsRemoteRes = await gitRetry(() => git.raw(opts));\n logger.trace({ lsRemoteRes }, 'git ls-remote result');\n lsRemoteRes\n .split(newlineRegex)\n .filter(Boolean)\n .map((line) => line.trim().split(regEx(/\\s+/)))\n .forEach(([sha, ref]) => {\n config.branchCommits[ref.replace('refs/heads/', '')] =\n sha as LongCommitSha;\n });\n logger.trace({ branchCommits: config.branchCommits }, 'branch commits');\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug({ err }, 'git error');\n if (err.message?.includes('Please ask the owner to check their account')) {\n throw new Error(REPOSITORY_DISABLED);\n }\n throw err;\n }\n}\n\nexport async function fetchRevSpec(revSpec: string): Promise<void> {\n await gitRetry(() => git.fetch(['origin', revSpec]));\n}\n\nexport async function initRepo(args: StorageConfig): Promise<void> {\n config = { ...args } as any;\n config.ignoredAuthors = [];\n config.additionalBranches = [];\n config.branchIsModified = {};\n // TODO: safe to pass all env variables? use `getChildEnv` instead?\n git = simpleGit(GlobalConfig.get('localDir'), simpleGitConfig()).env({\n ...getEnv(),\n LANG: 'C.UTF-8',\n LC_ALL: 'C.UTF-8',\n });\n gitInitialized = false;\n submodulesInitizialized = false;\n await fetchBranchCommits();\n}\n\nasync function resetToBranch(branchName: string): Promise<void> {\n logger.debug(`resetToBranch(${branchName})`);\n await git.raw(['reset', '--hard']);\n await gitRetry(() => git.checkout(branchName));\n await git.raw(['reset', '--hard', 'origin/' + branchName]);\n await git.raw(['clean', '-fd']);\n}\n\n/* v8 ignore next 4 -- TODO: add test */\nexport async function resetToCommit(commit: LongCommitSha): Promise<void> {\n logger.debug(`resetToCommit(${commit})`);\n await git.raw(['reset', '--hard', commit]);\n}\n\nasync function deleteLocalBranch(branchName: string): Promise<void> {\n await git.branch(['-D', branchName]);\n}\n\nasync function cleanLocalBranches(): Promise<void> {\n const existingBranches = (await git.raw(['branch']))\n .split(newlineRegex)\n .map((branch) => branch.trim())\n .filter((branch) => branch.length > 0 && !branch.startsWith('* '));\n logger.debug({ existingBranches });\n for (const branchName of existingBranches) {\n await deleteLocalBranch(branchName);\n }\n}\n\nexport function setGitAuthor(gitAuthor: string | undefined): void {\n const gitAuthorParsed = parseGitAuthor(\n gitAuthor ?? 'Renovate Bot <renovate@whitesourcesoftware.com>',\n );\n if (!gitAuthorParsed) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'None';\n error.validationError = 'Invalid gitAuthor';\n error.validationMessage = `\\`gitAuthor\\` is not parsed as valid RFC5322 format: \\`${gitAuthor!}\\``;\n throw error;\n }\n config.gitAuthorName = gitAuthorParsed.name;\n config.gitAuthorEmail = gitAuthorParsed.address;\n}\n\nexport async function writeGitAuthor(): Promise<void> {\n const { gitAuthorName, gitAuthorEmail, writeGitDone } = config;\n /* v8 ignore next 3 -- TODO: add test */\n if (writeGitDone) {\n return;\n }\n config.writeGitDone = true;\n try {\n if (gitAuthorName) {\n logger.debug(`Setting git author name: ${gitAuthorName}`);\n await git.addConfig('user.name', gitAuthorName);\n }\n if (gitAuthorEmail) {\n logger.debug(`Setting git author email: ${gitAuthorEmail}`);\n await git.addConfig('user.email', gitAuthorEmail);\n }\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(\n { err, gitAuthorName, gitAuthorEmail },\n 'Error setting git author config',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n}\n\nexport function setUserRepoConfig({\n gitIgnoredAuthors,\n gitAuthor,\n}: RenovateConfig): void {\n config.ignoredAuthors = gitIgnoredAuthors ?? [];\n setGitAuthor(gitAuthor);\n}\n\nexport async function getSubmodules(): Promise<string[]> {\n try {\n return (\n (await git.raw([\n 'config',\n '--file',\n '.gitmodules',\n '--get-regexp',\n '\\\\.path',\n ])) || ''\n )\n .trim()\n .split(regEx(/[\\n\\s]/))\n .filter((_e: string, i: number) => i % 2);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'Error getting submodules');\n return [];\n }\n}\n\nexport async function cloneSubmodules(\n shouldClone: boolean,\n cloneSubmodulesFilter: string[] | undefined,\n): Promise<void> {\n if (!shouldClone || submodulesInitizialized) {\n return;\n }\n submodulesInitizialized = true;\n await syncGit();\n const submodules = await getSubmodules();\n for (const submodule of submodules) {\n if (!matchRegexOrGlobList(submodule, cloneSubmodulesFilter ?? ['*'])) {\n logger.debug(\n { cloneSubmodulesFilter },\n `Skipping submodule ${submodule}`,\n );\n continue;\n }\n try {\n logger.debug(`Cloning git submodule at ${submodule}`);\n await gitRetry(() =>\n git.submoduleUpdate(['--init', '--recursive', submodule]),\n );\n } catch (err) {\n logger.warn({ err, submodule }, `Unable to initialise git submodule`);\n }\n }\n}\n\nexport function isCloned(): boolean {\n return gitInitialized;\n}\n\nexport async function syncGit(): Promise<void> {\n if (gitInitialized) {\n /* v8 ignore next 3 -- TODO: add test */\n if (getEnv().RENOVATE_X_CLEAR_HOOKS) {\n await git.raw(['config', 'core.hooksPath', '/dev/null']);\n }\n return;\n }\n /* v8 ignore next 3 -- failsafe TODO: add test */\n if (GlobalConfig.get('platform') === 'local') {\n throw new Error('Cannot sync git when platform=local');\n }\n gitInitialized = true;\n const localDir = GlobalConfig.get('localDir')!;\n logger.debug(`Initializing git repository into ${localDir}`);\n const gitHead = upath.join(localDir, '.git/HEAD');\n let clone = true;\n\n if (await fs.pathExists(gitHead)) {\n try {\n await git.raw(['remote', 'set-url', 'origin', config.url]);\n const fetchStart = Date.now();\n await gitRetry(() => git.fetch(['--prune', 'origin']));\n config.currentBranch =\n config.currentBranch || (await getDefaultBranch(git));\n await resetToBranch(config.currentBranch);\n await cleanLocalBranches();\n const durationMs = Math.round(Date.now() - fetchStart);\n logger.info({ durationMs }, 'git fetch completed');\n clone = false;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n logger.info({ err }, 'git fetch error');\n }\n }\n if (clone) {\n const cloneStart = Date.now();\n try {\n const opts: string[] = [];\n if (config.defaultBranch) {\n opts.push('-b', config.defaultBranch);\n }\n if (config.fullClone) {\n logger.debug('Performing full clone');\n } else {\n logger.debug('Performing blobless clone');\n opts.push('--filter=blob:none');\n }\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.push(e[0], `${e[1]!}`),\n );\n }\n const emptyDirAndClone = async (): Promise<void> => {\n await fs.emptyDir(localDir);\n await git.clone(config.url, '.', opts);\n };\n await gitRetry(() => emptyDirAndClone());\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'git clone error');\n if (err.message?.includes('No space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n throw new ExternalHostError(err, 'git');\n }\n const durationMs = Math.round(Date.now() - cloneStart);\n logger.debug({ durationMs }, 'git clone completed');\n }\n try {\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: not a git repository')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n // This will only happen now if set in global config\n await cloneSubmodules(!!config.cloneSubmodules, config.cloneSubmodulesFilter);\n try {\n const latestCommit = (await git.log({ n: 1 })).latest;\n logger.debug({ latestCommit }, 'latest repository commit');\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message.includes('does not have any commits yet')) {\n throw new Error(REPOSITORY_EMPTY);\n }\n logger.warn({ err }, 'Cannot retrieve latest commit');\n }\n config.currentBranch =\n config.currentBranch ??\n config.defaultBranch ??\n (await getDefaultBranch(git));\n /* v8 ignore next -- TODO: add test */\n delete getCache()?.semanticCommits;\n}\n\nexport async function getRepoStatus(path?: string): Promise<StatusResult> {\n if (is.string(path)) {\n const localDir = GlobalConfig.get('localDir');\n const localPath = upath.resolve(localDir, path);\n if (!localPath.startsWith(upath.resolve(localDir))) {\n logger.warn(\n { localPath, localDir },\n 'Preventing access to file outside the local directory',\n );\n throw new Error(INVALID_PATH);\n }\n }\n\n await syncGit();\n return git.status(path ? [path] : []);\n}\n\nexport function branchExists(branchName: string): boolean {\n return !!config.branchCommits[branchName];\n}\n\n// Return the commit SHA for a branch\nexport function getBranchCommit(branchName: string): LongCommitSha | null {\n return config.branchCommits[branchName] || null;\n}\n\nexport async function getCommitMessages(): Promise<string[]> {\n logger.debug('getCommitMessages');\n if (GlobalConfig.get('platform') !== 'local') {\n await syncGit();\n }\n try {\n const res = await git.log({\n n: 20,\n format: { message: '%s' },\n });\n return res.all.map((commit) => commit.message);\n /* v8 ignore next 3 -- TODO: add test */\n } catch {\n return [];\n }\n}\n\nexport async function checkoutBranch(\n branchName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Setting current branch to ${branchName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkout(\n submodulesInitizialized\n ? ['-f', '--recurse-submodules', branchName, '--']\n : ['-f', branchName, '--'],\n ),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n const latestCommitDate = (await git.log({ n: 1 }))?.latest?.date;\n if (latestCommitDate) {\n logger.debug({ branchName, latestCommitDate }, 'latest commit');\n }\n await git.reset(ResetMode.HARD);\n return config.currentBranchSha;\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function getFileList(): Promise<string[]> {\n await syncGit();\n const branch = config.currentBranch;\n let files: string;\n try {\n files = await git.raw(['ls-tree', '-r', branch]);\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: Not a valid object name')) {\n logger.debug(\n { err },\n 'Branch not found when checking branch list - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n /* v8 ignore next 3 -- TODO: add test */\n if (!files) {\n return [];\n }\n // submodules are starting with `160000 commit`\n return files\n .split(newlineRegex)\n .filter(is.string)\n .filter((line) => line.startsWith('100'))\n .map((line) => line.split(regEx(/\\t/)).pop()!);\n}\n\nexport function getBranchList(): string[] {\n return Object.keys(config.branchCommits ?? {});\n}\n\nexport async function isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branchName);\n let isBehind = getCachedBehindBaseResult(\n branchName,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBehind !== null) {\n logger.debug(`branch.isBehindBase(): using cached result \"${isBehind}\"`);\n return isBehind;\n }\n\n logger.debug('branch.isBehindBase(): using git to calculate');\n\n await syncGit();\n try {\n const behindCount = (\n await git.raw(['rev-list', '--count', `${branchSha!}..${baseBranchSha!}`])\n ).trim();\n isBehind = behindCount !== '0';\n logger.debug(\n { baseBranch, branchName },\n `branch.isBehindBase(): ${isBehind}`,\n );\n setCachedBehindBaseResult(branchName, isBehind);\n return isBehind;\n /* v8 ignore next 7 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n throw err;\n }\n}\n\nexport async function isBranchModified(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n if (!branchExists(branchName)) {\n logger.debug('branch.isModified(): no cache');\n return false;\n }\n // First check local config\n if (config.branchIsModified[branchName] !== undefined) {\n return config.branchIsModified[branchName];\n }\n // Second check repository cache\n const isModified = getCachedModifiedResult(\n branchName,\n getBranchCommit(branchName), // branch sha\n );\n if (isModified !== null) {\n logger.debug(`branch.isModified(): using cached result \"${isModified}\"`);\n config.branchIsModified[branchName] = isModified;\n return isModified;\n }\n\n logger.debug('branch.isModified(): using git to calculate');\n\n await syncGit();\n const committedAuthors = new Set<string>();\n try {\n const commits = await git.log([\n `origin/${baseBranch}..origin/${branchName}`,\n ]);\n\n for (const commit of commits.all) {\n committedAuthors.add(commit.author_email);\n }\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: bad revision')) {\n logger.debug(\n { err },\n 'Remote branch not found when checking last commit author - aborting run',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.warn({ err }, 'Error checking last author for isBranchModified');\n }\n const { gitAuthorEmail, ignoredAuthors } = config;\n\n const includedAuthors = new Set(committedAuthors);\n\n if (gitAuthorEmail) {\n includedAuthors.delete(gitAuthorEmail);\n }\n\n for (const ignoredAuthor of ignoredAuthors) {\n includedAuthors.delete(ignoredAuthor);\n }\n\n if (includedAuthors.size === 0) {\n // authors all match - branch has not been modified\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = false',\n );\n logger.debug('branch.isModified() = false');\n config.branchIsModified[branchName] = false;\n setCachedModifiedResult(branchName, false);\n return false;\n }\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = true',\n );\n logger.debug(\n { branchName, unrecognizedAuthors: [...includedAuthors] },\n 'branch.isModified() = true',\n );\n config.branchIsModified[branchName] = true;\n setCachedModifiedResult(branchName, true);\n return true;\n}\n\nexport async function isBranchConflicted(\n baseBranch: string,\n branch: string,\n): Promise<boolean> {\n logger.debug(`isBranchConflicted(${baseBranch}, ${branch})`);\n\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branch);\n if (!baseBranchSha || !branchSha) {\n logger.warn(\n { baseBranch, branch },\n 'isBranchConflicted: branch does not exist',\n );\n return true;\n }\n\n const isConflicted = getCachedConflictResult(\n branch,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (is.boolean(isConflicted)) {\n logger.debug(\n `branch.isConflicted(): using cached result \"${isConflicted}\"`,\n );\n return isConflicted;\n }\n\n logger.debug('branch.isConflicted(): using git to calculate');\n\n let result = false;\n await syncGit();\n await writeGitAuthor();\n\n const origBranch = config.currentBranch;\n try {\n await git.reset(ResetMode.HARD);\n //TODO: see #18600\n if (origBranch !== baseBranch) {\n await git.checkout(baseBranch);\n }\n await git.merge(['--no-commit', '--no-ff', `origin/${branch}`]);\n } catch (err) {\n result = true;\n /* v8 ignore next 6 -- TODO: add test */\n if (!err?.git?.conflicts?.length) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: unknown error',\n );\n }\n } finally {\n try {\n await git.merge(['--abort']);\n if (origBranch !== baseBranch) {\n await git.checkout(origBranch);\n }\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: cleanup error',\n );\n }\n }\n\n setCachedConflictResult(branch, result);\n logger.debug(`branch.isConflicted(): ${result}`);\n return result;\n}\n\nexport async function deleteBranch(branchName: string): Promise<void> {\n await syncGit();\n try {\n const deleteCommand = ['push', '--delete', 'origin', branchName];\n\n if (getNoVerify().includes('push')) {\n deleteCommand.push('--no-verify');\n }\n\n await gitRetry(() => git.raw(deleteCommand));\n logger.debug(`Deleted remote branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No remote branch to delete with name: ${branchName}`);\n }\n try {\n /* v8 ignore next 2 -- TODO: add test (always throws) */\n await deleteLocalBranch(branchName);\n logger.debug(`Deleted local branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No local branch to delete with name: ${branchName}`);\n }\n delete config.branchCommits[branchName];\n}\n\nexport async function mergeToLocal(refSpecToMerge: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await fetchRevSpec(refSpecToMerge);\n await gitRetry(() => git.merge(['FETCH_HEAD']));\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n refSpecToMerge,\n status,\n err,\n },\n 'mergeLocally error',\n );\n throw err;\n }\n}\n\nexport async function mergeBranch(branchName: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + branchName]),\n );\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await gitRetry(() => git.merge(['--ff-only', branchName]));\n await gitRetry(() => git.push('origin', config.currentBranch));\n incLimitedValue('Commits');\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n branchName,\n branchSha: getBranchCommit(branchName),\n status,\n err,\n },\n 'mergeBranch error',\n );\n throw err;\n }\n}\n\nexport async function getBranchLastCommitTime(\n branchName: string,\n): Promise<Date> {\n await syncGit();\n try {\n const time = await git.show(['-s', '--format=%ai', 'origin/' + branchName]);\n return new Date(Date.parse(time));\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return new Date();\n }\n}\n\nexport async function getBranchFiles(\n branchName: string,\n): Promise<string[] | null> {\n await syncGit();\n try {\n const diff = await gitRetry(() =>\n git.diffSummary([`origin/${branchName}`, `origin/${branchName}^`]),\n );\n return diff.files.map((file) => file.file);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'getBranchFiles error');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFile(\n filePath: string,\n branchName?: string,\n): Promise<string | null> {\n await syncGit();\n try {\n const content = await git.show([\n 'origin/' + (branchName ?? config.currentBranch) + ':' + filePath,\n ]);\n return content;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFiles(\n fileNames: string[],\n): Promise<Record<string, string | null>> {\n const fileContentMap: Record<string, string | null> = {};\n\n for (const fileName of fileNames) {\n fileContentMap[fileName] = await getFile(fileName);\n }\n\n return fileContentMap;\n}\n\nexport async function hasDiff(\n sourceRef: string,\n targetRef: string,\n): Promise<boolean> {\n await syncGit();\n try {\n return (\n (await gitRetry(() => git.diff([sourceRef, targetRef, '--']))) !== ''\n );\n } catch {\n return true;\n }\n}\n\nasync function handleCommitAuth(localDir: string): Promise<void> {\n if (!privateKeySet) {\n await writePrivateKey();\n privateKeySet = true;\n }\n await configSigningKey(localDir);\n await writeGitAuthor();\n}\n\n/**\n *\n * Prepare local branch with commit\n *\n * 0. Hard reset\n * 1. Creates local branch with `origin/` prefix\n * 2. Perform `git add` (respecting mode) and `git remove` for each file\n * 3. Perform commit\n * 4. Check whether resulting commit is empty or not (due to .gitignore)\n * 5. If not empty, return commit info for further processing\n *\n */\nexport async function prepareCommit({\n branchName,\n files,\n message,\n force = false,\n}: CommitFilesConfig): Promise<CommitResult | null> {\n const localDir = GlobalConfig.get('localDir')!;\n await syncGit();\n logger.debug(`Preparing files for committing to branch ${branchName}`);\n await handleCommitAuth(localDir);\n try {\n await git.reset(ResetMode.HARD);\n await git.raw(['clean', '-fd']);\n const parentCommitSha = config.currentBranchSha;\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + config.currentBranch]),\n );\n const deletedFiles: string[] = [];\n const addedModifiedFiles: string[] = [];\n const ignoredFiles: string[] = [];\n for (const file of files) {\n const fileName = file.path;\n if (file.type === 'deletion') {\n try {\n await git.rm([fileName]);\n deletedFiles.push(fileName);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.trace({ err, fileName }, 'Cannot delete file');\n ignoredFiles.push(fileName);\n }\n } else {\n if (await isDirectory(upath.join(localDir, fileName))) {\n // This is usually a git submodule update\n logger.trace({ fileName }, 'Adding directory commit');\n } else if (file.contents === null) {\n continue;\n } else {\n let contents: Buffer;\n if (typeof file.contents === 'string') {\n contents = Buffer.from(file.contents);\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n contents = file.contents;\n }\n // some file systems including Windows don't support the mode\n // so the index should be manually updated after adding the file\n if (file.isSymlink) {\n await fs.symlink(file.contents, upath.join(localDir, fileName));\n } else {\n await fs.outputFile(upath.join(localDir, fileName), contents, {\n mode: file.isExecutable ? 0o777 : 0o666,\n });\n }\n }\n try {\n /* v8 ignore next 2 -- TODO: add test */\n const addParams =\n fileName === configFileNames[0] ? ['-f', fileName] : fileName;\n await git.add(addParams);\n if (file.isExecutable) {\n await git.raw(['update-index', '--chmod=+x', fileName]);\n }\n addedModifiedFiles.push(fileName);\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n if (\n !err.message.includes(\n 'The following paths are ignored by one of your .gitignore files',\n )\n ) {\n throw err;\n }\n logger.debug(`Cannot commit ignored file: ${fileName}`);\n ignoredFiles.push(file.path);\n }\n }\n }\n\n const commitOptions: Options = {};\n if (getNoVerify().includes('commit')) {\n commitOptions['--no-verify'] = null;\n }\n\n const commitRes = await git.commit(message, [], commitOptions);\n if (\n commitRes.summary &&\n commitRes.summary.changes === 0 &&\n commitRes.summary.insertions === 0 &&\n commitRes.summary.deletions === 0\n ) {\n logger.warn({ commitRes }, 'Detected empty commit - aborting git push');\n return null;\n }\n logger.debug(\n { deletedFiles, ignoredFiles, result: commitRes },\n `git commit`,\n );\n if (!force && !(await hasDiff('HEAD', `origin/${branchName}`))) {\n logger.debug(\n { branchName, deletedFiles, addedModifiedFiles, ignoredFiles },\n 'No file changes detected. Skipping commit',\n );\n return null;\n }\n\n const commitSha = (\n await git.revparse([branchName])\n ).trim() as LongCommitSha;\n const result: CommitResult = {\n parentCommitSha,\n commitSha,\n files: files.filter((fileChange) => {\n if (fileChange.type === 'deletion') {\n return deletedFiles.includes(fileChange.path);\n }\n return addedModifiedFiles.includes(fileChange.path);\n }),\n };\n\n return result;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName, files);\n }\n}\n\nexport async function pushCommit({\n sourceRef,\n targetRef,\n files,\n}: PushFilesConfig): Promise<boolean> {\n await syncGit();\n logger.debug(`Pushing refSpec ${sourceRef}:${targetRef ?? sourceRef}`);\n let result = false;\n try {\n const pushOptions: TaskOptions = {\n '--force-with-lease': null,\n '-u': null,\n };\n if (getNoVerify().includes('push')) {\n pushOptions['--no-verify'] = null;\n }\n\n const pushRes = await gitRetry(() =>\n git.push('origin', `${sourceRef}:${targetRef ?? sourceRef}`, pushOptions),\n );\n delete pushRes.repo;\n logger.debug({ result: pushRes }, 'git push');\n incLimitedValue('Commits');\n result = true;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n handleCommitError(err, sourceRef, files);\n }\n return result;\n}\n\nexport async function fetchBranch(\n branchName: string,\n): Promise<LongCommitSha | null> {\n await syncGit();\n logger.debug(`Fetching branch ${branchName}`);\n try {\n const ref = `refs/heads/${branchName}:refs/remotes/origin/${branchName}`;\n await gitRetry(() => git.pull(['origin', ref, '--force']));\n const commit = (await git.revparse([branchName])).trim() as LongCommitSha;\n config.branchCommits[branchName] = commit;\n config.branchIsModified[branchName] = false;\n return commit;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName);\n }\n}\n\nexport async function commitFiles(\n commitConfig: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n try {\n const commitResult = await prepareCommit(commitConfig);\n if (commitResult) {\n const pushResult = await pushCommit({\n sourceRef: commitConfig.branchName,\n files: commitConfig.files,\n });\n if (pushResult) {\n const { branchName } = commitConfig;\n const { commitSha } = commitResult;\n config.branchCommits[branchName] = commitSha;\n config.branchIsModified[branchName] = false;\n return commitSha;\n }\n }\n return null;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message.includes('[rejected] (stale info)')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport function getUrl({\n protocol,\n auth,\n hostname,\n host,\n repository,\n}: {\n protocol?: GitProtocol;\n auth?: string;\n hostname?: string;\n host?: string;\n repository: string;\n}): string {\n if (protocol === 'ssh') {\n // TODO: types (#22198)\n return `git@${hostname!}:${repository}.git`;\n }\n return URL.format({\n protocol: protocol ?? 'https',\n auth,\n hostname,\n host,\n pathname: repository + '.git',\n });\n}\n\nlet remoteRefsExist = false;\n\n/**\n *\n * Non-branch refs allow us to store git objects without triggering CI pipelines.\n * It's useful for API-based branch rebasing.\n *\n * @see https://stackoverflow.com/questions/63866947/pushing-git-non-branch-references-to-a-remote/63868286\n *\n */\nexport async function pushCommitToRenovateRef(\n commitSha: string,\n refName: string,\n): Promise<void> {\n const fullRefName = `refs/renovate/branches/${refName}`;\n await git.raw(['update-ref', fullRefName, commitSha]);\n await git.push(['--force', 'origin', fullRefName]);\n remoteRefsExist = true;\n}\n\n/**\n *\n * Removes all remote \"refs/renovate/branches/*\" refs in two steps:\n *\n * Step 1: list refs\n *\n * $ git ls-remote origin \"refs/renovate/branches/*\"\n *\n * > cca38e9ea6d10946bdb2d0ca5a52c205783897aa refs/renovate/branches/foo\n * > 29ac154936c880068994e17eb7f12da7fdca70e5 refs/renovate/branches/bar\n * > 3fafaddc339894b6d4f97595940fd91af71d0355 refs/renovate/branches/baz\n * > ...\n *\n * Step 2:\n *\n * $ git push --delete origin refs/renovate/branches/foo refs/renovate/branches/bar refs/renovate/branches/baz\n *\n * If Step 2 fails because the repo doesn't allow bulk changes, we'll remove them one by one instead:\n *\n * $ git push --delete origin refs/renovate/branches/foo\n * $ git push --delete origin refs/renovate/branches/bar\n * $ git push --delete origin refs/renovate/branches/baz\n */\nexport async function clearRenovateRefs(): Promise<void> {\n if (!gitInitialized || !remoteRefsExist) {\n return;\n }\n\n logger.debug(`Cleaning up Renovate refs: refs/renovate/branches/*`);\n const renovateRefs: string[] = [];\n\n try {\n const rawOutput = await git.listRemote([\n config.url,\n 'refs/renovate/branches/*',\n ]);\n const refs = rawOutput\n .split(newlineRegex)\n .map((line) => line.replace(regEx(/[0-9a-f]+\\s+/i), '').trim())\n .filter((line) => line.startsWith('refs/renovate/branches/'));\n renovateRefs.push(...refs);\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, `Renovate refs cleanup error`);\n }\n\n if (renovateRefs.length) {\n try {\n const pushOpts = ['--delete', 'origin', ...renovateRefs];\n await git.push(pushOpts);\n } catch (err) {\n if (bulkChangesDisallowed(err)) {\n for (const ref of renovateRefs) {\n try {\n const pushOpts = ['--delete', 'origin', ref];\n await git.push(pushOpts);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n break;\n }\n }\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n logger.warn({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n }\n }\n }\n\n remoteRefsExist = false;\n}\n\nconst treeItemRegex = regEx(\n /^(?<mode>\\d{6})\\s+(?<type>blob|tree|commit)\\s+(?<sha>[0-9a-f]{40})\\s+(?<path>.*)$/,\n);\n\nconst treeShaRegex = regEx(/tree\\s+(?<treeSha>[0-9a-f]{40})\\s*/);\n\n/**\n *\n * Obtain top-level items of commit tree.\n * We don't need subtree items, so here are 2 steps only.\n *\n * Step 1: commit SHA -> tree SHA\n *\n * $ git cat-file -p <commit-sha>\n *\n * > tree <tree-sha>\n * > parent 59b8b0e79319b7dc38f7a29d618628f3b44c2fd7\n * > ...\n *\n * Step 2: tree SHA -> tree items (top-level)\n *\n * $ git cat-file -p <tree-sha>\n *\n * > 040000 tree 389400684d1f004960addc752be13097fe85d776 src\n * > ...\n * > 100644 blob 7d2edde437ad4e7bceb70dbfe70e93350d99c98b package.json\n *\n */\nexport async function listCommitTree(\n commitSha: LongCommitSha,\n): Promise<TreeItem[]> {\n const commitOutput = await git.catFile(['-p', commitSha]);\n const { treeSha } =\n /* v8 ignore next -- will never happen ? */\n treeShaRegex.exec(commitOutput)?.groups ?? {};\n const contents = await git.catFile(['-p', treeSha]);\n const lines = contents.split(newlineRegex);\n const result: TreeItem[] = [];\n for (const line of lines) {\n const matchGroups = treeItemRegex.exec(line)?.groups;\n if (matchGroups) {\n const { path, mode, type, sha } = matchGroups;\n result.push({ path, mode, type, sha: sha as LongCommitSha });\n }\n }\n return result;\n}\n"]}
|