Originally, SCC Verifier Docker published artifacts twice. Once defined in build.gradle - which also uploaded the original contracts and second time in a publish stubs task defined in gradle plugin. This PR removes the definition from build.gradle and now only the stubs are published and just once.
158 lines
4.7 KiB
Groovy
158 lines
4.7 KiB
Groovy
buildscript {
|
|
repositories {
|
|
mavenLocal()
|
|
mavenCentral()
|
|
if (!"${verifierVersion}".contains("RELEASE")) {
|
|
maven { url "https://repo.spring.io/snapshot" }
|
|
maven { url "https://repo.spring.io/milestone" }
|
|
maven { url "https://repo.spring.io/release" }
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
classpath "io.spring.gradle:dependency-management-plugin:1.0.8.RELEASE"
|
|
classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${verifierVersion}"
|
|
}
|
|
}
|
|
|
|
group = getProp("PROJECT_GROUP") ?: 'com.example'
|
|
version = getProp("PROJECT_VERSION") ?: '0.0.1-SNAPSHOT'
|
|
|
|
repositories {
|
|
mavenLocal()
|
|
mavenCentral()
|
|
if (!"${verifierVersion}".contains("RELEASE")) {
|
|
maven { url "https://repo.spring.io/snapshot" }
|
|
maven { url "https://repo.spring.io/milestone" }
|
|
maven { url "https://repo.spring.io/release" }
|
|
}
|
|
}
|
|
|
|
apply plugin: 'groovy'
|
|
apply plugin: 'io.spring.dependency-management'
|
|
apply plugin: 'spring-cloud-contract'
|
|
apply plugin: 'maven-publish'
|
|
|
|
dependencyManagement {
|
|
imports {
|
|
mavenBom "org.springframework.cloud:spring-cloud-contract-dependencies:${verifierVersion}"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
testCompile("org.springframework.cloud:spring-cloud-starter-contract-verifier")
|
|
}
|
|
|
|
test {
|
|
testLogging {
|
|
exceptionFormat = 'full'
|
|
afterSuite { desc, result ->
|
|
if (!desc.parent) {
|
|
println "Results: (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)"
|
|
if (result.testCount == 0) {
|
|
throw new IllegalStateException("No tests were found. Failing the build")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
contracts {
|
|
baseClassForTests = "contracts.RestBase"
|
|
testMode = "EXPLICIT"
|
|
stubsSuffix = getProp("PRODUCER_STUBS_CLASSIFIER") ?: "stubs"
|
|
if (getProp("EXTERNAL_CONTRACTS_ARTIFACT_ID")) {
|
|
logger.
|
|
lifecycle("Will use an artifact with contracts [${getProp("EXTERNAL_CONTRACTS_GROUP_ID")}:${getProp("EXTERNAL_CONTRACTS_ARTIFACT_ID")}]")
|
|
// tests - contracts from an artifact
|
|
contractsPath = getProp("EXTERNAL_CONTRACTS_PATH") ?: ""
|
|
if (Boolean.parseBoolean(getProp("EXTERNAL_CONTRACTS_WORK_OFFLINE")) == false) {
|
|
contractRepository {
|
|
repositoryUrl = getProp('EXTERNAL_CONTRACTS_REPO_WITH_BINARIES_URL') ?:
|
|
getProp('REPO_WITH_BINARIES_URL') ?: 'http://localhost:8081/artifactory/libs-release-local'
|
|
username = getProp('EXTERNAL_CONTRACTS_REPO_WITH_BINARIES_USERNAME') ?:
|
|
getProp('REPO_WITH_BINARIES_USERNAME') ?: 'admin'
|
|
password = getProp('EXTERNAL_CONTRACTS_REPO_WITH_BINARIES_PASSWORD') ?:
|
|
getProp('REPO_WITH_BINARIES_PASSWORD') ?: 'password'
|
|
}
|
|
}
|
|
contractDependency {
|
|
groupId = getProp("EXTERNAL_CONTRACTS_GROUP_ID") ?: "com.example"
|
|
artifactId = getProp("EXTERNAL_CONTRACTS_ARTIFACT_ID")
|
|
delegate.classifier = getProp("EXTERNAL_CONTRACTS_CLASSIFIER") ?: ""
|
|
delegate.version = getProp("EXTERNAL_CONTRACTS_VERSION") ?: "+"
|
|
}
|
|
contractsMode = Boolean.
|
|
parseBoolean(getProp("EXTERNAL_CONTRACTS_WORK_OFFLINE")) ? "LOCAL" : "REMOTE"
|
|
}
|
|
else {
|
|
logger.lifecycle("Will use contracts from the mounted [/contracts] folder")
|
|
// tests - contracts in this repo
|
|
contractsDslDir = new File("/contracts")
|
|
}
|
|
}
|
|
|
|
task cleanOutput(type: Delete) {
|
|
def dirName = "/spring-cloud-contract-output"
|
|
file(dirName).list().each {
|
|
f -> delete "${dirName}/${f}"
|
|
}
|
|
}
|
|
|
|
task copyOutput(type: Copy) {
|
|
dependsOn("cleanOutput")
|
|
from 'build'
|
|
into '/spring-cloud-contract-output'
|
|
}
|
|
|
|
test.finalizedBy("copyOutput")
|
|
|
|
publishing {
|
|
repositories {
|
|
maven {
|
|
url getProp('REPO_WITH_BINARIES_URL') ?: 'http://localhost:8081/artifactory/libs-release-local'
|
|
credentials {
|
|
username getProp('REPO_WITH_BINARIES_USERNAME') ?: 'admin'
|
|
password getProp('REPO_WITH_BINARIES_PASSWORD') ?: 'password'
|
|
}
|
|
}
|
|
}
|
|
publications {
|
|
}
|
|
}
|
|
|
|
// explicitly disable artifacts publication
|
|
String publishArtifacts = getProp("PUBLISH_ARTIFACTS") ?: "true"
|
|
boolean publishEnabled = Boolean.parseBoolean(publishArtifacts)
|
|
publish.setEnabled(publishEnabled)
|
|
|
|
gradle.taskGraph.whenReady { graph ->
|
|
graph.allTasks.
|
|
findAll { it.name.startsWith("publish") && "publishStubsToScm" != it.name }*.
|
|
setEnabled(publishEnabled)
|
|
}
|
|
|
|
if (Boolean.parseBoolean(getProp("PUBLISH_STUBS_TO_SCM"))) {
|
|
publish.dependsOn("publishStubsToScm")
|
|
}
|
|
|
|
String getProp(String propName) {
|
|
return hasProperty(propName) ?
|
|
(getProperty(propName) ?: System.properties[propName]) : System.properties[propName] ?:
|
|
System.getenv(propName)
|
|
}
|
|
|
|
task resolveDependencies {
|
|
description "Pre-downloads *most* dependencies"
|
|
doLast {
|
|
configurations.getAsMap().each { name, config ->
|
|
println "Retrieving dependencies for $name"
|
|
try {
|
|
config.files
|
|
} catch (e) {
|
|
project.logger.info e.message // some cannot be resolved, silentlyish skip them
|
|
}
|
|
}
|
|
}
|
|
}
|