Skip to content

Commit 9041e39

Browse files
authored
SnapshotDependencies checker moved to java - fixes #827 (#828)
1 parent fb29f27 commit 9041e39

File tree

3 files changed

+119
-40
lines changed

3 files changed

+119
-40
lines changed

src/integration/groovy/pl/allegro/tech/build/axion/release/VerifyReleaseIntegrationTest.groovy

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,62 @@ class VerifyReleaseIntegrationTest extends BaseIntegrationTest {
1818
result.task(":verifyRelease").outcome == TaskOutcome.SUCCESS
1919
}
2020

21+
def "should work in multimodule project setup"() {
22+
given:
23+
initialMultiModuleProjectConfiguration()
24+
25+
when:
26+
def result = runGradle(':verifyRelease')
27+
28+
then:
29+
result.task(":verifyRelease").outcome == TaskOutcome.SUCCESS
30+
}
31+
32+
void initialMultiModuleProjectConfiguration() {
33+
buildFile('''
34+
scmVersion {
35+
versionCreator "versionWithBranch"
36+
}
37+
allprojects {
38+
version = scmVersion.version
39+
}
40+
''')
41+
generateSettingsFile(temporaryFolder)
42+
generateGitIgnoreFile(temporaryFolder)
43+
generateSubmoduleBuildFile("module1")
44+
repository.commit(['.'], "initial commit of top level project")
45+
runGradle(":createRelease", "-Prelease.version=1.0.0", '-Prelease.disableChecks')
46+
}
47+
48+
void generateSubmoduleBuildFile(String projectName) {
49+
File submoduleDir = new File(temporaryFolder, projectName)
50+
submoduleDir.mkdirs()
51+
File buildFile = new File(submoduleDir, "build.gradle")
52+
buildFile << '''
53+
plugins {
54+
id 'java-platform'
55+
}
56+
57+
dependencies {
58+
constraints {
59+
api "multimodule-project:multimodule-project:${version}"
60+
}
61+
}
62+
'''
63+
}
64+
65+
void generateSettingsFile(File dir) {
66+
File settings = new File(dir, "settings.gradle")
67+
settings << """
68+
rootProject.name = "multimodule-project"
69+
include(':module1')
70+
"""
71+
}
72+
73+
void generateGitIgnoreFile(File dir) {
74+
File gitIgnore = new File(dir, ".gitignore")
75+
gitIgnore << """\
76+
.gradle
77+
""".stripIndent()
78+
}
2179
}

src/main/groovy/pl/allegro/tech/build/axion/release/domain/SnapshotDependenciesChecker.groovy

Lines changed: 0 additions & 40 deletions
This file was deleted.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package pl.allegro.tech.build.axion.release.domain;
2+
3+
import org.gradle.api.Project;
4+
import org.gradle.api.artifacts.Configuration;
5+
import org.gradle.api.artifacts.Dependency;
6+
import org.gradle.api.artifacts.DependencyConstraint;
7+
8+
import java.util.Collection;
9+
import java.util.HashSet;
10+
import java.util.Set;
11+
import java.util.stream.Collectors;
12+
13+
public class SnapshotDependenciesChecker {
14+
15+
public Collection<String> snapshotVersions(Project project) {
16+
Set<String> projectVersions = project.getRootProject().getAllprojects().stream()
17+
.map(this::toFullVersion)
18+
.collect(Collectors.toSet());
19+
20+
Set<Configuration> configurations = project.getRootProject().getAllprojects().stream()
21+
.flatMap(p -> p.getConfigurations().stream())
22+
.collect(Collectors.toSet());
23+
24+
Set<String> allDependenciesVersions = new HashSet<>();
25+
for (Configuration config : configurations) {
26+
Set<String> versions = config.getAllDependencies().stream()
27+
.filter(this::isSnapshot)
28+
.map(this::toFullVersion)
29+
.collect(Collectors.toSet());
30+
31+
Set<String> constraintVersions = config.getAllDependencyConstraints().stream()
32+
.filter(this::isSnapshot)
33+
.map(this::toFullVersion)
34+
.collect(Collectors.toSet());
35+
36+
allDependenciesVersions.addAll(versions);
37+
allDependenciesVersions.addAll(constraintVersions);
38+
}
39+
allDependenciesVersions.removeAll(projectVersions);
40+
return allDependenciesVersions;
41+
}
42+
43+
private boolean isSnapshot(Dependency dependency) {
44+
return dependency.getVersion() != null && dependency.getVersion().endsWith("-SNAPSHOT");
45+
}
46+
47+
private boolean isSnapshot(DependencyConstraint dependency) {
48+
return dependency.getVersion() != null && dependency.getVersion().endsWith("-SNAPSHOT");
49+
}
50+
51+
private String toFullVersion(Object it) {
52+
if (it instanceof Dependency) {
53+
Dependency dependency = (Dependency) it;
54+
return String.format("%s:%s:%s", dependency.getGroup(), dependency.getName(), dependency.getVersion());
55+
} else if (it instanceof DependencyConstraint) {
56+
DependencyConstraint constraint = (DependencyConstraint) it;
57+
return String.format("%s:%s:%s", constraint.getGroup(), constraint.getName(), constraint.getVersion());
58+
}
59+
return "";
60+
}
61+
}

0 commit comments

Comments
 (0)