From 1995a7b200088c3fb238d9fcb56500c1931e77cf Mon Sep 17 00:00:00 2001 From: bom Date: Thu, 9 Feb 2023 11:43:10 +0100 Subject: [PATCH] Add support for gradle files --- build.gradle | 6352 ++++++++++++++++++++++++++++++++++++++++++++++++ devops_test.py | 39 +- 2 files changed, 6388 insertions(+), 3 deletions(-) create mode 100644 build.gradle diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..6a8577e --- /dev/null +++ b/build.gradle @@ -0,0 +1,6352 @@ +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1" + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + 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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" +} + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} +buildscript { + ext.kotlin_version = "1.7.0" + 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.17.1-SNAPSHOT" + +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") + + implementation("aws.sdk.kotlin:s3:0.17.1-beta") + + 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 apt-get update & sudo apt-get install jarwrapper") } + 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() + } + } +} diff --git a/devops_test.py b/devops_test.py index 190ea5d..0ba4358 100644 --- a/devops_test.py +++ b/devops_test.py @@ -1,13 +1,13 @@ import json from enum import Enum +import re def init_project(): # validate_values() - version = Version('package.json') + version = Version('build.gradle') version.parse() - version.increment(ReleaseLevel.MAJOR) + version.increment(ReleaseLevel.SNAPSHOT) version.write() - print(version.get()) def prepare_release(): pass @@ -33,6 +33,8 @@ class Version(): match self.config_file_type: case 'json': self.__parse_json() + case 'gradle': + self.__parse_gradle() def __parse_json(self): with open(self.config_file_path, 'r') as json_file: @@ -42,6 +44,25 @@ class Version(): json_version = json_version.replace('-SNAPSHOT', '') self.version = [int(x) for x in json_version.split('.')] + def __parse_gradle(self): + with open(self.config_file_path, 'r') as gradle_file: + contents = gradle_file.read() + version_line = re.search("\nversion = .*\n", contents) + if version_line is None: + raise Exception("Version not found in gradle file") + version_line = version_line.group() + version_string = re.search('[0-9]*\.[0-9]*\.[0-9]*(-SNAPSHOT)?', version_line) + if version_string is None: + raise Exception("Version not found in gradle file") + + version_string = version_string.group() + if '-SNAPSHOT' in version_string: + self.is_snapshot = True + version_string = version_string.replace('-SNAPSHOT', '') + + self.version = [int(x) for x in version_string.split('.')] + + def increment(self, level: ReleaseLevel): self.is_snapshot = False match level: @@ -61,6 +82,10 @@ class Version(): match self.config_file_type: case 'json': self.__write_json() + case 'gradle': + self.__write_gradle() + case _: + raise Exception(f'The file type "{self.config_file_type}" is not implemented') def __write_json(self): with open(self.config_file_path, 'r+') as json_file: @@ -70,6 +95,14 @@ class Version(): json.dump(json_data, json_file, indent=4) json_file.truncate() + def __write_gradle(self): + with open(self.config_file_path, 'r+') as gradle_file: + gradle_contents = gradle_file.read() + version_substitute = re.sub("\nversion = .*\n", f'\nversion = "{self.get()}"\n', gradle_contents) + gradle_file.seek(0) + gradle_file.write(version_substitute) + gradle_file.truncate() + def get(self) -> str: version_string = ".".join([str(x) for x in self.version]) if self.is_snapshot: