renovatebot / renovate

Home of the Renovate CLI: Cross-platform Dependency Automation by Mend.io
https://mend.io/renovate
GNU Affero General Public License v3.0
17.3k stars 2.26k forks source link

Renovate aborts if lock file is out of date #3935

Closed k2snowman69 closed 5 years ago

k2snowman69 commented 5 years ago

What Renovate type are you using? Self hosted docker renovate/renovate:18

Describe the bug A few months ago we changed the url of our internal npm repository. This resulted in our package-lock.json files to contain a mismatch of values, some pointing to the old and some pointing to the new. Yes I agree this is not ideal and awesomely, renovate does generate out a completely clean and new package-lock file as intended. However, because the package-lock.json file updates on the initial install, renovate then aborts with the message Repository has changed during renovation - aborting because the package-lock.json file has been updated.

It would be great if renovate didn't abort but kept going so all the package-lock.json files get updated to point to the correct npm registry

Did you see anything helpful in debug logs? INFO provided enough information

To Reproduce Will update upon request. It does include creating two npm registries and switching the registry url between renovate executions.

Expected behavior I expect renovate to continue and update with the more correct package-lock file.

Screenshots N/A

Additional context N/A

rarkins commented 5 years ago

Are you able to reproduce the problem locally? If so, can you capture a full debug log and provide a sanitized version of it? Although mostly what I'm interested in is the exact point where Renovate thinks the repo has change and aborts. We do this defensively but it's possible you've hit a case where we should keep going rather than aborting.

k2snowman69 commented 5 years ago

I've attempted to reproduce this locally but I can't seem to. I'll have to wait until I onboard the next project and end up hitting a bunch of merge conflicts (it's usually when it comes up). Next project should be within the next two weeks, I'll keep you posted.

k2snowman69 commented 5 years ago

Finally ran into this again on my kube job. Below are the logs, the context is that angular released three packages @angular/common, @angular/core, and @angular/browser. common was merged in but it's changes are located very close to core causing a conflict.

DEBUG: branchifyUpgrades (repository=org/package-angular)
DEBUG: 2 flattened updates found: @angular/core, @angular/platform-browser (repository=org/package-angular)
DEBUG: Returning 2 branch(es) (repository=org/package-angular)
DEBUG: generateBranchConfig(1) (repository=org/package-angular, branch=renovate/angular-core-8.x)
DEBUG: hasGroupName: false (repository=org/package-angular, branch=renovate/angular-core-8.x)
DEBUG: groupEligible: false (repository=org/package-angular, branch=renovate/angular-core-8.x)
DEBUG: useGroupSettings: false (repository=org/package-angular, branch=renovate/angular-core-8.x)
DEBUG: prTitle: "Update dependency @angular/core to v8.0.2" (repository=org/package-angular, branch=renovate/angular-core-8.x)
DEBUG: generateBranchConfig(1) (repository=org/package-angular, branch=renovate/angular-platform-browser-8.x)
DEBUG: hasGroupName: false (repository=org/package-angular, branch=renovate/angular-platform-browser-8.x)
DEBUG: groupEligible: false (repository=org/package-angular, branch=renovate/angular-platform-browser-8.x)
DEBUG: useGroupSettings: false (repository=org/package-angular, branch=renovate/angular-platform-browser-8.x)
DEBUG: prTitle: "Update dependency @angular/platform-browser to v8.0.2" (repository=org/package-angular, branch=renovate/angular-platform-browser-8.x)
DEBUG: config.repoIsOnboarded=true (repository=org/package-angular)
 INFO: Found sourceUrl with multiple branches that should probably be combined into a group (repository=org/package-angular)
       "sourceUrl": "https://github.com/angular/angular",
       "toVersion": "8.0.2",
       "branches": {
         "renovate/angular-core-8.x": "@angular/core",
         "renovate/angular-platform-browser-8.x": "@angular/platform-browser"
       }
 INFO: Processing 2 branches: renovate/angular-core-8.x, renovate/angular-platform-browser-8.x (repository=org/package-angular)
DEBUG: processBranch with 1 upgrades (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Setting baseBranch to master (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: branchExists(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getBranchPr(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: findPr(renovate/angular-core-8.x, "undefined", "open") (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getPrList() (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
 INFO: Retrieved Pull Requests (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "length": 35
DEBUG: Found PR #42 (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getPr(42) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: 1 commit matches configured gitAuthor so can rebase (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "prNo": 42
DEBUG: branchExists(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: isBranchStale(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: branchExists=true (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Branch has 1 upgrade(s) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Checking if PR has been edited (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Found existing branch PR (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Checking schedule(at any time, null) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: No schedule defined (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: branchExists(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Branch already exists (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getBranchPr(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: findPr(renovate/angular-core-8.x, "undefined", "open") (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getPrList() (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: returning cached PR list (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Found PR #42 (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getPr(42) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: 1 commit matches configured gitAuthor so can rebase (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "prNo": 42
DEBUG: branchExists(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: isBranchStale(renovate/angular-core-8.x) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getRepoForceRebase() (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: PR is conflicted (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
 INFO: Branch is not mergeable and needs rebasing (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Using parentBranch: undefined (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: manager.getUpdatedPackageFiles() (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getFile(package.json, undefined) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: npm.updateDependency(): devDependencies.@angular/core = 8.0.2 (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Replacing "8.0.1" with "8.0.2" at index 224 (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: bumpVersion() (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Updating packageFile content (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Updated 1 package files (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Getting updated lock files (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: lock file dirs (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "dirs": {
         "yarnLockDirs": [],
         "npmLockDirs": ["package-lock.json"],
         "pnpmShrinkwrapDirs": [],
         "lernaDirs": []
       }
DEBUG: getFile(lerna.json, undefined) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Writing repo .npmrc (/tmp/renovate/repos/bitbucket-server/org/package-angular) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Writing package.json files (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "packageFiles": ["package.json"]
DEBUG: getFile(package.json, undefined) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Writing package-lock.json (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: getFile(package-lock.json, undefined) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Writing any updated package files (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Writing package.json (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Generating package-lock.json for . (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Spawning npm install to create /tmp/renovate/repos/bitbucket-server/org/package-angular/package-lock.json (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Using npm: node /usr/src/app/node_modules/npm/bin/npm-cli.js install --package-lock-only --no-audit (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
 INFO: Generated lockfile (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "seconds": 5,
       "type": "package-lock.json",
       "stdout": "added 723 packages in 4.038s\n",
       "stderr": "npm WARN @angular/core@8.0.2 requires a peer of zone.js@~0.9.1 but none is installed. You must install peer dependencies yourself.\nnpm WARN @company/package-angular@1.0.0 No repository field.\n\n"
DEBUG: getFile(package-lock.json, undefined) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: package-lock.json needs updating (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Updated 1 lock files (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "updatedArtifacts": ["package-lock.json"]
DEBUG: 2 file(s) to commit (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: commitFilesToBranch({
         "branchName": "renovate/angular-core-8.x",
         "filesLength": 2,
         "message": "Update dependency @angular/core to v8.0.2",
         "parentBranch": "master"
       }) (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Committing files to branch renovate/angular-core-8.x (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
DEBUG: Error commiting files (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
       "err": {
         "message": "remote: Force-pushing to this repository has been disabled        \nremote: The push is attempting to remove commit 9666c6dea718845f3a8fbe86b9c5ba507ac33592 from ref renovate/angular-core-8.x.        \nTo https://**redacted**@stash.company.com/scm/org/package-angular.git'\n",
         "stack": "Error: remote: Force-pushing to this repository has been disabled        \nremote: The push is attempting to remove commit 9666c6dea718845f3a8fbe86b9c5ba507ac33592 from ref renovate/angular-core-8.x.        \nTo https://**redacted**@stash.company.com/scm/org/package-angular.git'\n\n    at /usr/src/app/node_modules/simple-git/promise.js:62:29\n    at Git.<anonymous> (/usr/src/app/node_modules/simple-git/src/git.js:953:21)\n    at Function.Git.fail (/usr/src/app/node_modules/simple-git/src/git.js:1481:18)\n    at fail (/usr/src/app/node_modules/simple-git/src/git.js:1439:20)\n    at /usr/src/app/node_modules/simple-git/src/git.js:1448:16\n    at process._tickCallback (internal/process/next_tick.js:68:7)"
       }
DEBUG: Passing repository-changed error up (repository=org/package-angular, dependencies=@angular/core, branch=renovate/angular-core-8.x)
 INFO: Repository has changed during renovation - aborting (repository=org/package-angular)
DEBUG: cleanRepo() (repository=org/package-angular)
 INFO: Finished repository (repository=org/package-angular)
DEBUG: Host request stats (milliseconds)
       "hostStats": {
         "stash.company.com": {
           "requests": 6,
           "sum": 1097,
           "average": 183,
           "median": 153
         },
         "artifactory.company.com": {
           "requests": 18,
           "sum": 10203,
           "average": 567,
           "median": 799
         },
         "index.docker.io": {
           "requests": 4,
           "sum": 2339,
           "average": 585,
           "median": 387
         },
         "auth.docker.io": {"requests": 1, "sum": 641, "average": 641, "median": 641}
       }
 INFO: Renovate finished
rarkins commented 5 years ago

@k2snowman69 what exactly do you identify as the error in that log? If it's Error: remote: Force-pushing to this repository has been disabled then it's a problem because Renovate needs to force push on its branches.

k2snowman69 commented 5 years ago

Whoops, thought I closed this one... Does make me think an alternative to force pushing may not be a bad feature request (though it would create a noiser merge log).

Sorry about that!