diff --git a/lib/manager/bundler/artifacts.ts b/lib/manager/bundler/artifacts.ts
index 152a3b4aa6a91376938ccb99a613e7a74823075e..c4e1131e2b8acd4d90b12e704ae6a0ed86746f0c 100644
--- a/lib/manager/bundler/artifacts.ts
+++ b/lib/manager/bundler/artifacts.ts
@@ -10,7 +10,7 @@ import {
   matches,
   sortVersions,
 } from '../../versioning/ruby';
-import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
+import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { platform } from '../../platform';
 import {
   BUNDLER_INVALID_CREDENTIALS,
@@ -22,12 +22,12 @@ import {
   BINARY_SOURCE_GLOBAL,
 } from '../../constants/data-binary-source';
 
-export async function updateArtifacts(
-  packageFileName: string,
-  updatedDeps: string[],
-  newPackageFileContent: string,
-  config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[] | null> {
+export async function updateArtifacts({
+  packageFileName,
+  updatedDeps,
+  newPackageFileContent,
+  config,
+}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`bundler.updateArtifacts(${packageFileName})`);
   // istanbul ignore if
   if (global.repoCache.bundlerArtifactsError) {
@@ -190,12 +190,12 @@ export async function updateArtifacts(
         const newUpdatedDeps = [
           ...new Set([...updatedDeps, ...resolveMatches]),
         ];
-        return updateArtifacts(
+        return updateArtifacts({
           packageFileName,
-          newUpdatedDeps,
+          updatedDeps: newUpdatedDeps,
           newPackageFileContent,
-          config
-        );
+          config,
+        });
       }
       logger.info(
         { err },
diff --git a/lib/manager/cargo/artifacts.ts b/lib/manager/cargo/artifacts.ts
index 61710b6d6db8601d38b31c1b92c0d31a614a3614..3fa234e808574038574d6a59bfea2c436bc1f78e 100644
--- a/lib/manager/cargo/artifacts.ts
+++ b/lib/manager/cargo/artifacts.ts
@@ -3,16 +3,16 @@ import { outputFile, readFile } from 'fs-extra';
 import { exec } from '../../util/exec';
 import { getChildProcessEnv } from '../../util/exec/env';
 import { logger } from '../../logger';
-import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
+import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { platform } from '../../platform';
 import { BINARY_SOURCE_DOCKER } from '../../constants/data-binary-source';
 
-export async function updateArtifacts(
-  packageFileName: string,
-  updatedDeps: string[],
-  newPackageFileContent: string,
-  config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[] | null> {
+export async function updateArtifacts({
+  packageFileName,
+  updatedDeps,
+  newPackageFileContent,
+  config,
+}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`cargo.updateArtifacts(${packageFileName})`);
   if (updatedDeps === undefined || updatedDeps.length < 1) {
     logger.debug('No updated cargo deps - returning null');
diff --git a/lib/manager/common.ts b/lib/manager/common.ts
index eb819f7e388e0325e2ce72fecb3fa9bb508101d8..2a18a1a927aa24b6585d9223ee2bd88be885c4c4 100644
--- a/lib/manager/common.ts
+++ b/lib/manager/common.ts
@@ -173,6 +173,12 @@ export interface UpdateArtifactsResult {
   file?: { name: string; contents: string };
 }
 
+export interface UpdateArtifact {
+  packageFileName: string;
+  updatedDeps: string[];
+  newPackageFileContent: string;
+  config: UpdateArtifactsConfig;
+}
 export interface ManagerApi {
   language?: string;
   supportsLockFileMaintenance?: boolean;
@@ -195,10 +201,7 @@ export interface ManagerApi {
   getRangeStrategy(config: RangeConfig): RangeStrategy;
 
   updateArtifacts?(
-    packageFileName: string,
-    updatedDeps: string[],
-    newPackageFileContent: string,
-    config: UpdateArtifactsConfig
+    updateArtifact: UpdateArtifact
   ): Result<UpdateArtifactsResult[] | null>;
 
   updateDependency(
diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts
index 343c29705aa8378f99942b811f97492241d18e38..cd1bad43ec3d13d676849f32f09008cd9bcb2a37 100644
--- a/lib/manager/composer/artifacts.ts
+++ b/lib/manager/composer/artifacts.ts
@@ -3,7 +3,7 @@ import URL from 'url';
 import fs from 'fs-extra';
 import upath from 'upath';
 import { exec } from '../../util/exec';
-import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
+import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { logger } from '../../logger';
 import * as hostRules from '../../util/host-rules';
 import { getChildProcessEnv } from '../../util/exec/env';
@@ -15,12 +15,12 @@ import {
   BINARY_SOURCE_GLOBAL,
 } from '../../constants/data-binary-source';
 
-export async function updateArtifacts(
-  packageFileName: string,
-  updatedDeps: string[],
-  newPackageFileContent: string,
-  config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[] | null> {
+export async function updateArtifacts({
+  packageFileName,
+  updatedDeps,
+  newPackageFileContent,
+  config,
+}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`composer.updateArtifacts(${packageFileName})`);
   const env = getChildProcessEnv(['COMPOSER_CACHE_DIR']);
   env.COMPOSER_CACHE_DIR =
diff --git a/lib/manager/git-submodules/artifacts.ts b/lib/manager/git-submodules/artifacts.ts
index 81555ef443c66ef0cb85417453de55df5d3c4e7a..cd0f348e3ee6cbdfeef1514fb118edaa5bdb99a3 100644
--- a/lib/manager/git-submodules/artifacts.ts
+++ b/lib/manager/git-submodules/artifacts.ts
@@ -1,11 +1,8 @@
-import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
+import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 
-export default function updateArtifacts(
-  packageFileName: string,
-  updatedDeps: string[],
-  newPackageFileContent: string,
-  config: UpdateArtifactsConfig
-): UpdateArtifactsResult[] | null {
+export default function updateArtifacts({
+  updatedDeps,
+}: UpdateArtifact): UpdateArtifactsResult[] | null {
   return [
     {
       file: {
diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts
index 496d1a96ad2302d7f28c212893f32558c750cce2..e0be95857229680483ee274e966ad1368240c5b3 100644
--- a/lib/manager/gomod/artifacts.ts
+++ b/lib/manager/gomod/artifacts.ts
@@ -4,7 +4,7 @@ import { exec } from '../../util/exec';
 import { find } from '../../util/host-rules';
 import { getChildProcessEnv } from '../../util/exec/env';
 import { logger } from '../../logger';
-import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
+import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { platform } from '../../platform';
 import {
   BINARY_SOURCE_AUTO,
@@ -12,12 +12,12 @@ import {
   BINARY_SOURCE_GLOBAL,
 } from '../../constants/data-binary-source';
 
-export async function updateArtifacts(
-  goModFileName: string,
-  _updatedDeps: string[],
-  newGoModContent: string,
-  config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[] | null> {
+export async function updateArtifacts({
+  packageFileName: goModFileName,
+  updatedDeps: _updatedDeps,
+  newPackageFileContent: newGoModContent,
+  config,
+}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`gomod.updateArtifacts(${goModFileName})`);
   const customEnv = ['GOPATH', 'GOPROXY', 'GONOSUMDB'];
   const env = getChildProcessEnv(customEnv);
diff --git a/lib/manager/mix/artifacts.ts b/lib/manager/mix/artifacts.ts
index 58701f687ec248b17a527da3d1a6105ddb32e2ae..839ecb1c89dca70e3a44d8fc82196146328d3c32 100644
--- a/lib/manager/mix/artifacts.ts
+++ b/lib/manager/mix/artifacts.ts
@@ -3,15 +3,15 @@ import fs from 'fs-extra';
 import { platform } from '../../platform';
 import { exec } from '../../util/exec';
 import { logger } from '../../logger';
-import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
+import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { BINARY_SOURCE_DOCKER } from '../../constants/data-binary-source';
 
-export async function updateArtifacts(
-  packageFileName: string,
-  updatedDeps: string[],
-  newPackageFileContent: string,
-  config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[] | null> {
+export async function updateArtifacts({
+  packageFileName,
+  updatedDeps,
+  newPackageFileContent,
+  config,
+}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`mix.getArtifacts(${packageFileName})`);
   if (updatedDeps.length < 1) {
     logger.debug('No updated mix deps - returning null');
diff --git a/lib/manager/pipenv/artifacts.ts b/lib/manager/pipenv/artifacts.ts
index 99881cf7be8f838577588c47bd3fb2e823178cb8..773b2603c5b496cf9baf21852a2953a80c4ae787 100644
--- a/lib/manager/pipenv/artifacts.ts
+++ b/lib/manager/pipenv/artifacts.ts
@@ -3,16 +3,16 @@ import { join, dirname } from 'upath';
 import { exec } from '../../util/exec';
 import { getChildProcessEnv } from '../../util/exec/env';
 import { logger } from '../../logger';
-import { UpdateArtifactsResult, UpdateArtifactsConfig } from '../common';
+import { UpdateArtifactsResult, UpdateArtifact } from '../common';
 import { platform } from '../../platform';
 import { BINARY_SOURCE_DOCKER } from '../../constants/data-binary-source';
 
-export async function updateArtifacts(
-  pipfileName: string,
-  _updatedDeps: string[],
-  newPipfileContent: string,
-  config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[] | null> {
+export async function updateArtifacts({
+  packageFileName: pipfileName,
+  updatedDeps: _updatedDeps,
+  newPackageFileContent: newPipfileContent,
+  config,
+}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`pipenv.updateArtifacts(${pipfileName})`);
 
   const env = getChildProcessEnv(['LC_ALL', 'LANG', 'PIPENV_CACHE_DIR']);
diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts
index d5d6ac08a3e27dff99f89fc772d4fd305cbcaed2..7399753251fd4acb976f04ab3469e94a446ffa1e 100644
--- a/lib/manager/poetry/artifacts.ts
+++ b/lib/manager/poetry/artifacts.ts
@@ -3,16 +3,16 @@ import { parse, join } from 'upath';
 import { outputFile, readFile } from 'fs-extra';
 import { exec, ExecOptions } from '../../util/exec';
 import { logger } from '../../logger';
-import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
+import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { platform } from '../../platform';
 import { BINARY_SOURCE_DOCKER } from '../../constants/data-binary-source';
 
-export async function updateArtifacts(
-  packageFileName: string,
-  updatedDeps: string[],
-  newPackageFileContent: string,
-  config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[] | null> {
+export async function updateArtifacts({
+  packageFileName,
+  updatedDeps,
+  newPackageFileContent,
+  config,
+}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`poetry.updateArtifacts(${packageFileName})`);
   if (!is.nonEmptyArray(updatedDeps)) {
     logger.debug('No updated poetry deps - returning null');
diff --git a/lib/workers/branch/get-updated.ts b/lib/workers/branch/get-updated.ts
index 7f8994fc85a0b15628d6bfcece6035feeeeae08f..3ef7ee2b9f5823a55b1b396f8ea168f945df951d 100644
--- a/lib/workers/branch/get-updated.ts
+++ b/lib/workers/branch/get-updated.ts
@@ -91,12 +91,12 @@ export async function getUpdatedPackageFiles(
     const updatedDeps = packageFileUpdatedDeps[packageFile.name];
     const updateArtifacts = get(manager, 'updateArtifacts');
     if (updateArtifacts) {
-      const results = await updateArtifacts(
-        packageFile.name,
+      const results = await updateArtifacts({
+        packageFileName: packageFile.name,
         updatedDeps,
-        packageFile.contents,
-        config
-      );
+        newPackageFileContent: packageFile.contents,
+        config,
+      });
       if (is.nonEmptyArray(results)) {
         for (const res of results) {
           const { file, artifactError } = res;
@@ -118,12 +118,12 @@ export async function getUpdatedPackageFiles(
         const packageFileContents =
           updatedFileContents[packageFile] ||
           (await platform.getFile(packageFile, config.parentBranch));
-        const results = await updateArtifacts(
-          packageFile,
-          [],
-          packageFileContents,
-          config
-        );
+        const results = await updateArtifacts({
+          packageFileName: packageFile,
+          updatedDeps: [],
+          newPackageFileContent: packageFileContents,
+          config,
+        });
         if (is.nonEmptyArray(results)) {
           for (const res of results) {
             const { file, artifactError } = res;
diff --git a/test/manager/bundler/artifacts.spec.ts b/test/manager/bundler/artifacts.spec.ts
index 6c66a9b4c9ee84ef8e4c601c3e2195c1c1b6f672..442b10e1ed47821fc94790a27cc2685c545ea36f 100644
--- a/test/manager/bundler/artifacts.spec.ts
+++ b/test/manager/bundler/artifacts.spec.ts
@@ -38,7 +38,14 @@ describe('bundler.updateArtifacts()', () => {
     env.getChildProcessEnv.mockReturnValue(envMock.basic);
   });
   it('returns null by default', async () => {
-    expect(await updateArtifacts('', [], '', config)).toBeNull();
+    expect(
+      await updateArtifacts({
+        packageFileName: '',
+        updatedDeps: [],
+        newPackageFileContent: '',
+        config,
+      })
+    ).toBeNull();
   });
   it('returns null if Gemfile.lock was not changed', async () => {
     platform.getFile.mockResolvedValueOnce('Current Gemfile.lock');
@@ -49,7 +56,12 @@ describe('bundler.updateArtifacts()', () => {
     } as Git.StatusResult);
     fs.readFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
     expect(
-      await updateArtifacts('Gemfile', [], 'Updated Gemfile content', config)
+      await updateArtifacts({
+        packageFileName: 'Gemfile',
+        updatedDeps: [],
+        newPackageFileContent: 'Updated Gemfile content',
+        config,
+      })
     ).toMatchSnapshot();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -62,7 +74,12 @@ describe('bundler.updateArtifacts()', () => {
     } as Git.StatusResult);
     fs.readFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
     expect(
-      await updateArtifacts('Gemfile', [], 'Updated Gemfile content', config)
+      await updateArtifacts({
+        packageFileName: 'Gemfile',
+        updatedDeps: [],
+        newPackageFileContent: 'Updated Gemfile content',
+        config,
+      })
     ).toMatchSnapshot();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -75,9 +92,14 @@ describe('bundler.updateArtifacts()', () => {
     } as Git.StatusResult);
     fs.readFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
     expect(
-      await updateArtifacts('Gemfile', [], 'Updated Gemfile content', {
-        ...config,
-        binarySource: BINARY_SOURCE_GLOBAL,
+      await updateArtifacts({
+        packageFileName: 'Gemfile',
+        updatedDeps: [],
+        newPackageFileContent: 'Updated Gemfile content',
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_GLOBAL,
+        },
       })
     ).toMatchSnapshot();
     expect(execSnapshots).toMatchSnapshot();
@@ -100,9 +122,14 @@ describe('bundler.updateArtifacts()', () => {
       } as Git.StatusResult);
       fs.readFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
       expect(
-        await updateArtifacts('Gemfile', [], 'Updated Gemfile content', {
-          ...config,
-          binarySource: BINARY_SOURCE_DOCKER,
+        await updateArtifacts({
+          packageFileName: 'Gemfile',
+          updatedDeps: [],
+          newPackageFileContent: 'Updated Gemfile content',
+          config: {
+            ...config,
+            binarySource: BINARY_SOURCE_DOCKER,
+          },
         })
       ).toMatchSnapshot();
       expect(execSnapshots).toMatchSnapshot();
@@ -123,13 +150,18 @@ describe('bundler.updateArtifacts()', () => {
       } as Git.StatusResult);
       fs.readFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
       expect(
-        await updateArtifacts('Gemfile', [], 'Updated Gemfile content', {
-          ...config,
-          binarySource: BINARY_SOURCE_DOCKER,
-          dockerUser: 'foobar',
-          compatibility: {
-            ruby: '1.2.5',
-            bundler: '3.2.1',
+        await updateArtifacts({
+          packageFileName: 'Gemfile',
+          updatedDeps: [],
+          newPackageFileContent: 'Updated Gemfile content',
+          config: {
+            ...config,
+            binarySource: BINARY_SOURCE_DOCKER,
+            dockerUser: 'foobar',
+            compatibility: {
+              ruby: '1.2.5',
+              bundler: '3.2.1',
+            },
           },
         })
       ).toMatchSnapshot();
diff --git a/test/manager/cargo/artifacts.spec.ts b/test/manager/cargo/artifacts.spec.ts
index 5b6481afbc6b26449f8f13bdf5a5dbca8943a000..d9c788562d14b220593eae0fc9f08a5de535c477 100644
--- a/test/manager/cargo/artifacts.spec.ts
+++ b/test/manager/cargo/artifacts.spec.ts
@@ -30,12 +30,22 @@ describe('.updateArtifacts()', () => {
   it('returns null if no Cargo.lock found', async () => {
     const updatedDeps = ['dep1'];
     expect(
-      await cargo.updateArtifacts('Cargo.toml', updatedDeps, '', config)
+      await cargo.updateArtifacts({
+        packageFileName: 'Cargo.toml',
+        updatedDeps,
+        newPackageFileContent: '',
+        config,
+      })
     ).toBeNull();
   });
   it('returns null if updatedDeps is empty', async () => {
     expect(
-      await cargo.updateArtifacts('Cargo.toml', [], '', config)
+      await cargo.updateArtifacts({
+        packageFileName: 'Cargo.toml',
+        updatedDeps: [],
+        newPackageFileContent: '',
+        config,
+      })
     ).toBeNull();
   });
   it('returns null if unchanged', async () => {
@@ -44,7 +54,12 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockReturnValueOnce('Current Cargo.lock' as any);
     const updatedDeps = ['dep1'];
     expect(
-      await cargo.updateArtifacts('Cargo.toml', updatedDeps, '', config)
+      await cargo.updateArtifacts({
+        packageFileName: 'Cargo.toml',
+        updatedDeps,
+        newPackageFileContent: '',
+        config,
+      })
     ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -54,7 +69,12 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockReturnValueOnce('New Cargo.lock' as any);
     const updatedDeps = ['dep1'];
     expect(
-      await cargo.updateArtifacts('Cargo.toml', updatedDeps, '{}', config)
+      await cargo.updateArtifacts({
+        packageFileName: 'Cargo.toml',
+        updatedDeps,
+        newPackageFileContent: '{}',
+        config,
+      })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -64,10 +84,15 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockReturnValueOnce('New Cargo.lock' as any);
     const updatedDeps = ['dep1'];
     expect(
-      await cargo.updateArtifacts('Cargo.toml', updatedDeps, '{}', {
-        ...config,
-        binarySource: BINARY_SOURCE_DOCKER,
-        dockerUser: 'foobar',
+      await cargo.updateArtifacts({
+        packageFileName: 'Cargo.toml',
+        updatedDeps,
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_DOCKER,
+          dockerUser: 'foobar',
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -79,7 +104,12 @@ describe('.updateArtifacts()', () => {
     });
     const updatedDeps = ['dep1'];
     expect(
-      await cargo.updateArtifacts('Cargo.toml', updatedDeps, '{}', config)
+      await cargo.updateArtifacts({
+        packageFileName: 'Cargo.toml',
+        updatedDeps,
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toMatchSnapshot();
   });
 });
diff --git a/test/manager/composer/artifacts.spec.ts b/test/manager/composer/artifacts.spec.ts
index cf0de0167f63853a5854bad99192b38a146e75f5..2c70a03f0a7190cdd906d66f0ad3f9f5f1f253ae 100644
--- a/test/manager/composer/artifacts.spec.ts
+++ b/test/manager/composer/artifacts.spec.ts
@@ -36,7 +36,12 @@ describe('.updateArtifacts()', () => {
   });
   it('returns if no composer.lock found', async () => {
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', config)
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toBeNull();
   });
   it('returns null if unchanged', async () => {
@@ -45,7 +50,12 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockReturnValueOnce('Current composer.lock' as any);
     platform.getRepoStatus.mockResolvedValue({ modified: [] } as StatusResult);
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', config)
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -63,7 +73,12 @@ describe('.updateArtifacts()', () => {
     });
     platform.getRepoStatus.mockResolvedValue({ modified: [] } as StatusResult);
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', authConfig)
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config: authConfig,
+      })
     ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -75,7 +90,12 @@ describe('.updateArtifacts()', () => {
       modified: ['composer.lock'],
     } as StatusResult);
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', config)
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -87,9 +107,14 @@ describe('.updateArtifacts()', () => {
       modified: ['composer.lock'],
     } as StatusResult);
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', {
-        ...config,
-        isLockFileMaintenance: true,
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          isLockFileMaintenance: true,
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -101,10 +126,15 @@ describe('.updateArtifacts()', () => {
 
     fs.readFile.mockReturnValueOnce('New composer.lock' as any);
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', {
-        ...config,
-        binarySource: BINARY_SOURCE_DOCKER,
-        dockerUser: 'foobar',
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_DOCKER,
+          dockerUser: 'foobar',
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -114,9 +144,14 @@ describe('.updateArtifacts()', () => {
     const execSnapshots = mockExecAll(exec);
     fs.readFile.mockReturnValueOnce('New composer.lock' as any);
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', {
-        ...config,
-        binarySource: BINARY_SOURCE_GLOBAL,
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_GLOBAL,
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -127,7 +162,12 @@ describe('.updateArtifacts()', () => {
       throw new Error('not found');
     });
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', config)
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toMatchSnapshot();
   });
   it('catches unmet requirements errors', async () => {
@@ -138,7 +178,12 @@ describe('.updateArtifacts()', () => {
       );
     });
     expect(
-      await composer.updateArtifacts('composer.json', [], '{}', config)
+      await composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toMatchSnapshot();
   });
   it('throws for disk space', async () => {
@@ -149,7 +194,12 @@ describe('.updateArtifacts()', () => {
       );
     });
     await expect(
-      composer.updateArtifacts('composer.json', [], '{}', config)
+      composer.updateArtifacts({
+        packageFileName: 'composer.json',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).rejects.toThrow();
   });
 });
diff --git a/test/manager/git-submodules/artifact.spec.ts b/test/manager/git-submodules/artifact.spec.ts
index 4c845d40ff56553748771379086d2019d14f89df..5df38c961d3b91c105d1daa5d3ebc8a67136df56 100644
--- a/test/manager/git-submodules/artifact.spec.ts
+++ b/test/manager/git-submodules/artifact.spec.ts
@@ -3,7 +3,14 @@ import updateArtifacts from '../../../lib/manager/git-submodules/artifacts';
 describe('lib/manager/gitsubmodules/artifacts', () => {
   describe('updateArtifacts()', () => {
     it('returns empty content', () => {
-      expect(updateArtifacts('', [''], '', {})).toMatchSnapshot();
+      expect(
+        updateArtifacts({
+          packageFileName: '',
+          updatedDeps: [''],
+          newPackageFileContent: '',
+          config: {},
+        })
+      ).toMatchSnapshot();
     });
   });
 });
diff --git a/test/manager/gomod/artifacts.spec.ts b/test/manager/gomod/artifacts.spec.ts
index c3813fdf5ef57c53656a089e7df0786cad0a070b..0ab40fc52c73f7c8e444384963f8d21fa924d139 100644
--- a/test/manager/gomod/artifacts.spec.ts
+++ b/test/manager/gomod/artifacts.spec.ts
@@ -50,7 +50,12 @@ describe('.updateArtifacts()', () => {
   it('returns if no go.sum found', async () => {
     const execSnapshots = mockExecAll(exec);
     expect(
-      await gomod.updateArtifacts('go.mod', [], gomod1, config)
+      await gomod.updateArtifacts({
+        packageFileName: 'go.mod',
+        updatedDeps: [],
+        newPackageFileContent: gomod1,
+        config,
+      })
     ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -61,7 +66,12 @@ describe('.updateArtifacts()', () => {
       modified: [],
     } as StatusResult);
     expect(
-      await gomod.updateArtifacts('go.mod', [], gomod1, config)
+      await gomod.updateArtifacts({
+        packageFileName: 'go.mod',
+        updatedDeps: [],
+        newPackageFileContent: gomod1,
+        config,
+      })
     ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -73,7 +83,12 @@ describe('.updateArtifacts()', () => {
     } as StatusResult);
     fs.readFile.mockReturnValueOnce('New go.sum' as any);
     expect(
-      await gomod.updateArtifacts('go.mod', [], gomod1, config)
+      await gomod.updateArtifacts({
+        packageFileName: 'go.mod',
+        updatedDeps: [],
+        newPackageFileContent: gomod1,
+        config,
+      })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -85,10 +100,15 @@ describe('.updateArtifacts()', () => {
     } as StatusResult);
     fs.readFile.mockReturnValueOnce('New go.sum' as any);
     expect(
-      await gomod.updateArtifacts('go.mod', [], gomod1, {
-        ...config,
-        binarySource: BINARY_SOURCE_DOCKER,
-        dockerUser: 'foobar',
+      await gomod.updateArtifacts({
+        packageFileName: 'go.mod',
+        updatedDeps: [],
+        newPackageFileContent: gomod1,
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_DOCKER,
+          dockerUser: 'foobar',
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -101,9 +121,14 @@ describe('.updateArtifacts()', () => {
     } as StatusResult);
     fs.readFile.mockReturnValueOnce('New go.sum' as any);
     expect(
-      await gomod.updateArtifacts('go.mod', [], gomod1, {
-        ...config,
-        binarySource: BINARY_SOURCE_GLOBAL,
+      await gomod.updateArtifacts({
+        packageFileName: 'go.mod',
+        updatedDeps: [],
+        newPackageFileContent: gomod1,
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_GLOBAL,
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -119,9 +144,14 @@ describe('.updateArtifacts()', () => {
     } as StatusResult);
     fs.readFile.mockReturnValueOnce('New go.sum' as any);
     expect(
-      await gomod.updateArtifacts('go.mod', [], gomod1, {
-        ...config,
-        binarySource: BINARY_SOURCE_DOCKER,
+      await gomod.updateArtifacts({
+        packageFileName: 'go.mod',
+        updatedDeps: [],
+        newPackageFileContent: gomod1,
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_DOCKER,
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -141,10 +171,15 @@ describe('.updateArtifacts()', () => {
     try {
       global.appMode = true;
       expect(
-        await gomod.updateArtifacts('go.mod', [], gomod1, {
-          ...config,
-          binarySource: BINARY_SOURCE_DOCKER,
-          postUpdateOptions: ['gomodTidy'],
+        await gomod.updateArtifacts({
+          packageFileName: 'go.mod',
+          updatedDeps: [],
+          newPackageFileContent: gomod1,
+          config: {
+            ...config,
+            binarySource: BINARY_SOURCE_DOCKER,
+            postUpdateOptions: ['gomodTidy'],
+          },
         })
       ).not.toBeNull();
       expect(execSnapshots).toMatchSnapshot();
@@ -159,7 +194,12 @@ describe('.updateArtifacts()', () => {
       throw new Error('This update totally doesnt work');
     });
     expect(
-      await gomod.updateArtifacts('go.mod', [], gomod1, config)
+      await gomod.updateArtifacts({
+        packageFileName: 'go.mod',
+        updatedDeps: [],
+        newPackageFileContent: gomod1,
+        config,
+      })
     ).toMatchSnapshot();
     expect(execSnapshots).toMatchSnapshot();
   });
diff --git a/test/manager/mix/artifacts.spec.ts b/test/manager/mix/artifacts.spec.ts
index 673d4c1b145def90b1001d089823283bfb8db643..e7f19e2b4a2be3c9c90279b73228af237ef1a7dc 100644
--- a/test/manager/mix/artifacts.spec.ts
+++ b/test/manager/mix/artifacts.spec.ts
@@ -29,27 +29,60 @@ describe('.updateArtifacts()', () => {
     env.getChildProcessEnv.mockReturnValue(envMock.basic);
   });
   it('returns null if no mix.lock found', async () => {
-    expect(await updateArtifacts('mix.exs', ['plug'], '', config)).toBeNull();
+    expect(
+      await updateArtifacts({
+        packageFileName: 'mix.exs',
+        updatedDeps: ['plug'],
+        newPackageFileContent: '',
+        config,
+      })
+    ).toBeNull();
   });
   it('returns null if no updatedDeps were provided', async () => {
-    expect(await updateArtifacts('mix.exs', [], '', config)).toBeNull();
+    expect(
+      await updateArtifacts({
+        packageFileName: 'mix.exs',
+        updatedDeps: [],
+        newPackageFileContent: '',
+        config,
+      })
+    ).toBeNull();
   });
   it('returns null if no local directory found', async () => {
     const noLocalDirConfig = {
       localDir: null,
     };
     expect(
-      await updateArtifacts('mix.exs', ['plug'], '', noLocalDirConfig)
+      await updateArtifacts({
+        packageFileName: 'mix.exs',
+        updatedDeps: ['plug'],
+        newPackageFileContent: '',
+        config: noLocalDirConfig,
+      })
     ).toBeNull();
   });
   it('returns null if updatedDeps is empty', async () => {
-    expect(await updateArtifacts('mix.exs', ['plug'], '', config)).toBeNull();
+    expect(
+      await updateArtifacts({
+        packageFileName: 'mix.exs',
+        updatedDeps: ['plug'],
+        newPackageFileContent: '',
+        config,
+      })
+    ).toBeNull();
   });
   it('returns null if unchanged', async () => {
     platform.getFile.mockResolvedValueOnce('Current mix.lock');
     const execSnapshots = mockExecAll(exec);
     fs.readFile.mockResolvedValueOnce('Current mix.lock' as any);
-    expect(await updateArtifacts('mix.exs', ['plug'], '', config)).toBeNull();
+    expect(
+      await updateArtifacts({
+        packageFileName: 'mix.exs',
+        updatedDeps: ['plug'],
+        newPackageFileContent: '',
+        config,
+      })
+    ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
   it('returns updated mix.lock', async () => {
@@ -57,9 +90,14 @@ describe('.updateArtifacts()', () => {
     const execSnapshots = mockExecAll(exec);
     fs.readFile.mockResolvedValueOnce('New mix.lock' as any);
     expect(
-      await updateArtifacts('mix.exs', ['plug'], '{}', {
-        ...config,
-        binarySource: BINARY_SOURCE_DOCKER,
+      await updateArtifacts({
+        packageFileName: 'mix.exs',
+        updatedDeps: ['plug'],
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_DOCKER,
+        },
       })
     ).toMatchSnapshot();
     expect(execSnapshots).toMatchSnapshot();
@@ -70,7 +108,12 @@ describe('.updateArtifacts()', () => {
       throw new Error('not found');
     });
     expect(
-      await updateArtifacts('mix.exs', ['plug'], '{}', config)
+      await updateArtifacts({
+        packageFileName: 'mix.exs',
+        updatedDeps: ['plug'],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toMatchSnapshot();
   });
 });
diff --git a/test/manager/pipenv/artifacts.spec.ts b/test/manager/pipenv/artifacts.spec.ts
index 3cad61eea722cabd1d9fb9998b5a741a574a0801..545c873cbe64290f537b6fc21a3c199fccff669e 100644
--- a/test/manager/pipenv/artifacts.spec.ts
+++ b/test/manager/pipenv/artifacts.spec.ts
@@ -30,14 +30,26 @@ describe('.updateArtifacts()', () => {
   });
 
   it('returns if no Pipfile.lock found', async () => {
-    expect(await pipenv.updateArtifacts('Pipfile', [], '', config)).toBeNull();
+    expect(
+      await pipenv.updateArtifacts({
+        packageFileName: 'Pipfile',
+        updatedDeps: [],
+        newPackageFileContent: '',
+        config,
+      })
+    ).toBeNull();
   });
   it('returns null if unchanged', async () => {
     platform.getFile.mockResolvedValueOnce('Current Pipfile.lock');
     const execSnapshots = mockExecAll(exec);
     fs.readFile.mockReturnValueOnce('Current Pipfile.lock' as any);
     expect(
-      await pipenv.updateArtifacts('Pipfile', [], '{}', config)
+      await pipenv.updateArtifacts({
+        packageFileName: 'Pipfile',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -49,7 +61,12 @@ describe('.updateArtifacts()', () => {
     } as StatusResult);
     fs.readFile.mockReturnValueOnce('New Pipfile.lock' as any);
     expect(
-      await pipenv.updateArtifacts('Pipfile', [], '{}', config)
+      await pipenv.updateArtifacts({
+        packageFileName: 'Pipfile',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -61,10 +78,15 @@ describe('.updateArtifacts()', () => {
     } as StatusResult);
     fs.readFile.mockReturnValueOnce('New Pipfile.lock' as any);
     expect(
-      await pipenv.updateArtifacts('Pipfile', [], '{}', {
-        ...config,
-        binarySource: BINARY_SOURCE_DOCKER,
-        dockerUser: 'foobar',
+      await pipenv.updateArtifacts({
+        packageFileName: 'Pipfile',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_DOCKER,
+          dockerUser: 'foobar',
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -75,7 +97,12 @@ describe('.updateArtifacts()', () => {
       throw new Error('not found');
     });
     expect(
-      await pipenv.updateArtifacts('Pipfile', [], '{}', config)
+      await pipenv.updateArtifacts({
+        packageFileName: 'Pipfile',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toMatchSnapshot();
   });
 });
diff --git a/test/manager/poetry/artifacts.spec.ts b/test/manager/poetry/artifacts.spec.ts
index b7778ecb7a7d591ce636af14dcabb1e564bc55c4..80c8126326a6cbbfc625ed7cd729a1758b4af563 100644
--- a/test/manager/poetry/artifacts.spec.ts
+++ b/test/manager/poetry/artifacts.spec.ts
@@ -34,11 +34,23 @@ describe('.updateArtifacts()', () => {
   it('returns null if no poetry.lock found', async () => {
     const updatedDeps = ['dep1'];
     expect(
-      await updateArtifacts('pyproject.toml', updatedDeps, '', config)
+      await updateArtifacts({
+        packageFileName: 'pyproject.toml',
+        updatedDeps,
+        newPackageFileContent: '',
+        config,
+      })
     ).toBeNull();
   });
   it('returns null if updatedDeps is empty', async () => {
-    expect(await updateArtifacts('pyproject.toml', [], '', config)).toBeNull();
+    expect(
+      await updateArtifacts({
+        packageFileName: 'pyproject.toml',
+        updatedDeps: [],
+        newPackageFileContent: '',
+        config,
+      })
+    ).toBeNull();
   });
   it('returns null if unchanged', async () => {
     platform.getFile.mockResolvedValueOnce('Current poetry.lock');
@@ -46,7 +58,12 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockReturnValueOnce('Current poetry.lock' as any);
     const updatedDeps = ['dep1'];
     expect(
-      await updateArtifacts('pyproject.toml', updatedDeps, '', config)
+      await updateArtifacts({
+        packageFileName: 'pyproject.toml',
+        updatedDeps,
+        newPackageFileContent: '',
+        config,
+      })
     ).toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -56,7 +73,12 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockReturnValueOnce('New poetry.lock' as any);
     const updatedDeps = ['dep1'];
     expect(
-      await updateArtifacts('pyproject.toml', updatedDeps, '{}', config)
+      await updateArtifacts({
+        packageFileName: 'pyproject.toml',
+        updatedDeps,
+        newPackageFileContent: '{}',
+        config,
+      })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
   });
@@ -66,10 +88,15 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockReturnValueOnce('New poetry.lock' as any);
     const updatedDeps = ['dep1'];
     expect(
-      await updateArtifacts('pyproject.toml', updatedDeps, '{}', {
-        ...config,
-        binarySource: BINARY_SOURCE_DOCKER,
-        dockerUser: 'foobar',
+      await updateArtifacts({
+        packageFileName: 'pyproject.toml',
+        updatedDeps,
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          binarySource: BINARY_SOURCE_DOCKER,
+          dockerUser: 'foobar',
+        },
       })
     ).not.toBeNull();
     expect(execSnapshots).toMatchSnapshot();
@@ -81,7 +108,12 @@ describe('.updateArtifacts()', () => {
     });
     const updatedDeps = ['dep1'];
     expect(
-      await updateArtifacts('pyproject.toml', updatedDeps, '{}', config)
+      await updateArtifacts({
+        packageFileName: 'pyproject.toml',
+        updatedDeps,
+        newPackageFileContent: '{}',
+        config,
+      })
     ).toMatchSnapshot();
   });
 });