From 807b354ea3092d4e52f07ff167a3b8561cf42212 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sun, 26 Apr 2020 07:50:01 +0200 Subject: [PATCH] fix: autoReplace handle non-pinning of digests --- lib/config/__snapshots__/index.spec.ts.snap | 1 + lib/config/definitions.ts | 1 - .../__snapshots__/auto-replace.spec.ts.snap | 2 ++ lib/workers/branch/auto-replace.spec.ts | 14 +++++++++ lib/workers/branch/auto-replace.ts | 29 +++++++++++++++---- 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/config/__snapshots__/index.spec.ts.snap b/lib/config/__snapshots__/index.spec.ts.snap index 14a9feb09b..06759fa5c0 100644 --- a/lib/config/__snapshots__/index.spec.ts.snap +++ b/lib/config/__snapshots__/index.spec.ts.snap @@ -56,6 +56,7 @@ Object { "onboardingBranch": "renovate/configure", "onboardingPrTitle": "Configure Renovate", "persistRepoData": false, + "pinDigests": false, "platform": "github", "postUpdateOptions": Array [], "postUpgradeTasks": Object { diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts index 6aa2dd7bfc..cd0eacac98 100644 --- a/lib/config/definitions.ts +++ b/lib/config/definitions.ts @@ -870,7 +870,6 @@ const options: RenovateOptions[] = [ { name: 'pinDigests', description: 'Whether to add digests to Dockerfile source images', - stage: 'package', type: 'boolean', default: false, }, diff --git a/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap b/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap index aba6ee470e..ee040deb45 100644 --- a/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap +++ b/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap @@ -1,5 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`workers/branch/auto-replace doAutoReplace handles a double attempt 1`] = `" <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js\\"> <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.1/reactstrap.min.js\\"> "`; + exports[`workers/branch/auto-replace doAutoReplace handles already updated 1`] = `" <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.1/reactstrap.min.js\\"> "`; exports[`workers/branch/auto-replace doAutoReplace updates version and integrity 1`] = `" <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.js\\" integrity=\\"sha256-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\" crossorigin=\\"anonymous\\"> "`; diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts index 09623bfa58..94743e9e58 100644 --- a/lib/workers/branch/auto-replace.spec.ts +++ b/lib/workers/branch/auto-replace.spec.ts @@ -49,10 +49,24 @@ describe('workers/branch/auto-replace', () => { upgrade.lookupName = 'reactstrap/7.1.0/reactstrap.min.js'; upgrade.currentValue = '7.1.0'; upgrade.newValue = '7.1.1'; + upgrade.newDigest = 'some-digest'; upgrade.depIndex = 0; const res = await doAutoReplace(upgrade, src, parentBranch); expect(res).toMatchSnapshot(); }); + it('handles a double attempt', async () => { + const script = + '<script src="https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js">'; + const src = ` ${script} ${script} `; + upgrade.baseDeps = extractPackageFile(src).deps; + upgrade.depName = 'reactstrap'; + upgrade.lookupName = 'reactstrap/7.1.0/reactstrap.min.js'; + upgrade.currentValue = '7.1.0'; + upgrade.newValue = '7.1.1'; + upgrade.depIndex = 1; + const res = await doAutoReplace(upgrade, src, parentBranch); + expect(res).toMatchSnapshot(); + }); it('handles already updated', async () => { const script = '<script src="https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js">'; diff --git a/lib/workers/branch/auto-replace.ts b/lib/workers/branch/auto-replace.ts index d31c854149..11a7cb4597 100644 --- a/lib/workers/branch/auto-replace.ts +++ b/lib/workers/branch/auto-replace.ts @@ -10,7 +10,15 @@ export async function confirmIfDepUpdated( upgrade, newContent: string ): Promise<boolean> { - const { manager, packageFile, newValue, newDigest, depIndex } = upgrade; + const { + manager, + packageFile, + newValue, + newDigest, + depIndex, + currentDigest, + pinDigests, + } = upgrade; const extractPackageFile = get(manager, 'extractPackageFile'); let newUpgrade; try { @@ -23,13 +31,22 @@ export async function confirmIfDepUpdated( } catch (err) /* istanbul ignore next */ { logger.debug('Failed to parse newContent'); } - if ( - newUpgrade && - newUpgrade.currentValue === newValue && - (!newDigest || newUpgrade.currentDigest === newDigest) - ) { + if (!newUpgrade) { + return false; + } + if (newUpgrade.currentValue !== newValue) { + return false; + } + if (!newDigest) { + return true; + } + if (newUpgrade.currentDigest === newDigest) { return true; } + if (!currentDigest && !pinDigests) { + return true; + } + // istanbul ignore next return false; } -- GitLab