buildscript { ext.kotlin_version = '1.5.21' 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.8.29-SNAPSHOT' repositories { mavenCentral() } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } } 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 { 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" sourceCompatibility = 1.11 targetCompatibility = 1.11 // https://stackoverflow.com/questions/21904269/configure-gradle-to-publish-sources-and-javadoc java { withSourcesJar() withJavadocJar() } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2" implementation "org.jetbrains.kotlinx:kotlinx-serialization-core:1.2.2" implementation "org.jetbrains.kotlinx:kotlinx-cli:0.3.2" implementation 'com.charleskorn.kaml:kaml:0.35.2' implementation group: 'com.hierynomus', name: 'sshj', version: '0.31.0' api "org.slf4j:slf4j-api:1.7.32" api "ch.qos.logback:logback-classic:1.2.5" api "ch.qos.logback:logback-core:1.2.5" testFixturesApi group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2' // testImplementation("io.mockk:mockk:1.12.0") testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.2' } //create a single Jar with all dependencies excl. Kotlin libs without version-number task fatJarLatest(type: Jar) { from { configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) } } exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' duplicatesStrategy(DuplicatesStrategy.EXCLUDE) manifest { attributes 'Implementation-Title': 'Fatjar of provs', 'Implementation-Version': project.version, 'Main-Class': 'org.domaindrivenarchitecture.provs.workplace.application.CliKt' } with jar archiveFileName = 'provs.jar' } task fatJarK3s(type: Jar) { from { configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) } } exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' duplicatesStrategy(DuplicatesStrategy.EXCLUDE) manifest { attributes 'Implementation-Title': 'Fatjar of provs k3s', 'Implementation-Version': project.version, 'Main-Class': 'org.domaindrivenarchitecture.provs.extensions.server_software.k3s.application.CliKt' } with jar archiveFileName = 'provs-server.jar' } task uberjarWorkplace(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.workplace.application.CliKt' } archiveFileName = 'provs-workplace.jar' } task uberjarEntry(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': 'Gradle Jar File Example', 'Implementation-Version': project.version, 'Main-Class': 'org.domaindrivenarchitecture.provs.core.entry.EntryKt' } archiveFileName = 'provs-entry.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() } } }