/
generate.ts
65 lines (64 loc) · 1.78 KB
/
generate.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
import type { Release } from '../../../../datasource';
import { logger } from '../../../../logger';
import type { LookupUpdate } from '../../../../manager/types';
import type { VersioningApi } from '../../../../versioning';
import type { LookupUpdateConfig } from './types';
import { getUpdateType } from './update-type';
export function generateUpdate(
config: LookupUpdateConfig,
versioning: VersioningApi,
currentVersion: string,
bucket: string,
release: Release
): LookupUpdate {
const newVersion = release.version;
const update: LookupUpdate = {
bucket,
newVersion,
newValue: null,
};
const releaseFields = [
'checksumUrl',
'downloadUrl',
'newDigest',
'releaseTimestamp',
];
for (const field of releaseFields) {
if (release[field] !== undefined) {
update[field] = release[field];
}
}
const { currentValue, rangeStrategy } = config;
try {
update.newValue = versioning.getNewValue({
currentValue,
rangeStrategy,
currentVersion,
newVersion,
});
} catch (err) /* istanbul ignore next */ {
logger.warn(
{ err, currentValue, rangeStrategy, currentVersion, newVersion },
'getNewValue error'
);
update.newValue = currentValue;
}
update.newMajor = versioning.getMajor(newVersion);
update.newMinor = versioning.getMinor(newVersion);
update.updateType =
update.updateType ||
getUpdateType(config, versioning, currentVersion, newVersion);
if (!versioning.isVersion(update.newValue)) {
update.isRange = true;
}
if (rangeStrategy === 'update-lockfile' && currentValue === update.newValue) {
update.isLockfileUpdate = true;
}
if (
rangeStrategy === 'bump' &&
versioning.matches(newVersion, currentValue)
) {
update.isBump = true;
}
return update;
}