def owPath = System.getenv("OPENWHISK_HOME") ?: '../open'
def owDirectory = new File(owPath)

if (!owDirectory.exists()) {
    throw new GradleScriptException("Environment variable OPENWHISK_HOME must point to a valid OpenWhisk build", null)
}


include 'common:scala'; project(':common:scala').projectDir = new File(owDirectory, 'common/scala')
include 'core:controller'; project(':core:controller').projectDir = new File(owDirectory, 'core/controller')
include 'core:invoker'; project(':core:invoker').projectDir = new File(owDirectory, 'core/invoker')
include 'whisktests'; project(':whisktests').projectDir = new File(owDirectory, 'tests')

include 'tests'

include 'core:javaAction'

rootProject.name = 'runtime-java'

gradle.ext.scala = [
    version: '2.11.8',
    compileFlags: ['-feature', '-unchecked', '-deprecation', '-Xfatal-warnings', '-Ywarn-unused-import']
]

gradle.ext.scalafmt = [
    version: '1.5.0',
    config: new File(rootProject.projectDir, '.scalafmt.conf')
]
