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

Renovate is stuck in an infinite loop overwriting a ci bot's commits #17528

Closed
corypaik opened this issue Aug 31, 2022 · 10 comments · Fixed by #17848
Closed

Renovate is stuck in an infinite loop overwriting a ci bot's commits #17528

corypaik opened this issue Aug 31, 2022 · 10 comments · Fixed by #17848
Assignees
Labels
priority-3-medium Default priority, "should be done" but isn't prioritised ahead of others regression Issue about a regression bug, or the PR caused it status:in-progress Someone is working on implementation type:bug Bug fix of existing functionality

Comments

@corypaik
Copy link

How are you running Renovate?

Mend Renovate hosted app on github.com

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

No response

If you're self-hosting Renovate, select which platform you are using.

No response

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

Renovate is stuck in an infinite loop overwriting a ci bot's fixup commits. This started happening sometime in the past 2 months (the configuration has not been changed since). So far I have only observed this with python packages, but I do not have a similar procedure for other dependencies.

The process is something like this:

  1. Renovate updates package x and commits to the repository, which triggers the first ci run.
  2. The repository uses lock files with pip-compile, so before running builds and tests, the ci agent runs a script to update the lockfiles. This takes care of resolving dependency changes of x. If any changes were made, the ci bot commits them as a fixup commit (git commit --fixup HEAD) and pushes it to GitHub.
  3. The new commit triggers a second ci run. This time, the check should pass and move on.

The ci bot is registered as a gitIgnoredAuthor, but in the past renovate would only overwrite the changes if the main branch was updated (I have rebaseWhen as behind-base-branch). Currently, every time the ci bot commits a change renovate seems to overwrite it the next time it runs. This means the repository update process is effectively stuck in an infinite loop. I'm not sure exactly what triggers this behavior and it's been a while since it worked, but it seems to have been around the same time renovate changed email names from [email protected] to 29139614+renovate[bot]@users.noreply.github.com. I recall having to manually rebase the existing branches as they were marked as modified.

I've provided debug logs from a minimal reproduction repository, which is publicly available on GitHub. The repository contains one example package that causes this issue, all others have been removed or disabled. There is also a public Buildkite available for reference.

Relevant debug logs

Logs
DEBUG: No dangling containers to remove
INFO: Repository started
{
  "renovateVersion": "32.184.2"
}
DEBUG: Using localDir: /mnt/renovate/gh/corypaik/renovate-loop
DEBUG: PackageFiles.clear() - Package files deleted
{
  "baseBranches": []
}
DEBUG: resetMemCache()
DEBUG: initRepo("corypaik/renovate-loop")
DEBUG: corypaik/renovate-loop default branch = main
DEBUG: Using app token for git init
DEBUG: Repository cache is restored from revision 13
DEBUG: Resetting npmrc
DEBUG: detectSemanticCommits()
DEBUG: checkOnboarding()
DEBUG: isOnboarded()
DEBUG: Checking cached config file name
DEBUG: Existing config file confirmed
DEBUG: Repository config
{
  "fileName": "renovate.json",
  "config": {
    "$schema": "https://docs.renovatebot.com/renovate-schema.json",
    "extends": [
      ":ignoreModulesAndTests",
      "group:monorepos",
      "group:recommended",
      "workarounds:all"
    ],
    "semanticCommits": "enabled",
    "semanticCommitType": "build",
    "semanticCommitScope": "",
    "prHourlyLimit": 2,
    "prConcurrentLimit": 10,
    "dependencyDashboard": true,
    "labels": [
      "target: minor",
      "comp: build & ci",
      "action: review"
    ],
    "timezone": "America/Chihuahua",
    "schedule": [
      "after 10pm every weekday",
      "before 4am every weekday"
    ],
    "baseBranches": [
      "main"
    ],
    "rebaseWhen": "behind-base-branch",
    "pip_requirements": {
      "fileMatch": [
        ".*requirements.in$"
      ]
    },
    "prCreation": "not-pending",
    "stabilityDays": 3,
    "gitIgnoredAuthors": [
      "[email protected]"
    ],
    "pre-commit": {
      "enabled": true
    },
    "packageRules": [
      {
        "description": "Always pin direct python dependencies to ensure lockfile updates do not revert to a different version.",
        "matchFiles": [
          "third_party/requirements.in"
        ],
        "rangeStrategy": "pin"
      },
      {
        "description": "All python deps, except datasets (for minimal reproduction).",
        "matchPackagePatterns": [
          "*"
        ],
        "matchUpdateTypes": [
          "major",
          "minor",
          "patch"
        ],
        "matchLanguages": [
          "python"
        ],
        "excludePackageNames": [
          "datasets"
        ],
        "enabled": false
      }
    ]
  }
}
DEBUG: Repo is onboarded
DEBUG: migrateAndValidate()
DEBUG: No config migration necessary
DEBUG: massaged config
{
  "config": {
    "$schema": "https://docs.renovatebot.com/renovate-schema.json",
    "extends": [
      "github>whitesource/merge-confidence:beta",
      ":ignoreModulesAndTests",
      "group:monorepos",
      "group:recommended",
      "workarounds:all"
    ],
    "semanticCommits": "enabled",
    "semanticCommitType": "build",
    "semanticCommitScope": "",
    "prHourlyLimit": 2,
    "prConcurrentLimit": 10,
    "dependencyDashboard": true,
    "labels": [
      "target: minor",
      "comp: build & ci",
      "action: review"
    ],
    "timezone": "America/Chihuahua",
    "schedule": [
      "after 10pm every weekday",
      "before 4am every weekday"
    ],
    "baseBranches": [
      "main"
    ],
    "rebaseWhen": "behind-base-branch",
    "pip_requirements": {
      "fileMatch": [
        ".*requirements.in$"
      ]
    },
    "prCreation": "not-pending",
    "stabilityDays": 3,
    "gitIgnoredAuthors": [
      "[email protected]"
    ],
    "pre-commit": {
      "enabled": true
    },
    "packageRules": [
      {
        "description": [
          "Always pin direct python dependencies to ensure lockfile updates do not revert to a different version."
        ],
        "matchFiles": [
          "third_party/requirements.in"
        ],
        "rangeStrategy": "pin"
      },
      {
        "description": [
          "All python deps, except datasets (for minimal reproduction)."
        ],
        "matchPackagePatterns": [
          "*"
        ],
        "matchUpdateTypes": [
          "major",
          "minor",
          "patch"
        ],
        "matchLanguages": [
          "python"
        ],
        "excludePackageNames": [
          "datasets"
        ],
        "enabled": false
      }
    ]
  }
}
DEBUG: migrated config
{
  "config": {
    "$schema": "https://docs.renovatebot.com/renovate-schema.json",
    "extends": [
      "github>whitesource/merge-confidence:beta",
      ":ignoreModulesAndTests",
      "group:monorepos",
      "group:recommended",
      "workarounds:all"
    ],
    "semanticCommits": "enabled",
    "semanticCommitType": "build",
    "semanticCommitScope": "",
    "prHourlyLimit": 2,
    "prConcurrentLimit": 10,
    "dependencyDashboard": true,
    "labels": [
      "target: minor",
      "comp: build & ci",
      "action: review"
    ],
    "timezone": "America/Chihuahua",
    "schedule": [
      "after 10pm every weekday",
      "before 4am every weekday"
    ],
    "baseBranches": [
      "main"
    ],
    "rebaseWhen": "behind-base-branch",
    "pip_requirements": {
      "fileMatch": [
        ".*requirements.in$"
      ]
    },
    "prCreation": "not-pending",
    "stabilityDays": 3,
    "gitIgnoredAuthors": [
      "[email protected]"
    ],
    "pre-commit": {
      "enabled": true
    },
    "packageRules": [
      {
        "description": [
          "Always pin direct python dependencies to ensure lockfile updates do not revert to a different version."
        ],
        "matchFiles": [
          "third_party/requirements.in"
        ],
        "rangeStrategy": "pin"
      },
      {
        "description": [
          "All python deps, except datasets (for minimal reproduction)."
        ],
        "matchPackagePatterns": [
          "*"
        ],
        "matchUpdateTypes": [
          "major",
          "minor",
          "patch"
        ],
        "matchLanguages": [
          "python"
        ],
        "excludePackageNames": [
          "datasets"
        ],
        "enabled": false
      }
    ]
  }
}
DEBUG: Setting hostRules from config
DEBUG: Found repo ignorePaths
{
  "ignorePaths": [
    "**/node_modules/**",
    "**/bower_components/**",
    "**/vendor/**",
    "**/examples/**",
    "**/__tests__/**",
    "**/test/**",
    "**/tests/**",
    "**/__fixtures__/**"
  ]
}
DEBUG: No vulnerability alerts found
DEBUG: No vulnerability alerts found
DEBUG: findIssue(Dependency Dashboard)
DEBUG: Retrieving issueList
DEBUG: Retrieved 1 issues
DEBUG: Found issue 1
DEBUG: baseBranches
{
  "baseBranches": [
    "main"
  ]
}
DEBUG: baseBranch: main
{
  "baseBranch": "main"
}
DEBUG: extract()
{
  "baseBranch": "main"
}
DEBUG: Found cached extract
{
  "baseBranch": "main",
  "baseBranchSha": "5267848cc1c6b6dfb1d031f573b25d2ab36ebc82"
}
DEBUG: Deleted cached dep updates
{
  "baseBranch": "main"
}
INFO: Dependency extraction complete
{
  "baseBranch": "main",
  "stats": {
    "managers": {
      "bazel": {
        "fileCount": 1,
        "depCount": 1
      },
      "pip_requirements": {
        "fileCount": 2,
        "depCount": 24
      }
    },
    "total": {
      "fileCount": 3,
      "depCount": 25
    }
  }
}
DEBUG: baseBranch: main
{
  "baseBranch": "main"
}
DEBUG: PackageFiles.add() - Package file saved for branch
{
  "baseBranch": "main"
}
DEBUG: Package releases lookups complete
{
  "baseBranch": "main"
}
DEBUG: branchifyUpgrades
{
  "baseBranch": "main"
}
DEBUG: 4 flattened updates found: datasets, datasets, datasets, datasets
{
  "baseBranch": "main"
}
DEBUG: Returning 2 branch(es)
{
  "baseBranch": "main"
}
DEBUG: config.repoIsOnboarded=true
{
  "baseBranch": "main"
}
DEBUG: packageFiles with updates
{
  "baseBranch": "main",
  "config": {
    "bazel": [
      {
        "packageFile": "WORKSPACE",
        "deps": [
          {
            "datasource": "github-tags",
            "depType": "http_archive",
            "depName": "rules_python",
            "packageName": "bazelbuild/rules_python",
            "currentValue": "refs",
            "managerData": {
              "def": "http_archive(\n    name = \"rules_python\",\n    sha256 = \"b593d13bb43c94ce94b483c2858e53a9b811f6f10e1e0eedc61073bd90e58d9c\",\n    strip_prefix = \"rules_python-0.12.0\",\n    url = \"https://github.com/bazelbuild/rules_python/archive/refs/tags/0.12.0.tar.gz\",\n)"
            },
            "depIndex": 0,
            "warnings": [],
            "versioning": "semver",
            "skipReason": "invalid-value",
            "updates": []
          }
        ]
      }
    ],
    "pip_requirements": [
      {
        "packageFile": "third_party/requirements.in",
        "deps": [
          {
            "depName": "datasets",
            "currentValue": "==1.11.0",
            "datasource": "pypi",
            "currentVersion": "1.11.0",
            "depIndex": 0,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/huggingface/datasets",
            "isSingleVersion": true,
            "fixedVersion": "1.11.0",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "1.18.4",
                "newValue": "==1.18.4",
                "releaseTimestamp": "2022-03-07T10:50:07.000Z",
                "newMajor": 1,
                "newMinor": 18,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/datasets-1.x"
              },
              {
                "bucket": "major",
                "newVersion": "2.4.0",
                "newValue": "==2.4.0",
                "releaseTimestamp": "2022-07-25T13:21:43.000Z",
                "newMajor": 2,
                "newMinor": 4,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/datasets-2.x"
              }
            ]
          }
        ]
      },
      {
        "packageFile": "third_party/requirements.txt",
        "deps": [
          {
            "depName": "certifi",
            "currentValue": "==2021.10.8",
            "datasource": "pypi",
            "currentVersion": "2021.10.8",
            "depIndex": 0,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/certifi/python-certifi",
            "isSingleVersion": true,
            "fixedVersion": "2021.10.8",
            "updates": [
              {
                "bucket": "major",
                "newVersion": "2022.6.15",
                "newValue": "==2022.6.15",
                "releaseTimestamp": "2022-06-15T18:09:18.000Z",
                "newMajor": 2022,
                "newMinor": 6,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/certifi-2022.x"
              }
            ]
          },
          {
            "depName": "charset-normalizer",
            "currentValue": "==2.0.12",
            "datasource": "pypi",
            "currentVersion": "2.0.12",
            "depIndex": 1,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/ousret/charset_normalizer",
            "isSingleVersion": true,
            "fixedVersion": "2.0.12",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "2.1.1",
                "newValue": "==2.1.1",
                "releaseTimestamp": "2022-08-19T22:13:46.000Z",
                "newMajor": 2,
                "newMinor": 1,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/charset-normalizer-2.x"
              }
            ]
          },
          {
            "depName": "datasets",
            "currentValue": "==1.11.0",
            "datasource": "pypi",
            "currentVersion": "1.11.0",
            "depIndex": 2,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/huggingface/datasets",
            "isSingleVersion": true,
            "fixedVersion": "1.11.0",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "1.18.4",
                "newValue": "==1.18.4",
                "releaseTimestamp": "2022-03-07T10:50:07.000Z",
                "newMajor": 1,
                "newMinor": 18,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/datasets-1.x"
              },
              {
                "bucket": "major",
                "newVersion": "2.4.0",
                "newValue": "==2.4.0",
                "releaseTimestamp": "2022-07-25T13:21:43.000Z",
                "newMajor": 2,
                "newMinor": 4,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/datasets-2.x"
              }
            ]
          },
          {
            "depName": "dill",
            "currentValue": "==0.3.1.1",
            "datasource": "pypi",
            "currentVersion": "0.3.1.1",
            "depIndex": 3,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/uqfoundation/dill",
            "isSingleVersion": true,
            "fixedVersion": "0.3.1.1",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "0.3.5.1",
                "newValue": "==0.3.5.1",
                "releaseTimestamp": "2022-05-20T11:21:11.000Z",
                "newMajor": 0,
                "newMinor": 3,
                "updateType": "patch",
                "isRange": true,
                "branchName": "renovate/dill-0.x"
              }
            ]
          },
          {
            "depName": "filelock",
            "currentValue": "==3.6.0",
            "datasource": "pypi",
            "currentVersion": "3.6.0",
            "depIndex": 4,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/tox-dev/py-filelock",
            "isSingleVersion": true,
            "fixedVersion": "3.6.0",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "3.8.0",
                "newValue": "==3.8.0",
                "releaseTimestamp": "2022-08-10T06:44:31.000Z",
                "newMajor": 3,
                "newMinor": 8,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/filelock-3.x"
              }
            ]
          },
          {
            "depName": "fsspec",
            "currentValue": "==2021.11.1",
            "datasource": "pypi",
            "currentVersion": "2021.11.1",
            "depIndex": 5,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/fsspec/filesystem_spec",
            "changelogUrl": "https://filesystem-spec.readthedocs.io/en/latest/changelog.html",
            "isSingleVersion": true,
            "fixedVersion": "2021.11.1",
            "updates": [
              {
                "bucket": "major",
                "newVersion": "2022.8.0",
                "newValue": "==2022.8.0",
                "releaseTimestamp": "2022-08-30T18:08:19.000Z",
                "newMajor": 2022,
                "newMinor": 8,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/fsspec-2022.x"
              }
            ]
          },
          {
            "depName": "huggingface-hub",
            "currentValue": "==0.0.19",
            "datasource": "pypi",
            "currentVersion": "0.0.19",
            "depIndex": 6,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/huggingface/huggingface_hub",
            "isSingleVersion": true,
            "fixedVersion": "0.0.19",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "0.9.1",
                "newValue": "==0.9.1",
                "releaseTimestamp": "2022-08-25T15:37:11.000Z",
                "newMajor": 0,
                "newMinor": 9,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/huggingface-hub-0.x"
              }
            ]
          },
          {
            "depName": "idna",
            "currentValue": "==3.3",
            "datasource": "pypi",
            "currentVersion": "3.3",
            "depIndex": 7,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/kjd/idna",
            "fixedVersion": "3.3",
            "updates": []
          },
          {
            "depName": "multiprocess",
            "currentValue": "==0.70.9",
            "datasource": "pypi",
            "currentVersion": "0.70.9",
            "depIndex": 8,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/uqfoundation/multiprocess",
            "isSingleVersion": true,
            "fixedVersion": "0.70.9",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "0.70.13",
                "newValue": "==0.70.13",
                "releaseTimestamp": "2022-05-23T22:52:42.000Z",
                "newMajor": 0,
                "newMinor": 70,
                "updateType": "patch",
                "isRange": true,
                "branchName": "renovate/multiprocess-0.x"
              }
            ]
          },
          {
            "depName": "numpy",
            "currentValue": "==1.21.3",
            "datasource": "pypi",
            "currentVersion": "1.21.3",
            "depIndex": 9,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/numpy/numpy",
            "homepage": "https://www.numpy.org",
            "isSingleVersion": true,
            "fixedVersion": "1.21.3",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "1.23.2",
                "newValue": "==1.23.2",
                "releaseTimestamp": "2022-08-14T00:14:09.000Z",
                "newMajor": 1,
                "newMinor": 23,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/numpy-1.x"
              }
            ]
          },
          {
            "depName": "packaging",
            "currentValue": "==20.9",
            "datasource": "pypi",
            "currentVersion": "20.9",
            "depIndex": 10,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/pypa/packaging",
            "isSingleVersion": true,
            "fixedVersion": "20.9",
            "updates": [
              {
                "bucket": "major",
                "newVersion": "21.3",
                "newValue": "==21.3",
                "releaseTimestamp": "2021-11-18T00:39:10.000Z",
                "newMajor": 21,
                "newMinor": 3,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/packaging-21.x"
              }
            ]
          },
          {
            "depName": "pandas",
            "currentValue": "==1.4.2",
            "datasource": "pypi",
            "currentVersion": "1.4.2",
            "depIndex": 11,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/pandas-dev/pandas",
            "homepage": "https://pandas.pydata.org",
            "isSingleVersion": true,
            "fixedVersion": "1.4.2",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "1.4.3",
                "newValue": "==1.4.3",
                "releaseTimestamp": "2022-06-23T13:30:09.000Z",
                "newMajor": 1,
                "newMinor": 4,
                "updateType": "patch",
                "isRange": true,
                "branchName": "renovate/pandas-1.x"
              }
            ]
          },
          {
            "depName": "pyarrow",
            "currentValue": "==5.0.0",
            "datasource": "pypi",
            "currentVersion": "5.0.0",
            "depIndex": 12,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/apache/arrow",
            "homepage": "https://arrow.apache.org/",
            "isSingleVersion": true,
            "fixedVersion": "5.0.0",
            "updates": [
              {
                "bucket": "major",
                "newVersion": "9.0.0",
                "newValue": "==9.0.0",
                "releaseTimestamp": "2022-08-03T10:45:55.000Z",
                "newMajor": 9,
                "newMinor": 0,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/pyarrow-9.x"
              }
            ]
          },
          {
            "depName": "pyparsing",
            "currentValue": "==2.4.7",
            "datasource": "pypi",
            "currentVersion": "2.4.7",
            "depIndex": 13,
            "warnings": [],
            "versioning": "pep440",
            "isSingleVersion": true,
            "fixedVersion": "2.4.7",
            "updates": [
              {
                "bucket": "major",
                "newVersion": "3.0.9",
                "newValue": "==3.0.9",
                "releaseTimestamp": "2022-05-10T23:26:03.000Z",
                "newMajor": 3,
                "newMinor": 0,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/pyparsing-3.x"
              }
            ]
          },
          {
            "depName": "python-dateutil",
            "currentValue": "==2.8.2",
            "datasource": "pypi",
            "currentVersion": "2.8.2",
            "depIndex": 14,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/dateutil/dateutil",
            "fixedVersion": "2.8.2",
            "updates": []
          },
          {
            "depName": "pytz",
            "currentValue": "==2022.1",
            "datasource": "pypi",
            "currentVersion": "2022.1",
            "depIndex": 15,
            "warnings": [],
            "versioning": "pep440",
            "homepage": "http://pythonhosted.org/pytz",
            "isSingleVersion": true,
            "fixedVersion": "2022.1",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "2022.2.1",
                "newValue": "==2022.2.1",
                "releaseTimestamp": "2022-08-13T02:07:57.000Z",
                "newMajor": 2022,
                "newMinor": 2,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/pytz-2022.x"
              }
            ]
          },
          {
            "depName": "pyyaml",
            "currentValue": "==5.4.1",
            "datasource": "pypi",
            "currentVersion": "5.4.1",
            "depIndex": 16,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/yaml/pyyaml",
            "homepage": "https://pyyaml.org/",
            "isSingleVersion": true,
            "fixedVersion": "5.4.1",
            "updates": [
              {
                "bucket": "major",
                "newVersion": "6.0",
                "newValue": "==6.0",
                "releaseTimestamp": "2021-10-13T19:39:42.000Z",
                "newMajor": 6,
                "newMinor": 0,
                "updateType": "major",
                "isRange": true,
                "branchName": "renovate/pyyaml-6.x"
              }
            ]
          },
          {
            "depName": "requests",
            "currentValue": "==2.27.1",
            "datasource": "pypi",
            "currentVersion": "2.27.1",
            "depIndex": 17,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/psf/requests",
            "homepage": "https://requests.readthedocs.io",
            "changelogUrl": "https://github.com/psf/requests/blob/master/HISTORY.md",
            "isSingleVersion": true,
            "fixedVersion": "2.27.1",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "2.28.1",
                "newValue": "==2.28.1",
                "releaseTimestamp": "2022-06-29T15:13:40.000Z",
                "newMajor": 2,
                "newMinor": 28,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/requests-2.x"
              }
            ]
          },
          {
            "depName": "six",
            "currentValue": "==1.16.0",
            "datasource": "pypi",
            "currentVersion": "1.16.0",
            "depIndex": 18,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/benjaminp/six",
            "fixedVersion": "1.16.0",
            "updates": []
          },
          {
            "depName": "tqdm",
            "currentValue": "==4.63.0",
            "datasource": "pypi",
            "currentVersion": "4.63.0",
            "depIndex": 19,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/tqdm/tqdm",
            "homepage": "https://tqdm.github.io",
            "changelogUrl": "https://tqdm.github.io/releases",
            "isSingleVersion": true,
            "fixedVersion": "4.63.0",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "4.64.0",
                "newValue": "==4.64.0",
                "releaseTimestamp": "2022-04-04T01:48:46.000Z",
                "newMajor": 4,
                "newMinor": 64,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/tqdm-4.x"
              }
            ]
          },
          {
            "depName": "typing-extensions",
            "currentValue": "==4.1.1",
            "datasource": "pypi",
            "currentVersion": "4.1.1",
            "depIndex": 20,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/python/typing_extensions",
            "changelogUrl": "https://github.com/python/typing_extensions/blob/main/CHANGELOG.md",
            "isSingleVersion": true,
            "fixedVersion": "4.1.1",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "4.3.0",
                "newValue": "==4.3.0",
                "releaseTimestamp": "2022-07-01T14:56:11.000Z",
                "newMajor": 4,
                "newMinor": 3,
                "updateType": "minor",
                "isRange": true,
                "branchName": "renovate/typing-extensions-4.x"
              }
            ]
          },
          {
            "depName": "urllib3",
            "currentValue": "==1.26.8",
            "datasource": "pypi",
            "currentVersion": "1.26.8",
            "depIndex": 21,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/urllib3/urllib3",
            "homepage": "https://urllib3.readthedocs.io/",
            "isSingleVersion": true,
            "fixedVersion": "1.26.8",
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "1.26.12",
                "newValue": "==1.26.12",
                "releaseTimestamp": "2022-08-22T13:27:19.000Z",
                "newMajor": 1,
                "newMinor": 26,
                "updateType": "patch",
                "isRange": true,
                "branchName": "renovate/urllib3-1.x"
              }
            ]
          },
          {
            "depName": "xxhash",
            "currentValue": "==3.0.0",
            "datasource": "pypi",
            "currentVersion": "3.0.0",
            "depIndex": 22,
            "warnings": [],
            "versioning": "pep440",
            "sourceUrl": "https://github.com/ifduyue/python-xxhash",
            "fixedVersion": "3.0.0",
            "updates": []
          }
        ]
      }
    ]
  }
}
DEBUG: processRepo()
DEBUG: Processing 2 branches: renovate/datasets-1.x, renovate/datasets-2.x
DEBUG: Calculating hourly PRs remaining
DEBUG: getPrList success
{
  "pullsTotal": 1,
  "requestsTotal": 1,
  "apiQuotaAffected": true
}
DEBUG: currentHourStart=2022-08-31T02:00:00.000+00:00
DEBUG: PR hourly limit remaining: 2
DEBUG: Calculating prConcurrentLimit (10)
DEBUG: getBranchPr(renovate/datasets-1.x)
DEBUG: findPr(renovate/datasets-1.x, undefined, open)
DEBUG: Found PR #2
DEBUG: getBranchPr(renovate/datasets-2.x)
DEBUG: findPr(renovate/datasets-2.x, undefined, open)
DEBUG: findPr(renovate/datasets-2.x, undefined, closed)
DEBUG: 1 PRs are currently open
DEBUG: PR concurrent limit remaining: 9
DEBUG: Calculated maximum PRs remaining this run
{
  "prsRemaining": 2
}
DEBUG: PullRequests limit = 2
DEBUG: Calculating hourly PRs remaining
DEBUG: currentHourStart=2022-08-31T02:00:00.000+00:00
DEBUG: PR hourly limit remaining: 2
DEBUG: Calculating branchConcurrentLimit (10)
DEBUG: 1 already existing branches found: renovate/datasets-1.x
DEBUG: Branch concurrent limit remaining: 9
DEBUG: Calculated maximum branches remaining this run
{
  "branchesRemaining": 2
}
DEBUG: Branches limit = 2
DEBUG: Branch fingerprint is unchanged, updates check can be skipped(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: getBranchPr(renovate/datasets-1.x)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: findPr(renovate/datasets-1.x, undefined, open)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Found PR #2(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: branchExists=true(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: dependencyDashboardCheck=undefined(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: PR rebase requested=false(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Checking if PR has been edited(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Found existing branch PR(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Checking schedule(after 10pm every weekday,before 4am every weekday, America/Chihuahua)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Found timezone(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "timezone": "America/Chihuahua"
}
DEBUG: Adjusting now for timezone(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Checking 2 schedule(s)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Checking schedule "after 10pm every weekday"(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "parsedSchedule": {
    "schedules": [
      {
        "t_a": [
          79200
        ],
        "d": [
          2,
          3,
          4,
          5,
          6
        ]
      }
    ],
    "exceptions": [],
    "error": -1
  }
}
DEBUG: Checking schedule "before 4am every weekday"(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "parsedSchedule": {
    "schedules": [
      {
        "t_b": [
          14400
        ],
        "d": [
          2,
          3,
          4,
          5,
          6
        ]
      }
    ],
    "exceptions": [],
    "error": -1
  }
}
DEBUG: Package not scheduled(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Branch + PR exists but is not scheduled -- will update if necessary(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Branch already exists(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: getBranchPr(renovate/datasets-1.x)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: findPr(renovate/datasets-1.x, undefined, open)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Found PR #2(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Branch is behind base branch and needs rebasing(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Branch is unmodified, so can be rebased(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Using reuseExistingBranch: false(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Setting current branch to main(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Initializing git repository into /mnt/renovate/gh/corypaik/renovate-loop(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Performing blobless clone(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: git clone completed(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "durationMs": 1449
}
DEBUG: latest repository commit(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "latestCommit": {
    "hash": "5267848cc1c6b6dfb1d031f573b25d2ab36ebc82",
    "date": "2022-08-30T20:06:50-06:00",
    "message": "ci: always run pip lockfile step",
    "refs": "HEAD -> main, origin/main, origin/HEAD",
    "body": "",
    "author_name": "Cory Paik",
    "author_email": "[email protected]"
  }
}
DEBUG: latest commit(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "branchName": "main",
  "latestCommitDate": "2022-08-30T20:06:50-06:00"
}
DEBUG: manager.getUpdatedPackageFiles() reuseExistingBranch=false(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Starting search at index 527(packageFile="third_party/requirements.txt", branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "depName": "datasets"
}
DEBUG: Found match at index 527(packageFile="third_party/requirements.txt", branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "depName": "datasets"
}
DEBUG: Contents updated(packageFile="third_party/requirements.txt", branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "depName": "datasets"
}
DEBUG: Starting search at index 8(packageFile="third_party/requirements.in", branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "depName": "datasets"
}
DEBUG: Found match at index 8(packageFile="third_party/requirements.in", branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "depName": "datasets"
}
DEBUG: Contents updated(packageFile="third_party/requirements.in", branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "depName": "datasets"
}
DEBUG: pip_requirements.updateArtifacts(third_party/requirements.txt)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Setting BUILDPACK_CACHE_DIR to /tmp/containerbase(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Using docker to execute(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "image": "sidecar"
}
DEBUG: Resolved stable matching version(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "toolName": "python",
  "resolvedVersion": "3.10.6"
}
DEBUG: containerbaseDir is separate from cacheDir(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: No tag or tagConstraint specified(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "image": "docker.io/renovate/sidecar"
}
DEBUG: Fetching Docker image: docker.io/renovate/sidecar(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Finished fetching Docker image docker.io/renovate/sidecar@sha256:ee8108a5a17ef370f15da2c11bf7b2da9035153fde1587118ac9cc5c6c56cf0a(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Executing command(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "command": "docker run --rm --name=renovate_sidecar --label=renovate_child -v \"/mnt/renovate/gh/corypaik/renovate-loop\":\"/mnt/renovate/gh/corypaik/renovate-loop\" -v \"/tmp/renovate-cache\":\"/tmp/renovate-cache\" -v \"/tmp/containerbase\":\"/tmp/containerbase\" -e PIP_CACHE_DIR -e BUILDPACK_CACHE_DIR -w \"/mnt/renovate/gh/corypaik/renovate-loop\" docker.io/renovate/sidecar bash -l -c \"install-tool python 3.10.6 && pip install --user hashin && hashin datasets==1.18.4 -r third_party/requirements.txt\""
}
DEBUG: exec completed(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "cmd": "docker run --rm --name=renovate_sidecar --label=renovate_child -v \"/mnt/renovate/gh/corypaik/renovate-loop\":\"/mnt/renovate/gh/corypaik/renovate-loop\" -v \"/tmp/renovate-cache\":\"/tmp/renovate-cache\" -v \"/tmp/containerbase\":\"/tmp/containerbase\" -e PIP_CACHE_DIR -e BUILDPACK_CACHE_DIR -w \"/mnt/renovate/gh/corypaik/renovate-loop\" docker.io/renovate/sidecar bash -l -c \"install-tool python 3.10.6 && pip install --user hashin && hashin datasets==1.18.4 -r third_party/requirements.txt\"",
  "durationMs": 27296,
  "stdout": "installing v2 tool python v3.10.6\nUsing prebuild python\nRequirement already satisfied: pip in /opt/buildpack/tools/python/3.10.6/lib/python3.10/site-packages (22.2.1)\nCollecting pip\n  Downloading pip-22.2.2-py3-none-any.whl (2.0 MB)\n     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 21.0 MB/s eta 0:00:00\nInstalling collected packages: pip\n  Attempting uninstall: pip\n    Found existing installation: pip 22.2.1\n    Uninstalling pip-22.2.1:\n      Successfully uninstalled pip-22.2.1\nSuccessfully installed pip-22.2.2\nFiles removed: 2\nlinking tool python v3.10.6\nPython 3.10.6\npip 22.2.2 from /opt/buildpack/tools/python/3.10.6/lib/python3.10/site-packages/pip (python 3.10)\nInstalled v2 /usr/local/buildpack/tools/v2/python.sh in 20 seconds\nCollecting hashin\n  Downloading hashin-0.17.0-py2.py3-none-any.whl (16 kB)\nCollecting pip-api\n  Downloading pip_api-0.0.30-py3-none-any.whl (111 kB)\n     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 111.6/111.6 kB 5.9 MB/s eta 0:00:00\nCollecting packaging\n  Downloading packaging-21.3-py3-none-any.whl (40 kB)\n     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 kB 4.7 MB/s eta 0:00:00\nCollecting pyparsing!=3.0.5,>=2.0.2\n  Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)\n     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 11.1 MB/s eta 0:00:00\nRequirement already satisfied: pip in /opt/buildpack/tools/python/3.10.6/lib/python3.10/site-packages (from pip-api->hashin) (22.2.2)\nInstalling collected packages: pyparsing, pip-api, packaging, hashin\nSuccessfully installed hashin-0.17.0 packaging-21.3 pip-api-0.0.30 pyparsing-3.0.9\n",
  "stderr": "Found file in cache: /tmp/containerbase/f79e18f004c2278a4c76a549ca9e8beed6ee66d17e187e79a230ba06836df191/python-3.10.6-focal-x86_64.tar.xz\n"
}
DEBUG: Returning updated third_party/requirements.txt(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: pip_requirements.updateArtifacts(third_party/requirements.in)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: No hashin commands to run - returning(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Updated 2 package files(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Updated 1 lock files(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "updatedArtifacts": [
    "third_party/requirements.txt"
  ]
}
DEBUG: Getting comments for #2(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Found 0 comments(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: isBranchConflicted(main, renovate/datasets-1.x)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Using cached result false for isBranchConflicted(main, renovate/datasets-1.x)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: 2 file(s) to commit(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Preparing files for committing to branch renovate/datasets-1.x(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Setting git author name(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "gitAuthorName": "Renovate Bot"
}
DEBUG: Setting git author email(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "gitAuthorEmail": "[email protected]"
}
DEBUG: git commit(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "deletedFiles": [],
  "ignoredFiles": [],
  "result": {
    "author": null,
    "branch": "renovate/datasets-1.x",
    "commit": "210146775398f010baed48f2e6891d780406efa2",
    "root": false,
    "summary": {
      "changes": 2,
      "insertions": 4,
      "deletions": 4
    }
  }
}
DEBUG: resetToCommit(5267848cc1c6b6dfb1d031f573b25d2ab36ebc82)(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Fetching branch renovate/datasets-1.x(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
INFO: Branch updated(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "commitSha": "78dae2cf45f995142afb48597777d62fa9677a1f"
}
DEBUG: Updating renovate/stability-days status check state to green(branch="renovate/datasets-1.x")
{
  "baseBranch": "main"
}
DEBUG: Setting branch status(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "context": "renovate/stability-days",
  "state": "green"
}
DEBUG: Branch status pending(branch="renovate/datasets-1.x")
{
  "baseBranch": "main",
  "commitSha": "78dae2cf45f995142afb48597777d62fa9677a1f"
}
DEBUG: getBranchPr(renovate/datasets-2.x)(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: findPr(renovate/datasets-2.x, undefined, open)(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: findPr(renovate/datasets-2.x, undefined, closed)(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: branchExists=false(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: dependencyDashboardCheck=undefined(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: recreateClosed is false(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: findPr(renovate/datasets-2.x, build: update dependency datasets to v2, !open)(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: prAlreadyExisted=false(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: Checking schedule(after 10pm every weekday,before 4am every weekday, America/Chihuahua)(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: Found timezone(branch="renovate/datasets-2.x")
{
  "baseBranch": "main",
  "timezone": "America/Chihuahua"
}
DEBUG: Adjusting now for timezone(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: Checking 2 schedule(s)(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: Checking schedule "after 10pm every weekday"(branch="renovate/datasets-2.x")
{
  "baseBranch": "main",
  "parsedSchedule": {
    "schedules": [
      {
        "t_a": [
          79200
        ],
        "d": [
          2,
          3,
          4,
          5,
          6
        ]
      }
    ],
    "exceptions": [],
    "error": -1
  }
}
DEBUG: Checking schedule "before 4am every weekday"(branch="renovate/datasets-2.x")
{
  "baseBranch": "main",
  "parsedSchedule": {
    "schedules": [
      {
        "t_b": [
          14400
        ],
        "d": [
          2,
          3,
          4,
          5,
          6
        ]
      }
    ],
    "exceptions": [],
    "error": -1
  }
}
DEBUG: Package not scheduled(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: Skipping branch creation as not within schedule(branch="renovate/datasets-2.x")
{
  "baseBranch": "main"
}
DEBUG: getBranchPr(renovate/datasets-1.x)
DEBUG: findPr(renovate/datasets-1.x, undefined, open)
DEBUG: Found PR #2
DEBUG: Ensuring Dependency Dashboard
DEBUG: ensureIssue(Dependency Dashboard)
DEBUG: Patching issue
DEBUG: Issue updated
DEBUG: Removing any stale branches
DEBUG: config.repoIsOnboarded=true
DEBUG: Branch lists
{
  "branchList": [
    "renovate/datasets-1.x",
    "renovate/datasets-2.x"
  ],
  "renovateBranches": [
    "renovate/datasets-1.x"
  ]
}
DEBUG: remainingBranches=
DEBUG: No branches to clean up
DEBUG: Cleaning up Renovate refs: refs/renovate/*
DEBUG: PackageFiles.clear() - Package files deleted
{
  "baseBranches": [
    "main"
  ]
}
DEBUG: Renovate repository PR statistics
{
  "stats": {
    "total": 1,
    "open": 1,
    "closed": 0,
    "merged": 0
  }
}
DEBUG: Repository result: done, status: onboarded, enabled: true, onboarded: true
DEBUG: Repository timing splits (milliseconds)
{
  "splits": {
    "init": 3599,
    "extract": 494,
    "lookup": 2772,
    "onboarding": 0,
    "update": 35845
  },
  "total": 45597
}
DEBUG: http statistics
{
  "urls": {
    "https://api.github.com/graphql (POST,200)": 2,
    "https://api.github.com/repos/corypaik/renovate-loop/commits/78dae2cf45f995142afb48597777d62fa9677a1f/statuses (GET,200)": 2,
    "https://api.github.com/repos/corypaik/renovate-loop/commits/renovate/datasets-1.x/status (GET,200)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/contents/renovate.json (GET,200)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/git/commits (POST,201)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/git/refs/heads/renovate/datasets-1.x (PATCH,200)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/git/trees (POST,201)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/issues/1 (GET,200)": 2,
    "https://api.github.com/repos/corypaik/renovate-loop/issues/1 (PATCH,200)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/issues/2/comments (GET,200)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/pulls (GET,200)": 1,
    "https://api.github.com/repos/corypaik/renovate-loop/statuses/78dae2cf45f995142afb48597777d62fa9677a1f (POST,201)": 1,
    "https://api.github.com/repos/whitesource/merge-confidence/contents/beta.json (GET,200)": 1,
    "https://pypi.org/pypi/certifi/json (GET,200)": 1
  },
  "hostStats": {
    "api.github.com": {
      "requestCount": 16,
      "requestAvgMs": 269,
      "queueAvgMs": 0
    },
    "pypi.org": {
      "requestCount": 1,
      "requestAvgMs": 989,
      "queueAvgMs": 0
    }
  },
  "totalRequests": 17
}
INFO: Repository finished
{
  "durationMs": 45597
}

Have you created a minimal reproduction repository?

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

@corypaik corypaik added priority-5-triage status:requirements Full requirements are not yet known, so implementation should not be started type:bug Bug fix of existing functionality labels Aug 31, 2022
@rarkins rarkins added the auto:reproduction A minimal reproduction is necessary to proceed label Aug 31, 2022
@rarkins
Copy link
Collaborator

rarkins commented Aug 31, 2022

Please reduce to a minimal reproduction

@github-actions
Copy link
Contributor

Hi there,

Get your issue fixed faster by creating a minimal reproduction. This means a repository dedicated to reproducing this issue with the minimal dependencies and config possible.

Before we start working on your issue we need to know exactly what's causing the current behavior. A minimal reproduction helps us with this.

To get started, please read our guide on creating a minimal reproduction.

We may close the issue if you, or someone else, haven't created a minimal reproduction within two weeks. If you need more time, or are stuck, please ask for help or more time in a comment.

Good luck,

The Renovate team

@viceice
Copy link
Member

viceice commented Aug 31, 2022

  • Use pip-compile manager, so renovate will update the lockfiles for you.
  • Do not use fixup, push a seperate commit. Renovate don't expect his own commits to be changed.

@rarkins
Copy link
Collaborator

rarkins commented Aug 31, 2022

I think pip-compile is used as a workaround for current bazel + pip-compile limitations. But do agree with the idea of pushing a separate commit.

@corypaik
Copy link
Author

Thanks for following up on this issue!

Please reduce to a minimal reproduction

Sorry, I was under the impression that this might be minimal enough by only having the 1 dependency and no custom rules but I will continue to refactor it today and will let you know once I'm done.

Use pip-compile manager, so renovate will update the lockfiles for you.

Thanks, I will look into this as I was not aware of the pip-compile manager. Under the hood that's what half of what the ci bot does. Unfortunately there is also a gazelle python manifest that needs to be updated. I will refactor the repository to use the pip-compile manager and see if the issue persists when only updating the python gazelle manifest.

Do not use fixup, push a separate commit. Renovate don't expect his own commits to be changed.

I'm aware of the fact that renovate does not expect its commits to be changed, but fixup commits are separate commits. The command git commit --fixup HEAD simply formats the commit message as 'fixup! [renovate commit message]". For example, in the repo I linked, renovate's commit was "build: update dependency datasets to v1.18.4" and the ci bot's commit was "fixup! build: update dependency datasets to v1.18.4". In this example, fixup commits are really just a convention. This used to work just fine and I've been using this method since February.

@corypaik
Copy link
Author

I've I tried a few different tests to hopefully help narrow down the issue. I've summarized my findings here, and there are also instructions for reproduction in the readme. If there is anything else I can do to help, please let me know and I'd be happy to.

I tried a few different tests. Each one performs the same change (adding an empty file). Changing from using a fixup commit message to a different commit message does not change the observed behavior. This seems to mean that renovate overwrites changes by gitIgnoredAuthors even when the branch is up to date, regardless of what the change is. I also found that if rebaseWhen is omitted, then we see the expected behavior for gitIgnoredAuthors. The orginal configuration uses rebaseWhen as behind-base-branch.

Action Expected Outcome Current Outcome
A fixup commit from an author not in gitIgnoredAuthors Marked as edited/blocked Marked as edited/blocked
A non-fixup commit from an author not in gitIgnoredAuthors Marked as edited/blocked Marked as edited/blocked
A fixup commit from an author in gitIgnoredAuthors No Action Overwrites changes
A non-fixup commit from an author in gitIgnoredAuthors No Action Overwrites changes
A fixup commit from an author in gitIgnoredAuthors with rebaseWhen omitted No Action No Action
A non-fixup commit from an author in gitIgnoredAuthors with rebaseWhen omitted No Action No Action

@rarkins
Copy link
Collaborator

rarkins commented Sep 1, 2022

When a git author is ignored, the bot treats the branch as "unmodified", meaning it's ok to automatically rebase. If the branch were modified then all rebaseWhen= would be irrelevant.

Then, Renovate looks at the HEAD^1 commit to see if it matches the base branch SHA and if it does not then uses that as a shortcut that it's behind base branch.

For now I'm going to say that rebaseWhen=behind-base-branch is not compatible with ignored commits on top of Renovate's. It's not an impossible problem to solve, but would require some changes to our logic, including cache logic.

Cc @RahulGautamSingh

@lo1tuma
Copy link
Contributor

lo1tuma commented Sep 1, 2022

I’ve also noticed a similar behavior. Using a self-hosted renovate instance on a self-hosted gitlab instance. I’ve configured rebaseWhen explicitly to behind-base-branch and gitIgnoredAuthors are not set/configured at all. I’ve one branch created by renovate where I pushed like 10 additional commits to it from my personal git user. And everytime there is a new version of the dependency renovate force pushes its changes with the new version to the same branch that has been edited.

@RahulGautamSingh
Copy link
Collaborator

RahulGautamSingh commented Sep 6, 2022

My understanding:
When a new commit is, added by a gitIgnoredAuthor and the branch is up-to-date, then the bot thinks the update branch is:

  1. not modified
  2. not behind base
  3. not conflicted

Thus reuseExistingBranch-> true and, we don't rebase.

But in reality, we are rebasing the branch which. The reason is a fault in caching logic which leads toisBranchBehindBase returning true.

Reason whyisBranchBehindBase returns true:
We are comparing the wrong SHA here parentSha instead of baseBranchSha

parentSha -> parent commit of the latest branch commit

So it changes with a new commit to the update branch, thus the infinite loops🙃

We needed to use 'baseBranchSha' however due to similar names, I became confused and used parentSha in the previous PR.

A fix is on the way.✌

Reproduction: RahulGautamSingh-testing/reporoduce-17528#1
After fix-applied: RahulGautamSingh-testing/fix-17528#1

@rarkins rarkins added status:in-progress Someone is working on implementation priority-3-medium Default priority, "should be done" but isn't prioritised ahead of others regression Issue about a regression bug, or the PR caused it and removed status:requirements Full requirements are not yet known, so implementation should not be started priority-5-triage labels Sep 6, 2022
@RahulGautamSingh RahulGautamSingh removed the auto:reproduction A minimal reproduction is necessary to proceed label Sep 6, 2022
@renovate-release
Copy link
Collaborator

🎉 This issue has been resolved in version 32.219.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Nov 6, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
priority-3-medium Default priority, "should be done" but isn't prioritised ahead of others regression Issue about a regression bug, or the PR caused it status:in-progress Someone is working on implementation type:bug Bug fix of existing functionality
Projects
None yet
6 participants