Repository navigation
chore: issue forms, pinned runner image and build hygiene - #255
Conversation
PRECOMMIT_GRADLE replaces ./gradlew in the hook, so a caller can route the spotlessCheck and detekt run through a wrapper such as a build queue. Unset, the hook runs ./gradlew as before.
Bug and feature forms collect version, install source, device and reproduction steps as required fields. Blank issues are disabled and questions go to Discussions Q&A.
ubuntu-latest moves to a new image without notice and can change the preinstalled toolchain under a green build. A pinned label turns the image switch into an explicit Renovate update whose CI run proves it.
The exclusion list now matches only generated code: data binding, BuildConfig, Hilt and Dagger output, the *.di.* modules, Room *_Impl classes and Compose ComposableSingletons. Hand-written classes that were excluded by name count toward coverage again. Measured debug coverage is 98.25% instructions (11060/11257) and 97.09% branches (334/344), so the verify floors move to 98 and 97.
The issue forms in .github/ISSUE_TEMPLATE replace the unused default bug, feature and custom Markdown templates in the root ISSUE_TEMPLATE folder.
The app used coroutines only through transitive dependencies, so debugRuntimeClasspath resolved kotlinx-coroutines-core 1.9.0 and the instrumented tests ran kotlinx-coroutines-test from the catalog against that older core (strictly 1.9.0). Declaring kotlinx-coroutines-android at the catalog's coroutines version lifts core to 1.11.0 on both debugRuntimeClasspath and debugAndroidTestRuntimeClasspath.
Lint's AlwaysShowAction check reports a menu only when it holds more than one showAsAction attribute and no ifRoom. qr_tab_menu.xml has a single item, so the suppression never matched a report. app_picker.xml, icon_tab_menu.xml and select.xml meet the condition and keep theirs.
A string targetExclude makes Spotless list all of build/ to subtract it, and a parallel resource merge can rewrite files during that walk ("Could not read path .../merged.dir/values-*"). The src/** targets never enter build/, so the formatted file set stays the same.
Git on Linux and macOS only runs a hook with the executable bit set. The index recorded .githooks/pre-commit as 100644, so a clone there skipped the Spotless and Detekt check.
All jobs run on the current Ubuntu LTS runner image. The pinned label keeps image switches explicit, and Renovate proposes the next one as a reviewed update.
A release that is only partly published, or pulled within days, no longer produces a failing update PR.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (6)
💤 Files with no reviewable changes (2)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThis pull request updates issue intake, build and quality settings, automation configuration, and application tests. It adds YAML issue forms, changes CI runners, adjusts coverage and formatting settings, and adds Robolectric tests for app screens and tile behavior. ChangesIssue intake
Local build and quality tooling
Automation settings
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Other Merge Risk: ⚪ Minimal · up to No actionable issue is established that would prevent merging after normal checks. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The release build moves to a specified runner version, but its publishing permissions, secrets, and release gates remain unchanged. No new security attack path was established. Release execution and the behavior of the new issue forms have not been verified here. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. A rabbit checks the forms at dawn, Comment |
Plan limit reachedYou've used all Starter plan credits for this billing period (70 limit), so this pull request was not reviewed ( Upgrade to a higher plan or wait until your next billing period: See plans on the billing page |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Drives QSTileService through Robolectric's TileService shadow: start and stop listening, both click transitions, and the Samsung detail view hooks. Each test asserts the resulting tile state, subtitle, toast text, settings intent or detail layout.
Launches LibsActivity in light and night configuration and reads the Compose semantics tree to assert the "Open source licenses" title in both color schemes. A third test clicks the top bar's back button and asserts the activity finishes. AppCompat's default night mode is reset around each test because it is process-wide and overrides the night qualifier.
The Terms of Service and delete-app-data tests now open each dialog, assert its title, and click its buttons. OK dismisses the ToS dialog, Yes clears the application user data and Cancel keeps it, checked through Robolectric's ActivityManager shadow. The old ToS button test looked the dialog up through ShadowAlertDialog, which only tracks platform AlertDialogs, so it never clicked the AppCompat dialog's button.
Debug coverage is now 100% of instructions (11257/11257) and 99.71% of branches (343/344). The missed branch is SearchHighlighter's per-token guard `!text.contains(textToBold, ignoreCase = true)`: its only caller runs the same check on the same text before the call, so no input reaches it.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
The single-word overload returned early on `!text.contains(textToBold, ignoreCase = true)`. `contains` is `indexOf(...) >= 0`, so a miss already yields -1 and skips the span loop, and the only caller runs the same `contains` on the same text before calling. The branch was unreachable. The `isEmpty()` guard stays: indexOf of an empty word is 0 and the loop never advances. `firstSearchIndex` in that overload was assigned but never read. The trailing-space test name and comment described the removed `contains` short-circuit; the name now states the behavior, assertions unchanged.
Debug coverage is now 100% of instructions (11242/11242) and 100% of branches (340/340). The last missed branch was SearchHighlighter's unreachable `contains` guard, now removed, so a floor of 100 for both units matches the measured value.
IconAdapter is the only search-highlighting consumer. It imports dev.oneuiproject.oneui.utils.SearchHighlighter from oneui-design. The app's own ui.util.SearchHighlighter had no production caller. Only its own Robolectric test exercised it, so both go.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
Summary
config.ymldisables blank issues. A "Question or help" link sends questions to Discussions Q&A.ISSUE_TEMPLATE/*.mdfiles go away. GitHub never read templates from that folder.ubuntu-26.04instead ofubuntu-latest. Renovate proposes the next LTS image as its own PR.PRECOMMIT_GRADLEvariable replaces./gradlewin the hook. If it is unset, the hook runs./gradlewas before. Git now records the hook as executable.appandbenchmarksSpotless blocks droptargetExclude. It made Spotless walkbuild/, which raced a parallel resource merge in combined local runs.kotlinx-coroutines-androidat the catalog's coroutines version.qr_tab_menu.xmldrops a staleAlwaysShowActionsuppression. The menu holds a single item, so the check never reports it.minimumReleaseAge: "3 days"holds each release back for three days before an update PR.Behavior changes
kotlinx-coroutines-coreresolves to 1.11.0 on the app and androidTest runtime classpaths. It was 1.9.0 through transitive dependencies.tools:attribute only. It has no runtime effect.ubuntu-26.04image..githooksconfigured now run the Spotless and Detekt pre-commit check.src/**targets never enterbuild/.Coverage
*.di.*, Room*_Impl, andComposableSingletons$*patterns. The@NoCoverageannotation filter stays.Verification
./gradlew spotlessCheck detekt lintDebug testDebugUnitTest koverVerifyDebug assembleRelease -Pandroidx.baselineprofile.skipgeneration: PASS.testDebugUnitTestruns 527 tests.config.ymlvalidate against the SchemaStore schemas.Notes
ubuntu-24.04first. A later commit moves every job toubuntu-26.04.gradle/libs.versions.tomlgains thecoroutines-androidlibrary entry only. No version changes.🤖 Generated with Claude Code
https://claude.ai/code/session_017o3oP5jLEZpoVaRyWHYXbw
Adds structured issue forms and routes questions to Discussions. Pins GitHub Actions jobs to
ubuntu-26.04and sets Renovate’s minimum release age to three days.Updates the pre-commit hook to support
PRECOMMIT_GRADLE. Addskotlinx-coroutines-android, adjusts Spotless and Kover exclusions, and sets coverage minimums to 100% for instructions and branches. Removes a lint suppression andSearchHighlighter. Adds UI tests for the libraries screen, quick settings tile, and settings dialogs.Test results and validation status are not available in the supplied evidence.