import java.nio.charset.StandardCharsets import java.nio.file.Files buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlin_version}") classpath 'com.bmuschko:gradle-docker-plugin:3.2.1' classpath "org.yaml:snakeyaml:1.19" } } import org.yaml.snakeyaml.DumperOptions plugins { id 'com.craigburke.client-dependencies' version '1.4.0' } group = "${parent.group}.irs-demo" clientDependencies { registry 'realBower', type:'bower', url:'https://registry.bower.io' realBower { "angular"("1.5.8") "jquery"("^3.0.0") "angular-route"("1.5.8") "lodash"("^4.13.1") "angular-fcsa-number"("^1.5.3") "jquery.maskedinput"("^1.4.1") "requirejs"("^2.2.0") "semantic-ui"("^2.2.2", into: "semantic") } // put the JS dependencies into src directory so it can easily be referenced // from HTML files in webapp frontend, useful for testing/development // Note that this dir is added to .gitignore installDir = 'src/main/resources/static/js/bower_components' } // Spring Boot plugin adds a numerous hardcoded dependencies in the version much lower then Corda expects // causing the problems in runtime. Those can be changed by manipulating above properties // See https://github.com/spring-gradle-plugins/dependency-management-plugin/blob/master/README.md#changing-the-value-of-a-version-property ext['artemis.version'] = "$artemis_version" ext['hibernate.version'] = "$hibernate_version" apply plugin: 'kotlin' apply plugin: 'kotlin-spring' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'project-report' apply plugin: 'application' configurations { demoArtifacts.extendsFrom testRuntime } dependencies { compile('org.springframework.boot:spring-boot-starter-web') { exclude module: "spring-boot-starter-logging" exclude module: "logback-classic" } compile("com.fasterxml.jackson.module:jackson-module-kotlin:2.8.9") compile project(":client:rpc") compile project(":client:jackson") compile project(":test-utils") compile project(path: ":samples:irs-demo:cordapp", configuration: "demoArtifacts") testCompile('org.springframework.boot:spring-boot-starter-test') { exclude module: "spring-boot-starter-logging" exclude module: "logback-classic" } } jar { from sourceSets.test.output dependsOn clientInstall from("src/main/resources/static/js/bower_components") { into "static/js/bower_components" } } def docker_dir = file("$project.buildDir/docker") task deployWebapps(type: Copy, dependsOn: ['jar', 'bootRepackage']) { ext.webappDir = file("build/webapps") from(jar.outputs) from("src/test/resources/scripts/") { filter { it .replace('#JAR_PATH#', jar.archiveName) .replace('#DIR#', ext.webappDir.getAbsolutePath()) } } into ext.webappDir } task demoJar(type: Jar) { classifier "test" from sourceSets.test.output } artifacts { demoArtifacts demoJar } task createDockerfile(type: com.bmuschko.gradle.docker.tasks.image.Dockerfile, dependsOn: [bootRepackage]) { destFile = file("$docker_dir/Dockerfile") from 'azul/zulu-openjdk-alpine:8u152' copyFile jar.archiveName, "/opt/irs/web/" workingDir "/opt/irs/web/" defaultCommand "sh", "-c", "java -Dcorda.host=\$CORDA_HOST -jar ${jar.archiveName}" } task prepareDockerDir(type: Copy, dependsOn: [bootRepackage, createDockerfile]) { from jar into docker_dir } task generateDockerCompose(dependsOn: [prepareDockerDir]) { def outFile = new File(project.buildDir, "docker-compose.yml") ext['dockerComposePath'] = outFile doLast { def dockerComposeObject = [ "version": "3", "services": [ "web-a": [ "build": "$docker_dir".toString(), "environment": [ "CORDA_HOST": "bank-a:10003" ], "ports": ["8080"] ], "web-b": [ "build": "$docker_dir".toString(), "environment": [ "CORDA_HOST": "bank-b:10003" ], "ports": ["8080"] ] ] ] def options = new org.yaml.snakeyaml.DumperOptions() options.indent = 2 options.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK def dockerComposeContent = new org.yaml.snakeyaml.Yaml(options).dump(dockerComposeObject) Files.write(outFile.toPath(), dockerComposeContent.getBytes(StandardCharsets.UTF_8)) } outputs.file(outFile) }