From 117ba7d8a7a0284479863975b4f06a40a82281a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20Ga=C5=82ek?= Date: Sat, 13 Feb 2021 15:21:44 +0100 Subject: [PATCH] build.gradle configuration updated --- build.gradle | 52 ++----------------- .../axion/release/CreateReleaseTask.groovy | 2 + .../axion/release/MarkNextVersionTask.groovy | 2 + .../release/OutputCurrentVersionTask.groovy | 2 + .../axion/release/PushReleaseTask.groovy | 2 + .../build/axion/release/ReleaseTask.groovy | 2 + .../axion/release/VerifyReleaseTask.groovy | 2 + .../axion/release/domain/ChecksConfig.groovy | 5 ++ .../release/domain/NextVersionConfig.groovy | 13 +++-- .../release/domain/RepositoryConfig.groovy | 19 ++++++- .../domain/TagNameSerializationConfig.groovy | 8 +++ .../axion/release/domain/VersionConfig.groovy | 25 +++++++++ .../release/domain/VersionScmPosition.groovy | 5 ++ .../release/domain/hooks/HooksConfig.groovy | 16 +++--- .../axion/release/domain/VersionService.java | 5 ++ .../axion/release/domain/scm/ScmPosition.java | 5 ++ .../axion/release/RepositoryBasedTest.groovy | 5 +- 17 files changed, 109 insertions(+), 61 deletions(-) diff --git a/build.gradle b/build.gradle index dc49d927..fb5f2bdb 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,8 @@ plugins { id 'com.gradle.plugin-publish' version '0.12.0' id 'com.bmuschko.nexus' version '2.3.1' apply false id 'io.codearte.nexus-staging' version '0.11.0' apply false + id 'com.coditory.integration-test' version "1.0.5" + id 'com.adarshr.test-logger' version '2.1.1' id 'com.bmuschko.docker-remote-api' version '3.2.1' } @@ -51,20 +53,6 @@ sourceSets { groovy { srcDirs = ["src/main/java", "src/main/groovy"] } // compile everything in src/ with groovy } - integration { - java.srcDir project.file('src/integration/java') - groovy.srcDir project.file('src/integration/groovy') - - resources.srcDir project.file('src/integration/resources') - resources.srcDir project.sourceSets.test.resources - resources.srcDir project.sourceSets.main.resources - - compileClasspath = project.sourceSets.main.output + - project.sourceSets.test.output + - project.configurations.testRuntime - runtimeClasspath = output + compileClasspath - } - remoteTest { java.srcDir project.file('src/test-remote/java') groovy.srcDir project.file('src/test-remote/groovy') @@ -112,24 +100,10 @@ dependencies { testCompile group: 'org.apache.sshd', name: 'sshd-core', version: '1.6.0' testCompile group: 'org.apache.sshd', name: 'sshd-git', version: '1.6.0' - testCompile gradleTestKit() -} - -test { - testLogging { - events 'passed', 'skipped', 'failed' - exceptionFormat = 'full' - } + testImplementation gradleTestKit() } project.configurations { - integration { - extendsFrom project.configurations.testRuntime - description = 'Dependencies for integration tests' - transitive = true - visible = true - } - remoteTest { extendsFrom project.configurations.testRuntime description = 'Dependencies for tests with Docker' @@ -138,21 +112,6 @@ project.configurations { } } -task integrationTest(type: Test) { - testClassesDirs = project.sourceSets.integration.output.classesDirs - classpath = project.sourceSets.main.output + - project.sourceSets.test.output + - project.sourceSets.integration.runtimeClasspath + - project.configurations.testRuntime + - project.configurations.integrationRuntime - - testLogging { - events 'passed', 'skipped', 'failed' - showStandardStreams = true - exceptionFormat = 'full' - } -} - task buildDockerImage(type: com.bmuschko.gradle.docker.tasks.image.DockerBuildImage) { inputDir = file('docker') tag = 'test/axion-release-remote:latest' @@ -182,11 +141,6 @@ task remoteTest(type: Test) { project.configurations.testRuntime + project.configurations.remoteTestRuntime - testLogging { - events 'passed', 'skipped', 'failed' - exceptionFormat = 'full' - } - dependsOn startDockerContainer finalizedBy stopDockerContainer } diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/CreateReleaseTask.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/CreateReleaseTask.groovy index b9043865..99daf83e 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/CreateReleaseTask.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/CreateReleaseTask.groovy @@ -1,6 +1,7 @@ package pl.allegro.tech.build.axion.release import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import pl.allegro.tech.build.axion.release.domain.Releaser @@ -10,6 +11,7 @@ import pl.allegro.tech.build.axion.release.infrastructure.di.GradleAwareContext class CreateReleaseTask extends DefaultTask { + @Input @Optional VersionConfig versionConfig diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/MarkNextVersionTask.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/MarkNextVersionTask.groovy index 4692ddbf..36b073b7 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/MarkNextVersionTask.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/MarkNextVersionTask.groovy @@ -1,6 +1,7 @@ package pl.allegro.tech.build.axion.release import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import pl.allegro.tech.build.axion.release.domain.NextVersionMarker @@ -11,6 +12,7 @@ import pl.allegro.tech.build.axion.release.infrastructure.di.GradleAwareContext class MarkNextVersionTask extends DefaultTask { + @Input @Optional VersionConfig versionConfig diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/OutputCurrentVersionTask.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/OutputCurrentVersionTask.groovy index f9c5398d..4ea53976 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/OutputCurrentVersionTask.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/OutputCurrentVersionTask.groovy @@ -1,6 +1,7 @@ package pl.allegro.tech.build.axion.release import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Nested import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import pl.allegro.tech.build.axion.release.domain.VersionConfig @@ -9,6 +10,7 @@ import pl.allegro.tech.build.axion.release.infrastructure.output.OutputWriter class OutputCurrentVersionTask extends DefaultTask { + @Nested @Optional VersionConfig versionConfig diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/PushReleaseTask.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/PushReleaseTask.groovy index cb0ae903..35a91f52 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/PushReleaseTask.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/PushReleaseTask.groovy @@ -1,6 +1,7 @@ package pl.allegro.tech.build.axion.release import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import pl.allegro.tech.build.axion.release.domain.Releaser @@ -11,6 +12,7 @@ import pl.allegro.tech.build.axion.release.infrastructure.di.GradleAwareContext class PushReleaseTask extends DefaultTask { + @Input @Optional VersionConfig versionConfig diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/ReleaseTask.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/ReleaseTask.groovy index 36974435..a91b18b1 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/ReleaseTask.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/ReleaseTask.groovy @@ -1,6 +1,7 @@ package pl.allegro.tech.build.axion.release import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import pl.allegro.tech.build.axion.release.domain.Releaser @@ -11,6 +12,7 @@ import pl.allegro.tech.build.axion.release.infrastructure.di.GradleAwareContext class ReleaseTask extends DefaultTask { + @Input @Optional VersionConfig versionConfig diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/VerifyReleaseTask.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/VerifyReleaseTask.groovy index 1dcb8241..610d5aaa 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/VerifyReleaseTask.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/VerifyReleaseTask.groovy @@ -1,6 +1,7 @@ package pl.allegro.tech.build.axion.release import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import pl.allegro.tech.build.axion.release.domain.LocalOnlyResolver @@ -14,6 +15,7 @@ import pl.allegro.tech.build.axion.release.infrastructure.di.GradleAwareContext class VerifyReleaseTask extends DefaultTask { + @Input @Optional VersionConfig versionConfig diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/ChecksConfig.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/ChecksConfig.groovy index c11221c1..78d3478a 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/ChecksConfig.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/ChecksConfig.groovy @@ -1,11 +1,16 @@ package pl.allegro.tech.build.axion.release.domain +import org.gradle.api.tasks.Input + class ChecksConfig { + @Input boolean aheadOfRemote = true + @Input boolean uncommittedChanges = true + @Input boolean snapshotDependencies = true } diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/NextVersionConfig.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/NextVersionConfig.groovy index b4f33fa6..72d77bfd 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/NextVersionConfig.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/NextVersionConfig.groovy @@ -1,13 +1,20 @@ package pl.allegro.tech.build.axion.release.domain +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Nested + class NextVersionConfig { - + + @Input String suffix = 'alpha' + @Input String separator = '-' - + + @Nested Closure serializer = NextVersionSerializer.DEFAULT.serializer - + + @Nested Closure deserializer = NextVersionSerializer.DEFAULT.deserializer void serializer(String type) { diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/RepositoryConfig.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/RepositoryConfig.groovy index c1e08e8e..e60fb3f0 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/RepositoryConfig.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/RepositoryConfig.groovy @@ -1,20 +1,35 @@ package pl.allegro.tech.build.axion.release.domain +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.Optional + class RepositoryConfig { + @Input String type = 'git' + @InputDirectory File directory + @Input String remote = 'origin' + @Input + @Optional def customKey + @Input + @Optional String customKeyPassword - + + @Input + @Optional String customUsername - + + @Input String customPassword = '' + @Input boolean pushTagsOnly = false } diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/TagNameSerializationConfig.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/TagNameSerializationConfig.groovy index 1397203f..b7e4e5f1 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/TagNameSerializationConfig.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/TagNameSerializationConfig.groovy @@ -1,5 +1,7 @@ package pl.allegro.tech.build.axion.release.domain +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Nested import pl.allegro.tech.build.axion.release.domain.properties.TagProperties import pl.allegro.tech.build.axion.release.domain.scm.ScmPosition @@ -9,16 +11,22 @@ class TagNameSerializationConfig { static final String DEFAULT_PREFIX = 'release' + @Input String prefix = DEFAULT_PREFIX + @Input Map branchPrefix = [:] + @Input String versionSeparator = DEFAULT_VERSION_SEPARATOR + @Nested Closure serialize = TagNameSerializer.DEFAULT.serializer + @Nested Closure deserialize = TagNameSerializer.DEFAULT.deserializer + @Nested Closure initialVersion = defaultInitialVersion() private static Closure defaultInitialVersion() { diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionConfig.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionConfig.groovy index 38f29362..6626fa59 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionConfig.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionConfig.groovy @@ -1,6 +1,8 @@ package pl.allegro.tech.build.axion.release.domain import org.gradle.api.Project +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Nested import pl.allegro.tech.build.axion.release.ReleasePlugin import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig import pl.allegro.tech.build.axion.release.domain.properties.Properties @@ -15,40 +17,58 @@ class VersionConfig { private final Project project + @Input boolean localOnly = false + @Input boolean dryRun + @Input boolean ignoreUncommittedChanges = true + @Input boolean useHighestVersion = false + @Nested RepositoryConfig repository + @Nested TagNameSerializationConfig tag = new TagNameSerializationConfig() + @Nested Closure versionCreator = PredefinedVersionCreator.SIMPLE.versionCreator + @Input Map branchVersionCreator = [:] + @Nested Closure versionIncrementer = PredefinedVersionIncrementer.versionIncrementerFor('incrementPatch') + @Input Map branchVersionIncrementer = [:] + @Input Pattern releaseBranchPattern = Pattern.compile('^release(/.*)?$') + @Nested ChecksConfig checks = new ChecksConfig() + @Input boolean sanitizeVersion = true + @Input boolean createReleaseCommit = false + @Nested Closure releaseCommitMessage = PredefinedReleaseCommitMessageCreator.DEFAULT.commitMessageCreator + @Nested NextVersionConfig nextVersion = new NextVersionConfig() + @Nested HooksConfig hooks = new HooksConfig() + @Nested MonorepoConfig monorepoConfig = new MonorepoConfig() private Context context @@ -126,16 +146,19 @@ class VersionConfig { this.branchVersionIncrementer = creators } + @Input String getVersion() { ensureVersionExists() return resolvedVersion.decoratedVersion } + @Input String getUndecoratedVersion() { ensureVersionExists() return resolvedVersion.undecoratedVersion } + @Nested VersionScmPosition getScmPosition() { ensureVersionExists() return new VersionScmPosition( @@ -151,12 +174,14 @@ class VersionConfig { } } + @Nested VersionService.DecoratedVersion getUncachedVersion() { ensureContextExists() Properties rules = context.rules() return context.versionService().currentDecoratedVersion(rules.version, rules.tag, rules.nextVersion) } + @Nested VersionService getVersionService() { ensureContextExists() return context.versionService() diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionScmPosition.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionScmPosition.groovy index abb8ddcd..d0336d66 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionScmPosition.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/VersionScmPosition.groovy @@ -1,11 +1,16 @@ package pl.allegro.tech.build.axion.release.domain +import org.gradle.api.tasks.Input + class VersionScmPosition { + @Input final String revision + @Input final String shortRevision + @Input final String branch VersionScmPosition(String revision, String shortRevision, String branch) { diff --git a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/hooks/HooksConfig.groovy b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/hooks/HooksConfig.groovy index c1732170..a3bddb7f 100644 --- a/src/main/groovy/pl/allegro/tech/build/axion/release/domain/hooks/HooksConfig.groovy +++ b/src/main/groovy/pl/allegro/tech/build/axion/release/domain/hooks/HooksConfig.groovy @@ -1,11 +1,15 @@ package pl.allegro.tech.build.axion.release.domain.hooks +import org.gradle.api.tasks.Input + class HooksConfig { - + + @Input List preReleaseHooks = [] - + + @Input List postReleaseHooks = [] - + void pre(Closure c) { preReleaseHooks.add(PredefinedReleaseHookAction.DEFAULT.factory.create(c)) } @@ -13,7 +17,7 @@ class HooksConfig { void pre(String type) { preReleaseHooks.add(PredefinedReleaseHookAction.factoryFor(type).create()) } - + void pre(String type, Map arguments) { preReleaseHooks.add(PredefinedReleaseHookAction.factoryFor(type).create(arguments)) } @@ -25,7 +29,7 @@ class HooksConfig { void post(String type) { postReleaseHooks.add(PredefinedReleaseHookAction.factoryFor(type).create()) } - + void post(Closure c) { postReleaseHooks.add(PredefinedReleaseHookAction.DEFAULT.factory.create(c)) } @@ -33,7 +37,7 @@ class HooksConfig { void post(String type, Map arguments) { postReleaseHooks.add(PredefinedReleaseHookAction.factoryFor(type).create(arguments)) } - + void post(String type, Closure c) { postReleaseHooks.add(PredefinedReleaseHookAction.factoryFor(type).create(c)) } diff --git a/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionService.java b/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionService.java index d85ef00f..24fe52c4 100644 --- a/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionService.java +++ b/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionService.java @@ -1,5 +1,7 @@ package pl.allegro.tech.build.axion.release.domain; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Nested; import pl.allegro.tech.build.axion.release.domain.properties.NextVersionProperties; import pl.allegro.tech.build.axion.release.domain.properties.TagProperties; import pl.allegro.tech.build.axion.release.domain.properties.VersionProperties; @@ -51,14 +53,17 @@ public DecoratedVersion(String undecoratedVersion, String decoratedVersion, ScmP this.position = position; } + @Input public final String getUndecoratedVersion() { return undecoratedVersion; } + @Input public final String getDecoratedVersion() { return decoratedVersion; } + @Nested public final ScmPosition getPosition() { return position; } diff --git a/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/ScmPosition.java b/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/ScmPosition.java index 69d78d94..adeeb7d7 100644 --- a/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/ScmPosition.java +++ b/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/ScmPosition.java @@ -1,5 +1,7 @@ package pl.allegro.tech.build.axion.release.domain.scm; +import org.gradle.api.tasks.Input; + public class ScmPosition { private final String revision; @@ -29,14 +31,17 @@ public String toString() { + ", branch = " + branch + "]"; } + @Input public String getRevision() { return revision; } + @Input public String getShortRevision() { return shortRevision; } + @Input public String getBranch() { return branch; } diff --git a/src/test/groovy/pl/allegro/tech/build/axion/release/RepositoryBasedTest.groovy b/src/test/groovy/pl/allegro/tech/build/axion/release/RepositoryBasedTest.groovy index 1c384b62..0685e25d 100644 --- a/src/test/groovy/pl/allegro/tech/build/axion/release/RepositoryBasedTest.groovy +++ b/src/test/groovy/pl/allegro/tech/build/axion/release/RepositoryBasedTest.groovy @@ -26,7 +26,10 @@ class RepositoryBasedTest extends Specification { void setup() { directory = temporaryFolder.root - Grgit.init(dir: directory) + def rawRepository = Grgit.init(dir: directory) + + // let's make sure, not to use system wide user settings in tests + rawRepository.repository.jgit.repository.config.baseConfig.clear() ScmProperties scmProperties = scmProperties(directory).build() ScmRepository scmRepository = ScmRepositoryFactory.create(scmProperties)