diff --git a/lib/workers/branch/artifacts.spec.ts b/lib/workers/branch/artifacts.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d185d13c0611d0831be947919ba383728ce2f922
--- /dev/null
+++ b/lib/workers/branch/artifacts.spec.ts
@@ -0,0 +1,47 @@
+import { getConfig, platform } from '../../../test/util';
+import { setGlobalConfig } from '../../config/global';
+import { BranchStatus } from '../../types';
+import { BranchConfig } from '../types';
+import { setArtifactErrorStatus } from './artifacts';
+
+describe('workers/branch/artifacts', () => {
+  let config: BranchConfig;
+  beforeEach(() => {
+    setGlobalConfig({});
+    jest.resetAllMocks();
+    config = {
+      ...getConfig(),
+      branchName: 'renovate/pin',
+      upgrades: [],
+      artifactErrors: [{ lockFile: 'some' }],
+    };
+  });
+
+  describe('setArtifactsErrorStatus', () => {
+    it('adds status', async () => {
+      platform.getBranchStatusCheck.mockResolvedValueOnce(null);
+      await setArtifactErrorStatus(config);
+      expect(platform.setBranchStatus).toHaveBeenCalled();
+    });
+
+    it('skips status', async () => {
+      platform.getBranchStatusCheck.mockResolvedValueOnce(BranchStatus.red);
+      await setArtifactErrorStatus(config);
+      expect(platform.setBranchStatus).not.toHaveBeenCalled();
+    });
+
+    it('skips status (dry-run)', async () => {
+      setGlobalConfig({ dryRun: true });
+      platform.getBranchStatusCheck.mockResolvedValueOnce(null);
+      await setArtifactErrorStatus(config);
+      expect(platform.setBranchStatus).not.toHaveBeenCalled();
+    });
+
+    it('skips status (no errors)', async () => {
+      platform.getBranchStatusCheck.mockResolvedValueOnce(null);
+      config.artifactErrors.length = 0;
+      await setArtifactErrorStatus(config);
+      expect(platform.setBranchStatus).not.toHaveBeenCalled();
+    });
+  });
+});
diff --git a/lib/workers/branch/artifacts.ts b/lib/workers/branch/artifacts.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6c982bb99cee5aa494474bd7c3854e5aa8c27b9b
--- /dev/null
+++ b/lib/workers/branch/artifacts.ts
@@ -0,0 +1,37 @@
+import { getGlobalConfig } from '../../config/global';
+import { logger } from '../../logger';
+import { platform } from '../../platform';
+import { BranchStatus } from '../../types';
+import type { BranchConfig } from '../types';
+
+export async function setArtifactErrorStatus(
+  config: BranchConfig
+): Promise<void> {
+  if (!config.artifactErrors?.length) {
+    // no errors
+    return;
+  }
+
+  const context = `renovate/artifacts`;
+  const description = 'Artifact file update failure';
+  const state = BranchStatus.red;
+  const existingState = await platform.getBranchStatusCheck(
+    config.branchName,
+    context
+  );
+
+  // Check if state needs setting
+  if (existingState !== state) {
+    logger.debug(`Updating status check state to failed`);
+    if (getGlobalConfig().dryRun) {
+      logger.info('DRY-RUN: Would set branch status in ' + config.branchName);
+    } else {
+      await platform.setBranchStatus({
+        branchName: config.branchName,
+        context,
+        description,
+        state,
+      });
+    }
+  }
+}
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index 96b33b94932d8410d31089bb33570e2e9134f09c..da893445930b4a6d3380b4028ca6dd21051ec254 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -36,6 +36,7 @@ import { Limit, isLimitReached } from '../global/limits';
 import { ensurePr, getPlatformPrOptions } from '../pr';
 import { checkAutoMerge } from '../pr/automerge';
 import { BranchConfig, BranchResult, PrBlockedBy } from '../types';
+import { setArtifactErrorStatus } from './artifacts';
 import { tryBranchAutomerge } from './automerge';
 import { prAlreadyExisted } from './check-existing';
 import { commitFilesToBranch } from './commit';
@@ -456,11 +457,14 @@ export async function processBranch(
       logger.info({ commitSha }, `Branch ${action}`);
     }
     // Set branch statuses
+    await setArtifactErrorStatus(config);
     await setStability(config);
     await setConfidence(config);
 
     // break if we pushed a new commit because status check are pretty sure pending but maybe not reported yet
+    // but do not break when there are artifact errors
     if (
+      !config.artifactErrors?.length &&
       !dependencyDashboardCheck &&
       !config.rebaseRequested &&
       commitSha &&
@@ -669,29 +673,6 @@ export async function processBranch(
             });
           }
         }
-        const context = `renovate/artifacts`;
-        const description = 'Artifact file update failure';
-        const state = BranchStatus.red;
-        const existingState = await platform.getBranchStatusCheck(
-          config.branchName,
-          context
-        );
-        // Check if state needs setting
-        if (existingState !== state) {
-          logger.debug(`Updating status check state to failed`);
-          if (getGlobalConfig().dryRun) {
-            logger.info(
-              'DRY-RUN: Would set branch status in ' + config.branchName
-            );
-          } else {
-            await platform.setBranchStatus({
-              branchName: config.branchName,
-              context,
-              description,
-              state,
-            });
-          }
-        }
       } else if (config.automerge) {
         logger.debug('PR is configured for automerge');
         const prAutomergeResult = await checkAutoMerge(pr, config);