Skip to content
This repository was archived by the owner on Nov 4, 2024. It is now read-only.

Commit c086dfc

Browse files
authored
Merge pull request #42 from galasa-dev/iss1652-gradle-8-support
Add support for Gradle 8
2 parents a51bdab + 79fb581 commit c086dfc

File tree

13 files changed

+110
-35
lines changed

13 files changed

+110
-35
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ group = "dev.galasa"
99

1010
// Note: The following line is changed by the set-version.sh script.
1111
// It is also read by other build scrips as required.
12-
version = "0.33.0"
12+
version = "0.36.0"
1313

1414
signing {
1515
def signingKeyId = findProperty("signingKeyId")

dev.galasa.gradle.impl/build.gradle

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
}
66

77
group = "dev.galasa"
8-
version = "0.33.0"
8+
version = "0.36.0"
99

1010
repositories {
1111
mavenLocal()
@@ -33,9 +33,9 @@ tasks.withType(Javadoc) {
3333
}
3434

3535
task gitHash(dependsOn : 'classes') {
36-
def dir = file("${buildDir}/githash")
37-
def meta = file("${buildDir}/githash/META-INF")
38-
def result = file("${buildDir}/githash/META-INF/git.hash")
36+
def dir = layout.buildDirectory.dir("githash").get().asFile
37+
def meta = layout.buildDirectory.dir("githash/META-INF").get().asFile
38+
def result = layout.buildDirectory.file("githash/META-INF/git.hash").get().asFile
3939

4040
outputs.dir meta
4141
tasks.jar.dependsOn('gitHash')
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright contributors to the Galasa project
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
package dev.galasa.gradle.common;
7+
8+
import org.gradle.util.GradleVersion;
9+
10+
public class GradleCompatibilityService implements ICompatibilityService {
11+
12+
public static final GradleVersion CURRENT_GRADLE_VERSION = GradleVersion.current();
13+
14+
public boolean isCurrentVersionLaterThanGradle8() {
15+
return CURRENT_GRADLE_VERSION.compareTo(GradleVersion.version("8.0")) >= 0;
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*
2+
* Copyright contributors to the Galasa project
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
package dev.galasa.gradle.common;
7+
8+
public interface ICompatibilityService {
9+
boolean isCurrentVersionLaterThanGradle8();
10+
}

dev.galasa.gradle.impl/src/main/java/dev/galasa/gradle/hashes/GitHashBuildTask.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import org.gradle.api.DefaultTask;
1515
import org.gradle.api.Task;
16+
import org.gradle.api.file.Directory;
1617
import org.gradle.api.tasks.SourceSet;
1718
import org.gradle.api.tasks.SourceSetContainer;
1819
import org.gradle.api.tasks.TaskAction;
@@ -57,17 +58,15 @@ public void apply() {
5758
Jar jarTask = (Jar) getProject().getTasks().getByName("jar");
5859
jarTask.getDependsOn().add(this);
5960

60-
//*** Create the directories so Gradle does not moan
61-
File dirGenTestCatalog = new File(getProject().getBuildDir(),"hashes");
62-
File dirGenTestCatalogMeta = new File(dirGenTestCatalog,"META-INF");
63-
//*** dont need to create the file here, just indicate where it will be on the outputs
64-
this.gitHash = new File(dirGenTestCatalogMeta,"git.hash");
61+
//*** Create the directories so Gradle does not moan)
62+
Directory dirHashes = getProject().getLayout().getBuildDirectory().dir("hashes").get();
63+
Directory dirHashesMeta = dirHashes.dir("META-INF");
6564

66-
//*** Tell the JAR task we want to it to include the meta-inf and json file
67-
jarTask.from(dirGenTestCatalog);
65+
this.gitHash = dirHashesMeta.file("git.hash").getAsFile();
6866

67+
//*** Tell the JAR task we want to it to include the meta-inf and json file
68+
jarTask.from(dirHashes);
6969
//*** Mark the meta-inf file as output for caching purposes
70-
getOutputs().dir(dirGenTestCatalog);
70+
getOutputs().dir(dirHashes);
7171
}
72-
7372
}

dev.galasa.gradle.impl/src/main/java/dev/galasa/gradle/obr/ObrBuildTask.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.net.URI;
1313
import java.nio.file.Files;
1414
import java.nio.file.Path;
15-
import java.nio.file.Paths;
1615
import java.text.SimpleDateFormat;
1716
import java.util.ArrayList;
1817
import java.util.Calendar;
@@ -31,7 +30,9 @@
3130
import org.gradle.api.artifacts.ConfigurationContainer;
3231
import org.gradle.api.artifacts.ResolvedArtifact;
3332
import org.gradle.api.artifacts.ResolvedDependency;
33+
import org.gradle.api.file.RegularFile;
3434
import org.gradle.api.logging.Logger;
35+
import org.gradle.api.provider.Provider;
3536
import org.gradle.api.tasks.TaskAction;
3637

3738
public class ObrBuildTask extends DefaultTask {
@@ -200,8 +201,8 @@ private void processObr(DataModelHelper obrDataModelHelper, RepositoryImpl newRe
200201

201202
public void apply() {
202203
// Run during apply phase, need to decide on the output file name
203-
Path buildDirectory = Paths.get(project.getBuildDir().toURI());
204-
this.pathObr = buildDirectory.resolve("galasa.obr");
204+
Provider<RegularFile> obrFile = project.getLayout().getBuildDirectory().file("galasa.obr");
205+
this.pathObr = obrFile.get().getAsFile().toPath();
205206
getOutputs().file(pathObr);
206207

207208
ConfigurationContainer configurations = project.getConfigurations();

dev.galasa.gradle.impl/src/main/java/dev/galasa/gradle/obr/ObrPlugin.java

+27-5
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,34 @@
88
import javax.inject.Inject;
99

1010
import org.gradle.api.Plugin;
11-
import org.gradle.api.Project;
11+
import org.gradle.api.Project;
1212
import org.gradle.api.artifacts.Configuration;
1313
import org.gradle.api.artifacts.ConfigurationContainer;
1414
import org.gradle.api.component.AdhocComponentWithVariants;
1515
import org.gradle.api.component.SoftwareComponentFactory;
1616
import org.gradle.api.internal.artifacts.ArtifactAttributes;
1717
import org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact;
18+
import org.gradle.api.internal.file.FileResolver;
19+
import org.gradle.api.internal.project.ProjectInternal;
20+
import org.gradle.api.internal.tasks.TaskDependencyFactory;
1821
import org.gradle.api.provider.Provider;
1922

23+
import dev.galasa.gradle.common.GradleCompatibilityService;
24+
import dev.galasa.gradle.common.ICompatibilityService;
25+
2026
/**
2127
* Generate an OBR
2228
*/
2329
public class ObrPlugin implements Plugin<Project> {
2430

2531
private final SoftwareComponentFactory softwareComponentFactory;
32+
private final TaskDependencyFactory taskDependencyFactory;
33+
private final ICompatibilityService compatibilityService = new GradleCompatibilityService();
2634

2735
@Inject
28-
public ObrPlugin(SoftwareComponentFactory softwareComponentFactory) {
36+
public ObrPlugin(SoftwareComponentFactory softwareComponentFactory, TaskDependencyFactory taskDependencyFactory) {
2937
this.softwareComponentFactory = softwareComponentFactory;
38+
this.taskDependencyFactory = taskDependencyFactory;
3039
}
3140

3241
public void apply(Project project) {
@@ -58,11 +67,24 @@ private void createObrBuildTask(Project project) {
5867
Provider<ObrBuildTask> provider = project.getTasks().register("genobr", ObrBuildTask.class, obrTask -> {
5968
obrTask.apply();
6069
});
61-
70+
6271
// Create the Publish Artifact that the task will be creating and add it the
6372
// configuration outbound list
64-
LazyPublishArtifact artifact = new LazyPublishArtifact(provider);
65-
project.getConfigurations().getByName("galasagenobr").getOutgoing().artifact(artifact);
73+
try {
74+
LazyPublishArtifact artifact;
75+
if (compatibilityService.isCurrentVersionLaterThanGradle8()) {
76+
// Create the artifact using the Gradle 8.x constructor
77+
artifact = LazyPublishArtifact.class
78+
.getConstructor(Provider.class, FileResolver.class, TaskDependencyFactory.class)
79+
.newInstance(provider, ((ProjectInternal) project).getFileResolver(), taskDependencyFactory);
80+
} else {
81+
// Create the artifact using the Gradle 6.x/7.x constructor
82+
artifact = LazyPublishArtifact.class.getConstructor(Provider.class).newInstance(provider);
83+
}
84+
project.getConfigurations().getByName("galasagenobr").getOutgoing().artifact(artifact);
85+
} catch (ReflectiveOperationException err) {
86+
throw new IllegalArgumentException("Incompatible LazyPublishArtifact constructor for Gradle version " + project.getGradle().getGradleVersion());
87+
}
6688
}
6789

6890
private void createSoftwareComponents(Project project) {

dev.galasa.gradle.impl/src/main/java/dev/galasa/gradle/testcatalog/TestCatalogBuildTask.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.gradle.api.artifacts.ConfigurationContainer;
2323
import org.gradle.api.artifacts.ResolvedArtifact;
2424
import org.gradle.api.artifacts.ResolvedDependency;
25+
import org.gradle.api.file.RegularFile;
26+
import org.gradle.api.provider.Provider;
2527
import org.gradle.api.tasks.TaskAction;
2628

2729
import com.google.gson.Gson;
@@ -201,7 +203,8 @@ private void processBundle(ResolvedDependency dependency) throws TestCatalogExce
201203

202204
public void apply() {
203205
// Run during apply phase, need to decide on the output file name
204-
this.testCatalog = new File(getProject().getBuildDir(),"testcatalog.json");
206+
Provider<RegularFile> testCatalogFile = getProject().getLayout().getBuildDirectory().file("testcatalog.json");
207+
this.testCatalog = testCatalogFile.get().getAsFile();
205208
getOutputs().file(testCatalog);
206209

207210
ConfigurationContainer configurations = getProject().getConfigurations();

dev.galasa.gradle.impl/src/main/java/dev/galasa/gradle/testcatalog/TestCatalogPlugin.java

+25-3
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,28 @@
1515
import org.gradle.api.component.SoftwareComponentFactory;
1616
import org.gradle.api.internal.artifacts.ArtifactAttributes;
1717
import org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact;
18+
import org.gradle.api.internal.file.FileResolver;
19+
import org.gradle.api.internal.project.ProjectInternal;
20+
import org.gradle.api.internal.tasks.TaskDependencyFactory;
1821
import org.gradle.api.provider.Provider;
1922
import org.gradle.api.publish.plugins.PublishingPlugin;
2023

24+
import dev.galasa.gradle.common.GradleCompatibilityService;
25+
import dev.galasa.gradle.common.ICompatibilityService;
26+
2127
/**
2228
* Build testcatalog artifact
2329
*/
2430
public class TestCatalogPlugin implements Plugin<Project> {
2531

2632
private final SoftwareComponentFactory softwareComponentFactory;
33+
private final TaskDependencyFactory taskDependencyFactory;
34+
private final ICompatibilityService compatibilityService = new GradleCompatibilityService();
2735

2836
@Inject
29-
public TestCatalogPlugin(SoftwareComponentFactory softwareComponentFactory) {
37+
public TestCatalogPlugin(SoftwareComponentFactory softwareComponentFactory, TaskDependencyFactory taskDependencyFactory) {
3038
this.softwareComponentFactory = softwareComponentFactory;
39+
this.taskDependencyFactory = taskDependencyFactory;
3140
}
3241

3342
public void apply(Project project) {
@@ -65,8 +74,21 @@ private void createTestcatBuildTask(Project project) {
6574

6675
// Create the Publish Artifact that the task will be creating and add it the
6776
// configuration outbound list
68-
LazyPublishArtifact artifact = new LazyPublishArtifact(provider);
69-
project.getConfigurations().getByName("galasamergetestcat").getOutgoing().artifact(artifact);
77+
try {
78+
LazyPublishArtifact artifact;
79+
if (compatibilityService.isCurrentVersionLaterThanGradle8()) {
80+
// Create the artifact using the Gradle 8.x constructor
81+
artifact = LazyPublishArtifact.class
82+
.getConstructor(Provider.class, FileResolver.class, TaskDependencyFactory.class)
83+
.newInstance(provider, ((ProjectInternal) project).getFileResolver(), taskDependencyFactory);
84+
} else {
85+
// Create the artifact using the Gradle 6.x/7.x constructor
86+
artifact = LazyPublishArtifact.class.getConstructor(Provider.class).newInstance(provider);
87+
}
88+
project.getConfigurations().getByName("galasamergetestcat").getOutgoing().artifact(artifact);
89+
} catch (ReflectiveOperationException err) {
90+
throw new IllegalArgumentException("Incompatible LazyPublishArtifact constructor for Gradle version " + project.getGradle().getGradleVersion());
91+
}
7092
}
7193

7294
private void createTestcatDeployTask(Project project) {

dev.galasa.gradle.impl/src/main/java/dev/galasa/gradle/tests/TestCatalogBuildTask.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.gradle.api.DefaultTask;
2222
import org.gradle.api.Task;
23+
import org.gradle.api.file.Directory;
2324
import org.gradle.api.tasks.SourceSet;
2425
import org.gradle.api.tasks.SourceSetContainer;
2526
import org.gradle.api.tasks.TaskAction;
@@ -252,10 +253,10 @@ public void apply() {
252253
jarTask.getDependsOn().add(this);
253254

254255
//*** Create the directories so Gradle does not moan
255-
File dirGenTestCatalog = new File(getProject().getBuildDir(),"gentestcatalog");
256-
File dirGenTestCatalogMeta = new File(dirGenTestCatalog,"META-INF");
256+
Directory dirGenTestCatalog = getProject().getLayout().getBuildDirectory().dir("gentestcatalog").get();
257+
Directory dirGenTestCatalogMeta = dirGenTestCatalog.dir("META-INF");
257258
//*** dont need to create the file here, just indicate where it will be on the outputs
258-
this.testCatalog = new File(dirGenTestCatalogMeta,"testcatalog.json");
259+
this.testCatalog = dirGenTestCatalogMeta.file("testcatalog.json").getAsFile();
259260

260261
//*** Tell the JAR task we want to it to include the meta-inf and json file
261262
jarTask.from(dirGenTestCatalog);

dev.galasa.plugin.common.impl/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "dev.galasa"
9-
version = "0.33.0"
9+
version = "0.36.0"
1010

1111
repositories {
1212
maven {

dev.galasa.plugin.common.test/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "dev.galasa"
9-
version = "0.33.0"
9+
version = "0.36.0"
1010

1111
repositories {
1212
maven {

dev.galasa.plugin.common/build.gradle

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "dev.galasa"
9-
version = "0.33.0"
9+
version = "0.36.0"
1010

1111
repositories {
1212
maven {
@@ -31,9 +31,9 @@ tasks.withType(Javadoc) {
3131
}
3232

3333
task gitHash(dependsOn : 'classes') {
34-
def dir = file("${buildDir}/githash")
35-
def meta = file("${buildDir}/githash/META-INF")
36-
def result = file("${buildDir}/githash/META-INF/git.hash")
34+
def dir = layout.buildDirectory.dir("githash").get().asFile
35+
def meta = layout.buildDirectory.dir("githash/META-INF").get().asFile
36+
def result = layout.buildDirectory.file("githash/META-INF/git.hash").get().asFile
3737

3838
outputs.dir meta
3939
tasks.jar.dependsOn('gitHash')

0 commit comments

Comments
 (0)