/
error.ts
192 lines (190 loc) · 6.86 KB
/
error.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
import { RenovateConfig } from '../../config';
import {
CONFIG_SECRETS_EXPOSED,
CONFIG_VALIDATION,
EXTERNAL_HOST_ERROR,
MANAGER_LOCKFILE_ERROR,
MANAGER_NO_PACKAGE_FILES,
PLATFORM_AUTHENTICATION_ERROR,
PLATFORM_BAD_CREDENTIALS,
PLATFORM_INTEGRATION_UNAUTHORIZED,
PLATFORM_RATE_LIMIT_EXCEEDED,
REPOSITORY_ACCESS_FORBIDDEN,
REPOSITORY_ARCHIVED,
REPOSITORY_BLOCKED,
REPOSITORY_CANNOT_FORK,
REPOSITORY_CHANGED,
REPOSITORY_DISABLED,
REPOSITORY_EMPTY,
REPOSITORY_FORKED,
REPOSITORY_MIRRORED,
REPOSITORY_NOT_FOUND,
REPOSITORY_NO_VULNERABILITY,
REPOSITORY_RENAMED,
REPOSITORY_TEMPORARY_ERROR,
REPOSITORY_UNINITIATED,
SYSTEM_INSUFFICIENT_DISK_SPACE,
SYSTEM_INSUFFICIENT_MEMORY,
UNKNOWN_ERROR,
} from '../../constants/error-messages';
import { logger } from '../../logger';
import { ExternalHostError } from '../../types/errors/external-host-error';
import { raiseConfigWarningIssue } from './error-config';
export default async function handleError(
config: RenovateConfig,
err: Error
): Promise<string> {
if (err.message === REPOSITORY_UNINITIATED) {
logger.info('Repository is uninitiated - skipping');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === REPOSITORY_EMPTY) {
logger.info('Repository is empty - skipping');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === REPOSITORY_DISABLED) {
logger.info('Repository is disabled - skipping');
return err.message;
}
if (err.message === REPOSITORY_ARCHIVED) {
logger.info('Repository is archived - skipping');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === REPOSITORY_MIRRORED) {
logger.info('Repository is a mirror - skipping');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === REPOSITORY_RENAMED) {
logger.info('Repository has been renamed - skipping');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === REPOSITORY_BLOCKED) {
delete config.branchList; // eslint-disable-line no-param-reassign
logger.info('Repository is blocked - skipping');
return err.message;
}
if (err.message === REPOSITORY_ACCESS_FORBIDDEN) {
delete config.branchList; // eslint-disable-line no-param-reassign
logger.info('Repository is forbidden');
return err.message;
}
if (err.message === REPOSITORY_NOT_FOUND) {
delete config.branchList; // eslint-disable-line no-param-reassign
logger.error('Repository is not found');
return err.message;
}
if (err.message === REPOSITORY_FORKED) {
logger.info('Repository is a fork and not manually configured - skipping');
return err.message;
}
if (err.message === REPOSITORY_CANNOT_FORK) {
logger.info('Cannot fork repository - skipping');
return err.message;
}
if (err.message === MANAGER_NO_PACKAGE_FILES) {
logger.info('Repository has no package files - skipping');
return err.message;
}
if (err.message === REPOSITORY_NO_VULNERABILITY) {
logger.info('Repository has no vulnerability alerts - skipping');
return err.message;
}
if (err.message === REPOSITORY_CHANGED) {
logger.info('Repository has changed during renovation - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === CONFIG_VALIDATION) {
delete config.branchList; // eslint-disable-line no-param-reassign
logger.info({ error: err }, 'Repository has invalid config');
await raiseConfigWarningIssue(config, err);
return err.message;
}
if (err.message === CONFIG_SECRETS_EXPOSED) {
delete config.branchList; // eslint-disable-line no-param-reassign
logger.warn(
{ error: err },
'Repository aborted due to potential secrets exposure'
);
return err.message;
}
if (err instanceof ExternalHostError) {
logger.warn(
{ hostType: err.hostType, lookupName: err.lookupName, err: err.err },
'Host error'
);
logger.info('External host error causing abort - skipping');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (
err.message.includes('No space left on device') ||
err.message === SYSTEM_INSUFFICIENT_DISK_SPACE
) {
logger.error('Disk space error - skipping');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) {
logger.warn('Rate limit exceeded - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === SYSTEM_INSUFFICIENT_MEMORY) {
logger.warn('Insufficient memory - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === PLATFORM_BAD_CREDENTIALS) {
logger.warn('Bad credentials - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === PLATFORM_INTEGRATION_UNAUTHORIZED) {
logger.warn('Integration unauthorized - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === PLATFORM_AUTHENTICATION_ERROR) {
logger.warn('Authentication error - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === REPOSITORY_TEMPORARY_ERROR) {
logger.info('Temporary error - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message === MANAGER_LOCKFILE_ERROR) {
delete config.branchList; // eslint-disable-line no-param-reassign
logger.info('Lock file error - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
return err.message;
}
if (err.message.includes('The requested URL returned error: 5')) {
logger.warn({ err }, 'Git error - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
// rewrite this error
return EXTERNAL_HOST_ERROR;
}
if (
err.message.includes('The remote end hung up unexpectedly') ||
err.message.includes('access denied or repository not exported')
) {
logger.warn({ err }, 'Git error - aborting');
delete config.branchList; // eslint-disable-line no-param-reassign
// rewrite this error
return EXTERNAL_HOST_ERROR;
}
// Swallow this error so that other repositories can be processed
logger.error({ err }, `Repository has unknown error`);
// delete branchList to avoid cleaning up branches
delete config.branchList; // eslint-disable-line no-param-reassign
// eslint-disable-next-line no-undef
return UNKNOWN_ERROR;
}