diff --git a/.docker/cluster.ci.yml b/.docker/cluster.ci.yml index 8b8f0b71..9a63ee0c 100644 --- a/.docker/cluster.ci.yml +++ b/.docker/cluster.ci.yml @@ -1,5 +1,6 @@ x-common-variables: &common-variables KURRENTDB_CLUSTER_SIZE: "3" + KURRENTDB_LICENSING__LICENSE_KEY: "${KURRENTDB_LICENSING__LICENSE_KEY:-}" services: @@ -18,6 +19,7 @@ services: networks: kdb_cluster_network: ipv4_address: "$SEC_CL_1_IP" + mac_address: "$SEC_CL_1_MAC" depends_on: - cert-gen restart: on-failure:10 @@ -37,6 +39,7 @@ services: networks: kdb_cluster_network: ipv4_address: "$SEC_CL_2_IP" + mac_address: "$SEC_CL_2_MAC" depends_on: - cert-gen restart: on-failure:10 @@ -56,6 +59,7 @@ services: networks: kdb_cluster_network: ipv4_address: "$SEC_CL_3_IP" + mac_address: "$SEC_CL_3_MAC" depends_on: - cert-gen restart: on-failure:10 diff --git a/.docker/images.env b/.docker/images.env index bb315cf0..7c0f1e8a 100644 --- a/.docker/images.env +++ b/.docker/images.env @@ -1,2 +1,2 @@ KDB_CLI_IMAGE="${KDB_CLI_IMAGE:-docker.cloudsmith.io/eventstore/eventstore-utils/es-gencert-cli:1.3}" -KDB_IMAGE="${KDB_IMAGE:-docker.io/kurrentplatform/kurrentdb:26.1}" +KDB_IMAGE="${KDB_IMAGE:-docker.io/kurrentplatform/kurrentdb:26.2}" diff --git a/.docker/shared.env b/.docker/shared.env index 2e5149a5..23f5f337 100644 --- a/.docker/shared.env +++ b/.docker/shared.env @@ -16,6 +16,9 @@ SEC_CL_SUBNET=172.22.0.0/16 SEC_CL_1_IP=172.22.0.2 SEC_CL_2_IP=172.22.0.3 SEC_CL_3_IP=172.22.0.4 +SEC_CL_1_MAC=02:42:ac:16:00:02 +SEC_CL_2_MAC=02:42:ac:16:00:03 +SEC_CL_3_MAC=02:42:ac:16:00:04 # GENCERT diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c3328f3..c035603b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,7 @@ on: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + KURRENTDB_LICENSING__LICENSE_KEY: ${{ secrets.KURRENTDB_LICENSING__LICENSE_KEY }} concurrency: @@ -89,6 +90,7 @@ jobs: popd - name: Start Cluster Nodes + if: env.KURRENTDB_LICENSING__LICENSE_KEY != '' env: SEC_GENCERT_CERTS_ROOT: ${{ github.workspace }} run: | @@ -97,6 +99,7 @@ jobs: popd - name: Cluster integration tests + if: env.KURRENTDB_LICENSING__LICENSE_KEY != '' env: SEC_CIT_CERTS_PATH: ${{ github.workspace }}/certs SEC_CIT_AUTHORITY: es.sec.local diff --git a/build.sbt b/build.sbt index ea164147..fb3a9961 100644 --- a/build.sbt +++ b/build.sbt @@ -8,6 +8,9 @@ Global / lintUnusedKeysOnLoad := false lazy val Scala3 = "3.9.0" lazy val jdkRelease = 21 +// Multi-node KurrentDB (26.2+) requires a license key, which is unavailable to fork and Dependabot PRs. +lazy val clusterLicensed = "env.KURRENTDB_LICENSING__LICENSE_KEY != ''" + lazy val sec = project .in(file(".")) .enablePlugins(NoPublishPlugin) @@ -178,6 +181,7 @@ inThisBuild( List( githubWorkflowTargetBranches := Seq("main"), githubWorkflowJavaVersions := Seq(JavaSpec.temurin(jdkRelease.toString())), + githubWorkflowEnv += "KURRENTDB_LICENSING__LICENSE_KEY" -> "${{ secrets.KURRENTDB_LICENSING__LICENSE_KEY }}", githubWorkflowBuildPreamble += WorkflowStep.Run( name = Some("Start Single Node"), commands = List("pushd .docker", "./single-node.sh up -d", "popd"), @@ -217,6 +221,7 @@ inThisBuild( WorkflowStep.Run( name = Some("Start Cluster Nodes"), commands = List("pushd .docker", "./cluster.sh up -d", "popd"), + cond = Some(clusterLicensed), env = Map( "SEC_GENCERT_CERTS_ROOT" -> "${{ github.workspace }}" ) @@ -224,6 +229,7 @@ inThisBuild( WorkflowStep.Use( UseRef.Public("nick-invision", "retry", "v2"), name = Some("Cluster integration tests"), + cond = Some(clusterLicensed), params = Map( "timeout_minutes" -> "10", "max_attempts" -> "10", diff --git a/tests/src/fit/scala/sec/api/fsuite.scala b/tests/src/fit/scala/sec/api/fsuite.scala index 6fa19507..eb9c3ec1 100644 --- a/tests/src/fit/scala/sec/api/fsuite.scala +++ b/tests/src/fit/scala/sec/api/fsuite.scala @@ -97,7 +97,7 @@ final class KdbNode private (container: KdbNode.Kdb): object KdbNode: final private val grpcPort = 2113 - final private val image = sys.env.getOrElse("KDB_IMAGE", "docker.io/kurrentplatform/kurrentdb:26.1") + final private val image = sys.env.getOrElse("KDB_IMAGE", "docker.io/kurrentplatform/kurrentdb:26.2") private[api] val maxStreams: Int = sys.env.get("SEC_FIT_MAX_STREAMS").fold(8) { raw =>