Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 0dc4ed7

Browse files
committedJun 18, 2024
Add binary compatibility validation to public APIs
1 parent 584b817 commit 0dc4ed7

File tree

7 files changed

+4226
-0
lines changed

7 files changed

+4226
-0
lines changed
 

‎build.gradle.kts

+11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import com.vanniktech.maven.publish.SonatypeHost
33
import org.ajoberstar.grgit.Grgit
44
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
55
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
6+
import kotlinx.validation.ApiValidationExtension
7+
import kotlinx.validation.ExperimentalBCVApi
68

79
plugins {
810
id("org.jetbrains.dokka") version "1.8.20" apply false
@@ -15,6 +17,7 @@ plugins {
1517
id("org.jetbrains.kotlin.plugin.allopen") version "2.0.0"
1618
id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false
1719
alias(libs.plugins.maven.publish.base) apply false
20+
alias(libs.plugins.kotlinx.binary.compatibilty.validator) apply false
1821
}
1922

2023
allprojects {
@@ -48,6 +51,14 @@ subprojects {
4851
}
4952

5053
afterEvaluate {
54+
plugins.withId(libs.plugins.kotlinx.binary.compatibilty.validator.get().pluginId) {
55+
@OptIn(ExperimentalBCVApi::class)
56+
configure<ApiValidationExtension> {
57+
klib {
58+
enabled = true
59+
}
60+
}
61+
}
5162
plugins.withId(libs.plugins.maven.publish.base.get().pluginId) {
5263
configure<PublishingExtension> {
5364
if (findProperty("MAVEN_PASSWORD") != null && findProperty("MAVEN_USERNAME") != null) {

‎plugin-api/api/plugin-api.api

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
public abstract interface class dev/arbjerg/lavalink/api/AudioFilterExtension {
2+
public fun build (Lkotlinx/serialization/json/JsonElement;Lcom/sedmelluq/discord/lavaplayer/format/AudioDataFormat;Lcom/sedmelluq/discord/lavaplayer/filter/FloatPcmAudioFilter;)Lcom/sedmelluq/discord/lavaplayer/filter/FloatPcmAudioFilter;
3+
public abstract fun getName ()Ljava/lang/String;
4+
public fun isEnabled (Lkotlinx/serialization/json/JsonElement;)Z
5+
}
6+
7+
public abstract interface class dev/arbjerg/lavalink/api/AudioPlayerManagerConfiguration {
8+
public abstract fun configure (Lcom/sedmelluq/discord/lavaplayer/player/AudioPlayerManager;)Lcom/sedmelluq/discord/lavaplayer/player/AudioPlayerManager;
9+
}
10+
11+
public abstract interface class dev/arbjerg/lavalink/api/AudioPluginInfoModifier {
12+
public fun modifyAudioPlaylistPluginInfo (Lcom/sedmelluq/discord/lavaplayer/track/AudioPlaylist;)Lkotlinx/serialization/json/JsonObject;
13+
public fun modifyAudioTrackPluginInfo (Lcom/sedmelluq/discord/lavaplayer/track/AudioTrack;)Lkotlinx/serialization/json/JsonObject;
14+
}
15+
16+
public abstract interface class dev/arbjerg/lavalink/api/IPlayer {
17+
public abstract fun getAudioPlayer ()Lcom/sedmelluq/discord/lavaplayer/player/AudioPlayer;
18+
public abstract fun getGuildId ()J
19+
public abstract fun getSocketContext ()Ldev/arbjerg/lavalink/api/ISocketContext;
20+
public abstract fun getTrack ()Lcom/sedmelluq/discord/lavaplayer/track/AudioTrack;
21+
public abstract fun isPlaying ()Z
22+
public abstract fun play (Lcom/sedmelluq/discord/lavaplayer/track/AudioTrack;)V
23+
public abstract fun seekTo (J)V
24+
public fun seekTo-LRDsOJo (J)V
25+
public abstract fun setPause (Z)V
26+
public abstract fun setVolume (I)V
27+
public abstract fun stop ()V
28+
}
29+
30+
public abstract interface class dev/arbjerg/lavalink/api/ISocketContext {
31+
public abstract fun closeWebSocket ()V
32+
public abstract fun closeWebSocket (I)V
33+
public abstract fun closeWebSocket (ILjava/lang/String;)V
34+
public abstract fun destroyPlayer (J)V
35+
public abstract fun getClientName ()Ljava/lang/String;
36+
public abstract fun getPlayer (J)Ldev/arbjerg/lavalink/api/IPlayer;
37+
public abstract fun getPlayers ()Ljava/util/Map;
38+
public abstract fun getSessionId ()Ljava/lang/String;
39+
public abstract fun getState ()Ldev/arbjerg/lavalink/api/ISocketContext$State;
40+
public abstract fun getUserId ()J
41+
public abstract fun sendMessage (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
42+
public fun sendMessage (Lkotlinx/serialization/json/JsonElement;)V
43+
}
44+
45+
public final class dev/arbjerg/lavalink/api/ISocketContext$State : java/lang/Enum {
46+
public static final field DESTROYED Ldev/arbjerg/lavalink/api/ISocketContext$State;
47+
public static final field OPEN Ldev/arbjerg/lavalink/api/ISocketContext$State;
48+
public static final field RESUMABLE Ldev/arbjerg/lavalink/api/ISocketContext$State;
49+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
50+
public static fun valueOf (Ljava/lang/String;)Ldev/arbjerg/lavalink/api/ISocketContext$State;
51+
public static fun values ()[Ldev/arbjerg/lavalink/api/ISocketContext$State;
52+
}
53+
54+
public abstract interface class dev/arbjerg/lavalink/api/ISocketServer {
55+
public abstract fun getResumableSessions ()Ljava/util/Map;
56+
public abstract fun getSessions ()Ljava/util/Map;
57+
}
58+
59+
public abstract class dev/arbjerg/lavalink/api/PluginEventHandler {
60+
public fun <init> ()V
61+
public fun onDestroyPlayer (Ldev/arbjerg/lavalink/api/ISocketContext;Ldev/arbjerg/lavalink/api/IPlayer;)V
62+
public fun onNewPlayer (Ldev/arbjerg/lavalink/api/ISocketContext;Ldev/arbjerg/lavalink/api/IPlayer;)V
63+
public fun onSocketContextDestroyed (Ldev/arbjerg/lavalink/api/ISocketContext;)V
64+
public fun onSocketContextPaused (Ldev/arbjerg/lavalink/api/ISocketContext;)V
65+
public fun onWebSocketMessageOut (Ldev/arbjerg/lavalink/api/ISocketContext;Ljava/lang/String;)V
66+
public fun onWebSocketOpen (Ldev/arbjerg/lavalink/api/ISocketContext;Z)V
67+
}
68+
69+
public abstract interface class dev/arbjerg/lavalink/api/RestInterceptor : org/springframework/web/servlet/HandlerInterceptor {
70+
}
71+

‎plugin-api/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ plugins {
77
kotlin("jvm")
88
id("org.jetbrains.dokka")
99
alias(libs.plugins.maven.publish.base)
10+
alias(libs.plugins.kotlinx.binary.compatibilty.validator)
1011
}
1112

1213
val archivesBaseName = "plugin-api"

‎protocol/api/protocol.api

+2,226
Large diffs are not rendered by default.

‎protocol/api/protocol.klib.api

+1,915
Large diffs are not rendered by default.

‎protocol/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ plugins {
99
kotlin("plugin.serialization")
1010
id("org.jetbrains.dokka")
1111
alias(libs.plugins.maven.publish.base)
12+
alias(libs.plugins.kotlinx.binary.compatibilty.validator)
1213
}
1314

1415
val archivesBaseName = "protocol"

‎settings.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,5 @@ fun VersionCatalogBuilder.other() {
8888

8989
plugin("maven-publish", "com.vanniktech.maven.publish").versionRef(mavenPublishPlugin)
9090
plugin("maven-publish-base", "com.vanniktech.maven.publish.base").versionRef(mavenPublishPlugin)
91+
plugin("kotlinx-binary-compatibilty-validator", "org.jetbrains.kotlinx.binary-compatibility-validator").version("0.15.0-Beta.2")
9192
}

0 commit comments

Comments
 (0)
Please sign in to comment.