diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f459406..b2e8d3a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,10 +7,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup JDK - uses: actions/setup-java@v2 + - name: Cache + uses: coursier/cache-action@v6 + - name: Setup SBT + uses: coursier/setup-action@v1 with: - distribution: temurin - java-version: 11 + apps: sbt + jvm: adopt:11 - name: Build and Test run: sbt -v +test diff --git a/README.md b/README.md index 523d69e..733ace7 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,6 @@ You can read about reasoning behind it at [Finely Distributed](https://finelydis ## Setup -docker-it-scala works with Spotify's docker-client to communicate to docker engine through *REST API* or *unix socket*. -- [Spotify's docker-client](https://github.com/spotify/docker-client) (used in Whisk) - ```scala libraryDependencies ++= Seq( "com.whisk" %% "docker-testkit-scalatest" % "0.11.0" % "test" @@ -145,4 +142,4 @@ class MultiContainerTest assert(mongodbContainer.mappedPortOpt(27017).nonEmpty, "port 2017 is exposed") } } -``` \ No newline at end of file +``` diff --git a/build.sbt b/build.sbt index 48b0d09..fbc3277 100644 --- a/build.sbt +++ b/build.sbt @@ -1,8 +1,8 @@ lazy val commonSettings = Seq( organization := "com.whisk", - version := "0.12.0", - scalaVersion := "2.13.6", - crossScalaVersions := Seq("2.13.6", "2.12.15", "2.11.12", "3.0.2"), + version := "0.13.0", + scalaVersion := "2.13.16", + crossScalaVersions := Seq("2.13.16", "2.12.20", "3.7.0"), scalacOptions ++= Seq("-feature", "-deprecation"), Test / fork := true, licenses += ("MIT", url("http://opensource.org/licenses/MIT")), @@ -43,11 +43,19 @@ lazy val core = .settings(commonSettings: _*) .settings( name := "docker-testkit-core", - libraryDependencies ++= Seq( - "org.slf4j" % "slf4j-api" % "1.7.25", - "com.spotify" % "docker-client" % "8.16.0", - "com.google.code.findbugs" % "jsr305" % "3.0.1" - ) + libraryDependencies ++= { + val base = Seq( + "org.slf4j" % "slf4j-api" % "1.7.25", + "org.mandas" % "docker-client" % "9.0.3", + "com.google.code.findbugs" % "jsr305" % "3.0.1" + ) + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((3, _)) => + base :+ ("org.immutables" % "value" % "2.9.3" % Provided) + case _ => + base + } + } ) lazy val scalatest = @@ -87,10 +95,17 @@ lazy val coreShaded = .settings(commonSettings: _*) .settings( name := "docker-testkit-core-shaded", - libraryDependencies ++= - Seq( - "com.spotify" % "docker-client" % "8.16.0" classifier "shaded", + libraryDependencies ++= { + val base = Seq( + "org.mandas" % "docker-client" % "9.0.3", "com.google.code.findbugs" % "jsr305" % "3.0.1" - ), + ) + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((3, _)) => + base :+ ("org.immutables" % "value" % "2.9.3" % Provided) + case _ => + base + } + }, target := baseDirectory.value / "target-shaded" ) diff --git a/core/src/main/scala/com/whisk/docker/testkit/BaseContainer.scala b/core/src/main/scala/com/whisk/docker/testkit/BaseContainer.scala index 8590792..60e1ee0 100644 --- a/core/src/main/scala/com/whisk/docker/testkit/BaseContainer.scala +++ b/core/src/main/scala/com/whisk/docker/testkit/BaseContainer.scala @@ -2,7 +2,7 @@ package com.whisk.docker.testkit import java.util.concurrent.atomic.AtomicReference -import com.spotify.docker.client.messages.ContainerInfo +import org.mandas.docker.client.messages.ContainerInfo import org.slf4j.LoggerFactory import scala.collection.JavaConverters._ diff --git a/core/src/main/scala/com/whisk/docker/testkit/ContainerCommandExecutor.scala b/core/src/main/scala/com/whisk/docker/testkit/ContainerCommandExecutor.scala index a6307b4..110ab75 100644 --- a/core/src/main/scala/com/whisk/docker/testkit/ContainerCommandExecutor.scala +++ b/core/src/main/scala/com/whisk/docker/testkit/ContainerCommandExecutor.scala @@ -3,12 +3,12 @@ package com.whisk.docker.testkit import java.nio.charset.StandardCharsets import java.util.concurrent.TimeUnit -import com.google.common.io.Closeables -import com.spotify.docker.client.DockerClient.{AttachParameter, RemoveContainerParam} -import com.spotify.docker.client.messages._ -import com.spotify.docker.client.{DockerClient, LogMessage, LogStream} +import org.mandas.docker.client.DockerClient.RemoveContainerParam +import org.mandas.docker.client.messages._ +import org.mandas.docker.client.{DockerClient, LogMessage, LogStream} import scala.concurrent.{ExecutionContext, Future, Promise} +import scala.util.Try class StartFailedException(msg: String) extends Exception(msg) @@ -57,8 +57,14 @@ class ContainerCommandExecutor(val client: DockerClient) { private def logStreamFuture(id: String, withErr: Boolean)(implicit ec: ExecutionContext ): Future[LogStream] = { - val baseParams = List(AttachParameter.STDOUT, AttachParameter.STREAM, AttachParameter.LOGS) - val logParams = if (withErr) AttachParameter.STDERR :: baseParams else baseParams + val baseParams = List( + DockerClient.AttachParameter.STDOUT, + DockerClient.AttachParameter.STREAM, + DockerClient.AttachParameter.LOGS + ) + val logParams = + if (withErr) DockerClient.AttachParameter.STDERR :: baseParams + else baseParams Future(scala.concurrent.blocking(client.attachContainer(id, logParams: _*))) } @@ -90,7 +96,7 @@ class ContainerCommandExecutor(val client: DockerClient) { val str = StandardCharsets.US_ASCII.decode(t.content()).toString if (f(str)) { p.trySuccess(()) - Closeables.close(stream, true) + Try(client.close()) } } }) @@ -113,7 +119,6 @@ class ContainerCommandExecutor(val client: DockerClient) { ) } - def close(): Unit = { - Closeables.close(client, true) - } + def close(): Unit = Try(client.close()) + } diff --git a/core/src/main/scala/com/whisk/docker/testkit/ContainerSpec.scala b/core/src/main/scala/com/whisk/docker/testkit/ContainerSpec.scala index a7a387c..fff77f1 100644 --- a/core/src/main/scala/com/whisk/docker/testkit/ContainerSpec.scala +++ b/core/src/main/scala/com/whisk/docker/testkit/ContainerSpec.scala @@ -2,8 +2,8 @@ package com.whisk.docker.testkit import java.util.Collections -import com.spotify.docker.client.messages.{ContainerConfig, HostConfig, PortBinding} -import com.spotify.docker.client.messages.HostConfig.Bind +import org.mandas.docker.client.messages.{ContainerConfig, HostConfig, PortBinding} +import org.mandas.docker.client.messages.HostConfig.Bind import scala.collection.JavaConverters._ diff --git a/core/src/main/scala/com/whisk/docker/testkit/DockerContainerManager.scala b/core/src/main/scala/com/whisk/docker/testkit/DockerContainerManager.scala index f410eb9..0a69c01 100644 --- a/core/src/main/scala/com/whisk/docker/testkit/DockerContainerManager.scala +++ b/core/src/main/scala/com/whisk/docker/testkit/DockerContainerManager.scala @@ -2,8 +2,8 @@ package com.whisk.docker.testkit import java.util.concurrent.{ConcurrentHashMap, TimeUnit} -import com.spotify.docker.client.exceptions.ImageNotFoundException -import com.spotify.docker.client.messages.ContainerCreation +import org.mandas.docker.client.exceptions.ImageNotFoundException +import org.mandas.docker.client.messages.ContainerCreation import org.slf4j.LoggerFactory import scala.concurrent.{Await, ExecutionContext, Future} diff --git a/samples/src/main/scala/com/whisk/docker/testkit/DockerClickhouseService.scala b/samples/src/main/scala/com/whisk/docker/testkit/DockerClickhouseService.scala index d88517d..7f221dd 100644 --- a/samples/src/main/scala/com/whisk/docker/testkit/DockerClickhouseService.scala +++ b/samples/src/main/scala/com/whisk/docker/testkit/DockerClickhouseService.scala @@ -1,13 +1,14 @@ package com.whisk.docker.testkit -import com.spotify.docker.client.messages.PortBinding +import org.mandas.docker.client.messages.PortBinding import com.whisk.docker.testkit.scalatest.DockerTestKitForAll import org.scalatest.Suite import scala.concurrent.duration._ trait DockerClickhouseService extends DockerTestKitForAll { self: Suite => - override val dockerTestTimeouts: DockerTestTimeouts = DockerTestTimeouts(pull = 10.minutes, init = 10.minutes, stop = 1.minutes) + override val dockerTestTimeouts: DockerTestTimeouts = + DockerTestTimeouts(pull = 10.minutes, init = 10.minutes, stop = 1.minutes) def ClickhouseAdvertisedPort = 8123 def ClickhouseExposedPort = 8123 @@ -20,14 +21,14 @@ trait DockerClickhouseService extends DockerTestKitForAll { self: Suite => .withPortBindings((ClickhouseAdvertisedPort, PortBinding.of("0.0.0.0", ClickhouseExposedPort))) .withReadyChecker( DockerReadyChecker - .Jdbc( - driverClass = "com.clickhouse.jdbc.ClickHouseDriver", - user = ClickhouseUser, - password = Some(ClickhousePassword) - ) + .Jdbc( + driverClass = "com.clickhouse.jdbc.ClickHouseDriver", + user = ClickhouseUser, + password = Some(ClickhousePassword) + ) .looped(15, 1.second) - ) - .toContainer + ) + .toContainer override val managedContainers: ManagedContainers = clickhouseContainer.toManagedContainer } diff --git a/samples/src/main/scala/com/whisk/docker/testkit/DockerPostgresService.scala b/samples/src/main/scala/com/whisk/docker/testkit/DockerPostgresService.scala index 2eb0fb0..be9ac86 100644 --- a/samples/src/main/scala/com/whisk/docker/testkit/DockerPostgresService.scala +++ b/samples/src/main/scala/com/whisk/docker/testkit/DockerPostgresService.scala @@ -1,6 +1,6 @@ package com.whisk.docker.testkit -import com.spotify.docker.client.messages.PortBinding +import org.mandas.docker.client.messages.PortBinding import com.whisk.docker.testkit.scalatest.DockerTestKitForAll import org.scalatest.Suite diff --git a/scalatest/src/main/scala/com/whisk/docker/testkit/scalatest/DockerTestKitForAll.scala b/scalatest/src/main/scala/com/whisk/docker/testkit/scalatest/DockerTestKitForAll.scala index b13d5ec..6d9bb17 100644 --- a/scalatest/src/main/scala/com/whisk/docker/testkit/scalatest/DockerTestKitForAll.scala +++ b/scalatest/src/main/scala/com/whisk/docker/testkit/scalatest/DockerTestKitForAll.scala @@ -2,16 +2,17 @@ package com.whisk.docker.testkit.scalatest import java.util.concurrent.ForkJoinPool -import com.spotify.docker.client.{DefaultDockerClient, DockerClient} +import org.mandas.docker.client.{DockerClient} import com.whisk.docker.testkit._ import org.scalatest.{Args, Status, Suite, SuiteMixin} import scala.concurrent.ExecutionContext import scala.language.implicitConversions +import org.mandas.docker.client.builder.DockerClientBuilder trait DockerTestKitForAll extends SuiteMixin { self: Suite => - val dockerClient: DockerClient = DefaultDockerClient.fromEnv().build() + val dockerClient: DockerClient = DockerClientBuilder.fromEnv().build(); val dockerExecutionContext: ExecutionContext = ExecutionContext.fromExecutor(new ForkJoinPool())