diff --git a/.editorconfig b/.editorconfig index 36672a8..092451e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,9 +2,15 @@ root = true [*] charset = utf-8 +end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true -end_of_line = lf indent_style = space indent_size = 4 -max_line_length = 130 \ No newline at end of file +max_line_length = 130 + +[*.{yml,yaml,toml,json}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b6e65ec..a1b05ff 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,9 +8,9 @@ updates: - package-ecosystem: "gradle" # See documentation for possible values directory: "/" # Location of package manifests schedule: - interval: "weekly" + interval: "monthly" - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "weekly" + interval: "monthly" rebase-strategy: "disabled" diff --git a/README.md b/README.md index 8ecd15a..fc3dda0 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # kolbasa -Kolbasa is a small, efficient and capable Kotlin library to add PostgreSQL-based queues to your project. +**kolbasa** — a reliable message & job queue for Java & Kotlin, built on PostgreSQL. Use the database you already have — no Kafka, no RabbitMQ. Supports transactional sends, deduplication, delays, retries, dead-letter & archive queues, and batching. ## Features * PostgreSQL as a persistent storage @@ -35,14 +35,14 @@ version 10 and above. ## How to add Kolbasa into your project ### Gradle ```groovy -implementation "io.github.vgv:kolbasa:0.184.0" +implementation "io.github.vgv:kolbasa:0.198.0" ``` ### Maven ```xml io.github.vgv kolbasa - 0.184.0 + 0.198.0 ``` diff --git a/build.gradle.kts b/build.gradle.kts index 54c9c7c..a43b0bc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmDefaultMode import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { - java alias(libs.plugins.kotlin.jvm) signing `maven-publish` @@ -32,7 +31,6 @@ dependencies { compileOnly(libs.opentelemetry.semconv) compileOnly(libs.opentelemetry.instrumentation.api) compileOnly(libs.opentelemetry.instrumentation.api.incubator) - // --------------------------------------------------------------------------------- // Test testImplementation(libs.junit.jupiter) @@ -54,6 +52,7 @@ dependencies { kotlin { jvmToolchain(17) compilerOptions { + // Pin to 1.9 so the published bytecode stays consumable by projects on older Kotlin compilers. apiVersion = KotlinVersion.KOTLIN_1_9 languageVersion = KotlinVersion.KOTLIN_1_9 // We need JVM default methods for interfaces, but don't need the compatibility bridges @@ -84,18 +83,18 @@ tasks.register("example") { // Unit tests settings tasks.withType { + enableAssertions = true + // enable parallel tests execution systemProperties["junit.jupiter.execution.parallel.enabled"] = true systemProperties["junit.jupiter.execution.parallel.mode.default"] = "concurrent" - // JUnit settings - useJUnitPlatform { - enableAssertions = true - testLogging { - exceptionFormat = TestExceptionFormat.FULL - events = setOf(TestLogEvent.FAILED, TestLogEvent.SKIPPED) - showStandardStreams = false - } + useJUnitPlatform() + + testLogging { + exceptionFormat = TestExceptionFormat.FULL + events = setOf(TestLogEvent.FAILED, TestLogEvent.SKIPPED) + showStandardStreams = false } } @@ -185,8 +184,8 @@ tasks.withType { tasks.register("printFinalReleaseNote") { doLast { printFinalReleaseNote( - groupId = "io.github.vgv", - artifactId = "kolbasa", + groupId = SettingsProvider.ARTIFACT_GROUP_ID, + artifactId = SettingsProvider.ARTIFACT_NAME, sanitizedVersion = project.sanitizeVersion() ) } @@ -196,8 +195,8 @@ tasks.register("printFinalReleaseNote") { tasks.register("printDevSnapshotReleaseNote") { doLast { printDevSnapshotReleaseNote( - groupId = "io.github.vgv", - artifactId = "kolbasa", + groupId = SettingsProvider.ARTIFACT_GROUP_ID, + artifactId = SettingsProvider.ARTIFACT_NAME, sanitizedVersion = project.sanitizeVersion() ) } @@ -208,8 +207,8 @@ publishing { publications { create("mavenJava") { from(components["java"]) - groupId = "io.github.vgv" - artifactId = "kolbasa" + groupId = SettingsProvider.ARTIFACT_GROUP_ID + artifactId = SettingsProvider.ARTIFACT_NAME version = project.sanitizeVersion() versionMapping { usage("java-api") { @@ -221,7 +220,7 @@ publishing { } pom { name.set("Kolbasa") - description.set("Kotlin library for PostgreSQL queues") + description.set("A reliable message & job queue for Java & Kotlin, built on PostgreSQL.") url.set("https://github.com/vgv/kolbasa") licenses { license { @@ -255,7 +254,7 @@ nexusPublishing { repositories { sonatype { useStaging.set(!project.isSnapshotVersion()) - packageGroup.set("io.github.vgv") + packageGroup.set(SettingsProvider.ARTIFACT_GROUP_ID) username = settingsProvider.sonatypeUsername password = settingsProvider.sonatypePassword nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/")) @@ -305,11 +304,8 @@ fun printFinalReleaseNote(groupId: String, artifactId: String, sanitizedVersion: println("Discover on Maven Central:") println(" https://repo1.maven.org/maven2/${groupId.replace('.', '/')}/$artifactId/") println() - println("Edit or delete artifacts on OSS Nexus Repository Manager:") - println(" https://oss.sonatype.org/#nexus-search;gav~$groupId~~~~") - println() - println("Control staging repositories on OSS Nexus Repository Manager:") - println(" https://oss.sonatype.org/#stagingRepositories") + println("View on Central Portal:") + println(" https://central.sonatype.com/artifact/$groupId/$artifactId/$sanitizedVersion") println() println("========================================================") println() @@ -358,7 +354,10 @@ class SettingsProvider { lazyMessage = { "Both $SONATYPE_USERNAME_PROPERTY and $SONATYPE_PASSWORD_PROPERTY environment variables must not be empty" } ) - private companion object { + companion object { + const val ARTIFACT_GROUP_ID = "io.github.vgv" + const val ARTIFACT_NAME = "kolbasa" + // it should be a so-called "ascii-armored in-memory PGP secret key" private const val GPG_SIGNING_KEY_PROPERTY = "GPG_SIGNING_KEY" private const val GPG_SIGNING_PASSWORD_PROPERTY = "GPG_SIGNING_PASSWORD" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ce11cd7..dbcdb30 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,15 +12,15 @@ nexus = "2.0.0" prometheus = "1.6.1" opentelemetry = "1.62.0" -opentelemetry-instrumentation = "2.27.0" -opentelemetry-instrumentation-incubator = "2.27.0-alpha" +opentelemetry-instrumentation = "2.28.1" +opentelemetry-instrumentation-incubator = "2.28.1-alpha" opentelemetry-semconv = "1.41.1" hikaricp = "7.0.2" postgresql = "42.7.11" logback = "1.5.32" testcontainers = "2.0.5" -junit = "6.0.3" +junit = "6.1.0" mockk = "1.14.9" [libraries] diff --git a/settings.gradle.kts b/settings.gradle.kts index 42d062e..3dc3e28 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -5,5 +5,4 @@ pluginManagement { gradlePluginPortal() mavenCentral() } - }