ci: switch from dependabot to renovate - #244
Conversation
2106677 to
aea74c7
Compare
|
Decision on #260: it is replaced by this PR, not merged. #260 is Renovate's onboarding PR and carries only the default configuration, so this PR is the vehicle for the config we actually want. Order matters, so: merge this PR first, then close #260 unmerged. Renovate decides whether a repository is onboarded in Closing #260 first would instead hit the other path, because there is no config file on This also drops the alternative I raised earlier, of pushing this config into #260's Two other things while this is in review, both deliberate:
|
Dependabot has no pixi support, so
pixi.lockis never refreshed when a dependency PR changespyproject.toml. Because pixi validates the lock file against the manifest, a stalepixi.lockbreaksruff.yml, the workflow that uses pixi. Renovate runsuv lockandpixi lockfor the same update, so both lock files stay in step with the manifest.This mirrors substrait-io/substrait#1075, which makes the same switch for the spec repo. The two configs differ only where the repos differ: the
pre-commitmanager is enabled there because that repo has no pre-commit.ci, whereas ours is already autoupdated by theci:block in.pre-commit-config.yaml, and thesubstraitgroup and thedeps-devscope rule are specific to this repo.renovate.json, porting the existing dependabot configuration..github/dependabot.ymlto disable dependabot.minimumReleaseAge), so a compromised or broken release has time to be caught, following the cooldown advice in https://pixi.prefix.dev/latest/security/#2-exclude-newer.pr_title.yml. The dependabot patterns stay while chore(deps): bump the substrait group across 1 directory with 3 updates #254 is open, or the PR title check would start failing on it.How the dependabot configuration maps across
.github/dependabot.ymlrenovate.jsongithub-actions, weeklylockFileMaintenanceruns weeklyuvecosystem, weeklypep621manager, which drives bothuv.lockandpixi.locksubstraitgroup (3 packages)matchPackageNames,groupName: substrait packagesdockerin/.devcontainerdockerfilemanagercommit-message: {prefix: chore, include: scope}semanticCommitType: chore+ adeps-devscope ruleminimumReleaseAge: 14 days, exempting thesubstraitgroup:semanticCommitTypeAll(chore)inextendsis what makes thatchoretype stick:config:recommendedwould otherwise assignfixto some dependency updates, and afixmakes semantic-release cut a patch release from a dependency bump.The
substraitgroup is mandatory rather than cosmetic.version-checks.ymlrunscheck_substrait_package_versions.shon every PR, which fails unlesssubstrait-protobuf,substrait-antlrandsubstrait-extensionsall report the same version. Ungrouped, Renovate would raise three separate PRs and each one would fail CI.That group is also exempt from the cooldown, with
minimumReleaseAge: nullon the same rule. We publish those three packages ourselves, usually right after a spec release, so there is no third-party release for the ecosystem to vet and the cooldown would only delay adopting our own spec bump by two weeks.What changes about the PRs we receive
Renovate covers ground our dependabot configuration did not, so expect a batch of new PRs on the first run: the conda dependency in
[tool.pixi.dependencies], which dependabot'suvecosystem never looked at, and thepixi-versionpinned in our workflows, which Renovate picks up from theprefix-dev/setup-pixiinputs in addition to the action itself.Dependencies declared as ranges only get a PR once the new version falls outside the range, so a quiet dependency is expected rather than a sign that something is broken — as is a release still inside the 14-day cooldown, which appears on the Dependency Dashboard instead of as a PR.
lockFileMaintenancecovers the rest by refreshing the transitive pins in both lock files weekly, and Renovate leaves the cooldown out of those updates because the package manager chooses the versions itself. Putting a cooldown on the transitive pins therefore needs pixi's[tool.pixi.workspace] exclude-newerand uv'sexclude-newer, a follow-up here and in the spec repo.