Skip to content

Commit

Permalink
fix(worker/branch): optimize artifact error handling (#11771)
Browse files Browse the repository at this point in the history
  • Loading branch information
viceice committed Sep 17, 2021
1 parent 300b8b6 commit d3c9fd5
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 23 deletions.
47 changes: 47 additions & 0 deletions 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();
});
});
});
37 changes: 37 additions & 0 deletions 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,
});
}
}
}
27 changes: 4 additions & 23 deletions lib/workers/branch/index.ts
Expand Up @@ -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';
Expand Down Expand Up @@ -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 &&
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit d3c9fd5

Please sign in to comment.