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()
}
-
}