Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(manager/poetry): fix schema for optional dependencies #32096

Merged
merged 8 commits into from
Oct 30, 2024

Conversation

sisp
Copy link
Contributor

@sisp sisp commented Oct 22, 2024

Changes

I've fixed the Poetry schema for optional dependencies (aka extras) and their extraction logic to fix the depType value.

Before this PR, Renovate incorrectly assumed Poetry extras to be declared like this:

[tool.poetry.extras]
dep-name = "<specifier>"

The correct declaration is this:

[tool.poetry.dependencies]
dep-name = {version = "<specifier>", optional = true}

[tool.poetry.extras]
extra-name = ["dep-name"]

That is, an extra is declared by the combination of a package with optional = true in the [tool.poetry.dependencies] table and the assignment of the optional package to an extra in the [tool.poetry.extras] table.

Since the optional = false|true attribute as well as its implications on Renovate's depType value are common to several dependency types (PyPI, Git, path), I've added a schema mixin for optional dependencies, which sets depType: 'extras' when optional = true, and intersected the relevant dependency schemas with this mixin. Further, I've extended the withDepType() helper to support setting the depType only when its value has not been set to keep depType: 'extras' for dependencies declared in the [tool.poetry.dependencies] table. The depType values of dependencies declared in the (outdated) [tool.poetry.dev-dependencies] table as well as in [tool.poetry.group.<group>.dependencies] tables are force-overridden, as they don't support optional = false|true. That said, the dependency schema technically supports optional = false|true for any dependency (i.e., also dev dependencies and dependency groups).

I deliberately decided against creating separate schemas for dependencies in the [tool.poetry.dependencies] table and for dependencies in the other tables for simplicity. Also Poetry's JSON schema at https://json.schemastore.org/partial-poetry.json takes this approach.

The snapshot diff looks pretty ugly on GitHub because object order was changed, apart from that the actual change is always just this:

       "managerData": {
-        "nestedVersion": false,
+        "nestedVersion": true,
+        "sourceName": undefined,
       },

Context

I stumbled over Renovate's debug log for a Project using Poetry that showed an optional dependency having depType: 'dependencies' and not depType: 'extras', so I began investigating.

Documentation (please check one with an [x])

  • I have updated the documentation, or
  • No documentation update is required

How I've tested my work (please select one)

I have verified these changes via:

  • Code inspection only, or
  • Newly added/modified unit tests, or
  • No unit tests but ran on a real repository, or
  • Both unit tests + ran on a real repository

Snapshots were updated and look correct now.

@rarkins
Copy link
Collaborator

rarkins commented Oct 24, 2024

@sisp thanks for your PR. Do you have a test repo which can be used to demonstrate the before/after of this change?

@sisp
Copy link
Contributor Author

sisp commented Oct 24, 2024

@rarkins Would you like to have just the repo with a minimal pyproject.toml with correct Poetry extras declarations? Or would you like me to also run Renovate with the changes of this PR on the repo? If so, does it suffice if I run Renovate locally, or is there a better way to demonstrate that this PR's version behaves as claimed?

@rarkins
Copy link
Collaborator

rarkins commented Oct 24, 2024

Ideally this would be a "full" type of repo to also check that nothing else broke, which also demonstrates the new functionality working (e.g. via a PR which wouldn't exist before). It's not necessary for it to be minimal because we won't be debugging it

@sisp
Copy link
Contributor Author

sisp commented Oct 24, 2024

Sorry, I'm not 100% sure what you'd like to have. I can create a Python project on github.com that uses Poetry with extras. But how would you like Renovate (including this PR's changes) to run for this repo?

@rarkins
Copy link
Collaborator

rarkins commented Oct 24, 2024

I assume that your changes in this PR can result in PRs being created which weren't before?

In that case, I was expecting:

  • Create a "normal" type of Poetry project (which has at least one PR using existing Renovate)
  • Now run your branch against the same project
  • Observe that the existing PR(s) still remain/work, but now there's a new PR due to the changes

@sisp
Copy link
Contributor Author

sisp commented Oct 24, 2024

Thanks for the clarification!

I've created a test repo at https://github.com/sisp/renovate-test-poetry-extras and enabled the GitHub Renovate app which successfully created the PR sisp/renovate-test-poetry-extras#1, but when you check the log you'll see that Renovate assigns depType: 'dependencies' although it's an extra. I also ran this branch against the repo and now Renovate assigns depType: 'extras':

Renovate log for this branch
DEBUG: Using RE2 regex engine
DEBUG: Parsing configs
DEBUG: Checking for config file in config.js
DEBUG: No config file found on disk - skipping
DEBUG: Converting GITHUB_COM_TOKEN into a global host rule
DEBUG: File config
       "config": {}
DEBUG: CLI config
       "config": {}
DEBUG: Env config
       "config": {
         "hostRules": [
           {"hostType": "github", "matchHost": "github.com", "token": "***********"}
         ],
         "platform": "github",
         "token": "***********",
         "repositories": ["sisp/renovate-test-poetry-extras"],
         "baseBranches": ["main"],
         "ignorePrAuthor": true
       }
DEBUG: Combined config
       "config": {
         "hostRules": [
           {"hostType": "github", "matchHost": "github.com", "token": "***********"}
         ],
         "platform": "github",
         "token": "***********",
         "repositories": ["sisp/renovate-test-poetry-extras"],
         "baseBranches": ["main"],
         "ignorePrAuthor": true
       }
DEBUG: Enabling forkProcessing while in non-autodiscover mode
DEBUG: Enabling onboardingNoDeps while in non-autodiscover mode
DEBUG: Found valid git version: 2.47.0
DEBUG: Setting global hostRules
DEBUG: Adding token authentication for github.com (hostType=github) to hostRules
DEBUG: Using default github endpoint: https://api.github.com/
DEBUG: hostRules: authentication already set for api.github.com
DEBUG: Using queue: host=api.github.com, concurrency=16
DEBUG: GET https://api.github.com/user/emails = (code=ERR_NON_2XX_3XX_RESPONSE, statusCode=403 retryCount=0, duration=162)
DEBUG: Cannot read user/emails endpoint on GitHub to retrieve gitAuthor
DEBUG: Platform config
       "platformConfig": {
         "hostType": "github",
         "endpoint": "https://api.github.com/",
         "isGHApp": false,
         "isGhe": false,
         "userDetails": {
           "username": "sisp",
           "name": "Sigurd Spieckermann",
           "id": 2206639
         },
         "userEmail": null
       },
       "renovateUsername": "sisp"
DEBUG: Adding token authentication for api.github.com (hostType=github) to hostRules
DEBUG: Using baseDir: /tmp/renovate
DEBUG: Using cacheDir: /tmp/renovate/cache
DEBUG: Using containerbaseDir: /tmp/renovate/cache/containerbase
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 (hostType=github) to hostRules
DEBUG: Adding token authentication for api.github.com (hostType=github) to hostRules
DEBUG: validatePresets()
DEBUG: Reinitializing hostRules for repo
DEBUG: Clearing hostRules
DEBUG: Adding token authentication for github.com (hostType=github) to hostRules
DEBUG: Adding token authentication for api.github.com (hostType=github) to hostRules
 INFO: Repository started (repository=sisp/renovate-test-poetry-extras)
       "renovateVersion": "0.0.0-semantic-release"
DEBUG: Using localDir: /tmp/renovate/repos/github/sisp/renovate-test-poetry-extras (repository=sisp/renovate-test-poetry-extras)
DEBUG: PackageFiles.clear() - Package files deleted (repository=sisp/renovate-test-poetry-extras)
DEBUG: initRepo("sisp/renovate-test-poetry-extras") (repository=sisp/renovate-test-poetry-extras)
DEBUG: hostRules: authentication already set for api.github.com (repository=sisp/renovate-test-poetry-extras)
DEBUG: Using queue: host=api.github.com, concurrency=16 (repository=sisp/renovate-test-poetry-extras)
DEBUG: sisp/renovate-test-poetry-extras default branch = main (repository=sisp/renovate-test-poetry-extras)
DEBUG: Using personal access token for git init (repository=sisp/renovate-test-poetry-extras)
DEBUG: Resetting npmrc (repository=sisp/renovate-test-poetry-extras)
DEBUG: Resetting npmrc (repository=sisp/renovate-test-poetry-extras)
DEBUG: checkOnboarding() (repository=sisp/renovate-test-poetry-extras)
DEBUG: isOnboarded() (repository=sisp/renovate-test-poetry-extras)
DEBUG: findPr(renovate/configure, Configure Renovate, !open) (repository=sisp/renovate-test-poetry-extras)
DEBUG: http cache: saving https://api.github.com/repos/sisp/renovate-test-poetry-extras/pulls?per_page=100&state=all&sort=updated&direction=desc&page=1 (etag=W/"09e1dd7d5e2741a2cfee0558751f2c94427e3c0a192ec43b8fa2674a3c890e36", lastModified=undefined) (repository=sisp/renovate-test-poetry-extras)
DEBUG: getPrList success (repository=sisp/renovate-test-poetry-extras)
       "pullsTotal": 1,
       "requestsTotal": 1,
       "apiQuotaAffected": true
DEBUG: findPr(renovate/configure, chore: Configure Renovate, !open) (repository=sisp/renovate-test-poetry-extras)
DEBUG: findFile(renovate.json) (repository=sisp/renovate-test-poetry-extras)
DEBUG: Initializing git repository into /tmp/renovate/repos/github/sisp/renovate-test-poetry-extras (repository=sisp/renovate-test-poetry-extras)
DEBUG: Performing blobless clone (repository=sisp/renovate-test-poetry-extras)
DEBUG: git clone completed (repository=sisp/renovate-test-poetry-extras)
       "durationMs": 1932
DEBUG: latest repository commit (repository=sisp/renovate-test-poetry-extras)
       "latestCommit": {
         "hash": "845b313e56a1c86719e14bd39069f6664164c75e",
         "date": "2024-10-24T12:19:20+02:00",
         "message": "chore: initial commit",
         "refs": "HEAD -> main, origin/main, origin/HEAD",
         "body": "",
         "author_name": "Sigurd Spieckermann",
         "author_email": "[email protected]"
       }
DEBUG: Config file exists, fileName: renovate.json (repository=sisp/renovate-test-poetry-extras)
DEBUG: Retrieving issueList (repository=sisp/renovate-test-poetry-extras)
DEBUG: Retrieved 1 issues (repository=sisp/renovate-test-poetry-extras)
DEBUG: Repo is onboarded (repository=sisp/renovate-test-poetry-extras)
DEBUG: Found renovate.json config file (repository=sisp/renovate-test-poetry-extras)
DEBUG: Repository config (repository=sisp/renovate-test-poetry-extras)
       "fileName": "renovate.json",
       "config": {
         "$schema": "https://docs.renovatebot.com/renovate-schema.json",
         "extends": ["config:recommended"],
         "rangeStrategy": "replace"
       }
DEBUG: migrateAndValidate() (repository=sisp/renovate-test-poetry-extras)
DEBUG: No config migration necessary (repository=sisp/renovate-test-poetry-extras)
DEBUG: Found repo ignorePaths (repository=sisp/renovate-test-poetry-extras)
       "ignorePaths": [
         "**/node_modules/**",
         "**/bower_components/**",
         "**/vendor/**",
         "**/examples/**",
         "**/__tests__/**",
         "**/test/**",
         "**/tests/**",
         "**/__fixtures__/**"
       ]
DEBUG: No vulnerability alerts enabled for repo (repository=sisp/renovate-test-poetry-extras)
DEBUG: No vulnerability alerts found (repository=sisp/renovate-test-poetry-extras)
DEBUG: findIssue(Dependency Dashboard) (repository=sisp/renovate-test-poetry-extras)
DEBUG: Found issue 2 (repository=sisp/renovate-test-poetry-extras)
DEBUG: http cache: saving https://api.github.com/repos/sisp/renovate-test-poetry-extras/issues/2 (etag=W/"ac15519ac922b6bb5165e1835f5e0a43b23490e2f64558b6cdeff9c5ea1e957f", lastModified=Thu, 24 Oct 2024 10:21:59 GMT) (repository=sisp/renovate-test-poetry-extras)
DEBUG: baseBranches (repository=sisp/renovate-test-poetry-extras)
       "baseBranches": ["main"]
DEBUG: baseBranch: main (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: extract() (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Setting current branch to main (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: latest commit (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
       "branchName": "main",
       "latestCommitDate": "2024-10-24T12:19:20+02:00"
DEBUG: Using file match: (^|/)tasks/[^/]+\.ya?ml$ for manager ansible (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)(galaxy|requirements)(\.ansible)?\.ya?ml$ for manager ansible-galaxy (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.tool-versions$ for manager asdf (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/).azuredevops/.+\.ya?ml$ for manager azure-pipelines (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: azure.*pipelines?.*\.ya?ml$ for manager azure-pipelines (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)batect(-bundle)?\.ya?ml$ for manager batect (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)batect$ for manager batect-wrapper (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)WORKSPACE(|\.bazel|\.bzlmod)$ for manager bazel (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.WORKSPACE\.bazel$ for manager bazel (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.bzl$ for manager bazel (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)MODULE\.bazel$ for manager bazel-module (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.bazelversion$ for manager bazelisk (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.bicep$ for manager bicep (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.?bitbucket-pipelines\.ya?ml$ for manager bitbucket-pipelines (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)bitrise\.ya?ml$ for manager bitrise (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: buildkite\.ya?ml for manager buildkite (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.buildkite/.+\.ya?ml$ for manager buildkite (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)bun\.lockb$ for manager bun (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.bun-version$ for manager bun-version (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Gemfile$ for manager bundler (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.cake$ for manager cake (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Cargo\.toml$ for manager cargo (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.circleci/.+\.ya?ml$ for manager circleci (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)cloudbuild\.ya?ml for manager cloudbuild (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Podfile$ for manager cocoapods (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)([\w-]*)composer\.json$ for manager composer (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)conanfile\.(txt|py)$ for manager conan (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.copier-answers(\..+)?\.ya?ml for manager copier (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)cpanfile$ for manager cpanfile (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)(?:deps|bb)\.edn$ for manager deps-edn (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: ^.devcontainer/devcontainer.json$ for manager devcontainer (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: ^.devcontainer.json$ for manager devcontainer (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)(?:docker-)?compose[^/]*\.ya?ml$ for manager docker-compose (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/|\.)([Dd]ocker|[Cc]ontainer)file$ for manager dockerfile (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)([Dd]ocker|[Cc]ontainer)file[^/]*$ for manager dockerfile (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.drone\.yml$ for manager droneci (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)fleet\.ya?ml for manager fleet (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (?:^|/)gotk-components\.ya?ml$ for manager flux (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.fvm/fvm_config\.json$ for manager fvm (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.fvmrc$ for manager fvm (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.gitmodules$ for manager git-submodules (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)(workflow-templates|\.(?:github|gitea|forgejo)/(?:workflows|actions))/.+\.ya?ml$ for manager github-actions (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)action\.ya?ml$ for manager github-actions (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.gitlab-ci\.ya?ml$ for manager gitlabci (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.gitlab-ci\.ya?ml$ for manager gitlabci-include (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)gleam.toml$ for manager gleam (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)go\.mod$ for manager gomod (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.gradle(\.kts)?$ for manager gradle (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)gradle\.properties$ for manager gradle (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)gradle/.+\.toml$ for manager gradle (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)buildSrc/.+\.kt$ for manager gradle (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.versions\.toml$ for manager gradle (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)versions.props$ for manager gradle (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)versions.lock$ for manager gradle (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)gradle/wrapper/gradle-wrapper\.properties$ for manager gradle-wrapper (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)requirements\.ya?ml$ for manager helm-requirements (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)values\.ya?ml$ for manager helm-values (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)helmfile\.ya?ml(?:\.gotmpl)?$ for manager helmfile (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Chart\.ya?ml$ for manager helmv3 (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)bin/hermit$ for manager hermit (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: ^Formula/[^/]+[.]rb$ for manager homebrew (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.html?$ for manager html (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)plugins\.(txt|ya?ml)$ for manager jenkins (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)jsonnetfile\.json$ for manager jsonnet-bundler (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: ^.+\.main\.kts$ for manager kotlin-script (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)kustomization\.ya?ml$ for manager kustomize (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)project\.clj$ for manager leiningen (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/|\.)pom\.xml$ for manager maven (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: ^(((\.mvn)|(\.m2))/)?settings\.xml$ for manager maven (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.mvn/extensions\.xml$ for manager maven (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|\/).mvn/wrapper/maven-wrapper.properties$ for manager maven-wrapper (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)package\.js$ for manager meteor (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Mintfile$ for manager mint (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.?mise\.toml$ for manager mise (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.?mise/config\.toml$ for manager mise (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)mix\.exs$ for manager mix (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)flake\.nix$ for manager nix (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.node-version$ for manager nodenv (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)package\.json$ for manager npm (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.(?:cs|fs|vb)proj$ for manager nuget (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.(?:props|targets)$ for manager nuget (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)dotnet-tools\.json$ for manager nuget (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)global\.json$ for manager nuget (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.nvmrc$ for manager nvm (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)src/main/features/.+\.json$ for manager osgi (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)pyproject\.toml$ for manager pep621 (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)[\w-]*requirements([-.]\w+)?\.(txt|pip)$ for manager pip_requirements (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)setup\.py$ for manager pip_setup (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Pipfile$ for manager pipenv (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)pyproject\.toml$ for manager poetry (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.pre-commit-config\.ya?ml$ for manager pre-commit (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)pubspec\.ya?ml$ for manager pub (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Puppetfile$ for manager puppet (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.python-version$ for manager pyenv (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.ruby-version$ for manager ruby-version (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)runtime.txt$ for manager runtime-version (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.sbt$ for manager sbt (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: project/[^/]*\.scala$ for manager sbt (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: project/build\.properties$ for manager sbt (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)repositories$ for manager sbt (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.scalafmt.conf$ for manager scalafmt (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)setup\.cfg$ for manager setup-cfg (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)Package\.swift for manager swift (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.tf$ for manager terraform (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.terraform-version$ for manager terraform-version (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)terragrunt\.hcl$ for manager terragrunt (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.terragrunt-version$ for manager terragrunt-version (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: \.tflint\.hcl$ for manager tflint-plugin (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: ^\.travis\.ya?ml$ for manager travis (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)\.vela\.ya?ml$ for manager velaci (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: (^|/)vendir\.yml$ for manager vendir (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using file match: ^\.woodpecker(?:/[^/]+)?\.ya?ml$ for manager woodpecker (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Matched 1 file(s) for manager pep621: pyproject.toml (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Matched 1 file(s) for manager poetry: pyproject.toml (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: manager extract durations (ms) (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
       "managers": {"pep621": 7, "poetry": 9}
DEBUG: Found pep621 package files (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Found poetry package files (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Found 2 package file(s) (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
 INFO: Dependency extraction complete (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
       "stats": {
         "managers": {
           "pep621": {"fileCount": 1, "depCount": 1},
           "poetry": {"fileCount": 1, "depCount": 2}
         },
         "total": {"fileCount": 2, "depCount": 3}
       }
DEBUG: baseBranch: main (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: hostRules: no authentication for pypi.org (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Using queue: host=pypi.org, concurrency=16 (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: PackageFiles.add() - Package file saved for base branch (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Package releases lookups complete (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: branchifyUpgrades (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: detectSemanticCommits() (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: getCommitMessages (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: semanticCommits: detected "angular" (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: semanticCommits: enabled (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: 1 flattened updates found: cowsay (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: Returning 1 branch(es) (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: config.repoIsOnboarded=true (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
DEBUG: packageFiles with updates (repository=sisp/renovate-test-poetry-extras, baseBranch=main)
       "config": {
         "pep621": [
           {
             "deps": [
               {
                 "packageName": "poetry-core",
                 "depName": "poetry-core",
                 "datasource": "pypi",
                 "depType": "build-system.requires",
                 "skipReason": "unspecified-version",
                 "updates": []
               }
             ],
             "packageFile": "pyproject.toml"
           }
         ],
         "poetry": [
           {
             "deps": [
               {
                 "datasource": "github-releases",
                 "currentValue": ">=3.12",
                 "managerData": {"nestedVersion": false},
                 "versioning": "pep440",
                 "depName": "python",
                 "depType": "dependencies",
                 "packageName": "containerbase/python-prebuild",
                 "commitMessageTopic": "Python",
                 "registryUrls": null,
                 "updates": [],
                 "warnings": [],
                 "sourceUrl": "https://github.com/containerbase/python-prebuild",
                 "registryUrl": "https://github.com",
                 "currentVersion": "3.13.0",
                 "currentVersionTimestamp": "2024-10-08T01:11:09.000Z",
                 "currentVersionAgeInDays": 16
               },
               {
                 "datasource": "pypi",
                 "managerData": {"nestedVersion": true},
                 "currentValue": "6.0",
                 "depType": "extras",
                 "versioning": "pep440",
                 "depName": "cowsay",
                 "lockedVersion": "6.0",
                 "updates": [
                   {
                     "bucket": "non-major",
                     "newVersion": "6.1",
                     "newValue": "6.1",
                     "releaseTimestamp": "2023-09-25T16:30:01.000Z",
                     "newVersionAgeInDays": 394,
                     "newMajor": 6,
                     "newMinor": 1,
                     "newPatch": 0,
                     "updateType": "minor",
                     "branchName": "renovate/cowsay-6.x"
                   }
                 ],
                 "packageName": "cowsay",
                 "warnings": [],
                 "sourceUrl": "https://github.com/VaasuDevanS/cowsay-python",
                 "registryUrl": "https://pypi.org/pypi",
                 "currentVersion": "6.0",
                 "currentVersionTimestamp": "2023-09-08T17:16:34.000Z",
                 "currentVersionAgeInDays": 411,
                 "isSingleVersion": true,
                 "fixedVersion": "6.0"
               }
             ],
             "packageFileVersion": "0.0.0",
             "extractedConstraints": {"python": ">=3.12"},
             "lockFiles": ["poetry.lock"],
             "packageFile": "pyproject.toml"
           }
         ]
       }
DEBUG: detectSemanticCommits() (repository=sisp/renovate-test-poetry-extras)
DEBUG: semanticCommits: returning "enabled" from cache (repository=sisp/renovate-test-poetry-extras)
DEBUG: processRepo() (repository=sisp/renovate-test-poetry-extras)
DEBUG: Processing 1 branch: renovate/cowsay-6.x (repository=sisp/renovate-test-poetry-extras)
DEBUG: Calculating hourly PRs remaining (repository=sisp/renovate-test-poetry-extras)
DEBUG: currentHourStart=2024-10-24T12:00:00.000+02:00 (repository=sisp/renovate-test-poetry-extras)
DEBUG: PR hourly limit remaining: 1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: Calculating prConcurrentLimit (10) (repository=sisp/renovate-test-poetry-extras)
DEBUG: getBranchPr(renovate/cowsay-6.x) (repository=sisp/renovate-test-poetry-extras)
DEBUG: findPr(renovate/cowsay-6.x, undefined, open) (repository=sisp/renovate-test-poetry-extras)
DEBUG: Found PR #1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: 1 PRs are currently open (repository=sisp/renovate-test-poetry-extras)
DEBUG: PR concurrent limit remaining: 9 (repository=sisp/renovate-test-poetry-extras)
DEBUG: Calculated maximum PRs remaining this run: 1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: PullRequests limit = 1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: Calculating hourly PRs remaining (repository=sisp/renovate-test-poetry-extras)
DEBUG: currentHourStart=2024-10-24T12:00:00.000+02:00 (repository=sisp/renovate-test-poetry-extras)
DEBUG: PR hourly limit remaining: 1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: Calculating branchConcurrentLimit (10) (repository=sisp/renovate-test-poetry-extras)
DEBUG: 1 already existing branches found: renovate/cowsay-6.x (repository=sisp/renovate-test-poetry-extras)
DEBUG: Branch concurrent limit remaining: 9 (repository=sisp/renovate-test-poetry-extras)
DEBUG: Calculated maximum branches remaining this run: 1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: Branches limit = 1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: syncBranchState() (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: syncBranchState(): Branch cache not found, creating minimal branchState (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: getBranchPr(renovate/cowsay-6.x) (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: findPr(renovate/cowsay-6.x, undefined, open) (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: Found PR #1 (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: branchExists=true (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: dependencyDashboardCheck=undefined (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: PR rebase requested=false (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: Checking if PR has been edited (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: branch.isModified(): using git to calculate (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: branch.isModified() = true (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: Found existing branch PR (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: PR has been edited, PrNo:1 (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: Ensuring comment to indicate that rebasing is not possible (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: Getting comments for #1 (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: http cache: saving https://api.github.com/repos/sisp/renovate-test-poetry-extras/issues/1/comments?per_page=100 (etag="b3cb36b04d987f59ed69b5fca93c078c8e9de44a8a39f8a0ecf94388f008e3b9", lastModified=undefined) (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: Found 0 comments (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
DEBUG: Ensuring comment "Edited/Blocked Notification" in #1 (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
 INFO: Comment added (repository=sisp/renovate-test-poetry-extras, baseBranch=main, branch=renovate/cowsay-6.x)
       "issueNo": 1,
       "topic": "Edited/Blocked Notification"
DEBUG: getBranchPr(renovate/cowsay-6.x) (repository=sisp/renovate-test-poetry-extras)
DEBUG: findPr(renovate/cowsay-6.x, undefined, open) (repository=sisp/renovate-test-poetry-extras)
DEBUG: Found PR #1 (repository=sisp/renovate-test-poetry-extras)
DEBUG: http cache: saving https://api.github.com/repos/sisp/renovate-test-poetry-extras/contents/renovate.json (etag=W/"b615f2ba6caac693fd16232e5f6798a02c69328a", lastModified=Thu, 24 Oct 2024 10:19:20 GMT) (repository=sisp/renovate-test-poetry-extras)
DEBUG: Config does not need migration (repository=sisp/renovate-test-poetry-extras)
DEBUG: ensureDependencyDashboard() (repository=sisp/renovate-test-poetry-extras)
DEBUG: Ensuring Dependency Dashboard (repository=sisp/renovate-test-poetry-extras)
DEBUG: Checking packageFiles for deprecated packages (repository=sisp/renovate-test-poetry-extras)
       "packageFiles": {
         "pep621": [
           {
             "deps": [
               {
                 "packageName": "poetry-core",
                 "depName": "poetry-core",
                 "datasource": "pypi",
                 "depType": "build-system.requires",
                 "skipReason": "unspecified-version",
                 "updates": []
               }
             ],
             "packageFile": "pyproject.toml"
           }
         ],
         "poetry": [
           {
             "deps": [
               {
                 "datasource": "github-releases",
                 "currentValue": ">=3.12",
                 "managerData": {"nestedVersion": false},
                 "versioning": "pep440",
                 "depName": "python",
                 "depType": "dependencies",
                 "packageName": "containerbase/python-prebuild",
                 "commitMessageTopic": "Python",
                 "registryUrls": null,
                 "updates": [],
                 "warnings": [],
                 "sourceUrl": "https://github.com/containerbase/python-prebuild",
                 "registryUrl": "https://github.com",
                 "currentVersion": "3.13.0",
                 "currentVersionTimestamp": "2024-10-08T01:11:09.000Z",
                 "currentVersionAgeInDays": 16
               },
               {
                 "datasource": "pypi",
                 "managerData": {"nestedVersion": true},
                 "currentValue": "6.0",
                 "depType": "extras",
                 "versioning": "pep440",
                 "depName": "cowsay",
                 "lockedVersion": "6.0",
                 "updates": [
                   {
                     "bucket": "non-major",
                     "newVersion": "6.1",
                     "newValue": "6.1",
                     "releaseTimestamp": "2023-09-25T16:30:01.000Z",
                     "newVersionAgeInDays": 394,
                     "newMajor": 6,
                     "newMinor": 1,
                     "newPatch": 0,
                     "updateType": "minor",
                     "branchName": "renovate/cowsay-6.x"
                   }
                 ],
                 "packageName": "cowsay",
                 "warnings": [],
                 "sourceUrl": "https://github.com/VaasuDevanS/cowsay-python",
                 "registryUrl": "https://pypi.org/pypi",
                 "currentVersion": "6.0",
                 "currentVersionTimestamp": "2023-09-08T17:16:34.000Z",
                 "currentVersionAgeInDays": 411,
                 "isSingleVersion": true,
                 "fixedVersion": "6.0"
               }
             ],
             "packageFileVersion": "0.0.0",
             "extractedConstraints": {"python": ">=3.12"},
             "lockFiles": ["poetry.lock"],
             "packageFile": "pyproject.toml"
           }
         ]
       }
DEBUG: http cache: saving https://api.github.com/repos/sisp/renovate-test-poetry-extras/issues/2 (etag=W/"ac15519ac922b6bb5165e1835f5e0a43b23490e2f64558b6cdeff9c5ea1e957f", lastModified=Thu, 24 Oct 2024 10:21:59 GMT) (repository=sisp/renovate-test-poetry-extras)
DEBUG: http cache: saving https://api.github.com/repos/sisp/renovate-test-poetry-extras/issues/2 (etag=W/"ac15519ac922b6bb5165e1835f5e0a43b23490e2f64558b6cdeff9c5ea1e957f", lastModified=Thu, 24 Oct 2024 10:21:59 GMT) (repository=sisp/renovate-test-poetry-extras)
DEBUG: ensureIssue(Dependency Dashboard) (repository=sisp/renovate-test-poetry-extras)
DEBUG: http cache: saving https://api.github.com/repos/sisp/renovate-test-poetry-extras/issues/2 (etag=W/"ac15519ac922b6bb5165e1835f5e0a43b23490e2f64558b6cdeff9c5ea1e957f", lastModified=Thu, 24 Oct 2024 10:21:59 GMT) (repository=sisp/renovate-test-poetry-extras)
DEBUG: Patching issue (repository=sisp/renovate-test-poetry-extras)
DEBUG: Issue updated (repository=sisp/renovate-test-poetry-extras)
DEBUG: validateReconfigureBranch() (repository=sisp/renovate-test-poetry-extras)
DEBUG: No reconfigure branch found (repository=sisp/renovate-test-poetry-extras)
DEBUG: Removing any stale branches (repository=sisp/renovate-test-poetry-extras)
DEBUG: config.repoIsOnboarded=true (repository=sisp/renovate-test-poetry-extras)
DEBUG: Branch lists (repository=sisp/renovate-test-poetry-extras)
       "branchList": ["renovate/cowsay-6.x"],
       "renovateBranches": ["renovate/cowsay-6.x"]
DEBUG: remainingBranches= (repository=sisp/renovate-test-poetry-extras)
DEBUG: No branches to clean up (repository=sisp/renovate-test-poetry-extras)
DEBUG: PackageFiles.clear() - Package files deleted (repository=sisp/renovate-test-poetry-extras)
DEBUG: Branch summary (repository=sisp/renovate-test-poetry-extras)
       "cacheModified": undefined,
       "baseBranches": [{"branchName": "main", "sha": "845b313e56a1c86719e14bd39069f6664164c75e"}],
       "branches": [
         {
           "automerge": false,
           "baseBranch": "main",
           "baseBranchSha": "845b313e56a1c86719e14bd39069f6664164c75e",
           "branchName": "renovate/cowsay-6.x",
           "branchSha": "ed02a6d5faf2533a1fb75feb46ded2b79e2df692",
           "isModified": true,
           "isPristine": false
         }
       ],
       "defaultBranch": "main",
       "inactiveBranches": []
DEBUG: branches info extended (repository=sisp/renovate-test-poetry-extras)
       "branchesInformation": [
         {
           "branchName": "renovate/cowsay-6.x",
           "prNo": 1,
           "prTitle": "chore(deps): update dependency cowsay to v6.1",
           "result": "pr-edited",
           "upgrades": [
             {
               "datasource": "pypi",
               "depName": "cowsay",
               "displayPending": "",
               "fixedVersion": "6.0",
               "currentVersion": "6.0",
               "currentValue": "6.0",
               "newValue": "6.1",
               "newVersion": "6.1",
               "packageFile": "pyproject.toml",
               "updateType": "minor",
               "packageName": "cowsay"
             }
           ]
         }
       ]
DEBUG: Renovate repository PR statistics (repository=sisp/renovate-test-poetry-extras)
       "stats": {"total": 1, "open": 1, "closed": 0, "merged": 0}
DEBUG: Repository result: done, status: onboarded, enabled: true, onboarded: true (repository=sisp/renovate-test-poetry-extras)
DEBUG: Repository timing splits (milliseconds) (repository=sisp/renovate-test-poetry-extras)
       "splits": {"init": 4764, "extract": 440, "lookup": 574, "onboarding": 1, "update": 1030},
       "total": 7840
DEBUG: Package cache statistics (repository=sisp/renovate-test-poetry-extras)
       "get": {"count": 3, "avgMs": 3, "medianMs": 4, "maxMs": 5, "totalMs": 10},
       "set": {"count": 2, "avgMs": 8, "medianMs": 11, "maxMs": 11, "totalMs": 16}
DEBUG: Datasource cache statistics (repository=sisp/renovate-test-poetry-extras)
       "pypi": {"https://pypi.org/pypi": {"hit": 0, "miss": 1, "set": 1, "skip": 0}}
DEBUG: HTTP statistics (repository=sisp/renovate-test-poetry-extras)
       "hosts": {
         "api.github.com": {
           "count": 9,
           "reqAvgMs": 418,
           "reqMedianMs": 389,
           "reqMaxMs": 754,
           "queueAvgMs": 0,
           "queueMedianMs": 0,
           "queueMaxMs": 1
         },
         "pypi.org": {
           "count": 1,
           "reqAvgMs": 164,
           "reqMedianMs": 164,
           "reqMaxMs": 164,
           "queueAvgMs": 0,
           "queueMedianMs": 0,
           "queueMaxMs": 0
         }
       },
       "requests": 10
DEBUG: HTTP cache statistics (repository=sisp/renovate-test-poetry-extras)
       "https://api.github.com": {
         "/repos/sisp/renovate-test-poetry-extras/contents/renovate.json": {
           "hit": 0,
           "miss": 1
         },
         "/repos/sisp/renovate-test-poetry-extras/issues/1/comments": {
           "hit": 0,
           "miss": 1
         },
         "/repos/sisp/renovate-test-poetry-extras/issues/2": {"hit": 0, "miss": 4},
         "/repos/sisp/renovate-test-poetry-extras/pulls": {"hit": 0, "miss": 1}
       }
DEBUG: Lookup statistics (repository=sisp/renovate-test-poetry-extras)
       "pypi": {"count": 1, "avgMs": 222, "medianMs": 222, "maxMs": 222, "totalMs": 222},
       "github-releases": {"count": 1, "avgMs": 511, "medianMs": 511, "maxMs": 511, "totalMs": 511}
 INFO: Repository finished (repository=sisp/renovate-test-poetry-extras)
       "cloned": true,
       "durationMs": 7840
DEBUG: Checking file package cache for expired items
DEBUG: Deleted 0 of 3 file cached entries in 5ms

The problem wasn't a missing PR but the wrong depType associated with the optional dependency.

rarkins
rarkins previously approved these changes Oct 24, 2024
@rarkins rarkins requested review from viceice and secustor October 24, 2024 12:34
Copy link
Collaborator

@secustor secustor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs some additional tests to cover the scenario.

I can for example remove simply the force parameter and the tests still pass.

lib/modules/manager/poetry/schema.ts Outdated Show resolved Hide resolved
@sisp
Copy link
Contributor Author

sisp commented Oct 27, 2024

Thanks for your review, @secustor! 👍

I've extended the test fixture pyproject.2.toml to include the optional = false|true setting in dev and group dependencies, such that setting withDepType's force parameter is required for the tests to pass. Although the optional setting is only meaningful for dependencies in the [tool.poetry.dependencies] section, I've verified that Poetry tolerates it also for dependencies in the [tool.poetry.dev-dependencies] and [tool.poetry.group.*.dependencies] sections where it has no meaning because dev/group dependencies cannot be assigned to extras defined in the [tool.poetry.extras] section and there is no other purpose of the optional setting. So, while using the optional setting in these sections makes no practical sense, it covers the force parameter. And since Poetry tolerates the optional setting also for dev/group dependencies, it is crucial to force-override the depType for dev/group dependencies.

While making these changes, I realized that the test fixture pyproject.1.toml was meant to test dependencies specified via the short syntax, and since extras cannot be specified in this way – unlike assumed prior to this PR –, I decided to remove optional dependencies there. This removal doesn't reduce coverage because those optional dependencies and extras are also specified in the fixture pyproject.2.toml.

@sisp
Copy link
Contributor Author

sisp commented Oct 27, 2024

I've merged main into this PR's branch to include the changes from #32162 and updated the snapshots here accordingly.

Copy link
Collaborator

@secustor secustor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR has conflicts.

@sisp
Copy link
Contributor Author

sisp commented Oct 30, 2024

@secustor I've resolved the merge conflicts.

@rarkins rarkins requested a review from secustor October 30, 2024 13:49
@secustor secustor added this pull request to the merge queue Oct 30, 2024
Merged via the queue into renovatebot:main with commit ff8c63e Oct 30, 2024
39 checks passed
@sisp sisp deleted the fix/poetry-extras branch October 30, 2024 19:36
@renovate-release
Copy link
Collaborator

🎉 This PR is included in version 38.138.3 🎉

The release is available on:

Your semantic-release bot 📦🚀

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 1, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants