Skip to content

chore: remove binary-compatibility-validator (BCV)#150

Merged
kirich1409 merged 1 commit intomainfrom
worktree-remove-api-compatibility
Apr 3, 2026
Merged

chore: remove binary-compatibility-validator (BCV)#150
kirich1409 merged 1 commit intomainfrom
worktree-remove-api-compatibility

Conversation

@kirich1409
Copy link
Copy Markdown
Contributor

Summary

  • Removes the bcv plugin (org.jetbrains.kotlinx.binary-compatibility-validator) from all 14 library modules
  • Deletes all 21 .api dump files across modules
  • Removes the apiCheck Gradle task from CI and renames the job from Lint & API Check to Lint
  • Removes bcv version and plugin entries from gradle/libs.versions.toml

Test plan

  • CI Lint job passes (spotlessCheck only, no apiCheck)
  • CI Tests & Coverage and Build Android jobs unaffected

🤖 Generated with Claude Code

Removes the BCV plugin, all .api dump files, and the apiCheck CI step
across all 14 library modules.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 3, 2026 07:24
@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Remove binary-compatibility-validator plugin and API dump files

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Removes BCV plugin from 14 library modules' build configurations
• Deletes all 21 .api dump files across modules
• Removes apiCheck Gradle task from CI pipeline
• Removes BCV version and plugin entries from version catalog
Diagram
flowchart LR
  BCV["BCV Plugin<br/>org.jetbrains.kotlinx.binary-compatibility-validator"]
  BuildFiles["14 build.gradle.kts<br/>files"]
  APIFiles["21 .api dump<br/>files"]
  VersionCatalog["gradle/libs.versions.toml"]
  CIWorkflow[".github/workflows/ci.yml"]
  
  BCV -- "removed from" --> BuildFiles
  BCV -- "removed from" --> VersionCatalog
  APIFiles -- "deleted" --> BuildFiles
  CIWorkflow -- "apiCheck task<br/>removed" --> CIWorkflow
Loading

Grey Divider

File Changes

1. core/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

core/build.gradle.kts


2. featured-compose/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

featured-compose/build.gradle.kts


3. featured-debug-ui/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

featured-debug-ui/build.gradle.kts


View more (34)
4. featured-detekt-rules/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

featured-detekt-rules/build.gradle.kts


5. featured-lint-rules/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

featured-lint-rules/build.gradle.kts


6. featured-platform/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

featured-platform/build.gradle.kts


7. featured-registry/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

featured-registry/build.gradle.kts


8. featured-testing/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

featured-testing/build.gradle.kts


9. providers/configcat/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

providers/configcat/build.gradle.kts


10. providers/datastore/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

providers/datastore/build.gradle.kts


11. providers/firebase/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

providers/firebase/build.gradle.kts


12. providers/javaprefs/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

providers/javaprefs/build.gradle.kts


13. providers/nsuserdefaults/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

providers/nsuserdefaults/build.gradle.kts


14. providers/sharedpreferences/build.gradle.kts ⚙️ Configuration changes +0/-1

Remove BCV plugin alias

providers/sharedpreferences/build.gradle.kts


15. .github/workflows/ci.yml ⚙️ Configuration changes +1/-3

Remove apiCheck task from lint job

.github/workflows/ci.yml


16. gradle/libs.versions.toml Dependencies +0/-2

Remove BCV version and plugin entries

gradle/libs.versions.toml


17. core/api/android/core.api Miscellaneous +0/-118

Delete API dump file

core/api/android/core.api


18. core/api/jvm/core.api Miscellaneous +0/-126

Delete API dump file

core/api/jvm/core.api


19. featured-compose/api/android/featured-compose.api Miscellaneous +0/-18

Delete API dump file

featured-compose/api/android/featured-compose.api


20. featured-compose/api/jvm/featured-compose.api Miscellaneous +0/-8

Delete API dump file

featured-compose/api/jvm/featured-compose.api


21. featured-debug-ui/api/android/featured-debug-ui.api Additional files +0/-36

...

featured-debug-ui/api/android/featured-debug-ui.api


22. featured-debug-ui/api/jvm/featured-debug-ui.api Additional files +0/-36

...

featured-debug-ui/api/jvm/featured-debug-ui.api


23. featured-detekt-rules/api/featured-detekt-rules.api Additional files +0/-39

...

featured-detekt-rules/api/featured-detekt-rules.api


24. featured-lint-rules/api/featured-lint-rules.api Additional files +0/-19

...

featured-lint-rules/api/featured-lint-rules.api


25. featured-platform/api/android/featured-platform.api Additional files +0/-5

...

featured-platform/api/android/featured-platform.api


26. featured-platform/api/jvm/featured-platform.api Additional files +0/-4

...

featured-platform/api/jvm/featured-platform.api


27. featured-registry/api/android/featured-registry.api Additional files +0/-6

...

featured-registry/api/android/featured-registry.api


28. featured-registry/api/jvm/featured-registry.api Additional files +0/-6

...

featured-registry/api/jvm/featured-registry.api


29. featured-testing/api/android/featured-testing.api Additional files +0/-14

...

featured-testing/api/android/featured-testing.api


30. featured-testing/api/jvm/featured-testing.api Additional files +0/-14

...

featured-testing/api/jvm/featured-testing.api


31. providers/configcat/api/android/configcat-provider.api Additional files +0/-6

...

providers/configcat/api/android/configcat-provider.api


32. providers/configcat/api/jvm/configcat-provider.api Additional files +0/-6

...

providers/configcat/api/jvm/configcat-provider.api


33. providers/datastore/api/android/datastore-provider.api Additional files +0/-15

...

providers/datastore/api/android/datastore-provider.api


34. providers/datastore/api/jvm/datastore-provider.api Additional files +0/-15

...

providers/datastore/api/jvm/datastore-provider.api


35. providers/firebase/api/firebase-provider.api Additional files +0/-24

...

providers/firebase/api/firebase-provider.api


36. providers/javaprefs/api/javaprefs-provider.api Additional files +0/-12

...

providers/javaprefs/api/javaprefs-provider.api


37. providers/sharedpreferences/api/sharedpreferences-provider.api Additional files +0/-12

...

providers/sharedpreferences/api/sharedpreferences-provider.api


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review bot commented Apr 3, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX Issues (0)

Grey Divider


Remediation recommended

1. Outdated BCV contributor docs 🐞 Bug ⚙ Maintainability
Description
CONTRIBUTING.md still claims CI will fail on public API changes unless apiDump is updated, but
this PR removes the apiCheck step (and BCV plugin), so contributors will be misled about required
steps and safeguards.
Code

.github/workflows/ci.yml[R58-64]

  lint:
-    name: Lint & API Check
+    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: ./.github/actions/setup-build-env
      - run: ./gradlew spotlessCheck
-      - name: Check public API
-        run: ./gradlew apiCheck
Evidence
The CI workflow’s lint job now only runs spotlessCheck (no apiCheck), while CONTRIBUTING.md
still states BCV enforces API stability via CI with apiDump updates.

.github/workflows/ci.yml[58-64]
CONTRIBUTING.md[60-67]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`CONTRIBUTING.md` states that Binary Compatibility Validator (BCV) enforces API stability in CI and that CI will fail without an `apiDump` update, but this PR removes BCV and the `apiCheck` CI step. This makes contributor guidance incorrect.

### Issue Context
BCV was removed from modules and CI, so any documentation implying automated API enforcement via `apiDump`/`apiCheck` needs to be updated to reflect the new workflow (e.g., manual review, alternative tooling, or removing the statement).

### Fix Focus Areas
- CONTRIBUTING.md[60-67]
- .github/workflows/ci.yml[58-64]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Removes the Kotlin Binary Compatibility Validator (BCV) from the build and CI pipeline, eliminating API dump maintenance and the apiCheck CI step across the library modules.

Changes:

  • Removes the org.jetbrains.kotlinx.binary-compatibility-validator plugin alias (libs.plugins.bcv) from library module Gradle scripts.
  • Deletes the generated .api dump files previously used by BCV.
  • Updates CI to drop the apiCheck step and renames the job accordingly; removes BCV entries from gradle/libs.versions.toml.

Reviewed changes

Copilot reviewed 37 out of 37 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
providers/sharedpreferences/build.gradle.kts Removes BCV plugin from module plugins block.
providers/sharedpreferences/api/sharedpreferences-provider.api Deletes BCV API dump file.
providers/nsuserdefaults/build.gradle.kts Removes BCV plugin from module plugins block.
providers/javaprefs/build.gradle.kts Removes BCV plugin from module plugins block.
providers/javaprefs/api/javaprefs-provider.api Deletes BCV API dump file.
providers/firebase/build.gradle.kts Removes BCV plugin from module plugins block.
providers/firebase/api/firebase-provider.api Deletes BCV API dump file.
providers/datastore/build.gradle.kts Removes BCV plugin from module plugins block.
providers/datastore/api/jvm/datastore-provider.api Deletes BCV API dump file (JVM).
providers/datastore/api/android/datastore-provider.api Deletes BCV API dump file (Android).
providers/configcat/build.gradle.kts Removes BCV plugin from module plugins block.
providers/configcat/api/jvm/configcat-provider.api Deletes BCV API dump file (JVM).
providers/configcat/api/android/configcat-provider.api Deletes BCV API dump file (Android).
gradle/libs.versions.toml Removes BCV version + plugin coordinates from version catalog.
featured-testing/build.gradle.kts Removes BCV plugin from module plugins block.
featured-testing/api/jvm/featured-testing.api Deletes BCV API dump file (JVM).
featured-testing/api/android/featured-testing.api Deletes BCV API dump file (Android).
featured-registry/build.gradle.kts Removes BCV plugin from module plugins block.
featured-registry/api/jvm/featured-registry.api Deletes BCV API dump file (JVM).
featured-registry/api/android/featured-registry.api Deletes BCV API dump file (Android).
featured-platform/build.gradle.kts Removes BCV plugin from module plugins block.
featured-platform/api/jvm/featured-platform.api Deletes BCV API dump file (JVM).
featured-platform/api/android/featured-platform.api Deletes BCV API dump file (Android).
featured-lint-rules/build.gradle.kts Removes BCV plugin from module plugins block.
featured-lint-rules/api/featured-lint-rules.api Deletes BCV API dump file.
featured-detekt-rules/build.gradle.kts Removes BCV plugin from module plugins block.
featured-detekt-rules/api/featured-detekt-rules.api Deletes BCV API dump file.
featured-debug-ui/build.gradle.kts Removes BCV plugin from module plugins block.
featured-debug-ui/api/jvm/featured-debug-ui.api Deletes BCV API dump file (JVM).
featured-debug-ui/api/android/featured-debug-ui.api Deletes BCV API dump file (Android).
featured-compose/build.gradle.kts Removes BCV plugin from module plugins block.
featured-compose/api/jvm/featured-compose.api Deletes BCV API dump file (JVM).
featured-compose/api/android/featured-compose.api Deletes BCV API dump file (Android).
core/build.gradle.kts Removes BCV plugin from module plugins block.
core/api/jvm/core.api Deletes BCV API dump file (JVM).
core/api/android/core.api Deletes BCV API dump file (Android).
.github/workflows/ci.yml Removes apiCheck step and renames the CI job.

Comment on lines 58 to 65
lint:
name: Lint & API Check
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-build-env
- run: ./gradlew spotlessCheck
- name: Check public API
run: ./gradlew apiCheck

Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

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

With apiCheck removed from CI, the repo docs still state that Binary Compatibility Validator runs in CI and fails without an apiDump update (e.g. CONTRIBUTING.md around the versioning policy section). Please update the documentation to reflect the new workflow (and remove/replace any references to BCV/apiDump/apiCheck).

Copilot uses AI. Check for mistakes.
@qodo-code-review
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: Tests & Coverage

Failed stage: Run ./gradlew test :core:koverVerify :providers:datastore:koverVerify :providers:sharedpreferences:koverVerify :providers:firebase:koverVerify :featured-compose:koverVerify :featured-registry:koverVerify :featured-testing:koverVerify [❌]

Failed test name: FirebaseConfigValueProviderTest > fetch propagates exception when fetch task fails

Failure summary:

The action failed because Gradle unit tests failed in the :providers:firebase:testDebugUnitTest
task, causing the build to exit with code 1.
- Failing tests:
- FirebaseConfigValueProviderTest >
fetch propagates exception when fetch task fails FAILED at FirebaseConfigValueProviderTest.kt:284
(java.lang.AssertionError, caused by java.lang.RuntimeException).
-
FirebaseConfigValueProviderTest > fetch propagates exception when fetchAndActivate task fails FAILED
at FirebaseConfigValueProviderTest.kt:275 (java.lang.AssertionError, caused by
java.lang.RuntimeException).
- Summary from the run: 22 tests completed, 2 failed, and Gradle
reports: Execution failed for task ':providers:firebase:testDebugUnitTest' / There were failing
tests (see providers/firebase/build/reports/tests/testDebugUnitTest/index.html).

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

160:  add-job-summary-as-pr-comment: never
161:  dependency-graph: disabled
162:  dependency-graph-continue-on-failure: true
163:  build-scan-publish: false
164:  validate-wrappers: false
165:  generate-job-summary: true
166:  gradle-home-cache-strict-match: false
167:  workflow-job-context: null
168:  github-token: ***
169:  env:
170:  JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.10-7/x64
171:  JAVA_HOME_21_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.10-7/x64
172:  ##[endgroup]
173:  Merged default JDK locations into /home/runner/.m2/toolchains.xml
174:  ##[group]Restore Gradle state from cache
175:  ##[warning]Failed to restore gradle-home-v1|Linux|test[b8a35c2f917259958c9abe8f2ff1b5ff]-cd89ef12ada957239159c4c3c65890c5fb67f9a0: Error: Cache service responded with 400
176:  Gradle User Home cache not found. Will initialize empty.
...

321:  This is a build performance and scalability issue.
322:  See https://github.com/gradle/gradle/issues/2298
323:  Run with --info for a stacktrace.
324:  Configuration 'jvmTestCompileClasspath' was resolved during configuration time.
325:  This is a build performance and scalability issue.
326:  See https://github.com/gradle/gradle/issues/2298
327:  Run with --info for a stacktrace.
328:  Configuration 'kotlinCompilerPluginClasspathJvmTest' was resolved during configuration time.
329:  This is a build performance and scalability issue.
330:  See https://github.com/gradle/gradle/issues/2298
331:  Run with --info for a stacktrace.
332:  Configuration 'koverJvmAgent' was resolved during configuration time.
333:  This is a build performance and scalability issue.
334:  See https://github.com/gradle/gradle/issues/2298
335:  Run with --info for a stacktrace.
336:  > Task :featured-detekt-rules:checkKotlinGradlePluginConfigurationErrors SKIPPED
337:  > Task :featured-gradle-plugin:checkKotlinGradlePluginConfigurationErrors SKIPPED
338:  > Task :featured-detekt-rules:processTestResources NO-SOURCE
339:  > Task :featured-gradle-plugin:pluginDescriptors
340:  > Task :featured-gradle-plugin:processResources
341:  > Task :featured-detekt-rules:processResources
342:  > Task :featured-lint-rules:checkKotlinGradlePluginConfigurationErrors SKIPPED
343:  > Task :featured-gradle-plugin:processTestResources NO-SOURCE
344:  > Task :featured-lint-rules:processResources NO-SOURCE
345:  > Task :featured-lint-rules:processTestResources NO-SOURCE
346:  > Task :core:kmpPartiallyResolvedDependenciesChecker
347:  > Task :core:checkKotlinGradlePluginConfigurationErrors SKIPPED
348:  > Task :featured-lint-rules:compileKotlin
...

417:  > Task :providers:firebase:generateDebugAssets UP-TO-DATE
418:  > Task :providers:firebase:mergeDebugAssets
419:  > Task :providers:firebase:mergeDebugUnitTestAssets
420:  > Task :providers:firebase:packageDebugUnitTestForUnitTest
421:  > Task :providers:firebase:generateDebugUnitTestConfig
422:  > Task :providers:firebase:koverFindJar
423:  > Task :providers:firebase:processDebugJavaRes
424:  > Task :providers:firebase:processDebugUnitTestJavaRes
425:  > Task :featured-detekt-rules:test
426:  > Task :core:compileKotlinJvm
427:  > Task :core:compileJvmMainJava NO-SOURCE
428:  > Task :core:jvmProcessResources NO-SOURCE
429:  > Task :core:processJvmMainResources SKIPPED
430:  > Task :core:jvmMainClasses
431:  > Task :core:jvmJar
432:  > Task :providers:javaprefs:checkKotlinGradlePluginConfigurationErrors SKIPPED
433:  > Task :providers:javaprefs:compileKotlin
...

459:  > Task :featured-gradle-plugin:test
460:  > Task :providers:sharedpreferences:checkDebugUnitTestAarMetadata
461:  > Task :providers:sharedpreferences:mapDebugSourceSetPaths
462:  > Task :providers:sharedpreferences:compileDebugLibraryResources FROM-CACHE
463:  > Task :providers:sharedpreferences:mapDebugUnitTestSourceSetPaths
464:  > Task :providers:sharedpreferences:generateDebugUnitTestResources FROM-CACHE
465:  > Task :providers:sharedpreferences:extractDeepLinksDebug FROM-CACHE
466:  > Task :providers:sharedpreferences:processDebugManifest
467:  > Task :providers:sharedpreferences:mergeDebugUnitTestResources
468:  > Task :providers:sharedpreferences:javaPreCompileDebugUnitTest FROM-CACHE
469:  > Task :providers:sharedpreferences:generateDebugUnitTestAssets UP-TO-DATE
470:  > Task :providers:sharedpreferences:generateDebugAssets UP-TO-DATE
471:  > Task :providers:sharedpreferences:mergeDebugAssets
472:  > Task :providers:sharedpreferences:processDebugUnitTestManifest
473:  > Task :providers:firebase:testDebugUnitTest
474:  FirebaseConfigValueProviderTest > fetch propagates exception when fetch task fails FAILED
475:  java.lang.AssertionError at FirebaseConfigValueProviderTest.kt:284
476:  Caused by: java.lang.RuntimeException at FirebaseConfigValueProviderTest.kt:284
477:  > Task :providers:sharedpreferences:mergeDebugUnitTestAssets
478:  > Task :providers:sharedpreferences:koverFindJar
479:  > Task :providers:sharedpreferences:processDebugJavaRes
480:  > Task :core:koverGenerateArtifactAndroid
481:  > Task :providers:firebase:testDebugUnitTest
482:  FirebaseConfigValueProviderTest > fetch propagates exception when fetchAndActivate task fails FAILED
483:  java.lang.AssertionError at FirebaseConfigValueProviderTest.kt:275
484:  Caused by: java.lang.RuntimeException at FirebaseConfigValueProviderTest.kt:275
485:  > Task :providers:sharedpreferences:processDebugUnitTestResources
486:  > Task :providers:firebase:testDebugUnitTest FAILED
487:  22 tests completed, 2 failed
488:  > Task :providers:sharedpreferences:compileDebugUnitTestKotlin
489:  > Task :core:compileTestKotlinJvm
490:  [Incubating] Problems report is available at: file:///home/runner/work/Featured/Featured/build/reports/problems/problems-report.html
491:  FAILURE: Build failed with an exception.
492:  * What went wrong:
493:  Execution failed for task ':providers:firebase:testDebugUnitTest'.
494:  > There were failing tests. See the report at: file:///home/runner/work/Featured/Featured/providers/firebase/build/reports/tests/testDebugUnitTest/index.html
495:  * Try:
496:  > Run with --scan to get full insights from a Build Scan (powered by Develocity).
497:  BUILD FAILED in 3m 34s
498:  Deprecated Gradle features were used in this build, making it incompatible with Gradle 10.
499:  You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
500:  For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
501:  88 actionable tasks: 78 executed, 10 from cache
502:  Configuration cache entry stored.
503:  ##[error]Process completed with exit code 1.
504:  ##[group]Run actions/upload-artifact@v7

@kirich1409 kirich1409 merged commit 8d09942 into main Apr 3, 2026
12 of 14 checks passed
@kirich1409 kirich1409 deleted the worktree-remove-api-compatibility branch April 3, 2026 07:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants