diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 7657c56..f471069 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-alpha.27" + ".": "0.1.0-alpha.28" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 69f3e77..ef7f019 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 15 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/brand-dev%2Fbrand.dev-737dbedd830e2c989387e90a9bb5baa3915306ecfef2e46b09d02cb1879f043c.yml -openapi_spec_hash: 7bc21f4c6d5fd39c1a3b22626846ca87 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/brand-dev%2Fbrand.dev-73562e26b663cf10185b9e98966accf5f151c6d3cf99b5e060ce5a847045e383.yml +openapi_spec_hash: bf5994966b84f9dda998ad5059ff8318 config_hash: 6f10592c7d0c3bafefc1271472283217 diff --git a/CHANGELOG.md b/CHANGELOG.md index ba339d0..929b089 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 0.1.0-alpha.28 (2026-02-07) + +Full Changelog: [v0.1.0-alpha.27...v0.1.0-alpha.28](https://github.com/brand-dot-dev/java-sdk/compare/v0.1.0-alpha.27...v0.1.0-alpha.28) + +### Features + +* **api:** api update ([e826166](https://github.com/brand-dot-dev/java-sdk/commit/e826166942dc6320cfdce18d760785d60eb83bb0)) + + +### Chores + +* **internal:** upgrade AssertJ ([2656e0a](https://github.com/brand-dot-dev/java-sdk/commit/2656e0ae35284ad0f03187f0d58134162ab81a01)) + ## 0.1.0-alpha.27 (2026-02-02) Full Changelog: [v0.1.0-alpha.26...v0.1.0-alpha.27](https://github.com/brand-dot-dev/java-sdk/compare/v0.1.0-alpha.26...v0.1.0-alpha.27) diff --git a/README.md b/README.md index bbdfde7..8435cb6 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ -[![Maven Central](https://img.shields.io/maven-central/v/com.branddev.api/brand-dev-java)](https://central.sonatype.com/artifact/com.branddev.api/brand-dev-java/0.1.0-alpha.27) -[![javadoc](https://javadoc.io/badge2/com.branddev.api/brand-dev-java/0.1.0-alpha.27/javadoc.svg)](https://javadoc.io/doc/com.branddev.api/brand-dev-java/0.1.0-alpha.27) +[![Maven Central](https://img.shields.io/maven-central/v/com.branddev.api/brand-dev-java)](https://central.sonatype.com/artifact/com.branddev.api/brand-dev-java/0.1.0-alpha.28) +[![javadoc](https://javadoc.io/badge2/com.branddev.api/brand-dev-java/0.1.0-alpha.28/javadoc.svg)](https://javadoc.io/doc/com.branddev.api/brand-dev-java/0.1.0-alpha.28) @@ -22,7 +22,7 @@ Use the Brand Dev MCP Server to enable AI assistants to interact with this API, -The REST API documentation can be found on [docs.brand.dev](https://docs.brand.dev/). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.branddev.api/brand-dev-java/0.1.0-alpha.27). +The REST API documentation can be found on [docs.brand.dev](https://docs.brand.dev/). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.branddev.api/brand-dev-java/0.1.0-alpha.28). @@ -33,7 +33,7 @@ The REST API documentation can be found on [docs.brand.dev](https://docs.brand.d ### Gradle ```kotlin -implementation("com.branddev.api:brand-dev-java:0.1.0-alpha.27") +implementation("com.branddev.api:brand-dev-java:0.1.0-alpha.28") ``` ### Maven @@ -42,7 +42,7 @@ implementation("com.branddev.api:brand-dev-java:0.1.0-alpha.27") com.branddev.api brand-dev-java - 0.1.0-alpha.27 + 0.1.0-alpha.28 ``` diff --git a/brand-dev-java-client-okhttp/build.gradle.kts b/brand-dev-java-client-okhttp/build.gradle.kts index 0a0b515..76f3cc0 100644 --- a/brand-dev-java-client-okhttp/build.gradle.kts +++ b/brand-dev-java-client-okhttp/build.gradle.kts @@ -10,6 +10,6 @@ dependencies { implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") testImplementation(kotlin("test")) - testImplementation("org.assertj:assertj-core:3.25.3") + testImplementation("org.assertj:assertj-core:3.27.7") testImplementation("com.github.tomakehurst:wiremock-jre8:2.35.2") } diff --git a/brand-dev-java-core/build.gradle.kts b/brand-dev-java-core/build.gradle.kts index 6098014..95b0c50 100644 --- a/brand-dev-java-core/build.gradle.kts +++ b/brand-dev-java-core/build.gradle.kts @@ -33,7 +33,7 @@ dependencies { testImplementation(kotlin("test")) testImplementation(project(":brand-dev-java-client-okhttp")) testImplementation("com.github.tomakehurst:wiremock-jre8:2.35.2") - testImplementation("org.assertj:assertj-core:3.25.3") + testImplementation("org.assertj:assertj-core:3.27.7") testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3") testImplementation("org.junit.jupiter:junit-jupiter-params:5.9.3") testImplementation("org.junit-pioneer:junit-pioneer:1.9.1") diff --git a/brand-dev-java-core/src/main/kotlin/com/branddev/api/models/brand/BrandAiProductsParams.kt b/brand-dev-java-core/src/main/kotlin/com/branddev/api/models/brand/BrandAiProductsParams.kt index 478cf30..15e5122 100644 --- a/brand-dev-java-core/src/main/kotlin/com/branddev/api/models/brand/BrandAiProductsParams.kt +++ b/brand-dev-java-core/src/main/kotlin/com/branddev/api/models/brand/BrandAiProductsParams.kt @@ -7,7 +7,6 @@ import com.branddev.api.core.JsonField import com.branddev.api.core.JsonMissing import com.branddev.api.core.JsonValue import com.branddev.api.core.Params -import com.branddev.api.core.checkRequired import com.branddev.api.core.http.Headers import com.branddev.api.core.http.QueryParams import com.branddev.api.errors.BrandDevInvalidDataException @@ -32,12 +31,23 @@ private constructor( ) : Params { /** - * The domain name to analyze + * A specific URL to use directly as the starting point for extraction without domain + * resolution. Useful when you want to extract products from a specific page rather than + * discovering the site's product pages automatically. Either 'domain' or 'directUrl' must be + * provided, but not both. * - * @throws BrandDevInvalidDataException if the JSON field has an unexpected type or is - * unexpectedly missing or null (e.g. if the server responded with an unexpected value). + * @throws BrandDevInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun directUrl(): Optional = body.directUrl() + + /** + * The domain name to analyze. Either 'domain' or 'directUrl' must be provided, but not both. + * + * @throws BrandDevInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). */ - fun domain(): String = body.domain() + fun domain(): Optional = body.domain() /** * Maximum number of products to extract. @@ -57,6 +67,13 @@ private constructor( */ fun timeoutMs(): Optional = body.timeoutMs() + /** + * Returns the raw JSON value of [directUrl]. + * + * Unlike [directUrl], this method doesn't throw if the JSON field has an unexpected type. + */ + fun _directUrl(): JsonField = body._directUrl() + /** * Returns the raw JSON value of [domain]. * @@ -90,14 +107,9 @@ private constructor( companion object { - /** - * Returns a mutable builder for constructing an instance of [BrandAiProductsParams]. - * - * The following fields are required: - * ```java - * .domain() - * ``` - */ + @JvmStatic fun none(): BrandAiProductsParams = builder().build() + + /** Returns a mutable builder for constructing an instance of [BrandAiProductsParams]. */ @JvmStatic fun builder() = Builder() } @@ -120,13 +132,34 @@ private constructor( * * This is generally only useful if you are already constructing the body separately. * Otherwise, it's more convenient to use the top-level setters instead: + * - [directUrl] * - [domain] * - [maxProducts] * - [timeoutMs] */ fun body(body: Body) = apply { this.body = body.toBuilder() } - /** The domain name to analyze */ + /** + * A specific URL to use directly as the starting point for extraction without domain + * resolution. Useful when you want to extract products from a specific page rather than + * discovering the site's product pages automatically. Either 'domain' or 'directUrl' must + * be provided, but not both. + */ + fun directUrl(directUrl: String) = apply { body.directUrl(directUrl) } + + /** + * Sets [Builder.directUrl] to an arbitrary JSON value. + * + * You should usually call [Builder.directUrl] with a well-typed [String] value instead. + * This method is primarily for setting the field to an undocumented or not yet supported + * value. + */ + fun directUrl(directUrl: JsonField) = apply { body.directUrl(directUrl) } + + /** + * The domain name to analyze. Either 'domain' or 'directUrl' must be provided, but not + * both. + */ fun domain(domain: String) = apply { body.domain(domain) } /** @@ -285,13 +318,6 @@ private constructor( * Returns an immutable instance of [BrandAiProductsParams]. * * Further updates to this [Builder] will not mutate the returned instance. - * - * The following fields are required: - * ```java - * .domain() - * ``` - * - * @throws IllegalStateException if any required field is unset. */ fun build(): BrandAiProductsParams = BrandAiProductsParams( @@ -310,6 +336,7 @@ private constructor( class Body @JsonCreator(mode = JsonCreator.Mode.DISABLED) private constructor( + private val directUrl: JsonField, private val domain: JsonField, private val maxProducts: JsonField, private val timeoutMs: JsonField, @@ -318,20 +345,35 @@ private constructor( @JsonCreator private constructor( + @JsonProperty("directUrl") + @ExcludeMissing + directUrl: JsonField = JsonMissing.of(), @JsonProperty("domain") @ExcludeMissing domain: JsonField = JsonMissing.of(), @JsonProperty("maxProducts") @ExcludeMissing maxProducts: JsonField = JsonMissing.of(), @JsonProperty("timeoutMS") @ExcludeMissing timeoutMs: JsonField = JsonMissing.of(), - ) : this(domain, maxProducts, timeoutMs, mutableMapOf()) + ) : this(directUrl, domain, maxProducts, timeoutMs, mutableMapOf()) /** - * The domain name to analyze + * A specific URL to use directly as the starting point for extraction without domain + * resolution. Useful when you want to extract products from a specific page rather than + * discovering the site's product pages automatically. Either 'domain' or 'directUrl' must + * be provided, but not both. * - * @throws BrandDevInvalidDataException if the JSON field has an unexpected type or is - * unexpectedly missing or null (e.g. if the server responded with an unexpected value). + * @throws BrandDevInvalidDataException if the JSON field has an unexpected type (e.g. if + * the server responded with an unexpected value). */ - fun domain(): String = domain.getRequired("domain") + fun directUrl(): Optional = directUrl.getOptional("directUrl") + + /** + * The domain name to analyze. Either 'domain' or 'directUrl' must be provided, but not + * both. + * + * @throws BrandDevInvalidDataException if the JSON field has an unexpected type (e.g. if + * the server responded with an unexpected value). + */ + fun domain(): Optional = domain.getOptional("domain") /** * Maximum number of products to extract. @@ -351,6 +393,13 @@ private constructor( */ fun timeoutMs(): Optional = timeoutMs.getOptional("timeoutMS") + /** + * Returns the raw JSON value of [directUrl]. + * + * Unlike [directUrl], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("directUrl") @ExcludeMissing fun _directUrl(): JsonField = directUrl + /** * Returns the raw JSON value of [domain]. * @@ -388,34 +437,49 @@ private constructor( companion object { - /** - * Returns a mutable builder for constructing an instance of [Body]. - * - * The following fields are required: - * ```java - * .domain() - * ``` - */ + /** Returns a mutable builder for constructing an instance of [Body]. */ @JvmStatic fun builder() = Builder() } /** A builder for [Body]. */ class Builder internal constructor() { - private var domain: JsonField? = null + private var directUrl: JsonField = JsonMissing.of() + private var domain: JsonField = JsonMissing.of() private var maxProducts: JsonField = JsonMissing.of() private var timeoutMs: JsonField = JsonMissing.of() private var additionalProperties: MutableMap = mutableMapOf() @JvmSynthetic internal fun from(body: Body) = apply { + directUrl = body.directUrl domain = body.domain maxProducts = body.maxProducts timeoutMs = body.timeoutMs additionalProperties = body.additionalProperties.toMutableMap() } - /** The domain name to analyze */ + /** + * A specific URL to use directly as the starting point for extraction without domain + * resolution. Useful when you want to extract products from a specific page rather than + * discovering the site's product pages automatically. Either 'domain' or 'directUrl' + * must be provided, but not both. + */ + fun directUrl(directUrl: String) = directUrl(JsonField.of(directUrl)) + + /** + * Sets [Builder.directUrl] to an arbitrary JSON value. + * + * You should usually call [Builder.directUrl] with a well-typed [String] value instead. + * This method is primarily for setting the field to an undocumented or not yet + * supported value. + */ + fun directUrl(directUrl: JsonField) = apply { this.directUrl = directUrl } + + /** + * The domain name to analyze. Either 'domain' or 'directUrl' must be provided, but not + * both. + */ fun domain(domain: String) = domain(JsonField.of(domain)) /** @@ -478,21 +542,9 @@ private constructor( * Returns an immutable instance of [Body]. * * Further updates to this [Builder] will not mutate the returned instance. - * - * The following fields are required: - * ```java - * .domain() - * ``` - * - * @throws IllegalStateException if any required field is unset. */ fun build(): Body = - Body( - checkRequired("domain", domain), - maxProducts, - timeoutMs, - additionalProperties.toMutableMap(), - ) + Body(directUrl, domain, maxProducts, timeoutMs, additionalProperties.toMutableMap()) } private var validated: Boolean = false @@ -502,6 +554,7 @@ private constructor( return@apply } + directUrl() domain() maxProducts() timeoutMs() @@ -524,7 +577,8 @@ private constructor( */ @JvmSynthetic internal fun validity(): Int = - (if (domain.asKnown().isPresent) 1 else 0) + + (if (directUrl.asKnown().isPresent) 1 else 0) + + (if (domain.asKnown().isPresent) 1 else 0) + (if (maxProducts.asKnown().isPresent) 1 else 0) + (if (timeoutMs.asKnown().isPresent) 1 else 0) @@ -534,6 +588,7 @@ private constructor( } return other is Body && + directUrl == other.directUrl && domain == other.domain && maxProducts == other.maxProducts && timeoutMs == other.timeoutMs && @@ -541,13 +596,13 @@ private constructor( } private val hashCode: Int by lazy { - Objects.hash(domain, maxProducts, timeoutMs, additionalProperties) + Objects.hash(directUrl, domain, maxProducts, timeoutMs, additionalProperties) } override fun hashCode(): Int = hashCode override fun toString() = - "Body{domain=$domain, maxProducts=$maxProducts, timeoutMs=$timeoutMs, additionalProperties=$additionalProperties}" + "Body{directUrl=$directUrl, domain=$domain, maxProducts=$maxProducts, timeoutMs=$timeoutMs, additionalProperties=$additionalProperties}" } override fun equals(other: Any?): Boolean { diff --git a/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/async/BrandServiceAsync.kt b/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/async/BrandServiceAsync.kt index 4500458..a5d9434 100644 --- a/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/async/BrandServiceAsync.kt +++ b/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/async/BrandServiceAsync.kt @@ -67,15 +67,24 @@ interface BrandServiceAsync { * website and return a list of products with details such as name, description, image, pricing, * features, and more. */ - fun aiProducts(params: BrandAiProductsParams): CompletableFuture = - aiProducts(params, RequestOptions.none()) + fun aiProducts(): CompletableFuture = + aiProducts(BrandAiProductsParams.none()) /** @see aiProducts */ fun aiProducts( - params: BrandAiProductsParams, + params: BrandAiProductsParams = BrandAiProductsParams.none(), requestOptions: RequestOptions = RequestOptions.none(), ): CompletableFuture + /** @see aiProducts */ + fun aiProducts( + params: BrandAiProductsParams = BrandAiProductsParams.none() + ): CompletableFuture = aiProducts(params, RequestOptions.none()) + + /** @see aiProducts */ + fun aiProducts(requestOptions: RequestOptions): CompletableFuture = + aiProducts(BrandAiProductsParams.none(), requestOptions) + /** * Use AI to extract specific data points from a brand's website. The AI will crawl the website * and extract the requested information based on the provided data points. @@ -297,16 +306,26 @@ interface BrandServiceAsync { * Returns a raw HTTP response for `post /brand/ai/products`, but is otherwise the same as * [BrandServiceAsync.aiProducts]. */ + fun aiProducts(): CompletableFuture> = + aiProducts(BrandAiProductsParams.none()) + + /** @see aiProducts */ fun aiProducts( - params: BrandAiProductsParams + params: BrandAiProductsParams = BrandAiProductsParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture> + + /** @see aiProducts */ + fun aiProducts( + params: BrandAiProductsParams = BrandAiProductsParams.none() ): CompletableFuture> = aiProducts(params, RequestOptions.none()) /** @see aiProducts */ fun aiProducts( - params: BrandAiProductsParams, - requestOptions: RequestOptions = RequestOptions.none(), - ): CompletableFuture> + requestOptions: RequestOptions + ): CompletableFuture> = + aiProducts(BrandAiProductsParams.none(), requestOptions) /** * Returns a raw HTTP response for `post /brand/ai/query`, but is otherwise the same as diff --git a/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/blocking/BrandService.kt b/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/blocking/BrandService.kt index b467fc0..05f66f8 100644 --- a/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/blocking/BrandService.kt +++ b/brand-dev-java-core/src/main/kotlin/com/branddev/api/services/blocking/BrandService.kt @@ -67,15 +67,23 @@ interface BrandService { * website and return a list of products with details such as name, description, image, pricing, * features, and more. */ - fun aiProducts(params: BrandAiProductsParams): BrandAiProductsResponse = - aiProducts(params, RequestOptions.none()) + fun aiProducts(): BrandAiProductsResponse = aiProducts(BrandAiProductsParams.none()) /** @see aiProducts */ fun aiProducts( - params: BrandAiProductsParams, + params: BrandAiProductsParams = BrandAiProductsParams.none(), requestOptions: RequestOptions = RequestOptions.none(), ): BrandAiProductsResponse + /** @see aiProducts */ + fun aiProducts( + params: BrandAiProductsParams = BrandAiProductsParams.none() + ): BrandAiProductsResponse = aiProducts(params, RequestOptions.none()) + + /** @see aiProducts */ + fun aiProducts(requestOptions: RequestOptions): BrandAiProductsResponse = + aiProducts(BrandAiProductsParams.none(), requestOptions) + /** * Use AI to extract specific data points from a brand's website. The AI will crawl the website * and extract the requested information based on the provided data points. @@ -281,16 +289,27 @@ interface BrandService { * [BrandService.aiProducts]. */ @MustBeClosed - fun aiProducts(params: BrandAiProductsParams): HttpResponseFor = - aiProducts(params, RequestOptions.none()) + fun aiProducts(): HttpResponseFor = + aiProducts(BrandAiProductsParams.none()) /** @see aiProducts */ @MustBeClosed fun aiProducts( - params: BrandAiProductsParams, + params: BrandAiProductsParams = BrandAiProductsParams.none(), requestOptions: RequestOptions = RequestOptions.none(), ): HttpResponseFor + /** @see aiProducts */ + @MustBeClosed + fun aiProducts( + params: BrandAiProductsParams = BrandAiProductsParams.none() + ): HttpResponseFor = aiProducts(params, RequestOptions.none()) + + /** @see aiProducts */ + @MustBeClosed + fun aiProducts(requestOptions: RequestOptions): HttpResponseFor = + aiProducts(BrandAiProductsParams.none(), requestOptions) + /** * Returns a raw HTTP response for `post /brand/ai/query`, but is otherwise the same as * [BrandService.aiQuery]. diff --git a/brand-dev-java-core/src/test/kotlin/com/branddev/api/models/brand/BrandAiProductsParamsTest.kt b/brand-dev-java-core/src/test/kotlin/com/branddev/api/models/brand/BrandAiProductsParamsTest.kt index 7b7169f..43b5833 100644 --- a/brand-dev-java-core/src/test/kotlin/com/branddev/api/models/brand/BrandAiProductsParamsTest.kt +++ b/brand-dev-java-core/src/test/kotlin/com/branddev/api/models/brand/BrandAiProductsParamsTest.kt @@ -9,27 +9,36 @@ internal class BrandAiProductsParamsTest { @Test fun create() { - BrandAiProductsParams.builder().domain("domain").maxProducts(1L).timeoutMs(1L).build() + BrandAiProductsParams.builder() + .directUrl("https://example.com") + .domain("domain") + .maxProducts(1L) + .timeoutMs(1L) + .build() } @Test fun body() { val params = - BrandAiProductsParams.builder().domain("domain").maxProducts(1L).timeoutMs(1L).build() + BrandAiProductsParams.builder() + .directUrl("https://example.com") + .domain("domain") + .maxProducts(1L) + .timeoutMs(1L) + .build() val body = params._body() - assertThat(body.domain()).isEqualTo("domain") + assertThat(body.directUrl()).contains("https://example.com") + assertThat(body.domain()).contains("domain") assertThat(body.maxProducts()).contains(1L) assertThat(body.timeoutMs()).contains(1L) } @Test fun bodyWithoutOptionalFields() { - val params = BrandAiProductsParams.builder().domain("domain").build() + val params = BrandAiProductsParams.builder().build() val body = params._body() - - assertThat(body.domain()).isEqualTo("domain") } } diff --git a/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/async/BrandServiceAsyncTest.kt b/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/async/BrandServiceAsyncTest.kt index 51af267..27645b2 100644 --- a/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/async/BrandServiceAsyncTest.kt +++ b/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/async/BrandServiceAsyncTest.kt @@ -64,6 +64,7 @@ internal class BrandServiceAsyncTest { val responseFuture = brandServiceAsync.aiProducts( BrandAiProductsParams.builder() + .directUrl("https://example.com") .domain("domain") .maxProducts(1L) .timeoutMs(1L) diff --git a/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/blocking/BrandServiceTest.kt b/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/blocking/BrandServiceTest.kt index 2d696f9..b755776 100644 --- a/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/blocking/BrandServiceTest.kt +++ b/brand-dev-java-core/src/test/kotlin/com/branddev/api/services/blocking/BrandServiceTest.kt @@ -63,6 +63,7 @@ internal class BrandServiceTest { val response = brandService.aiProducts( BrandAiProductsParams.builder() + .directUrl("https://example.com") .domain("domain") .maxProducts(1L) .timeoutMs(1L) diff --git a/brand-dev-java-proguard-test/build.gradle.kts b/brand-dev-java-proguard-test/build.gradle.kts index 1be525d..74fe8a5 100644 --- a/brand-dev-java-proguard-test/build.gradle.kts +++ b/brand-dev-java-proguard-test/build.gradle.kts @@ -18,7 +18,7 @@ dependencies { testImplementation(project(":brand-dev-java")) testImplementation(kotlin("test")) testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3") - testImplementation("org.assertj:assertj-core:3.25.3") + testImplementation("org.assertj:assertj-core:3.27.7") testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.14.0") } diff --git a/build.gradle.kts b/build.gradle.kts index 5b39dcd..bc78627 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ repositories { allprojects { group = "com.branddev.api" - version = "0.1.0-alpha.27" // x-release-please-version + version = "0.1.0-alpha.28" // x-release-please-version } subprojects {