buildscript { ext.kotlin_version = "1.6.10" ext.CI_PROJECT_ID = System.env.CI_PROJECT_ID repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" } } apply plugin: "org.jetbrains.kotlin.jvm" apply plugin: "java-library" apply plugin: "java-test-fixtures" apply plugin: "maven-publish" apply plugin: "kotlinx-serialization" group = "org.domaindrivenarchitecture.provs" version = "0.11.1-SNAPSHOT" repositories { mavenCentral() } java { toolchain { languageVersion = JavaLanguageVersion.of(11) } } test { // set properties for the tests def propertiesForTests = ["testdockerwithoutsudo"] for (def prop : propertiesForTests) { def value = System.getProperty(prop) if (value != null) { systemProperty prop, value } } useJUnitPlatform { def excludedTags = System.getProperty("excludeTags") if (System.getProperty("excludeTags") != null) { excludeTags(excludedTags.split(",")) } if (System.getenv("CI_JOB_TOKEN") != null) { excludeTags("containernonci") } } } compileJava.options.debugOptions.debugLevel = "source,lines,vars" compileTestFixturesJava.options.debugOptions.debugLevel = "source,lines,vars" compileTestJava.options.debugOptions.debugLevel = "source,lines,vars" // https://stackoverflow.com/questions/21904269/configure-gradle-to-publish-sources-and-javadoc java { withSourcesJar() withJavadocJar() } dependencies { api("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version") api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2") api("org.jetbrains.kotlinx:kotlinx-serialization-core:1.3.2") api("org.jetbrains.kotlinx:kotlinx-cli:0.3.4") api('com.charleskorn.kaml:kaml:0.43.0') api("org.slf4j:slf4j-api:1.7.36") api('ch.qos.logback:logback-classic:1.2.11') api('ch.qos.logback:logback-core:1.2.11') implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version") implementation("com.hierynomus:sshj:0.32.0") testFixturesApi("org.junit.jupiter:junit-jupiter-api:5.8.2") testFixturesApi('io.mockk:mockk:1.12.3') testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.2") } task uberjarDesktop(type: Jar) { from sourceSets.main.output dependsOn configurations.runtimeClasspath from { configurations.runtimeClasspath.findAll { it.name.endsWith("jar") }.collect { zipTree(it) } } { duplicatesStrategy(DuplicatesStrategy.EXCLUDE) exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA" } manifest { attributes "Implementation-Title": "Uberjar of provs", "Implementation-Version": project.version, "Main-Class": "org.domaindrivenarchitecture.provs.desktop.application.ApplicationKt" } archiveFileName = "provs-desktop.jar" } task uberjarServer(type: Jar) { from sourceSets.main.output dependsOn configurations.runtimeClasspath from { configurations.runtimeClasspath.findAll { it.name.endsWith("jar") }.collect { zipTree(it) } } { duplicatesStrategy(DuplicatesStrategy.EXCLUDE) exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA" } manifest { attributes "Implementation-Title": "Uberjar of provs", "Implementation-Version": project.version, "Main-Class": "org.domaindrivenarchitecture.provs.server.application.ApplicationKt" } archiveFileName = "provs-server.jar" } task uberjarSyspec(type: Jar) { from sourceSets.main.output dependsOn configurations.runtimeClasspath from { configurations.runtimeClasspath.findAll { it.name.endsWith("jar") }.collect { zipTree(it) } } { duplicatesStrategy(DuplicatesStrategy.EXCLUDE) exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA" } manifest { attributes "Implementation-Title": "Uberjar of provs", "Implementation-Version": project.version, "Main-Class": "org.domaindrivenarchitecture.provs.syspec.application.ApplicationKt" } archiveFileName = "provs-syspec.jar" } def projectRoot = rootProject.projectDir // copy jar to /usr/local/bin and make it executable // Remark: to be able to use it you must have jarwrapper installed (sudo apt install jarwrapper) task installlocally { dependsOn(uberjarServer, uberjarDesktop, uberjarSyspec) doLast { exec { commandLine("sh", "-c", "sudo cp $projectRoot/build/libs/provs-server.jar /usr/local/bin/") } exec { commandLine("sh", "-c", "sudo cp $projectRoot/build/libs/provs-desktop.jar /usr/local/bin/") } exec { commandLine("sh", "-c", "sudo cp $projectRoot/build/libs/provs-syspec.jar /usr/local/bin/") } exec { commandLine("sh", "-c", "sudo chmod 755 /usr/local/bin/provs-server.jar") } exec { commandLine("sh", "-c", "sudo chmod 755 /usr/local/bin/provs-desktop.jar") } exec { commandLine("sh", "-c", "sudo chmod 755 /usr/local/bin/provs-syspec.jar") } } } task sourceJar(type: Jar, dependsOn: classes) { from sourceSets.main.allSource archiveClassifier.set("sources") } publishing { publications { library(MavenPublication) { from components.java } } repositories { if (System.getenv("CI_JOB_TOKEN") != null) { // see https://docs.gitlab.com/ee/user/packages/maven_repository/index.html maven { url "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/maven" name "GitLab" credentials(HttpHeaderCredentials) { name = "Job-Token" value = System.getenv("CI_JOB_TOKEN") } authentication { header(HttpHeaderAuthentication) } } } else { mavenLocal() } } }