289 lines
10 KiB
Groovy
289 lines
10 KiB
Groovy
import org.apache.tools.ant.taskdefs.condition.*
|
|
import org.gradle.internal.logging.text.*
|
|
import org.apereo.cas.metadata.*
|
|
import java.nio.file.*
|
|
import org.gradle.internal.logging.text.*
|
|
import static org.gradle.internal.logging.text.StyledTextOutput.Style
|
|
|
|
buildscript {
|
|
repositories {
|
|
if (project.privateRepoUrl) {
|
|
maven {
|
|
url project.privateRepoUrl
|
|
credentials {
|
|
username = project.privateRepoUsername
|
|
password = System.env.PRIVATE_REPO_TOKEN
|
|
}
|
|
}
|
|
}
|
|
mavenLocal()
|
|
mavenCentral()
|
|
gradlePluginPortal()
|
|
maven {
|
|
url 'https://oss.sonatype.org/content/repositories/snapshots'
|
|
mavenContent { snapshotsOnly() }
|
|
}
|
|
maven {
|
|
url "https://repo.spring.io/milestone"
|
|
mavenContent { releasesOnly() }
|
|
}
|
|
}
|
|
dependencies {
|
|
classpath "org.springframework.boot:spring-boot-gradle-plugin:${project.springBootVersion}"
|
|
classpath "io.freefair.gradle:maven-plugin:${project.gradleFreeFairPluginVersion}"
|
|
classpath "io.freefair.gradle:lombok-plugin:${project.gradleFreeFairPluginVersion}"
|
|
classpath "io.spring.gradle:dependency-management-plugin:${project.gradleDependencyManagementPluginVersion}"
|
|
classpath "com.google.cloud.tools:jib-gradle-plugin:${project.jibVersion}"
|
|
classpath "com.bmuschko:gradle-docker-plugin:${project.gradleDockerPluginVersion}"
|
|
|
|
classpath "de.undercouch:gradle-download-task:${project.gradleDownloadTaskVersion}"
|
|
classpath "org.apereo.cas:cas-server-core-api-configuration-model:${project.'cas.version'}"
|
|
classpath "org.apereo.cas:cas-server-core-configuration-metadata-repository:${project.'cas.version'}"
|
|
}
|
|
}
|
|
|
|
repositories {
|
|
if (project.privateRepoUrl) {
|
|
maven {
|
|
url project.privateRepoUrl
|
|
credentials {
|
|
username = project.privateRepoUsername
|
|
password = System.env.PRIVATE_REPO_TOKEN
|
|
}
|
|
}
|
|
}
|
|
mavenLocal()
|
|
mavenCentral()
|
|
maven { url 'https://oss.sonatype.org/content/repositories/releases' }
|
|
maven {
|
|
url 'https://oss.sonatype.org/content/repositories/snapshots'
|
|
mavenContent { snapshotsOnly() }
|
|
}
|
|
maven {
|
|
url "https://repository.apache.org/content/repositories/snapshots"
|
|
mavenContent { snapshotsOnly() }
|
|
}
|
|
maven {
|
|
url 'https://build.shibboleth.net/nexus/content/repositories/releases/'
|
|
mavenContent { releasesOnly() }
|
|
}
|
|
maven {
|
|
url "https://build.shibboleth.net/nexus/content/repositories/snapshots"
|
|
mavenContent { snapshotsOnly() }
|
|
}
|
|
maven {
|
|
url "https://repo.spring.io/milestone"
|
|
mavenContent { releasesOnly() }
|
|
}
|
|
maven {
|
|
url "https://jitpack.io"
|
|
content {
|
|
includeGroupByRegex ".*wss4j.*"
|
|
}
|
|
mavenContent { releasesOnly() }
|
|
}
|
|
}
|
|
|
|
|
|
apply plugin: "io.freefair.war-overlay"
|
|
apply plugin: "war"
|
|
|
|
apply plugin: "org.springframework.boot"
|
|
apply plugin: "io.freefair.lombok"
|
|
|
|
|
|
apply from: rootProject.file("gradle/springboot.gradle")
|
|
apply plugin: "com.google.cloud.tools.jib"
|
|
apply plugin: "com.bmuschko.docker-remote-api"
|
|
apply from: rootProject.file("gradle/tasks.gradle")
|
|
|
|
|
|
configurations {
|
|
all {
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, "seconds"
|
|
cacheDynamicVersionsFor 0, "seconds"
|
|
preferProjectModules()
|
|
def failIfConflict = project.hasProperty("failOnVersionConflict") && Boolean.valueOf(project.getProperty("failOnVersionConflict"))
|
|
if (failIfConflict) {
|
|
failOnVersionConflict()
|
|
}
|
|
}
|
|
exclude(group: "cglib", module: "cglib")
|
|
exclude(group: "cglib", module: "cglib-full")
|
|
exclude(group: "org.slf4j", module: "slf4j-log4j12")
|
|
exclude(group: "org.slf4j", module: "slf4j-simple")
|
|
exclude(group: "org.slf4j", module: "jcl-over-slf4j")
|
|
exclude(group: "org.apache.logging.log4j", module: "log4j-to-slf4j")
|
|
}
|
|
}
|
|
|
|
war {
|
|
entryCompression = ZipEntryCompression.STORED
|
|
enabled = false
|
|
}
|
|
|
|
java {
|
|
toolchain {
|
|
languageVersion = JavaLanguageVersion.of(project.targetCompatibility)
|
|
}
|
|
}
|
|
|
|
bootBuildImage {
|
|
imageName = "${project.'containerImageOrg'}/${project.'containerImageName'}:${project.version}"
|
|
}
|
|
|
|
|
|
['jibDockerBuild', 'jibBuildTar', 'jib'].each { taskName ->
|
|
if (gradle.gradleVersion >= "8.0") {
|
|
getTasksByName(taskName, true).each(it -> {
|
|
it.notCompatibleWithConfigurationCache("Jib is not compatible with configuration cache");
|
|
it.enabled = !gradle.startParameter.isConfigurationCacheRequested()
|
|
})
|
|
}
|
|
}
|
|
|
|
def imagePlatforms = project.dockerImagePlatform.split(",")
|
|
def dockerUsername = providers.systemProperty("dockerUsername").getOrNull()
|
|
def dockerPassword = providers.systemProperty("dockerPassword").getOrNull()
|
|
def imageTagPostFix = providers.systemProperty("dockerImageTagPostfix").getOrElse("")
|
|
|
|
jib {
|
|
if (gradle.gradleVersion >= "8.0" && gradle.startParameter.isConfigurationCacheRequested()) {
|
|
def out = services.get(StyledTextOutputFactory).create("cas")
|
|
out.withStyle(Style.Info).println("You are seeing this message because the Gradle configuration cache is turned on")
|
|
out.withStyle(Style.Info).println("Running Jib tasks to produce Docker images will require the command-line option: --no-configuration-cache")
|
|
out.withStyle(Style.Info).println("Jib does not support the Gradle configuration cache; Please see https://github.com/GoogleContainerTools/jib/issues/3132")
|
|
out.withStyle(Style.Info).println("Jib tasks are disabled.")
|
|
}
|
|
from {
|
|
image = project.baseDockerImage
|
|
platforms {
|
|
imagePlatforms.each {
|
|
def given = it.split(":")
|
|
platform {
|
|
architecture = given[0]
|
|
os = given[1]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
to {
|
|
image = "${project.'containerImageOrg'}/${project.'containerImageName'}:${project.version}"
|
|
/**
|
|
ecr-login: Amazon Elastic Container Registry (ECR)
|
|
gcr: Google Container Registry (GCR)
|
|
osxkeychain: Docker Hub
|
|
*/
|
|
credHelper = "osxkeychain"
|
|
if (dockerUsername != null && dockerPassword != null) {
|
|
auth {
|
|
username = "${dockerUsername}"
|
|
password = "${dockerPassword}"
|
|
}
|
|
}
|
|
tags = [project.version]
|
|
}
|
|
container {
|
|
creationTime = "USE_CURRENT_TIMESTAMP"
|
|
entrypoint = ['/docker/entrypoint.sh']
|
|
ports = ['80', '443', '8080', '8443', '8444', '8761', '8888', '5000']
|
|
labels = [version:project.version, name:project.name, group:project.group, org:project.containerImageOrg]
|
|
workingDirectory = '/docker/cas/war'
|
|
}
|
|
extraDirectories {
|
|
paths {
|
|
path {
|
|
from = file('src/main/jib')
|
|
}
|
|
path {
|
|
from = file('etc/cas')
|
|
into = '/etc/cas'
|
|
}
|
|
path {
|
|
from = file("build/libs")
|
|
into = "/docker/cas/war"
|
|
}
|
|
}
|
|
permissions = [
|
|
'/docker/entrypoint.sh': '755'
|
|
]
|
|
}
|
|
allowInsecureRegistries = project.allowInsecureRegistries
|
|
}
|
|
|
|
import com.bmuschko.gradle.docker.tasks.image.*
|
|
tasks.register("casBuildDockerImage", DockerBuildImage) {
|
|
dependsOn("build")
|
|
|
|
def imageTag = "${project.'cas.version'}"
|
|
inputDir = project.projectDir
|
|
images.add("apereo/cas:${imageTag}${imageTagPostFix}")
|
|
images.add("apereo/cas:latest${imageTagPostFix}")
|
|
if (dockerUsername != null && dockerPassword != null) {
|
|
username = dockerUsername
|
|
password = dockerPassword
|
|
}
|
|
doLast {
|
|
def out = services.get(StyledTextOutputFactory).create("cas")
|
|
out.withStyle(Style.Success).println("Built CAS images successfully.")
|
|
}
|
|
}
|
|
|
|
tasks.register("casPushDockerImage", DockerPushImage) {
|
|
dependsOn("casBuildDockerImage")
|
|
|
|
def imageTag = "${project.'cas.version'}"
|
|
images.add("apereo/cas:${imageTag}${imageTagPostFix}")
|
|
images.add("apereo/cas:latest${imageTagPostFix}")
|
|
|
|
if (dockerUsername != null && dockerPassword != null) {
|
|
username = dockerUsername
|
|
password = dockerPassword
|
|
}
|
|
doLast {
|
|
def out = services.get(StyledTextOutputFactory).create("cas")
|
|
out.withStyle(Style.Success).println("Pushed CAS images successfully.")
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
/**
|
|
* Do NOT modify the lines below or else you will risk breaking dependency management.
|
|
*/
|
|
implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}")
|
|
implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
|
|
|
|
/**
|
|
* Do NOT modify the lines below or else you will risk breaking the build.
|
|
*/
|
|
implementation "org.apereo.cas:cas-server-core-api-configuration-model"
|
|
implementation "org.apereo.cas:cas-server-webapp-init"
|
|
|
|
developmentOnly "org.springframework.boot:spring-boot-devtools:${project.springBootVersion}"
|
|
|
|
/**
|
|
* CAS dependencies and modules may be listed here.
|
|
*
|
|
* There is no need to specify the version number for each dependency
|
|
* since versions are all resolved and controlled by the dependency management
|
|
* plugin via the CAS bom.
|
|
**/
|
|
implementation "org.apereo.cas:cas-server-support-rest"
|
|
implementation "org.apereo.cas:cas-server-support-json-service-registry"
|
|
implementation "org.apereo.cas:cas-server-support-jdbc"
|
|
|
|
if (project.hasProperty("casModules")) {
|
|
def dependencies = project.getProperty("casModules").split(",")
|
|
dependencies.each {
|
|
def projectsToAdd = rootProject.subprojects.findAll {project ->
|
|
project.name == "cas-server-core-${it}" || project.name == "cas-server-support-${it}"
|
|
}
|
|
projectsToAdd.each {implementation it}
|
|
}
|
|
}
|
|
|
|
testImplementation "org.springframework.boot:spring-boot-starter-test"
|
|
}
|
|
|