Removed any deprecation issues from Gradle;fixes gh-1290

This commit is contained in:
Marcin Grzejszczak
2020-02-20 14:58:32 +01:00
parent 22a5e1473f
commit 4f477739e0
2 changed files with 164 additions and 116 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.cloud.contract.verifier.plugin
import groovy.transform.CompileStatic
import groovy.transform.builder.Builder
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.Directory
@@ -50,46 +51,136 @@ class GenerateServerTestsTask extends DefaultTask {
@Nested
Config config
@CompileStatic
@Builder
static class Config {
final Provider<Directory> contractsDslDir
final Provider<String> nameSuffixForTests
final Provider<String> basePackageForTests
final Provider<String> baseClassForTests
final Provider<String> packageWithBaseClasses
final ListProperty<String> excludedFiles
final ListProperty<String> ignoredFiles
final ListProperty<String> includedFiles
final ListProperty<String> imports
final ListProperty<String> staticImports
final Provider<TestMode> testMode
final Provider<TestFramework> testFramework
final MapProperty<String, String> baseClassMappings
final Provider<Boolean> assertJsonSize
final Provider<Boolean> failOnInProgress
final DirectoryProperty generatedTestSourcesDir
final DirectoryProperty generatedTestResourcesDir
Config(Provider<Directory> contractsDslDir, Provider<String> nameSuffixForTests, Provider<String> basePackageForTests, Provider<String> baseClassForTests, Provider<String> packageWithBaseClasses, ListProperty<String> excludedFiles, ListProperty<String> ignoredFiles, ListProperty<String> includedFiles, ListProperty<String> imports, ListProperty<String> staticImports, Provider<TestMode> testMode, Provider<TestFramework> testFramework, MapProperty<String, String> baseClassMappings, Provider<Boolean> assertJsonSize, Provider<Boolean> failOnInProgress, DirectoryProperty generatedTestSourcesDir, DirectoryProperty generatedTestResourcesDir) {
this.contractsDslDir = contractsDslDir
this.nameSuffixForTests = nameSuffixForTests
this.basePackageForTests = basePackageForTests
this.baseClassForTests = baseClassForTests
this.packageWithBaseClasses = packageWithBaseClasses
this.excludedFiles = excludedFiles
this.ignoredFiles = ignoredFiles
this.includedFiles = includedFiles
this.imports = imports
this.staticImports = staticImports
this.testMode = testMode
this.testFramework = testFramework
this.baseClassMappings = baseClassMappings
this.assertJsonSize = assertJsonSize
this.failOnInProgress = failOnInProgress
this.generatedTestSourcesDir = generatedTestSourcesDir
this.generatedTestResourcesDir = generatedTestResourcesDir
}
@InputDirectory
Provider<Directory> contractsDslDir
Provider<Directory> getContractsDslDir() {
return contractsDslDir
}
@Input
@Optional
Provider<String> nameSuffixForTests
Provider<String> getNameSuffixForTests() {
return nameSuffixForTests
}
@Input
@Optional
Provider<String> basePackageForTests
Provider<String> getBasePackageForTests() {
return basePackageForTests
}
@Input
@Optional
Provider<String> baseClassForTests
Provider<String> getBaseClassForTests() {
return baseClassForTests
}
@Input
@Optional
Provider<String> packageWithBaseClasses
Provider<String> getPackageWithBaseClasses() {
return packageWithBaseClasses
}
@Input
ListProperty<String> excludedFiles
ListProperty<String> getExcludedFiles() {
return excludedFiles
}
@Input
ListProperty<String> ignoredFiles
ListProperty<String> getIgnoredFiles() {
return ignoredFiles
}
@Input
ListProperty<String> includedFiles
ListProperty<String> getIncludedFiles() {
return includedFiles
}
@Input
ListProperty<String> imports
ListProperty<String> getImports() {
return imports
}
@Input
ListProperty<String> staticImports
ListProperty<String> getStaticImports() {
return staticImports
}
@Input
Provider<TestMode> testMode
Provider<TestMode> getTestMode() {
return testMode
}
@Input
Provider<TestFramework> testFramework
Provider<TestFramework> getTestFramework() {
return testFramework
}
@Input
MapProperty<String, String> baseClassMappings
MapProperty<String, String> getBaseClassMappings() {
return baseClassMappings
}
@Input
Provider<Boolean> assertJsonSize
Provider<Boolean> getAssertJsonSize() {
return assertJsonSize
}
@Input
Provider<Boolean> failOnInProgress
Provider<Boolean> getFailOnInProgress() {
return failOnInProgress
}
@OutputDirectory
DirectoryProperty generatedTestSourcesDir
DirectoryProperty getGeneratedTestSourcesDir() {
return generatedTestSourcesDir
}
@OutputDirectory
DirectoryProperty generatedTestResourcesDir
DirectoryProperty getGeneratedTestResourcesDir() {
return generatedTestResourcesDir
}
}
@TaskAction
@@ -139,24 +230,22 @@ class GenerateServerTestsTask extends DefaultTask {
static Config fromExtension(ContractVerifierExtension extension, TaskProvider<ContractsCopyTask> copyContractsTask) {
return new Config(
contractsDslDir: copyContractsTask.flatMap { it.config.copiedContractsFolder },
nameSuffixForTests: extension.nameSuffixForTests,
basePackageForTests: extension.basePackageForTests,
baseClassForTests: extension.baseClassForTests,
packageWithBaseClasses: extension.packageWithBaseClasses,
excludedFiles: extension.excludedFiles,
ignoredFiles: extension.ignoredFiles,
includedFiles: extension.includedFiles,
imports: extension.imports,
staticImports: extension.staticImports,
testMode: extension.testMode,
testFramework: extension.testFramework,
baseClassMappings: extension.baseClassMappings.getBaseClassMappings(),
assertJsonSize: extension.assertJsonSize,
failOnInProgress: extension.failOnInProgress,
generatedTestSourcesDir: extension.generatedTestSourcesDir,
generatedTestResourcesDir: extension.generatedTestResourcesDir,
)
copyContractsTask.flatMap { it.config.copiedContractsFolder },
extension.nameSuffixForTests,
extension.basePackageForTests,
extension.baseClassForTests,
extension.packageWithBaseClasses,
extension.excludedFiles,
extension.ignoredFiles,
extension.includedFiles,
extension.imports,
extension.staticImports,
extension.testMode,
extension.testFramework,
extension.baseClassMappings.getBaseClassMappings(),
extension.assertJsonSize,
extension.failOnInProgress,
extension.generatedTestSourcesDir,
extension.generatedTestResourcesDir)
}
}

View File

@@ -23,6 +23,10 @@ import org.gradle.api.file.DirectoryProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.springframework.cloud.contract.stubrunner.ContractProjectUpdater
import org.springframework.cloud.contract.stubrunner.ScmStubDownloaderBuilder
@@ -42,90 +46,53 @@ import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties
class PublishStubsToScmTask extends DefaultTask {
static final String TASK_NAME = 'publishStubsToScm'
@Nested
Config config
private Closure customizationClosure = Closure.IDENTITY
@CompileStatic
static class Config {
private ObjectFactory objects
ContractVerifierExtension.ContractRepository contractRepository
Property<StubRunnerProperties.StubsMode> contractsMode
Property<Boolean> deleteStubsAfterTest
Property<Boolean> failOnNoContracts
MapProperty<String, String> contractsProperties
DirectoryProperty stubsOutputDir
@Input
final Property<ContractVerifierExtension.ContractRepository> contractRepository
@Input
final Property<StubRunnerProperties.StubsMode> contractsMode
@Input
final Property<Boolean> deleteStubsAfterTest
@Input
final Property<Boolean> failOnNoContracts
@Input
final MapProperty<String, String> contractsProperties
@OutputDirectory
final DirectoryProperty stubsOutputDir
void setContractsMode(Property<StubRunnerProperties.StubsMode> contractsMode) {
Config(ObjectFactory objects, ContractVerifierExtension extension) {
this.contractRepository = objects.property(ContractVerifierExtension.ContractRepository)
this.contractRepository.set(extension.contractRepository);
this.contractsMode = objects.property(StubRunnerProperties.StubsMode)
this.contractsMode.set(extension.contractsMode);
this.deleteStubsAfterTest = objects.property(Boolean)
this.deleteStubsAfterTest.set(extension.failOnNoContracts)
this.failOnNoContracts = objects.property(Boolean)
this.failOnNoContracts.set(extension.deleteStubsAfterTest)
this.contractsProperties = objects.mapProperty(String, String)
this.contractsProperties.set(extension.contractsProperties)
this.stubsOutputDir = objects.directoryProperty()
this.stubsOutputDir.set(extension.stubsOutputDir)
}
Config(Property<ContractVerifierExtension.ContractRepository> contractRepository, Property<StubRunnerProperties.StubsMode> contractsMode, Property<Boolean> deleteStubsAfterTest, Property<Boolean> failOnNoContracts, MapProperty<String, String> contractsProperties, DirectoryProperty stubsOutputDir) {
this.contractRepository = contractRepository
this.contractsMode = contractsMode
}
void setContractsMode(String contractsMode) {
if (contractsMode) {
this.contractsMode = objects.property(StubRunnerProperties.StubsMode).convention(StubRunnerProperties.StubsMode.valueOf(contractsMode.toUpperCase()))
}
}
void setDeleteStubsAfterTest(Property<Boolean> deleteStubsAfterTest) {
this.deleteStubsAfterTest = deleteStubsAfterTest
}
void setDeleteStubsAfterTest(Boolean deleteStubsAfterTest) {
if (deleteStubsAfterTest != null) {
this.deleteStubsAfterTest = objects.property(Boolean).convention(deleteStubsAfterTest)
}
}
void setFailOnNoContracts(Property<Boolean> failOnNoContracts) {
this.failOnNoContracts = failOnNoContracts
}
void setFailOnNoContracts(Boolean failOnNoContracts) {
if (failOnNoContracts != null) {
this.failOnNoContracts = objects.property(Boolean).convention(failOnNoContracts)
}
}
void setContractsProperties(MapProperty<String, String> contractsProperties) {
this.contractsProperties = contractsProperties
}
void setContractsProperties(Map<String, String> contractsProperties) {
if (contractsProperties) {
this.contractsProperties = objects.mapProperty(String, String).convention(contractsProperties)
}
}
void setStubsOutputDir(DirectoryProperty stubsOutputDir) {
this.stubsOutputDir = stubsOutputDir
}
void setStubsOutputDir(String stubsOutputDir) {
if (stubsOutputDir) {
this.stubsOutputDir = objects.directoryProperty()
this.stubsOutputDir.set(new File(stubsOutputDir))
}
}
void setStubsOutputDir(GString stubsOutputDir) {
if (stubsOutputDir) {
this.stubsOutputDir = objects.directoryProperty()
this.stubsOutputDir.set(new File(stubsOutputDir.toString()))
}
}
void contractRepository(@DelegatesTo(ContractVerifierExtension.ContractRepository) Closure closure) {
closure.delegate = contractRepository
closure.call()
}
@Deprecated
void contractDependency(Closure closure) {
// Here only to preserve backward compatibility. Was never used here.
}
@PackageScope
void setObjects(ObjectFactory objects) {
this.objects = objects
}
}
@TaskAction
@@ -137,25 +104,17 @@ class PublishStubsToScmTask extends DefaultTask {
String projectName = project.group.toString() + ":" + project.name.toString() + ":" + this.project.version.toString()
project.logger.info("Pushing Stubs to SCM for project [" + projectName + "]")
StubRunnerOptions stubRunnerOptions = StubRunnerOptionsFactory.createStubRunnerOptions(
config.contractRepository, config.contractsMode.getOrNull(), config.deleteStubsAfterTest.get(),
config.contractRepository.get(), config.contractsMode.getOrNull(), config.deleteStubsAfterTest.get(),
config.contractsProperties.get(), config.failOnNoContracts.get())
new ContractProjectUpdater(stubRunnerOptions).updateContractProject(projectName, config.stubsOutputDir.get().asFile.toPath())
}
static Config fromExtension(ContractVerifierExtension extension, ObjectFactory objects) {
return new Config(
contractRepository: extension.contractRepository,
contractsMode: extension.contractsMode,
failOnNoContracts: extension.failOnNoContracts,
deleteStubsAfterTest: extension.deleteStubsAfterTest,
contractsProperties: extension.contractsProperties,
stubsOutputDir: extension.stubsOutputDir,
objects: objects
)
return new Config(objects, extension)
}
private boolean shouldRun() {
String contractRepoUrl = config.contractRepository.repositoryUrl.getOrNull() ?: ""
String contractRepoUrl = config.contractRepository.get().repositoryUrl.getOrNull() ?: ""
if (!contractRepoUrl || !ScmStubDownloaderBuilder.isProtocolAccepted(contractRepoUrl)) {
project.logger.warn("Skipping pushing stubs to scm since your contracts repository URL [${contractRepoUrl}] doesn't match any of the accepted protocols for SCM stub downloader")
return false
@@ -172,7 +131,7 @@ class PublishStubsToScmTask extends DefaultTask {
private void applyConfigCustomizations() {
// Needs to be copied, otherwise properties won't be updated:
config.contractRepository = copy(config.contractRepository, project.objects)
config.contractRepository.set(copy(config.contractRepository.get(), project.objects))
customizationClosure.delegate = config
customizationClosure.call()
}