// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

apply plugin: "nebula.clojure"

// Clojure doesn't support Java 12+
// https://clojure.org/releases/downloads#_java_compatibility
if(JavaVersion.current().isJava12Compatible()) {
  // Disable all tasks for the `kudu-jepsen` sub-project.
  gradle.taskGraph.whenReady {
    gradle.taskGraph.allTasks.each {
      it.onlyIf { it.project != project }
    }
  }
}

repositories {
  maven { url "https://clojars.org/repo/" }
}

dependencies {
  implementation project(path: ":kudu-client", configuration: "shadow")
  implementation project(path: ":kudu-test-utils", configuration: "shadow")
  implementation libs.clojure
  implementation libs.clojureToolsCli
  implementation libs.jepsen

  implementation libs.yetusAnnotations
}

compileClojure {
  aotCompile = true
}
// Jepsen tests require specific infrastructure and do not run as part of the regular tests.
clojureTest.enabled = false

// Run the Jepsen tests.
task runJepsen(type: JavaExec) {
  def masterNodes = propertyWithDefault("masterNodes", "m0")
  def tserverNodes = propertyWithDefault("tserverNodes", "t0,t1,t2,t3,t4")
  def sshKeyPath = propertyWithDefault("sshKeyPath", "")
  def iterNum = propertyWithDefault("iterNum", "1")
  classpath sourceSets.main.clojure.srcDirs,
      sourceSets.test.clojure.srcDirs,
      sourceSets.test.runtimeClasspath,
      sourceSets.main.runtimeClasspath,
  main = "clojure.main"
  args = [
      "$projectDir/src/utils/kudu_test_runner.clj",
      "--masters=${masterNodes}",
      "--tservers=${tserverNodes}",
      "--ssh-key-path=${sshKeyPath}",
      "--iter-num=${iterNum}"
  ]
}

// We don't publish kudu-jepsen
publish.enabled = false
publishToMavenLocal.enabled = false

// SpotBugs doesn't work on Clojure.
spotbugsMain.enabled = false
spotbugsTest.enabled = false