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
16.86k stars 2.2k forks source link

rollbackPr breaks updates for poetry project #17374

Open davidschneider-cpi opened 2 years ago

davidschneider-cpi commented 2 years ago

How are you running Renovate?

Self-hosted

If you're self-hosting Renovate, tell us what version of Renovate you run.

32.173.1

Please select which platform you are using if self-hosting.

gitlab.com

If you're self-hosting Renovate, tell us what version of the platform you run.

No response

Was this something which used to work for you, and then stopped?

It used to work, and then stopped

Describe the bug

With rollbackPRs enabled no PRs for updates get created. Instead it fails with an error message: Can't find version matching 5.2.3 for celery.

The log claims the version is missing although this version of celery is still available: https://pypi.org/project/celery/5.2.3/

Missing version has nothing to roll back to (repository=dsch1/renovate-rollback-pr, packageFile=pyproject.toml)
       "depName": "celery",
       "currentValue": "5.2.3"

minimal reproduction repository: https://gitlab.com/dsch1/renovate-rollback-pr

Relevant debug logs

Logs ``` DEBUG: Using RE2 as regex engine DEBUG: Parsing configs DEBUG: Checking for config file in /usr/src/app/config.js DEBUG: No config file found on disk - skipping WARN: cli config dryRun property has been changed to full DEBUG: Converting GITHUB_COM_TOKEN into a global host rule DEBUG: File config "config": {} DEBUG: CLI config "config": { "repositories": ["dsch1/renovate-rollback-pr"], "dryRun": "full", "platform": "gitlab" } DEBUG: Env config "config": { "hostRules": [ {"hostType": "github", "matchHost": "github.com", "token": "***********"} ], "token": "***********" } DEBUG: Combined config "config": { "hostRules": [ {"hostType": "github", "matchHost": "github.com", "token": "***********"} ], "token": "***********", "repositories": ["dsch1/renovate-rollback-pr"], "dryRun": "full", "platform": "gitlab" } DEBUG: Found valid git version: 2.37.2 DEBUG: Using default GitLab endpoint: https://gitlab.com/api/v4/ DEBUG: GitLab version is: 15.4.0-pre DEBUG: Using platform gitAuthor: David Schneider DEBUG: Adding token authentication for gitlab.com to hostRules DEBUG: Using baseDir: /tmp/renovate DEBUG: Using cacheDir: /tmp/renovate/cache DEBUG: Initializing Renovate internal cache into /tmp/renovate/cache/renovate/renovate-cache-v1 DEBUG: Commits limit = null DEBUG: Setting global hostRules DEBUG: Adding token authentication for github.com to hostRules DEBUG: Adding token authentication for gitlab.com to hostRules DEBUG: validatePresets() DEBUG: Reinitializing hostRules for repo DEBUG: Clearing hostRules DEBUG: Adding token authentication for github.com to hostRules DEBUG: Adding token authentication for gitlab.com to hostRules INFO: Repository started (repository=dsch1/renovate-rollback-pr) "renovateVersion": "32.173.1" DEBUG: Using localDir: /tmp/renovate/repos/gitlab/dsch1/renovate-rollback-pr (repository=dsch1/renovate-rollback-pr) DEBUG: PackageFiles.clear() - Package files deleted (repository=dsch1/renovate-rollback-pr) "baseBranches": [] DEBUG: resetMemCache() (repository=dsch1/renovate-rollback-pr) DEBUG: dsch1/renovate-rollback-pr default branch = main (repository=dsch1/renovate-rollback-pr) DEBUG: Enabling Git FS (repository=dsch1/renovate-rollback-pr) DEBUG: using http URL (repository=dsch1/renovate-rollback-pr) "url": "https://gitlab.com/dsch1/renovate-rollback-pr.git" DEBUG: Resetting npmrc (repository=dsch1/renovate-rollback-pr) DEBUG: detectSemanticCommits() (repository=dsch1/renovate-rollback-pr) DEBUG: Initializing git repository into /tmp/renovate/repos/gitlab/dsch1/renovate-rollback-pr (repository=dsch1/renovate-rollback-pr) DEBUG: Performing blobless clone (repository=dsch1/renovate-rollback-pr) DEBUG: git clone completed (repository=dsch1/renovate-rollback-pr) "durationMs": 2357 DEBUG: latest repository commit (repository=dsch1/renovate-rollback-pr) "latestCommit": { "hash": "7fb90c6e071e0695d79b88b5aff2e058d7bee554", "date": "2022-08-24T10:21:54+02:00", "message": "onboarding", "refs": "HEAD -> main, origin/main, origin/HEAD", "body": "", "author_name": "David Schneider", "author_email": "david.schneider@chargepoint.com" } DEBUG: getCommitMessages (repository=dsch1/renovate-rollback-pr) DEBUG: Semantic commits detection: unknown (repository=dsch1/renovate-rollback-pr) DEBUG: No semantic commits detected (repository=dsch1/renovate-rollback-pr) DEBUG: checkOnboarding() (repository=dsch1/renovate-rollback-pr) DEBUG: isOnboarded() (repository=dsch1/renovate-rollback-pr) DEBUG: findFile(renovate.json) (repository=dsch1/renovate-rollback-pr) DEBUG: Config file exists (repository=dsch1/renovate-rollback-pr) "fileName": "renovate.json" DEBUG: ensureIssueClosing() (repository=dsch1/renovate-rollback-pr) DEBUG: Repo is onboarded (repository=dsch1/renovate-rollback-pr) DEBUG: Found renovate.json config file (repository=dsch1/renovate-rollback-pr) DEBUG: Repository config (repository=dsch1/renovate-rollback-pr) "fileName": "renovate.json", "config": {"rollbackPrs": true} DEBUG: migrateAndValidate() (repository=dsch1/renovate-rollback-pr) DEBUG: No config migration necessary (repository=dsch1/renovate-rollback-pr) DEBUG: massaged config (repository=dsch1/renovate-rollback-pr) "config": {"rollbackPrs": true} DEBUG: migrated config (repository=dsch1/renovate-rollback-pr) "config": {"rollbackPrs": true} DEBUG: Found repo ignorePaths (repository=dsch1/renovate-rollback-pr) "ignorePaths": ["**/node_modules/**", "**/bower_components/**"] DEBUG: No vulnerability alerts found (repository=dsch1/renovate-rollback-pr) DEBUG: No baseBranches (repository=dsch1/renovate-rollback-pr) DEBUG: extract() (repository=dsch1/renovate-rollback-pr) DEBUG: Setting current branch to main (repository=dsch1/renovate-rollback-pr) DEBUG: latest commit (repository=dsch1/renovate-rollback-pr) "branchName": "main", "latestCommitDate": "2022-08-24T10:21:54+02:00" DEBUG: Using file match: (^|/)tasks/[^/]+\.ya?ml$ for manager ansible (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)requirements\.ya?ml$ for manager ansible-galaxy (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)galaxy\.ya?ml$ for manager ansible-galaxy (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: azure.*pipelines?.*\.ya?ml$ for manager azure-pipelines (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)batect(-bundle)?\.yml$ for manager batect (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)batect$ for manager batect-wrapper (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)WORKSPACE(|\.bazel)$ for manager bazel (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.bzl$ for manager bazel (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)\.bazelversion$ for manager bazelisk (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.?bitbucket-pipelines\.ya?ml$ for manager bitbucket-pipelines (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: buildkite\.ya?ml for manager buildkite (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.buildkite/.+\.ya?ml$ for manager buildkite (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)Gemfile$ for manager bundler (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.cake$ for manager cake (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)Cargo\.toml$ for manager cargo (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.circleci/config\.yml$ for manager circleci (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)cloudbuild\.ya?ml for manager cloudbuild (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)Podfile$ for manager cocoapods (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)([\w-]*)composer\.json$ for manager composer (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)conanfile\.(txt|py)$ for manager conan (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)(?:deps|bb)\.edn$ for manager deps-edn (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)(?:docker-)?compose[^/]*\.ya?ml$ for manager docker-compose (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/|\.)Dockerfile$ for manager dockerfile (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)Dockerfile[^/]*$ for manager dockerfile (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.drone\.yml$ for manager droneci (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)fleet\.ya?ml for manager fleet (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)flux-system/gotk-components\.yaml$ for manager flux (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)\.fvm\/fvm_config\.json$ for manager fvm (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.gitmodules$ for manager git-submodules (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: ^(workflow-templates|\.github\/workflows)\/[^/]+\.ya?ml$ for manager github-actions (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)action\.ya?ml$ for manager github-actions (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.gitlab-ci\.yml$ for manager gitlabci (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.gitlab-ci\.yml$ for manager gitlabci-include (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)go\.mod$ for manager gomod (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.gradle(\.kts)?$ for manager gradle (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)gradle\.properties$ for manager gradle (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)gradle\/.+\.toml$ for manager gradle (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.versions\.toml$ for manager gradle (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)gradle/wrapper/gradle-wrapper\.properties$ for manager gradle-wrapper (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)requirements\.yaml$ for manager helm-requirements (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)values\.yaml$ for manager helm-values (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)helmfile\.yaml$ for manager helmfile (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)Chart\.yaml$ for manager helmv3 (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)bin/hermit$ for manager hermit (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: ^Formula/[^/]+[.]rb$ for manager homebrew (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.html?$ for manager html (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)plugins\.(txt|ya?ml)$ for manager jenkins (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)jsonnetfile\.json$ for manager jsonnet-bundler (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: ^.+\.main\.kts$ for manager kotlin-script (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)kustomization\.ya?ml$ for manager kustomize (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)project\.clj$ for manager leiningen (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/|\.)pom\.xml$ for manager maven (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: ^(((\.mvn)|(\.m2))/)?settings\.xml$ for manager maven (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)package\.js$ for manager meteor (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)mix\.exs$ for manager mix (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.node-version$ for manager nodenv (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)package\.json$ for manager npm (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.(?:cs|fs|vb)proj$ for manager nuget (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.(?:props|targets)$ for manager nuget (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)dotnet-tools\.json$ for manager nuget (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)global\.json$ for manager nuget (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.nvmrc$ for manager nvm (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)([\w-]*)requirements\.(txt|pip)$ for manager pip_requirements (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)setup\.py$ for manager pip_setup (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)Pipfile$ for manager pipenv (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)pyproject\.toml$ for manager poetry (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.pre-commit-config\.yaml$ for manager pre-commit (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)pubspec\.ya?ml$ for manager pub (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|\/)Puppetfile$ for manager puppet (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.python-version$ for manager pyenv (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.ruby-version$ for manager ruby-version (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.sbt$ for manager sbt (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: project/[^/]*.scala$ for manager sbt (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)setup\.cfg$ for manager setup-cfg (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)Package\.swift for manager swift (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: \.tf$ for manager terraform (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.terraform-version$ for manager terraform-version (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)terragrunt\.hcl$ for manager terragrunt (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.terragrunt-version$ for manager terragrunt-version (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: ^\.travis\.yml$ for manager travis (repository=dsch1/renovate-rollback-pr) DEBUG: Using file match: (^|/)\.vela\.ya?ml$ for manager velaci (repository=dsch1/renovate-rollback-pr) DEBUG: Matched 1 file(s) for manager poetry: pyproject.toml (repository=dsch1/renovate-rollback-pr) DEBUG: Found poetry package files (repository=dsch1/renovate-rollback-pr) DEBUG: Found 1 package file(s) (repository=dsch1/renovate-rollback-pr) INFO: Dependency extraction complete (repository=dsch1/renovate-rollback-pr, baseBranch=main) "stats": { "managers": {"poetry": {"fileCount": 1, "depCount": 1}}, "total": {"fileCount": 1, "depCount": 1} } DEBUG: Missing version has nothing to roll back to (repository=dsch1/renovate-rollback-pr, packageFile=pyproject.toml) "depName": "celery", "currentValue": "5.2.3" DEBUG: PackageFiles.add() - Package file saved for branch (repository=dsch1/renovate-rollback-pr, baseBranch=main) DEBUG: Package releases lookups complete (repository=dsch1/renovate-rollback-pr, baseBranch=main) DEBUG: branchifyUpgrades (repository=dsch1/renovate-rollback-pr) DEBUG: 0 flattened updates found: (repository=dsch1/renovate-rollback-pr) DEBUG: Returning 0 branch(es) (repository=dsch1/renovate-rollback-pr) DEBUG: config.repoIsOnboarded=true (repository=dsch1/renovate-rollback-pr) DEBUG: packageFiles with updates (repository=dsch1/renovate-rollback-pr, baseBranch=main) "config": { "poetry": [ { "packageFile": "pyproject.toml", "deps": [ { "depName": "celery", "depType": "dependencies", "currentValue": "5.2.3", "managerData": {"nestedVersion": false}, "datasource": "pypi", "lockedVersion": "5.2.3", "versioning": "pep440", "depIndex": 0, "updates": [], "warnings": [ { "topic": "celery", "message": "Can't find version matching 5.2.3 for celery" } ], "sourceUrl": "https://github.com/celery/celery", "homepage": "http://celeryproject.org", "changelogUrl": "https://docs.celeryproject.org/en/stable/changelog.html" } ], "extractedConstraints": {"python": "^3.10"}, "lockFiles": ["poetry.lock"] } ] } DEBUG: processRepo() (repository=dsch1/renovate-rollback-pr) DEBUG: Processing 0 branches: (repository=dsch1/renovate-rollback-pr) DEBUG: Calculated maximum PRs remaining this run (repository=dsch1/renovate-rollback-pr) "prsRemaining": 99 DEBUG: PullRequests limit = 99 (repository=dsch1/renovate-rollback-pr) DEBUG: Calculated maximum branches remaining this run (repository=dsch1/renovate-rollback-pr) "branchesRemaining": 99 DEBUG: Branches limit = 99 (repository=dsch1/renovate-rollback-pr) INFO: DRY-RUN: Would close Dependency Dashboard (repository=dsch1/renovate-rollback-pr) "title": "Dependency Dashboard" DEBUG: Removing any stale branches (repository=dsch1/renovate-rollback-pr) DEBUG: config.repoIsOnboarded=true (repository=dsch1/renovate-rollback-pr) DEBUG: No renovate branches found (repository=dsch1/renovate-rollback-pr) DEBUG: ensureIssueClosing() (repository=dsch1/renovate-rollback-pr) DEBUG: PackageFiles.clear() - Package files deleted (repository=dsch1/renovate-rollback-pr) "baseBranches": ["main"] DEBUG: Renovate repository PR statistics (repository=dsch1/renovate-rollback-pr) "stats": {"total": 0, "open": 0, "closed": 0, "merged": 0} DEBUG: Repository result: done, status: onboarded, enabled: true, onboarded: true (repository=dsch1/renovate-rollback-pr) DEBUG: Repository timing splits (milliseconds) (repository=dsch1/renovate-rollback-pr) "splits": {"init": 4458, "extract": 176, "lookup": 382, "onboarding": 1, "update": 1}, "total": 5493 DEBUG: http statistics (repository=dsch1/renovate-rollback-pr) "urls": { "https://gitlab.com/api/v4/projects/dsch1%2Frenovate-rollback-pr/issues (GET,200)": 1, "https://gitlab.com/api/v4/projects/dsch1%2Frenovate-rollback-pr/merge_requests (GET,200)": 1, "https://pypi.org/pypi/celery/json (GET,200)": 1 }, "hostStats": { "gitlab.com": {"requestCount": 2, "requestAvgMs": 448, "queueAvgMs": 0}, "pypi.org": {"requestCount": 1, "requestAvgMs": 313, "queueAvgMs": 0} }, "totalRequests": 3 INFO: Repository finished (repository=dsch1/renovate-rollback-pr) "durationMs": 5493 DEBUG: Renovate exiting ```

Have you created a minimal reproduction repository?

I have linked to a minimal reproduction repository in the bug description

HonkingGoose commented 2 years ago

Reproduction on GitHub: https://github.com/renovate-reproductions/17374, check the Dependency Dashboard to see the warning.

mdantonio commented 1 year ago

I'm experiencing the same issue, dependencies from pyproject.toml work fine until rollbackPrs is disabled. When enabled I get the same Missing version has nothing to roll back to ... error reported by @davidschneider-cpi

jonyscathe commented 1 year ago

Any updates on this? Or any workarounds? It would be great to have rollbackPrs working with poetry.

l-austenfeld commented 2 months ago

I also encountered this issue and narrowed it down to the pep440 versioning.
Here is a reproduction repo that shows this: https://github.com/l-austenfeld/renovate-reproduction-17374 It has two fake dependencies (test1 and test2), both using the same custom datasource reading from the versions.json file.
However one uses the pep440 versioning the other uses semver. Renovate fails to lookup versions for the pep440 dependency, but not the semver one.

rarkins commented 2 months ago

Isn't that because "1.0.0" is a valid semver constraint while it's not a valid pep440 constraint? Pep440 needs ==1.0.0

l-austenfeld commented 2 months ago

It could be that I am getting some technicalities wrong.
I can say that versions like this work perfectly fine when rollback PRs are not enabled. I use a setup similar to the reproduction to manage python packages installed in a Dockerfile.
I am not proficient in JavaScript or Python, so I am afraid sharing my observations is all the help I can provide.