mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-27 07:50:47 +00:00
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { isNonEmptyString } from '@sindresorhus/is';
|
|
import type { MinimumReleaseAgeBehaviour } from '../config/types.ts';
|
|
import { getElapsedMs } from './date.ts';
|
|
import { coerceNumber } from './number.ts';
|
|
import { toMs } from './pretty-time.ts';
|
|
import type { Timestamp } from './timestamp.ts';
|
|
|
|
export interface MinimumReleaseAgeCheckResult {
|
|
isPending: boolean;
|
|
minimumReleaseAgeMs: number;
|
|
hasTimestamp: boolean;
|
|
}
|
|
|
|
/**
|
|
* Checks whether a release satisfies `minimumReleaseAge`.
|
|
*
|
|
* Separate from `internalChecksFilter` to allow reuse, and lives here so that
|
|
* managers can import it without an import cycle.
|
|
*/
|
|
export function checkMinimumReleaseAge(
|
|
config: {
|
|
minimumReleaseAge?: string | null;
|
|
minimumReleaseAgeBehaviour?: MinimumReleaseAgeBehaviour | null;
|
|
},
|
|
releaseTimestamp: Timestamp | null | undefined,
|
|
): MinimumReleaseAgeCheckResult {
|
|
const minimumReleaseAgeMs = isNonEmptyString(config.minimumReleaseAge)
|
|
? coerceNumber(toMs(config.minimumReleaseAge), 0)
|
|
: 0;
|
|
|
|
if (!minimumReleaseAgeMs) {
|
|
return {
|
|
isPending: false,
|
|
minimumReleaseAgeMs,
|
|
hasTimestamp: !!releaseTimestamp,
|
|
};
|
|
}
|
|
|
|
if (releaseTimestamp) {
|
|
return {
|
|
isPending: getElapsedMs(releaseTimestamp) < minimumReleaseAgeMs,
|
|
minimumReleaseAgeMs,
|
|
hasTimestamp: true,
|
|
};
|
|
}
|
|
|
|
return {
|
|
isPending: config.minimumReleaseAgeBehaviour === 'timestamp-required',
|
|
minimumReleaseAgeMs,
|
|
hasTimestamp: false,
|
|
};
|
|
}
|