Repository navigation
ci: add Renovate for weekly dependency updates - #141
Merged
Merged
Conversation
- Renovate covers the version catalog, the Gradle wrapper and the pinned actions, and can date Google Maven releases, so one tool handles every update. - New branches only on Fridays in Asia/Dhaka, the whole day, because the hosted app runs a repository with no merged Renovate pull request only once a day. - Releases wait 14 days and undated ones wait too, while security fixes from Dependabot alerts and OSV skip the wait. - Kotlin and KSP share a pull request, and detekt and compose-rules share one that waits for approval, because each compose-rules release is built for one detekt version. - The JDK version in setup-java stays out, because the build needs JDK 17. - Custom managers update ktfmt and Gummy Bears, which have no library entry, and the catalog comments say so, so the keys keep their format. - Gradle titles start with build: and Actions titles with ci:, for the changelog. Nothing automerges.
- AGENTS.md's dependency rule now says to wait 14 days after a release unless it fixes a security issue, which was only in pull request text. - docs/testing.md explains what Renovate updates, when, the limits, the groups, the security exception, rebasing, and how to fix an update pull request. - CONTRIBUTING.md points contributors to Renovate's pull requests instead of hand-made version bumps. - AGENTS.md gains the renovate.json validator command, and architecture.md and AndroidLint.kt point to Renovate instead of #31.
- ktfmt 0.65 is published as org.jetbrains.kotlinx:ktfmt, and com.facebook:ktfmt stops at 0.64, so the custom manager looks up the new coordinates. Renovate keeps 0.64 as the current version there. - Only Spotless 8.10.4 or later loads the new coordinates, so Spotless and ktfmt share one pull request, which notes the spotlessApply fix. - The catalog comment says why the two move together.
- The Phase 2 task and the CI reference now name Renovate, and say the project has four GitHub Actions workflows plus Renovate's weekly pull requests, which workflow 1 tests, matching docs/testing.md. - docs/testing.md lists Spotless and ktfmt as a group and says why.
- Renovate drops group members that are still inside the 14 days, so a ktfmt release can arrive without the Spotless release that loads it. The reviewer found this, and docs/testing.md now says what happens.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #31.
What changed and why
Renovate will open the weekly dependency update pull requests. It runs as the hosted Mend Renovate app, which the maintainer installs after this merges. Nothing is installed or turned on by this pull request.
renovate.json
timestamp-required,internalChecksFilter: strict). Security fixes skip the wait and the schedule. Renovate finds them in Dependabot alerts, which are on, and in the OSV database (osvVulnerabilityAlerts, which Renovate marks experimental). A security release that neither lists can be created from the Dependency Dashboard's "Pending Status Checks" section.org.jetbrains.kotlinx:ktfmt(v0.65 notes), which only Spotless 8.10.4 or later can load (diffplug/spotless#3135). The ktfmt custom manager looks up the new coordinates. detekt with compose-rules, which also waits for the maintainer's approval on the Dependency Dashboard. Entries that share a catalog version, such as Hilt, Room, AGP, detekt and the coroutines libraries, are grouped automatically.ignoreUnstableoffers detekt the next 2.0.0 alpha, a beta or 2.0.0, and gives every other dependency stable releases only.build:for Gradle andci:for Actions, with no scope.rebaseWhen: behind-base-branch, because the ruleset requires an up-to-date branch. At most five open pull requests, with no hourly limit. No automerge.The Gradle wrapper. Renovate's gradle-wrapper manager fetches the new checksum and writes
distributionSha256Sumbefore it runs./gradlew :wrapper(artifacts.ts). A failure of that task is only logged as a warning (L202-L213). The whole step needsgradleWrapperin the server'sallowedUnsafeExecutions(L156-L162). Hosted-app pull requests show the app allows it: spockframework/spock#2436 and TNG/property-loader#296 changeddistributionSha256Sumin files laid out like ours. So no Dependabot config is needed.Docs
Checks run locally
npx --yes --package renovate@44.140.0 -- renovate-config-validator --strict: "Config validated successfully against 1 file(s)". A scratch copy with a misspelled option failed with "Invalid configuration option", so the check works.uvx check-jsonschema@0.38.2 --builtin-schema vendor.renovate renovate.json: "ok -- validation done".ktfmt = "0.64"andgummyBears = "0.15.0", tested with Node.renovate@44.140.0 --platform=local --dry-run=lookup, with its cache outside the repo) detected the catalog libraries and plugins, the Compose BOM, the wrapper, the runner, ktfmt and Gummy Bears. Every proposed update from Google Maven, Maven Central, the Gradle Plugin Portal and services.gradle.org had a release timestamp. It skipped the four actions, because a local run has no GitHub token. The setup-java JDK version showed as disabled../gradlew spotlessCheck detekt: passed.renovate 44.140.0 came out on 2026-10-06 and check-jsonschema 0.38.2 on 2026-09-23, both at least 14 days ago.
What to expect. By Friday 2026-10-23 these updates are past 14 days: Kotlin 2.4.21, Spotless 8.10.4 with ktfmt 0.65 in one pull request, Gummy Bears 0.16.0 and upload-artifact v7.0.2. Spotless 8.10.4's 14 days end at about 10:33 Asia/Dhaka that Friday, counting Renovate's 30-minute buffer. If Renovate runs before then, the group starts with ktfmt alone and Spotless joins on the next run. The ubuntu-26.04 runner update waits until the hosted app runs a Renovate release with runner release dates (renovatebot/renovate#46885, 2026-10-19). compose-rules 0.6.8 waits for approval. setup-java v6.1.0, kotlinx-serialization 1.12.0 and Gradle 9.8.2 are still in their 14 days. AGP, Kotlin, AndroidX and Room pre-releases are not offered.
New dependencies
No dependency of the app or the build. Two tools that never ship:
Checklist
Reviewer
Final verdict: Ready
java-version: 17, so a JDK 25 update could be approved by mistake. Now turned off. Should fix: the AGP rule's group name added nothing, the PR limits weren't documented, the validator's Node version was missing, and the commit message misstated how often the hosted app runs. All fixed. A note about the runner image was checked and left as it is.🤖 Generated with Claude Code