From 0e91fda45182e9cf0b6bf8b488bb816bd064e24f Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 13 Aug 2021 09:41:23 +0200
Subject: [PATCH] feat: centralized cache directory (#10115)

Ignore environment variables and instead use static cache directory for third party tools.

Closes #10094

BREAKING CHANGE: Renovate will now override any package manager cache locations configured in env variables.
# Conflicts:
#	lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
#	lib/manager/gomod/artifacts.ts
---
 lib/manager/bundler/artifacts.spec.ts         |  5 +--
 lib/manager/bundler/artifacts.ts              |  4 +-
 lib/manager/cocoapods/artifacts.ts            |  4 +-
 lib/manager/composer/artifacts.spec.ts        |  5 +--
 lib/manager/composer/artifacts.ts             |  7 +---
 .../__snapshots__/artifacts.spec.ts.snap      |  6 +--
 lib/manager/gomod/artifacts.ts                |  5 +--
 lib/manager/npm/post-update/index.ts          | 21 +++++-----
 lib/manager/nuget/artifacts.spec.ts           |  2 +-
 lib/manager/nuget/artifacts.ts                |  7 ++--
 lib/manager/pip_setup/util.ts                 |  3 +-
 .../__snapshots__/artifacts.spec.ts.snap      |  8 ++--
 lib/manager/pipenv/artifacts.ts               |  5 +--
 lib/util/fs/index.spec.ts                     | 42 ++-----------------
 lib/util/fs/index.ts                          | 29 ++-----------
 15 files changed, 36 insertions(+), 117 deletions(-)

diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts
index 63ad89c2ea..116ca3e801 100644
--- a/lib/manager/bundler/artifacts.spec.ts
+++ b/lib/manager/bundler/artifacts.spec.ts
@@ -53,10 +53,7 @@ describe('bundler.updateArtifacts()', () => {
     docker.resetPrefetchedImages();
 
     setAdminConfig(adminConfig);
-
-    fs.ensureCacheDir.mockResolvedValueOnce(
-      join(adminConfig.cacheDir, './others/gem')
-    );
+    fs.ensureCacheDir.mockResolvedValue('/tmp/cache/others/gem');
   });
   afterEach(() => {
     setAdminConfig();
diff --git a/lib/manager/bundler/artifacts.ts b/lib/manager/bundler/artifacts.ts
index 7d3fc830ff..e99063850f 100644
--- a/lib/manager/bundler/artifacts.ts
+++ b/lib/manager/bundler/artifacts.ts
@@ -172,13 +172,11 @@ export async function updateArtifacts(
       );
     }
 
-    const cacheDir = await ensureCacheDir('./others/gem', 'GEM_HOME');
-
     const execOptions: ExecOptions = {
       cwdFile: packageFileName,
       extraEnv: {
         ...bundlerHostRulesVariables,
-        GEM_HOME: cacheDir,
+        GEM_HOME: await ensureCacheDir('bundler'),
       },
       docker: {
         image: 'ruby',
diff --git a/lib/manager/cocoapods/artifacts.ts b/lib/manager/cocoapods/artifacts.ts
index 1ac5905208..247eea7dda 100644
--- a/lib/manager/cocoapods/artifacts.ts
+++ b/lib/manager/cocoapods/artifacts.ts
@@ -67,13 +67,11 @@ export async function updateArtifacts({
   );
   const tagConstraint = match?.groups?.cocoapodsVersion ?? null;
 
-  const cacheDir = await ensureCacheDir('./others/cocoapods', 'CP_HOME_DIR');
-
   const cmd = [...getPluginCommands(newPackageFileContent), 'pod install'];
   const execOptions: ExecOptions = {
     cwdFile: packageFileName,
     extraEnv: {
-      CP_HOME_DIR: cacheDir,
+      CP_HOME_DIR: await ensureCacheDir('cocoapods'),
     },
     docker: {
       image: 'cocoapods',
diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts
index 5675fbc6fe..b9ea47f0e1 100644
--- a/lib/manager/composer/artifacts.spec.ts
+++ b/lib/manager/composer/artifacts.spec.ts
@@ -49,10 +49,7 @@ describe('.updateArtifacts()', () => {
     docker.resetPrefetchedImages();
     hostRules.clear();
     setAdminConfig(adminConfig);
-    fs.ensureCacheDir.mockResolvedValue(
-      join(adminConfig.cacheDir, './others/composer')
-    );
-
+    fs.ensureCacheDir.mockResolvedValue('/tmp/renovate/cache/others/composer');
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [
         { version: '1.0.0' },
diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts
index 6f452b726e..2c69d8106f 100644
--- a/lib/manager/composer/artifacts.ts
+++ b/lib/manager/composer/artifacts.ts
@@ -81,11 +81,6 @@ export async function updateArtifacts({
 }: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`composer.updateArtifacts(${packageFileName})`);
 
-  const cacheDir = await ensureCacheDir(
-    './others/composer',
-    'COMPOSER_CACHE_DIR'
-  );
-
   const lockFileName = packageFileName.replace(/\.json$/, '.lock');
   const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');
   if (!existingLockFileContent) {
@@ -118,7 +113,7 @@ export async function updateArtifacts({
     const execOptions: ExecOptions = {
       cwdFile: packageFileName,
       extraEnv: {
-        COMPOSER_CACHE_DIR: cacheDir,
+        COMPOSER_CACHE_DIR: await ensureCacheDir('composer'),
         COMPOSER_AUTH: getAuthJson(),
       },
       docker: {
diff --git a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
index 6e0ee06a4a..d3178a961b 100644
--- a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
@@ -284,7 +284,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/go\\":\\"/tmp/renovate/cache/others/go\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"git config --global url.\\\\\\"https://some-token@github.com/\\\\\\".insteadOf \\\\\\"https://github.com/\\\\\\" && go get -d ./...\\"",
+    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"git config --global url.\\\\\\"https://some-token@github.com/\\\\\\".insteadOf \\\\\\"https://github.com/\\\\\\" && go get -d ./...\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -326,7 +326,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/go\\":\\"/tmp/renovate/cache/others/go\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./... && go mod tidy && go mod tidy\\"",
+    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./... && go mod tidy && go mod tidy\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -368,7 +368,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/go\\":\\"/tmp/renovate/cache/others/go\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./...\\"",
+    "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e GOPATH -e GOPROXY -e GOPRIVATE -e GONOPROXY -e GONOSUMDB -e GOFLAGS -e CGO_ENABLED -w \\"/tmp/github/some/repo\\" renovate/go:latest bash -l -c \\"go get -d ./...\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts
index 36f05c0983..0ec30ac673 100644
--- a/lib/manager/gomod/artifacts.ts
+++ b/lib/manager/gomod/artifacts.ts
@@ -94,8 +94,6 @@ export async function updateArtifacts({
 }: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`gomod.updateArtifacts(${goModFileName})`);
 
-  const goPath = await ensureCacheDir('./others/go', 'GOPATH');
-
   const sumFileName = goModFileName.replace(/\.mod$/, '.sum');
   const existingGoSumContent = await readLocalFile(sumFileName);
   if (!existingGoSumContent) {
@@ -121,7 +119,7 @@ export async function updateArtifacts({
     const execOptions: ExecOptions = {
       cwdFile: goModFileName,
       extraEnv: {
-        GOPATH: goPath,
+        GOPATH: await ensureCacheDir('go'),
         GOPROXY: process.env.GOPROXY,
         GOPRIVATE: process.env.GOPRIVATE,
         GONOPROXY: process.env.GONOPROXY,
@@ -133,7 +131,6 @@ export async function updateArtifacts({
         image: 'go',
         tagConstraint: config.constraints?.go,
         tagScheme: 'npm',
-        volumes: [goPath],
         preCommands: getPreCommands(),
       },
     };
diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts
index 543a414f31..b8268c4ef2 100644
--- a/lib/manager/npm/post-update/index.ts
+++ b/lib/manager/npm/post-update/index.ts
@@ -420,17 +420,16 @@ export async function getAdditionalFiles(
 
   const { additionalNpmrcContent, additionalYarnRcYml } = processHostRules();
 
-  const env = {
-    ...getChildProcessEnv(),
-    NPM_CONFIG_CACHE: await ensureCacheDir('./others/npm', 'NPM_CONFIG_CACHE'),
-    YARN_CACHE_FOLDER: await ensureCacheDir(
-      './others/yarn',
-      'YARN_CACHE_FOLDER'
-    ),
-    YARN_GLOBAL_FOLDER: await ensureCacheDir('./others/berry'),
-    npm_config_store: await ensureCacheDir('./others/pnpm', 'npm_config_store'),
-    NODE_ENV: 'dev',
-  };
+  const env = getChildProcessEnv([
+    'NPM_CONFIG_CACHE',
+    'YARN_CACHE_FOLDER',
+    'npm_config_store',
+  ]);
+  env.NPM_CONFIG_CACHE = await ensureCacheDir('npm');
+  env.YARN_CACHE_FOLDER = await ensureCacheDir('yarn');
+  env.YARN_GLOBAL_FOLDER = await ensureCacheDir('berry');
+  env.npm_config_store = await ensureCacheDir('pnpm');
+  env.NODE_ENV = 'dev';
 
   let token = '';
   try {
diff --git a/lib/manager/nuget/artifacts.spec.ts b/lib/manager/nuget/artifacts.spec.ts
index 4e055bbfb7..f6eae1fb60 100644
--- a/lib/manager/nuget/artifacts.spec.ts
+++ b/lib/manager/nuget/artifacts.spec.ts
@@ -46,7 +46,7 @@ describe('updateArtifacts', () => {
     getDefaultRegistries.mockReturnValue([] as any);
     env.getChildProcessEnv.mockReturnValue(envMock.basic);
     fs.ensureCacheDir.mockImplementation((dirName: string) =>
-      Promise.resolve(dirName)
+      Promise.resolve(`others/${dirName}`)
     );
     getRandomString.mockReturnValue('not-so-random' as any);
     setAdminConfig(adminConfig);
diff --git a/lib/manager/nuget/artifacts.ts b/lib/manager/nuget/artifacts.ts
index f36891f0d9..2482979773 100644
--- a/lib/manager/nuget/artifacts.ts
+++ b/lib/manager/nuget/artifacts.ts
@@ -64,10 +64,9 @@ async function runDotnetRestore(
     },
   };
 
-  const nugetConfigDir = await ensureCacheDir(
-    `./others/nuget/${getRandomString()}`
-  );
-  const nugetConfigFile = join(nugetConfigDir, 'nuget.config');
+  const nugetCacheDir = await ensureCacheDir('nuget');
+  const nugetConfigDir = join(nugetCacheDir, `${getRandomString()}`);
+  const nugetConfigFile = join(nugetConfigDir, `nuget.config`);
   await outputFile(
     nugetConfigFile,
     `<?xml version="1.0" encoding="utf-8"?>\n<configuration>\n</configuration>\n`
diff --git a/lib/manager/pip_setup/util.ts b/lib/manager/pip_setup/util.ts
index 88e7e70eec..e2ec624586 100644
--- a/lib/manager/pip_setup/util.ts
+++ b/lib/manager/pip_setup/util.ts
@@ -15,8 +15,7 @@ export async function getExtractFile(): Promise<string> {
     return extractPy;
   }
 
-  const cacheDir = await ensureCacheDir('./others/pip_setup');
-  extractPy = join(cacheDir, EXTRACT);
+  extractPy = join(await ensureCacheDir('pip_setup'), EXTRACT);
   await outputFile(extractPy, dataFiles.get('data/extract.py'));
 
   return extractPy;
diff --git a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
index da8bb4d2db..991f4da5db 100644
--- a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
@@ -122,7 +122,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python:latest bash -l -c \\"pip install --user pipenv && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python:latest bash -l -c \\"pip install --user pipenv && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -158,7 +158,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -194,7 +194,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.8.13 && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
@@ -230,7 +230,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -v \\"/tmp/renovate/cache/others/pipenv\\":\\"/tmp/renovate/cache/others/pipenv\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.1.1 && pipenv lock\\"",
+    "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -v \\"/tmp/renovate/cache\\":\\"/tmp/renovate/cache\\" -e PIPENV_CACHE_DIR -w \\"/tmp/github/some/repo\\" renovate/python bash -l -c \\"pip install --user pipenv==2020.1.1 && pipenv lock\\"",
     "options": Object {
       "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
diff --git a/lib/manager/pipenv/artifacts.ts b/lib/manager/pipenv/artifacts.ts
index fa9e2a3477..92b0f371dd 100644
--- a/lib/manager/pipenv/artifacts.ts
+++ b/lib/manager/pipenv/artifacts.ts
@@ -77,8 +77,6 @@ export async function updateArtifacts({
 }: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`pipenv.updateArtifacts(${pipfileName})`);
 
-  const cacheDir = await ensureCacheDir('./others/pipenv', 'PIPENV_CACHE_DIR');
-
   const lockFileName = pipfileName + '.lock';
   const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');
   if (!existingLockFileContent) {
@@ -99,7 +97,7 @@ export async function updateArtifacts({
     const execOptions: ExecOptions = {
       cwdFile: pipfileName,
       extraEnv: {
-        PIPENV_CACHE_DIR: cacheDir,
+        PIPENV_CACHE_DIR: await ensureCacheDir('pipenv'),
       },
       docker: {
         image: 'python',
@@ -108,7 +106,6 @@ export async function updateArtifacts({
         preCommands: [
           `pip install --user ${quote(`pipenv${pipenvConstraint}`)}`,
         ],
-        volumes: [cacheDir],
       },
     };
     logger.debug({ cmd }, 'pipenv lock command');
diff --git a/lib/util/fs/index.spec.ts b/lib/util/fs/index.spec.ts
index dbda45ea06..da63e7beaa 100644
--- a/lib/util/fs/index.spec.ts
+++ b/lib/util/fs/index.spec.ts
@@ -166,13 +166,12 @@ describe(getName(), () => {
       dirFromEnv: string;
       dirFromConfig: string;
     } {
-      const dirFromEnv = join(root, join('/foo'));
+      const dirFromEnv = join(root, join('/bar/others/bundler'));
       const dirFromConfig = join(root, join('/bar'));
 
       jest.resetAllMocks();
       env.getChildProcessEnv.mockReturnValueOnce({
         ...envMock.basic,
-        CUSTOM_CACHE_DIR: dirFromEnv,
       });
 
       setAdminConfig({
@@ -185,45 +184,10 @@ describe(getName(), () => {
     it('prefers environment variables over admin config', async () => {
       await withDir(
         async (tmpDir) => {
-          const { dirFromEnv, dirFromConfig } = setupMock(tmpDir.path);
-          const res = await ensureCacheDir(
-            './deeply/nested',
-            'CUSTOM_CACHE_DIR'
-          );
+          const { dirFromEnv } = setupMock(tmpDir.path);
+          const res = await ensureCacheDir('bundler');
           expect(res).toEqual(dirFromEnv);
           expect(await exists(dirFromEnv)).toBeTrue();
-          expect(await exists(dirFromConfig)).toBeFalse();
-        },
-        { unsafeCleanup: true }
-      );
-    });
-
-    it('is optional to pass environment variable', async () => {
-      await withDir(
-        async (tmpDir) => {
-          const { dirFromEnv, dirFromConfig } = setupMock(tmpDir.path);
-          const expected = join(`${dirFromConfig}/deeply/nested`);
-          const res = await ensureCacheDir('./deeply/nested');
-          expect(res).toEqual(expected);
-          expect(await exists(expected)).toBeTrue();
-          expect(await exists(dirFromEnv)).toBeFalse();
-        },
-        { unsafeCleanup: true }
-      );
-    });
-
-    it('falls back to admin config', async () => {
-      await withDir(
-        async (tmpDir) => {
-          const { dirFromEnv, dirFromConfig } = setupMock(tmpDir.path);
-          const expected = join(`${dirFromConfig}/deeply/nested`);
-          const res = await ensureCacheDir(
-            './deeply/nested',
-            'NO_SUCH_VARIABLE'
-          );
-          expect(res).toEqual(expected);
-          expect(await exists(expected)).toBeTrue();
-          expect(await exists(dirFromEnv)).toBeFalse();
         },
         { unsafeCleanup: true }
       );
diff --git a/lib/util/fs/index.ts b/lib/util/fs/index.ts
index 054a267e1d..b932356c5a 100644
--- a/lib/util/fs/index.ts
+++ b/lib/util/fs/index.ts
@@ -5,7 +5,6 @@ import * as fs from 'fs-extra';
 import { isAbsolute, join, parse } from 'upath';
 import { getAdminConfig } from '../../config/admin';
 import { logger } from '../../logger';
-import { getChildProcessEnv } from '../exec/env';
 
 export * from './proxies';
 
@@ -83,30 +82,10 @@ export async function ensureLocalDir(dirName: string): Promise<void> {
   await fs.ensureDir(localDirName);
 }
 
-export async function ensureCacheDir(
-  adminCacheSubdir: string,
-  envCacheVar?: string
-): Promise<string> {
-  let cacheDir: string;
-  if (envCacheVar) {
-    const env = getChildProcessEnv([envCacheVar]);
-    if (env[envCacheVar]) {
-      cacheDir = env[envCacheVar];
-      logger.debug(
-        { cacheDir },
-        `Using cache directory from environment: ${envCacheVar}`
-      );
-    }
-  }
-
-  if (!cacheDir) {
-    const { cacheDir: adminCacheDir } = getAdminConfig();
-    cacheDir = join(adminCacheDir, adminCacheSubdir);
-    logger.debug({ cacheDir }, `Using cache directory from admin config`);
-  }
-
-  await fs.ensureDir(cacheDir);
-  return cacheDir;
+export async function ensureCacheDir(name: string): Promise<string> {
+  const cacheDirName = join(getAdminConfig().cacheDir, `others/${name}`);
+  await fs.ensureDir(cacheDirName);
+  return cacheDirName;
 }
 
 /**
-- 
GitLab