Added support for incremental Gradle builds
fixes gh-1133
This commit is contained in:
@@ -35,6 +35,10 @@
|
|||||||
<id>docs</id>
|
<id>docs</id>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>pl.project13.maven</groupId>
|
||||||
|
<artifactId>git-commit-id-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-dependency-plugin</artifactId>
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
|||||||
@@ -19,8 +19,10 @@ package org.springframework.cloud.contract.verifier.plugin
|
|||||||
import groovy.transform.CompileDynamic
|
import groovy.transform.CompileDynamic
|
||||||
import groovy.transform.CompileStatic
|
import groovy.transform.CompileStatic
|
||||||
import groovy.transform.PackageScope
|
import groovy.transform.PackageScope
|
||||||
import org.gradle.api.internal.ConventionTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.logging.Logger
|
import org.gradle.api.logging.Logger
|
||||||
|
import org.gradle.api.tasks.InputDirectory
|
||||||
|
import org.gradle.api.tasks.OutputDirectory
|
||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.gradle.api.tasks.WorkResult
|
import org.gradle.api.tasks.WorkResult
|
||||||
|
|
||||||
@@ -37,22 +39,30 @@ import org.springframework.cloud.contract.verifier.converter.ToYamlConverter
|
|||||||
*/
|
*/
|
||||||
@PackageScope
|
@PackageScope
|
||||||
@CompileStatic
|
@CompileStatic
|
||||||
class ContractsCopyTask extends ConventionTask {
|
class ContractsCopyTask extends DefaultTask {
|
||||||
private static final String ORIGINAL_PATH = "original"
|
private static final String ORIGINAL_PATH = "original"
|
||||||
|
|
||||||
ContractVerifierExtension extension
|
ContractVerifierExtension extension
|
||||||
GradleContractsDownloader downloader
|
GradleContractsDownloader downloader
|
||||||
|
|
||||||
|
@InputDirectory
|
||||||
|
File input
|
||||||
|
|
||||||
|
@OutputDirectory
|
||||||
|
File outputContractsFolder
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
void copy() {
|
void copy() {
|
||||||
ContractVerifierConfigProperties props = ExtensionToProperties.fromExtension(getExtension())
|
ContractVerifierConfigProperties props = props()
|
||||||
File file = getDownloader().downloadAndUnpackContractsIfRequired(getExtension(), props)
|
if (logger.isDebugEnabled()) {
|
||||||
file = contractsSubDirIfPresent(logger, file)
|
logger.debug("Config props [" + props + "]")
|
||||||
|
}
|
||||||
|
File file = getInput()
|
||||||
String antPattern = "${props.includedRootFolderAntPattern}*.*"
|
String antPattern = "${props.includedRootFolderAntPattern}*.*"
|
||||||
String slashSeparatedGroupId = project.group.toString().replace(".", File.separator)
|
String slashSeparatedGroupId = project.group.toString().replace(".", File.separator)
|
||||||
String slashSeparatedAntPattern = antPattern.replace(slashSeparatedGroupId, project.group.toString())
|
String slashSeparatedAntPattern = antPattern.replace(slashSeparatedGroupId, project.group.toString())
|
||||||
String root = root(props)
|
String root = root()
|
||||||
File outputContractsFolder = outputContractsFolder(root)
|
File outputContractsFolder = getOutputContractsFolder()
|
||||||
project.logger.info("Downloading and unpacking files from [$file] to [$outputContractsFolder]. The inclusion ant patterns are [${antPattern}] and [${slashSeparatedAntPattern}]")
|
project.logger.info("Downloading and unpacking files from [$file] to [$outputContractsFolder]. The inclusion ant patterns are [${antPattern}] and [${slashSeparatedAntPattern}]")
|
||||||
copy(file, antPattern, slashSeparatedAntPattern, props, outputContractsFolder)
|
copy(file, antPattern, slashSeparatedAntPattern, props, outputContractsFolder)
|
||||||
if (getExtension().isConvertToYaml()) {
|
if (getExtension().isConvertToYaml()) {
|
||||||
@@ -61,15 +71,26 @@ class ContractsCopyTask extends ConventionTask {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private File getInput() {
|
||||||
|
File file = getDownloader().downloadAndUnpackContractsIfRequired(getExtension(), props())
|
||||||
|
return contractsSubDirIfPresent(logger, file)
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContractVerifierConfigProperties props() {
|
||||||
|
return ExtensionToProperties.fromExtension(getExtension())
|
||||||
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
private File outputContractsFolder(String root) {
|
private File getOutputContractsFolder() {
|
||||||
|
String root = root()
|
||||||
File outputContractsFolder = outputFolder(root, "contracts")
|
File outputContractsFolder = outputFolder(root, "contracts")
|
||||||
ext.contractsDslDir = outputContractsFolder
|
ext.contractsDslDir = outputContractsFolder
|
||||||
return outputContractsFolder
|
return outputContractsFolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
private String root(ContractVerifierConfigProperties props) {
|
private String root() {
|
||||||
|
ContractVerifierConfigProperties props = props()
|
||||||
String root = OutputFolderBuilder.buildRootPath(project)
|
String root = OutputFolderBuilder.buildRootPath(project)
|
||||||
ext.contractVerifierConfigProperties = props
|
ext.contractVerifierConfigProperties = props
|
||||||
return root
|
return root
|
||||||
|
|||||||
@@ -18,8 +18,10 @@ package org.springframework.cloud.contract.verifier.plugin
|
|||||||
|
|
||||||
import groovy.transform.CompileDynamic
|
import groovy.transform.CompileDynamic
|
||||||
import groovy.transform.CompileStatic
|
import groovy.transform.CompileStatic
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.internal.ConventionTask
|
import org.gradle.api.tasks.InputDirectory
|
||||||
|
import org.gradle.api.tasks.OutputDirectory
|
||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
|
|
||||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||||
@@ -33,8 +35,12 @@ import org.springframework.cloud.contract.verifier.converter.RecursiveFilesConve
|
|||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
@CompileStatic
|
@CompileStatic
|
||||||
class GenerateClientStubsFromDslTask extends ConventionTask {
|
class GenerateClientStubsFromDslTask extends DefaultTask {
|
||||||
|
|
||||||
|
@InputDirectory
|
||||||
|
File contractsDslDir
|
||||||
|
|
||||||
|
@OutputDirectory
|
||||||
File stubsOutputDir
|
File stubsOutputDir
|
||||||
|
|
||||||
ContractVerifierExtension configProperties
|
ContractVerifierExtension configProperties
|
||||||
@@ -45,9 +51,8 @@ class GenerateClientStubsFromDslTask extends ConventionTask {
|
|||||||
logger.info("Stubs output dir [${getStubsOutputDir()}")
|
logger.info("Stubs output dir [${getStubsOutputDir()}")
|
||||||
Task copyContractsTask = project.getTasksByName(SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME, false).first()
|
Task copyContractsTask = project.getTasksByName(SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME, false).first()
|
||||||
ContractVerifierConfigProperties props = props(copyContractsTask)
|
ContractVerifierConfigProperties props = props(copyContractsTask)
|
||||||
File contractsDslDir = contractsDslDir(copyContractsTask, props)
|
|
||||||
logger.info("Spring Cloud Contract Verifier Plugin: Invoking DSL to client stubs conversion")
|
logger.info("Spring Cloud Contract Verifier Plugin: Invoking DSL to client stubs conversion")
|
||||||
props.contractsDslDir = contractsDslDir
|
props.contractsDslDir = getContractsDslDir()
|
||||||
props.includedContracts = ".*"
|
props.includedContracts = ".*"
|
||||||
File outMappingsDir = OutputFolderBuilder.outputMappingsDir(project, getStubsOutputDir())
|
File outMappingsDir = OutputFolderBuilder.outputMappingsDir(project, getStubsOutputDir())
|
||||||
logger.info("Contracts dir is [${contractsDslDir}] output stubs dir is [${outMappingsDir}]")
|
logger.info("Contracts dir is [${contractsDslDir}] output stubs dir is [${outMappingsDir}]")
|
||||||
@@ -55,6 +60,15 @@ class GenerateClientStubsFromDslTask extends ConventionTask {
|
|||||||
converter.processFiles()
|
converter.processFiles()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private File getContractsDslDir() {
|
||||||
|
Task copyContractsTask = project.getTasksByName(SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME, false).first()
|
||||||
|
ContractVerifierConfigProperties props = props(copyContractsTask)
|
||||||
|
if (logger.isDebugEnabled()) {
|
||||||
|
logger.debug("Config props [" + props + "]")
|
||||||
|
}
|
||||||
|
return contractsDslDir(copyContractsTask, props)
|
||||||
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
private ContractVerifierConfigProperties props(Task task) {
|
private ContractVerifierConfigProperties props(Task task) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -18,16 +18,16 @@ package org.springframework.cloud.contract.verifier.plugin
|
|||||||
|
|
||||||
import groovy.transform.CompileDynamic
|
import groovy.transform.CompileDynamic
|
||||||
import groovy.transform.CompileStatic
|
import groovy.transform.CompileStatic
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.GradleException
|
import org.gradle.api.GradleException
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.internal.ConventionTask
|
import org.gradle.api.tasks.InputDirectory
|
||||||
|
import org.gradle.api.tasks.OutputDirectory
|
||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
|
|
||||||
import org.springframework.cloud.contract.spec.Contract
|
|
||||||
import org.springframework.cloud.contract.spec.ContractVerifierException
|
import org.springframework.cloud.contract.spec.ContractVerifierException
|
||||||
import org.springframework.cloud.contract.verifier.TestGenerator
|
import org.springframework.cloud.contract.verifier.TestGenerator
|
||||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
|
||||||
|
|
||||||
import static org.springframework.cloud.contract.verifier.plugin.SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME
|
import static org.springframework.cloud.contract.verifier.plugin.SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME
|
||||||
|
|
||||||
@@ -37,20 +37,22 @@ import static org.springframework.cloud.contract.verifier.plugin.SpringCloudCont
|
|||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
@CompileStatic
|
@CompileStatic
|
||||||
class GenerateServerTestsTask extends ConventionTask {
|
class GenerateServerTestsTask extends DefaultTask {
|
||||||
|
|
||||||
|
@InputDirectory
|
||||||
|
File contractsDslDir
|
||||||
|
|
||||||
|
@OutputDirectory
|
||||||
File generatedTestSourcesDir
|
File generatedTestSourcesDir
|
||||||
|
|
||||||
//TODO: How to deal with @Input*, @Output* and that domain object?
|
|
||||||
ContractVerifierExtension configProperties
|
ContractVerifierExtension configProperties
|
||||||
GradleContractsDownloader downloader
|
GradleContractsDownloader downloader
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
void generate() {
|
void generate() {
|
||||||
logger.info("Generated test sources dir [${getGeneratedTestSourcesDir()}]")
|
logger.info("Generated test sources dir [${getGeneratedTestSourcesDir()}]")
|
||||||
Task copyContractsTask = project.getTasksByName(COPY_CONTRACTS_TASK_NAME, false).first()
|
ContractVerifierConfigProperties props = getProps()
|
||||||
ContractVerifierConfigProperties props = props(copyContractsTask)
|
File contractsDslDir = getContractsDslDir()
|
||||||
File contractsDslDir = contractsDslDir(copyContractsTask, props)
|
|
||||||
if (getConfigProperties().getContractDependency()) {
|
if (getConfigProperties().getContractDependency()) {
|
||||||
project.logger.debug("Updating the stubs locations for the case where we have a JAR with contracts")
|
project.logger.debug("Updating the stubs locations for the case where we have a JAR with contracts")
|
||||||
props.contractsDslDir = contractsDslDir
|
props.contractsDslDir = contractsDslDir
|
||||||
@@ -59,9 +61,6 @@ class GenerateServerTestsTask extends ConventionTask {
|
|||||||
project.logger.info("Spring Cloud Contract Verifier Plugin: Invoking test sources generation")
|
project.logger.info("Spring Cloud Contract Verifier Plugin: Invoking test sources generation")
|
||||||
project.logger.info("Contracts are unpacked to [${contractsDslDir}]")
|
project.logger.info("Contracts are unpacked to [${contractsDslDir}]")
|
||||||
project.logger.info("Included contracts are [${props.includedContracts}]")
|
project.logger.info("Included contracts are [${props.includedContracts}]")
|
||||||
def sourceSetType = getConfigProperties().getTestFramework() == TestFramework.SPOCK ?
|
|
||||||
"groovy" : "java"
|
|
||||||
applySourceSets(sourceSetType)
|
|
||||||
try {
|
try {
|
||||||
props = props ?: ExtensionToProperties.fromExtension(getConfigProperties())
|
props = props ?: ExtensionToProperties.fromExtension(getConfigProperties())
|
||||||
props.contractsDslDir = contractsDslDir
|
props.contractsDslDir = contractsDslDir
|
||||||
@@ -74,18 +73,9 @@ class GenerateServerTestsTask extends ConventionTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
private ContractVerifierConfigProperties getProps() {
|
||||||
private void applySourceSets(sourceSetType) {
|
Task copyContractsTask = project.getTasksByName(COPY_CONTRACTS_TASK_NAME, false).first()
|
||||||
project.sourceSets.test."${sourceSetType}" {
|
return props(copyContractsTask)
|
||||||
project.logger.
|
|
||||||
info("Registering ${getConfigProperties().generatedTestSourcesDir} as test source directory")
|
|
||||||
srcDir getConfigProperties().getGeneratedTestSourcesDir()
|
|
||||||
}
|
|
||||||
project.sourceSets.test.resources {
|
|
||||||
project.logger.
|
|
||||||
info("Registering ${getConfigProperties().generatedTestResourcesDir} as test resource directory")
|
|
||||||
srcDir getConfigProperties().getGeneratedTestResourcesDir()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
@@ -101,6 +91,12 @@ class GenerateServerTestsTask extends ConventionTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private File getContractsDslDir() {
|
||||||
|
Task copyContractsTask = project.getTasksByName(COPY_CONTRACTS_TASK_NAME, false).first()
|
||||||
|
ContractVerifierConfigProperties props = props(copyContractsTask)
|
||||||
|
return contractsDslDir(copyContractsTask, props)
|
||||||
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
private File contractsDslDir(Task task, ContractVerifierConfigProperties props) {
|
private File contractsDslDir(Task task, ContractVerifierConfigProperties props) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
package org.springframework.cloud.contract.verifier.plugin
|
package org.springframework.cloud.contract.verifier.plugin
|
||||||
|
|
||||||
import groovy.transform.CompileStatic
|
import groovy.transform.CompileStatic
|
||||||
import org.gradle.api.internal.ConventionTask
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.tasks.OutputDirectory
|
||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
|
|
||||||
import org.springframework.cloud.contract.stubrunner.ContractProjectUpdater
|
import org.springframework.cloud.contract.stubrunner.ContractProjectUpdater
|
||||||
@@ -33,12 +34,17 @@ import org.springframework.cloud.contract.stubrunner.StubRunnerOptions
|
|||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
@CompileStatic
|
@CompileStatic
|
||||||
class PublishStubsToScmTask extends ConventionTask {
|
class PublishStubsToScmTask extends DefaultTask {
|
||||||
File stubsOutputDir
|
|
||||||
ContractVerifierExtension configProperties
|
|
||||||
GradleContractsDownloader downloader
|
|
||||||
private final ExtensionHolderSpec closureHolder = new ClosureHolder()
|
private final ExtensionHolderSpec closureHolder = new ClosureHolder()
|
||||||
|
|
||||||
|
@OutputDirectory
|
||||||
|
File stubsOutputDir
|
||||||
|
|
||||||
|
ContractVerifierExtension configProperties
|
||||||
|
|
||||||
|
GradleContractsDownloader downloader
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
void publishStubsToScm() {
|
void publishStubsToScm() {
|
||||||
ContractVerifierExtension clonedExtension = modifyExtension()
|
ContractVerifierExtension clonedExtension = modifyExtension()
|
||||||
@@ -67,6 +73,12 @@ class PublishStubsToScmTask extends ConventionTask {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method can be used to perform additional customization of
|
||||||
|
* the {@link ContractVerifierExtension}.
|
||||||
|
*
|
||||||
|
* @param closure to customize the {@link ContractVerifierExtension}
|
||||||
|
*/
|
||||||
void customize(@DelegatesTo(ContractVerifierExtension) Closure closure) {
|
void customize(@DelegatesTo(ContractVerifierExtension) Closure closure) {
|
||||||
project.logger.debug("Storing the extension closure")
|
project.logger.debug("Storing the extension closure")
|
||||||
this.closureHolder.extensionClosure = closure
|
this.closureHolder.extensionClosure = closure
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ import org.gradle.api.plugins.GroovyPlugin
|
|||||||
import org.gradle.api.publish.maven.MavenPublication
|
import org.gradle.api.publish.maven.MavenPublication
|
||||||
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
|
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
|
||||||
import org.gradle.jvm.tasks.Jar
|
import org.gradle.jvm.tasks.Jar
|
||||||
|
|
||||||
|
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gradle plugin for Spring Cloud Contract Verifier that from the DSL contract can
|
* Gradle plugin for Spring Cloud Contract Verifier that from the DSL contract can
|
||||||
* <ul>
|
* <ul>
|
||||||
@@ -63,9 +66,30 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin<Project> {
|
|||||||
Task copyContracts = createAndConfigureCopyContractsTask(stubsJar, downloader, extension)
|
Task copyContracts = createAndConfigureCopyContractsTask(stubsJar, downloader, extension)
|
||||||
createAndConfigureMavenPublishPlugin(stubsJar, extension)
|
createAndConfigureMavenPublishPlugin(stubsJar, extension)
|
||||||
createGenerateTestsTask(extension, copyContracts, downloader)
|
createGenerateTestsTask(extension, copyContracts, downloader)
|
||||||
createAndConfigureGenerateClientStubs(extension, copyContracts)
|
createAndConfigureGenerateClientStubs(extension, copyContracts, downloader)
|
||||||
createAndConfigurePublishStubsToScmTask(extension, downloader)
|
createAndConfigurePublishStubsToScmTask(extension, downloader)
|
||||||
addIdeaTestSources(project, extension)
|
addIdeaTestSources(project, extension)
|
||||||
|
applyDefaultSourceSets(extension)
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyDefaultSourceSets(ContractVerifierExtension extension) {
|
||||||
|
def sourceSetType = extension.getTestFramework() == TestFramework.SPOCK ?
|
||||||
|
"groovy" : "java"
|
||||||
|
applySourceSets(extension, sourceSetType)
|
||||||
|
}
|
||||||
|
|
||||||
|
@CompileDynamic
|
||||||
|
private void applySourceSets(ContractVerifierExtension extension, sourceSetType) {
|
||||||
|
project.sourceSets.test."${sourceSetType}" {
|
||||||
|
project.logger.
|
||||||
|
info("Registering ${extension.generatedTestSourcesDir} as test source directory")
|
||||||
|
srcDir extension.getGeneratedTestSourcesDir()
|
||||||
|
}
|
||||||
|
project.sourceSets.test.resources {
|
||||||
|
project.logger.
|
||||||
|
info("Registering ${extension.generatedTestResourcesDir} as test resource directory")
|
||||||
|
srcDir extension.getGeneratedTestResourcesDir()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
@@ -108,49 +132,46 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin<Project> {
|
|||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
private void createGenerateTestsTask(ContractVerifierExtension extension, Task copyContracts,
|
private void createGenerateTestsTask(ContractVerifierExtension extension, Task copyContracts,
|
||||||
GradleContractsDownloader gradleContractsDownloader) {
|
GradleContractsDownloader gradleContractsDownloader) {
|
||||||
Task task = project.tasks.create(GENERATE_SERVER_TESTS_TASK_NAME, GenerateServerTestsTask)
|
GenerateServerTestsTask task = project.tasks.create(GENERATE_SERVER_TESTS_TASK_NAME, GenerateServerTestsTask)
|
||||||
task.description = "Generate server tests from the contracts"
|
task.description = "Generate server tests from the contracts"
|
||||||
task.group = GROUP_NAME
|
task.group = GROUP_NAME
|
||||||
task.conventionMapping.with {
|
task.with {
|
||||||
downloader = { gradleContractsDownloader }
|
downloader = gradleContractsDownloader
|
||||||
generatedTestSourcesDir = { extension.generatedTestSourcesDir }
|
generatedTestSourcesDir = extension.generatedTestSourcesDir
|
||||||
configProperties = { extension }
|
configProperties = extension
|
||||||
}
|
}
|
||||||
task.enabled = !project.gradle.startParameter.excludedTaskNames.contains("test")
|
task.enabled = !project.gradle.startParameter.excludedTaskNames.contains("test")
|
||||||
task.dependsOn copyContracts
|
task.dependsOn copyContracts
|
||||||
project.tasks.findByName("compileTestJava").dependsOn(task)
|
project.tasks.findByName("compileTestJava").dependsOn(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
|
||||||
private void createAndConfigurePublishStubsToScmTask(ContractVerifierExtension extension,
|
private void createAndConfigurePublishStubsToScmTask(ContractVerifierExtension extension,
|
||||||
GradleContractsDownloader gradleContractsDownloader) {
|
GradleContractsDownloader gradleContractsDownloader) {
|
||||||
Task task = project.tasks.create(PUBLISH_STUBS_TO_SCM_TASK_NAME, PublishStubsToScmTask)
|
PublishStubsToScmTask task = project.tasks.create(PUBLISH_STUBS_TO_SCM_TASK_NAME, PublishStubsToScmTask)
|
||||||
task.description = "The generated stubs get committed to the SCM repo and pushed to origin"
|
task.description = "The generated stubs get committed to the SCM repo and pushed to origin"
|
||||||
task.group = GROUP_NAME
|
task.group = GROUP_NAME
|
||||||
task.conventionMapping.with {
|
task.with {
|
||||||
downloader = { gradleContractsDownloader }
|
downloader = gradleContractsDownloader
|
||||||
configProperties = { extension }
|
configProperties = extension
|
||||||
stubsOutputDir = { extension.stubsOutputDir }
|
stubsOutputDir = extension.stubsOutputDir
|
||||||
}
|
}
|
||||||
task.dependsOn DSL_TO_CLIENT_TASK_NAME
|
task.dependsOn DSL_TO_CLIENT_TASK_NAME
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
|
||||||
private Task createAndConfigureGenerateClientStubs(ContractVerifierExtension extension,
|
private Task createAndConfigureGenerateClientStubs(ContractVerifierExtension extension,
|
||||||
Task copyContracts) {
|
Task copyContracts, GradleContractsDownloader gradleContractsDownloader) {
|
||||||
Task task = project.tasks.create(DSL_TO_CLIENT_TASK_NAME, GenerateClientStubsFromDslTask)
|
GenerateClientStubsFromDslTask task = project.tasks.create(DSL_TO_CLIENT_TASK_NAME, GenerateClientStubsFromDslTask)
|
||||||
task.description = "Generate client stubs from the contracts"
|
task.description = "Generate client stubs from the contracts"
|
||||||
task.group = GROUP_NAME
|
task.group = GROUP_NAME
|
||||||
task.conventionMapping.with {
|
task.with {
|
||||||
downloader = { gradleContractsDownloader }
|
downloader = gradleContractsDownloader
|
||||||
stubsOutputDir = { extension.stubsOutputDir }
|
stubsOutputDir = extension.stubsOutputDir
|
||||||
configProperties = { extension }
|
configProperties = extension
|
||||||
}
|
}
|
||||||
task.dependsOn copyContracts
|
task.dependsOn copyContracts
|
||||||
return task
|
return task
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
|
||||||
private Task createAndConfigureStubsJarTasks(ContractVerifierExtension extension) {
|
private Task createAndConfigureStubsJarTasks(ContractVerifierExtension extension) {
|
||||||
Task task = stubsTask()
|
Task task = stubsTask()
|
||||||
if (task) {
|
if (task) {
|
||||||
@@ -158,21 +179,31 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin<Project> {
|
|||||||
return task
|
return task
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
task = project.tasks.create(type: Jar, name: VERIFIER_STUBS_JAR_TASK_NAME,
|
task = createStubsJarTask(extension)
|
||||||
dependsOn: DSL_TO_CLIENT_TASK_NAME) {
|
|
||||||
baseName = project.name
|
|
||||||
classifier = extension.stubsSuffix
|
|
||||||
from { extension.stubsOutputDir ?: project.file("${project.buildDir}/stubs") }
|
|
||||||
}
|
|
||||||
task.description = "Creates the stubs JAR task"
|
task.description = "Creates the stubs JAR task"
|
||||||
task.group = GROUP_NAME
|
task.group = GROUP_NAME
|
||||||
project.artifacts {
|
setArchives(task)
|
||||||
archives task
|
|
||||||
}
|
|
||||||
return task
|
return task
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@CompileDynamic
|
||||||
|
private Task createStubsJarTask(ContractVerifierExtension extension) {
|
||||||
|
return project.tasks.create(type: Jar, name: VERIFIER_STUBS_JAR_TASK_NAME,
|
||||||
|
dependsOn: DSL_TO_CLIENT_TASK_NAME) {
|
||||||
|
getArchiveBaseName().set(project.name)
|
||||||
|
getArchiveClassifier().set(extension.stubsSuffix)
|
||||||
|
from { extension.stubsOutputDir ?: project.file("${project.buildDir}/stubs") }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@CompileDynamic
|
||||||
|
private void setArchives(Task task) {
|
||||||
|
project.artifacts {
|
||||||
|
archives task
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Task stubsTask() {
|
private Task stubsTask() {
|
||||||
try {
|
try {
|
||||||
return project.tasks.getByName(VERIFIER_STUBS_JAR_TASK_NAME)
|
return project.tasks.getByName(VERIFIER_STUBS_JAR_TASK_NAME)
|
||||||
@@ -182,22 +213,20 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin<Project> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
|
||||||
private Task createAndConfigureCopyContractsTask(Task stubs,
|
private Task createAndConfigureCopyContractsTask(Task stubs,
|
||||||
GradleContractsDownloader gradleContractsDownloader,
|
GradleContractsDownloader gradleContractsDownloader,
|
||||||
ContractVerifierExtension contractVerifierExtension) {
|
ContractVerifierExtension contractVerifierExtension) {
|
||||||
Task task = project.tasks.create(COPY_CONTRACTS_TASK_NAME, ContractsCopyTask)
|
ContractsCopyTask task = project.tasks.create(COPY_CONTRACTS_TASK_NAME, ContractsCopyTask)
|
||||||
task.description = "Copies contracts to the output folder"
|
task.description = "Copies contracts to the output folder"
|
||||||
task.group = GROUP_NAME
|
task.group = GROUP_NAME
|
||||||
task.conventionMapping.with {
|
task.with {
|
||||||
downloader = { gradleContractsDownloader }
|
downloader = gradleContractsDownloader
|
||||||
extension = { contractVerifierExtension }
|
extension = contractVerifierExtension
|
||||||
}
|
}
|
||||||
stubs.dependsOn task
|
stubs.dependsOn task
|
||||||
return task
|
return task
|
||||||
}
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
|
||||||
private void createAndConfigureMavenPublishPlugin(Task stubsTask, ContractVerifierExtension extension) {
|
private void createAndConfigureMavenPublishPlugin(Task stubsTask, ContractVerifierExtension extension) {
|
||||||
if (!classIsOnClasspath("org.gradle.api.publish.maven.plugins.MavenPublishPlugin")) {
|
if (!classIsOnClasspath("org.gradle.api.publish.maven.plugins.MavenPublishPlugin")) {
|
||||||
project.logger.debug("Maven Publish Plugin is not present - won't add default publication")
|
project.logger.debug("Maven Publish Plugin is not present - won't add default publication")
|
||||||
@@ -213,12 +242,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin<Project> {
|
|||||||
def publishingExtension = project.extensions.findByName('publishing')
|
def publishingExtension = project.extensions.findByName('publishing')
|
||||||
if (!hasPublication(publishingExtension)) {
|
if (!hasPublication(publishingExtension)) {
|
||||||
project.logger.debug("Spring Cloud Contract Verifier Plugin: Stubs publication is not present - will create one")
|
project.logger.debug("Spring Cloud Contract Verifier Plugin: Stubs publication is not present - will create one")
|
||||||
publishingExtension.publications {
|
setPublications(publishingExtension, stubsTask)
|
||||||
stubs(MavenPublication) {
|
|
||||||
artifactId "${project.name}"
|
|
||||||
artifact stubsTask
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
project.logger.info("Spring Cloud Contract Verifier Plugin: Stubs publication was present - won't create a new one. Remember about passing stubs as artifact")
|
project.logger.info("Spring Cloud Contract Verifier Plugin: Stubs publication was present - won't create a new one. Remember about passing stubs as artifact")
|
||||||
@@ -227,6 +251,16 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin<Project> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@CompileDynamic
|
||||||
|
private void setPublications(def publishingExtension, Task stubsTask) {
|
||||||
|
publishingExtension.publications {
|
||||||
|
stubs(MavenPublication) {
|
||||||
|
artifactId "${project.name}"
|
||||||
|
artifact stubsTask
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@CompileDynamic
|
@CompileDynamic
|
||||||
private boolean hasPublication(def publishingExtension) {
|
private boolean hasPublication(def publishingExtension) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ package org.springframework.cloud.contract.verifier.plugin
|
|||||||
import org.junit.Ignore
|
import org.junit.Ignore
|
||||||
import spock.lang.Stepwise
|
import spock.lang.Stepwise
|
||||||
|
|
||||||
|
import static org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE
|
||||||
|
|
||||||
@Stepwise
|
@Stepwise
|
||||||
@Ignore
|
@Ignore
|
||||||
class SampleProjectSpec extends ContractVerifierIntegrationSpec {
|
class SampleProjectSpec extends ContractVerifierIntegrationSpec {
|
||||||
@@ -32,22 +34,33 @@ class SampleProjectSpec extends ContractVerifierIntegrationSpec {
|
|||||||
def "should pass basic flow for Spock"() {
|
def "should pass basic flow for Spock"() {
|
||||||
given:
|
given:
|
||||||
assert fileExists('build.gradle')
|
assert fileExists('build.gradle')
|
||||||
expect:
|
when:
|
||||||
String[] args = ["check", "publishToMavenLocal", "--debug"] as String[]
|
String[] args = ["check", "publishToMavenLocal", "--debug"] as String[]
|
||||||
if (WORK_OFFLINE) {
|
if (WORK_OFFLINE) {
|
||||||
args << "--offline"
|
args << "--offline"
|
||||||
}
|
}
|
||||||
runTasksSuccessfully(args)
|
runTasksSuccessfully(args)
|
||||||
|
then:
|
||||||
jarContainsContractVerifierContracts('fraudDetectionService/build/libs')
|
jarContainsContractVerifierContracts('fraudDetectionService/build/libs')
|
||||||
|
when: "running generation without change inputs"
|
||||||
|
def secondExecutionResult = runTasksSuccessfully()
|
||||||
|
then: "tasks should be up-to-date"
|
||||||
|
validateTasksOutcome(secondExecutionResult, UP_TO_DATE, 'generateClientStubs', 'generateContractTests', 'copyContracts')
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def "should pass basic flow for JUnit"() {
|
def "should pass basic flow for JUnit"() {
|
||||||
given:
|
given:
|
||||||
switchToJunitTestFramework()
|
switchToJunitTestFramework()
|
||||||
assert fileExists('build.gradle')
|
assert fileExists('build.gradle')
|
||||||
expect:
|
when:
|
||||||
runTasksSuccessfully(checkAndPublishToMavenLocal())
|
runTasksSuccessfully(checkAndPublishToMavenLocal())
|
||||||
|
then:
|
||||||
jarContainsContractVerifierContracts('fraudDetectionService/build/libs')
|
jarContainsContractVerifierContracts('fraudDetectionService/build/libs')
|
||||||
|
when: "running generation without change inputs"
|
||||||
|
def secondExecutionResult = runTasksSuccessfully()
|
||||||
|
then: "tasks should be up-to-date"
|
||||||
|
validateTasksOutcome(secondExecutionResult, UP_TO_DATE, 'generateClientStubs', 'generateContractTests', 'copyContracts')
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ subprojects {
|
|||||||
|
|
||||||
sourceCompatibility = 1.8
|
sourceCompatibility = 1.8
|
||||||
targetCompatibility = 1.8
|
targetCompatibility = 1.8
|
||||||
|
version = "1.0.0"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|||||||
@@ -18,8 +18,10 @@ package org.springframework.cloud.contract.verifier.config;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
@@ -366,4 +368,33 @@ public class ContractVerifierConfigProperties {
|
|||||||
this.excludeBuildFolders = excludeBuildFolders;
|
this.excludeBuildFolders = excludeBuildFolders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new StringJoiner(", ",
|
||||||
|
ContractVerifierConfigProperties.class.getSimpleName() + "[", "]")
|
||||||
|
.add("targetFramework=" + targetFramework)
|
||||||
|
.add("testFramework=" + testFramework).add("testMode=" + testMode)
|
||||||
|
.add("basePackageForTests='" + basePackageForTests + "'")
|
||||||
|
.add("baseClassForTests='" + baseClassForTests + "'")
|
||||||
|
.add("nameSuffixForTests='" + nameSuffixForTests + "'")
|
||||||
|
.add("ruleClassForTests='" + ruleClassForTests + "'")
|
||||||
|
.add("excludedFiles=" + excludedFiles)
|
||||||
|
.add("includedFiles=" + includedFiles)
|
||||||
|
.add("ignoredFiles=" + ignoredFiles)
|
||||||
|
.add("imports=" + Arrays.toString(imports))
|
||||||
|
.add("staticImports=" + Arrays.toString(staticImports))
|
||||||
|
.add("contractsDslDir=" + contractsDslDir)
|
||||||
|
.add("generatedTestSourcesDir=" + generatedTestSourcesDir)
|
||||||
|
.add("generatedTestResourcesDir=" + generatedTestResourcesDir)
|
||||||
|
.add("stubsOutputDir=" + stubsOutputDir)
|
||||||
|
.add("stubsSuffix='" + stubsSuffix + "'")
|
||||||
|
.add("assertJsonSize=" + assertJsonSize)
|
||||||
|
.add("includedContracts='" + includedContracts + "'")
|
||||||
|
.add("includedRootFolderAntPattern='"
|
||||||
|
+ includedRootFolderAntPattern + "'")
|
||||||
|
.add("packageWithBaseClasses='" + packageWithBaseClasses + "'")
|
||||||
|
.add("baseClassMappings=" + baseClassMappings)
|
||||||
|
.add("excludeBuildFolders=" + excludeBuildFolders).toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user