Files
renovate/lib/util/minimum-release-age.ts

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,
};
}