Skip to content

Commit

Permalink
add binary compatibility checks (closes #48)
Browse files Browse the repository at this point in the history
  • Loading branch information
nesk committed Dec 19, 2024
1 parent 492b847 commit fb143b3
Show file tree
Hide file tree
Showing 15 changed files with 1,328 additions and 3 deletions.
28 changes: 25 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: Run tests
name: Test the codebase
on: [ push, pull_request ]

jobs:
test:
name: Run tests
name: Run unit tests
runs-on: ubuntu-latest
steps:
- name: Checkout repository
Expand All @@ -21,5 +21,27 @@ jobs:
- name: Setup Gradle
uses: gradle/[email protected]

- name: Build with Gradle
- name: Build and run tests
run: ./gradlew allTests test --info

binary-compatibility:
name: Check binary compatibility
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: zulu

- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1

- name: Setup Gradle
uses: gradle/[email protected]

- name: Build and check compatibility
run: ./gradlew apiCheck
5 changes: 5 additions & 0 deletions akkurate-arrow/api/akkurate-arrow.api
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
public final class dev/nesk/akkurate/arrow/ArrowKt {
public static final fun bind (Larrow/core/raise/Raise;Ldev/nesk/akkurate/ValidationResult;)Ljava/lang/Object;
public static final fun toEither (Ldev/nesk/akkurate/ValidationResult;)Larrow/core/Either;
}

10 changes: 10 additions & 0 deletions akkurate-arrow/api/akkurate-arrow.klib.api
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Klib ABI Dump
// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, mingwX64, tvosArm64, tvosSimulatorArm64, tvosX64, watchosArm32, watchosArm64, watchosSimulatorArm64, watchosX64]
// Rendering settings:
// - Signature version: 2
// - Show manifest properties: true
// - Show declarations: true

// Library unique name: <dev.nesk.akkurate:akkurate-arrow>
final fun <#A: kotlin/Any?> (arrow.core.raise/Raise<arrow.core/NonEmptySet<dev.nesk.akkurate.constraints/ConstraintViolation>>).dev.nesk.akkurate.arrow/bind(dev.nesk.akkurate/ValidationResult<#A>): #A // dev.nesk.akkurate.arrow/bind|[email protected]<arrow.core.NonEmptySet<dev.nesk.akkurate.constraints.ConstraintViolation>>(dev.nesk.akkurate.ValidationResult<0:0>){0§<kotlin.Any?>}[0]
final fun <#A: kotlin/Any?> (dev.nesk.akkurate/ValidationResult<#A>).dev.nesk.akkurate.arrow/toEither(): arrow.core/Either<arrow.core/NonEmptySet<dev.nesk.akkurate.constraints/ConstraintViolation>, #A> // dev.nesk.akkurate.arrow/toEither|[email protected]<0:0>(){0§<kotlin.Any?>}[0]
520 changes: 520 additions & 0 deletions akkurate-core/api/akkurate-core.api

Large diffs are not rendered by default.

499 changes: 499 additions & 0 deletions akkurate-core/api/akkurate-core.klib.api

Large diffs are not rendered by default.

35 changes: 35 additions & 0 deletions akkurate-kotlinx-datetime/api/akkurate-kotlinx-datetime.api
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
public final class dev/nesk/akkurate/constraints/builders/KotlinxDatetimeKt {
public static final fun instantFuture (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun instantIsInFutureOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun instantIsInPast (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun instantIsInPastOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfter (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/Instant;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfter (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDate;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfter (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDateTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfter (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfterOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/Instant;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfterOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDate;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfterOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDateTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isAfterOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBefore (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/Instant;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBefore (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDate;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBefore (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDateTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBefore (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBeforeOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/Instant;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBeforeOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDate;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBeforeOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalDateTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun isBeforeOrEqualTo (Ldev/nesk/akkurate/validatables/Validatable;Lkotlinx/datetime/LocalTime;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateFuture (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateIsInFutureOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateIsInPast (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateIsInPastOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateTimeFuture (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateTimeIsInFutureOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateTimeIsInPast (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localDateTimeIsInPastOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localTimeFuture (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localTimeIsInFutureOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localTimeIsInPast (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
public static final fun localTimeIsInPastOrIsPresent (Ldev/nesk/akkurate/validatables/Validatable;)Ldev/nesk/akkurate/constraints/Constraint;
}

40 changes: 40 additions & 0 deletions akkurate-kotlinx-datetime/api/akkurate-kotlinx-datetime.klib.api
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Klib ABI Dump
// Targets: [androidNativeArm32, androidNativeArm64, androidNativeX64, androidNativeX86, iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, mingwX64, tvosArm64, tvosSimulatorArm64, tvosX64, wasmJs, watchosArm32, watchosArm64, watchosDeviceArm64, watchosSimulatorArm64, watchosX64]
// Rendering settings:
// - Signature version: 2
// - Show manifest properties: true
// - Show declarations: true

// Library unique name: <dev.nesk.akkurate:akkurate-kotlinx-datetime>
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isAfter(kotlinx.datetime/Instant): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfter|[email protected]<kotlinx.datetime.Instant?>(kotlinx.datetime.Instant){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo(kotlinx.datetime/Instant): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo|[email protected]<kotlinx.datetime.Instant?>(kotlinx.datetime.Instant){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isBefore(kotlinx.datetime/Instant): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBefore|[email protected]<kotlinx.datetime.Instant?>(kotlinx.datetime.Instant){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo(kotlinx.datetime/Instant): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo|[email protected]<kotlinx.datetime.Instant?>(kotlinx.datetime.Instant){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isInFuture(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFuture|[email protected]<kotlinx.datetime.Instant?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent|[email protected]<kotlinx.datetime.Instant?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isInPast(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPast|[email protected]<kotlinx.datetime.Instant?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/Instant?>).dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent|[email protected]<kotlinx.datetime.Instant?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isAfter(kotlinx.datetime/LocalDate): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfter|[email protected]<kotlinx.datetime.LocalDate?>(kotlinx.datetime.LocalDate){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo(kotlinx.datetime/LocalDate): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo|[email protected]<kotlinx.datetime.LocalDate?>(kotlinx.datetime.LocalDate){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isBefore(kotlinx.datetime/LocalDate): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBefore|[email protected]<kotlinx.datetime.LocalDate?>(kotlinx.datetime.LocalDate){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo(kotlinx.datetime/LocalDate): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo|[email protected]<kotlinx.datetime.LocalDate?>(kotlinx.datetime.LocalDate){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isInFuture(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFuture|[email protected]<kotlinx.datetime.LocalDate?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent|[email protected]<kotlinx.datetime.LocalDate?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isInPast(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPast|[email protected]<kotlinx.datetime.LocalDate?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDate?>).dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent|[email protected]<kotlinx.datetime.LocalDate?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isAfter(kotlinx.datetime/LocalDateTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfter|[email protected]<kotlinx.datetime.LocalDateTime?>(kotlinx.datetime.LocalDateTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo(kotlinx.datetime/LocalDateTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo|[email protected]<kotlinx.datetime.LocalDateTime?>(kotlinx.datetime.LocalDateTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isBefore(kotlinx.datetime/LocalDateTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBefore|[email protected]<kotlinx.datetime.LocalDateTime?>(kotlinx.datetime.LocalDateTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo(kotlinx.datetime/LocalDateTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo|[email protected]<kotlinx.datetime.LocalDateTime?>(kotlinx.datetime.LocalDateTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isInFuture(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFuture|[email protected]<kotlinx.datetime.LocalDateTime?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent|[email protected]<kotlinx.datetime.LocalDateTime?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isInPast(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPast|[email protected]<kotlinx.datetime.LocalDateTime?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalDateTime?>).dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent|[email protected]<kotlinx.datetime.LocalDateTime?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isAfter(kotlinx.datetime/LocalTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfter|[email protected]<kotlinx.datetime.LocalTime?>(kotlinx.datetime.LocalTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo(kotlinx.datetime/LocalTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isAfterOrEqualTo|[email protected]<kotlinx.datetime.LocalTime?>(kotlinx.datetime.LocalTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isBefore(kotlinx.datetime/LocalTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBefore|[email protected]<kotlinx.datetime.LocalTime?>(kotlinx.datetime.LocalTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo(kotlinx.datetime/LocalTime): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isBeforeOrEqualTo|[email protected]<kotlinx.datetime.LocalTime?>(kotlinx.datetime.LocalTime){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isInFuture(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFuture|[email protected]<kotlinx.datetime.LocalTime?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInFutureOrIsPresent|[email protected]<kotlinx.datetime.LocalTime?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isInPast(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPast|[email protected]<kotlinx.datetime.LocalTime?>(){}[0]
final fun (dev.nesk.akkurate.validatables/Validatable<kotlinx.datetime/LocalTime?>).dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent(): dev.nesk.akkurate.constraints/Constraint // dev.nesk.akkurate.constraints.builders/isInPastOrIsPresent|[email protected]<kotlinx.datetime.LocalTime?>(){}[0]
Loading

0 comments on commit fb143b3

Please sign in to comment.