Skip to content

Commit b82fe50

Browse files
committed
1 parent 5fa512f commit b82fe50

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

.github/workflows/quality.yml

+44
Original file line numberDiff line numberDiff line change
@@ -212,3 +212,47 @@ jobs:
212212
run: |
213213
echo "::error ::Dependency Analysis failed."
214214
exit 1
215+
216+
binary-compatibility-validator:
217+
name: Binary Compatibility Validator
218+
runs-on: ubuntu-latest
219+
permissions:
220+
contents: write
221+
env:
222+
WORKFLOW_PAT: ${{ secrets.WORKFLOW_PAT }}
223+
steps:
224+
- name: Checkout
225+
uses: actions/checkout@v4
226+
with:
227+
token: ${{ env.WORKFLOW_PAT }}
228+
- name: Set up Java
229+
uses: actions/setup-java@v4
230+
with:
231+
java-version-file: .github/workflows/.java-version
232+
distribution: 'temurin'
233+
- name: Set up Gradle
234+
uses: gradle/actions/setup-gradle@v4
235+
with:
236+
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
237+
- name: Run API check
238+
id: api_check
239+
continue-on-error: true
240+
run: ./gradlew apiCheck
241+
- name: Update API dumps
242+
id: update_api_dumps
243+
if: env.WORKFLOW_PAT != '' && steps.api_check.outcome == 'failure' && github.event_name == 'pull_request'
244+
run: ./gradlew apiDump
245+
- name: Push new API dumps
246+
if: steps.update_api_dumps.outcome == 'success'
247+
uses: stefanzweifel/git-auto-commit-action@v5
248+
with:
249+
file_pattern: '*/*.api'
250+
disable_globbing: true
251+
commit_message: "Update API dumps"
252+
# If the WORKFLOW_PAT secret is not available (ie. from forks), the push above won't trigger a CI build.
253+
# So instead, we ask the contributor to manually update and push the new API dumps.
254+
- name: Request API dumps to be updated
255+
if: env.WORKFLOW_PAT == '' && steps.api_check.outcome == 'failure' && github.event_name == 'pull_request'
256+
run: |
257+
echo "::error ::API dumps are outdated. Run './gradlew apiDump' to update them and push the changes."
258+
exit 1

build.gradle.kts

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ plugins {
1515
alias(libs.plugins.dokka.javadoc) apply false
1616
alias(libs.plugins.kotlin.android) apply false
1717
alias(libs.plugins.kotlin.compose) apply false
18+
alias(libs.plugins.kotlinx.binary.compatibility.validator)
1819
alias(libs.plugins.kotlinx.kover)
1920
}
2021

@@ -62,6 +63,14 @@ subprojects {
6263
pluginManager.apply("com.autonomousapps.dependency-analysis")
6364
}
6465

66+
apiValidation {
67+
ignoredProjects.add("demo")
68+
// See https://github.com/Kotlin/binary-compatibility-validator/issues/74
69+
ignoredClasses.add("ch.srgssr.androidx.mediarouter.compose.ComposableSingletons\$CastIconKt")
70+
ignoredClasses.add("ch.srgssr.androidx.mediarouter.compose.ComposableSingletons\$MediaRouteChooserDialogKt")
71+
ignoredClasses.add("ch.srgssr.androidx.mediarouter.compose.ComposableSingletons\$MediaRouteControllerDialogKt")
72+
}
73+
6574
dokka {
6675
dokkaPublications.html {
6776
includes.from(layout.settingsDirectory.file("docs/${project.name}.md"))

gradle/libs.versions.toml

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ detekt = "1.23.8"
1919
dokka = "2.0.0"
2020
junit = "4.13.2"
2121
kotlin = "2.1.20"
22+
kotlinx-binary-compatibility-validator = "0.17.0"
2223
kotlinx-coroutines = "1.10.2"
2324
kotlinx-kover = "0.9.1"
2425
play-services-cast-framework = "22.0.0"
@@ -89,5 +90,6 @@ dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
8990
dokka-javadoc = { id = "org.jetbrains.dokka-javadoc", version.ref = "dokka" }
9091
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
9192
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
93+
kotlinx-binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinx-binary-compatibility-validator" }
9294
kotlinx-kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kotlinx-kover" }
9395
maven-publish = { id = "org.gradle.maven-publish" }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
public final class ch/srgssr/androidx/mediarouter/compose/DialogType : java/lang/Enum {
2+
public static final field Chooser Lch/srgssr/androidx/mediarouter/compose/DialogType;
3+
public static final field Controller Lch/srgssr/androidx/mediarouter/compose/DialogType;
4+
public static final field DynamicChooser Lch/srgssr/androidx/mediarouter/compose/DialogType;
5+
public static final field DynamicController Lch/srgssr/androidx/mediarouter/compose/DialogType;
6+
public static final field None Lch/srgssr/androidx/mediarouter/compose/DialogType;
7+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
8+
public static fun valueOf (Ljava/lang/String;)Lch/srgssr/androidx/mediarouter/compose/DialogType;
9+
public static fun values ()[Lch/srgssr/androidx/mediarouter/compose/DialogType;
10+
}
11+
12+
public final class ch/srgssr/androidx/mediarouter/compose/MediaRouteButtonKt {
13+
public static final fun MediaRouteButton (Landroidx/compose/ui/Modifier;Landroidx/mediarouter/media/MediaRouteSelector;Landroidx/compose/material3/IconButtonColors;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
14+
}
15+
16+
public final class ch/srgssr/androidx/mediarouter/compose/MediaRouteChooserDialogKt {
17+
public static final fun MediaRouteChooserDialog (Landroidx/mediarouter/media/MediaRouteSelector;Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
18+
}
19+
20+
public final class ch/srgssr/androidx/mediarouter/compose/MediaRouteControllerDialogKt {
21+
public static final fun MediaRouteControllerDialog (Landroidx/mediarouter/media/MediaRouteSelector;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
22+
}
23+

0 commit comments

Comments
 (0)