diff --git a/lib/manager/common.ts b/lib/manager/common.ts index 1cb67931e68cba..57f36f7453c781 100644 --- a/lib/manager/common.ts +++ b/lib/manager/common.ts @@ -158,6 +158,7 @@ export interface PackageDependency> extends Package { digestOneAndOnly?: boolean; displayFrom?: string; displayTo?: string; + fixedVersion?: string; fromVersion?: string; lockedVersion?: string; propSource?: string; diff --git a/lib/util/cache/repository/index.ts b/lib/util/cache/repository/index.ts index 0612ab0dc690dc..9258fbc2ded9e3 100644 --- a/lib/util/cache/repository/index.ts +++ b/lib/util/cache/repository/index.ts @@ -11,7 +11,30 @@ export interface BaseBranchCache { packageFiles: PackageFile[]; // extract result } +export interface BranchUpgradeCache { + currentDigest?: string; + currentValue?: string; + datasource?: string; + depName?: string; + fixedVersion?: string; + fromVersion?: string; + lookupName?: string; + newDigest?: string; + newValue?: string; + toVersion?: string; +} + +export interface BranchCache { + automerge: boolean; + branchName: string; + isModified: boolean; + prNo: number | null; + sha: string | null; + upgrades: BranchUpgradeCache[]; +} + export interface Cache { + branches?: BranchCache[]; repository?: string; init?: RepoInitConfig; scan?: Record; diff --git a/lib/workers/repository/cache.ts b/lib/workers/repository/cache.ts new file mode 100644 index 00000000000000..d5b8010596d5be --- /dev/null +++ b/lib/workers/repository/cache.ts @@ -0,0 +1,67 @@ +/* istanbul ignore file */ + +import { logger } from '../../logger'; +import { platform } from '../../platform'; +import { + BranchCache, + BranchUpgradeCache, + getCache, +} from '../../util/cache/repository'; +import { getBranchCommit, isBranchModified } from '../../util/git'; +import { BranchConfig, BranchUpgradeConfig } from '../common'; + +function generateBranchUpgradeCache( + upgrade: BranchUpgradeConfig +): BranchUpgradeCache { + const { + datasource, + depName, + lookupName, + fixedVersion, + fromVersion, + toVersion, + currentDigest, + newDigest, + } = upgrade; + return { + datasource, + depName, + lookupName, + fixedVersion, + fromVersion, + toVersion, + currentDigest, + newDigest, + }; +} + +async function generateBranchCache(branch: BranchConfig): Promise { + const { branchName } = branch; + try { + const sha = getBranchCommit(branchName) || null; + let prNo = null; + if (sha) { + const branchPr = await platform.getBranchPr(branchName); + if (branchPr) { + prNo = branchPr.number; + } + } + const automerge = !!branch.automerge; + const isModified = sha ? await isBranchModified(branchName) : false; + const upgrades: BranchUpgradeCache[] = branch.upgrades + ? branch.upgrades.map(generateBranchUpgradeCache) + : []; + return { branchName, sha, prNo, automerge, isModified, upgrades }; + } catch (err) { + logger.error({ err, branchName }, 'Error generating branch cache'); + return null; + } +} + +export async function setBranchCache(branches: BranchConfig[]): Promise { + const branchCache: BranchCache[] = []; + for (const branch of branches) { + branchCache.push(await generateBranchCache(branch)); + } + getCache().branches = branchCache.filter(Boolean); +} diff --git a/lib/workers/repository/index.ts b/lib/workers/repository/index.ts index 07c297529aee37..97a97dabc19aa4 100644 --- a/lib/workers/repository/index.ts +++ b/lib/workers/repository/index.ts @@ -3,6 +3,7 @@ import { RenovateConfig } from '../../config'; import { logger, setMeta } from '../../logger'; import { deleteLocalFile } from '../../util/fs'; import { addSplit, getSplits, splitInit } from '../../util/split'; +import { setBranchCache } from './cache'; import { ensureMasterIssue } from './dependency-dashboard'; import handleError from './error'; import { finaliseRepo } from './finalise'; @@ -41,6 +42,7 @@ export async function renovateRepository( await ensureOnboardingPr(config, packageFiles, branches); const res = await updateRepo(config, branches); addSplit('update'); + await setBranchCache(branches); if (res !== 'automerged') { await ensureMasterIssue(config, branches); }