-
Notifications
You must be signed in to change notification settings - Fork 2.5k
/
Copy patherror.ts
205 lines (202 loc) · 6.21 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
193
194
195
196
197
198
199
200
201
202
203
204
205
import type { RenovateConfig } from '../../config/types';
import {
CONFIG_SECRETS_EXPOSED,
CONFIG_VALIDATION,
EXTERNAL_HOST_ERROR,
MANAGER_LOCKFILE_ERROR,
NO_VULNERABILITY_ALERTS,
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_CLOSED_ONBOARDING,
REPOSITORY_DISABLED,
REPOSITORY_DISABLED_BY_CONFIG,
REPOSITORY_EMPTY,
REPOSITORY_FORKED,
REPOSITORY_MIRRORED,
REPOSITORY_NOT_FOUND,
REPOSITORY_NO_CONFIG,
REPOSITORY_NO_PACKAGE_FILES,
REPOSITORY_RENAMED,
REPOSITORY_UNINITIATED,
SYSTEM_INSUFFICIENT_DISK_SPACE,
SYSTEM_INSUFFICIENT_MEMORY,
TEMPORARY_ERROR,
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;
return err.message;
}
if (err.message === REPOSITORY_EMPTY) {
logger.info('Repository is empty - skipping');
delete config.branchList;
return err.message;
}
const disabledMessages = [
REPOSITORY_CLOSED_ONBOARDING,
REPOSITORY_DISABLED,
REPOSITORY_DISABLED_BY_CONFIG,
REPOSITORY_NO_CONFIG,
];
if (disabledMessages.includes(err.message)) {
logger.info('Repository is disabled - skipping');
return err.message;
}
if (err.message === REPOSITORY_ARCHIVED) {
logger.info('Repository is archived - skipping');
delete config.branchList;
return err.message;
}
if (err.message === REPOSITORY_MIRRORED) {
logger.info('Repository is a mirror - skipping');
delete config.branchList;
return err.message;
}
if (err.message === REPOSITORY_RENAMED) {
logger.info('Repository has been renamed - skipping');
delete config.branchList;
return err.message;
}
if (err.message === REPOSITORY_BLOCKED) {
delete config.branchList;
logger.info('Repository is blocked - skipping');
return err.message;
}
if (err.message === REPOSITORY_ACCESS_FORBIDDEN) {
delete config.branchList;
logger.info('Repository is forbidden');
return err.message;
}
if (err.message === REPOSITORY_NOT_FOUND) {
delete config.branchList;
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 === REPOSITORY_NO_PACKAGE_FILES) {
logger.info('Repository has no package files - skipping');
return err.message;
}
if (err.message === NO_VULNERABILITY_ALERTS) {
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;
return err.message;
}
if (err.message === CONFIG_VALIDATION) {
delete config.branchList;
logger.info({ error: err }, 'Repository has invalid config');
await raiseConfigWarningIssue(config, err);
return err.message;
}
if (err.message === CONFIG_SECRETS_EXPOSED) {
delete config.branchList;
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;
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;
return err.message;
}
if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) {
logger.warn('Rate limit exceeded - aborting');
delete config.branchList;
return err.message;
}
if (err.message === SYSTEM_INSUFFICIENT_MEMORY) {
logger.warn('Insufficient memory - aborting');
delete config.branchList;
return err.message;
}
if (err.message === PLATFORM_BAD_CREDENTIALS) {
logger.warn('Bad credentials - aborting');
delete config.branchList;
return err.message;
}
if (err.message === PLATFORM_INTEGRATION_UNAUTHORIZED) {
logger.warn('Integration unauthorized - aborting');
delete config.branchList;
return err.message;
}
if (err.message === PLATFORM_AUTHENTICATION_ERROR) {
logger.warn('Authentication error - aborting');
delete config.branchList;
return err.message;
}
if (err.message === TEMPORARY_ERROR) {
logger.info('Temporary error - aborting');
delete config.branchList;
return err.message;
}
if (err.message === MANAGER_LOCKFILE_ERROR) {
delete config.branchList;
logger.info('Lock file error - aborting');
delete config.branchList;
return err.message;
}
if (err.message.includes('The requested URL returned error: 5')) {
logger.warn({ err }, 'Git error - aborting');
delete config.branchList;
// rewrite this error
return EXTERNAL_HOST_ERROR;
}
if (
err.message.includes('remote end hung up unexpectedly') ||
err.message.includes('access denied or repository not exported')
) {
logger.warn({ err }, 'Git error - aborting');
delete config.branchList;
// rewrite this error
return EXTERNAL_HOST_ERROR;
}
if (err.message.includes('fatal: not a git repository')) {
delete config.branchList;
return TEMPORARY_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;
return UNKNOWN_ERROR;
}