Skip to content

Commit f2ed7d6

Browse files
authored
Update to Gradle 8.8 (opensearch-project#13584)
Signed-off-by: Andriy Redko <andriy.redko@aiven.io>
1 parent cf2c31f commit f2ed7d6

27 files changed

+428
-60
lines changed

buildSrc/src/main/java/org/opensearch/gradle/info/GlobalBuildInfoPlugin.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,28 @@ private JavaVersion determineJavaVersion(String description, File javaHome, Java
199199
}
200200

201201
private JvmInstallationMetadata getJavaInstallation(File javaHome) {
202-
final InstallationLocation location = new InstallationLocation(javaHome, "Java home");
202+
InstallationLocation location = null;
203+
204+
try {
205+
try {
206+
// The InstallationLocation(File, String) is used by Gradle pre-8.8
207+
location = (InstallationLocation) MethodHandles.publicLookup()
208+
.findConstructor(InstallationLocation.class, MethodType.methodType(void.class, File.class, String.class))
209+
.invokeExact(javaHome, "Java home");
210+
} catch (Throwable ex) {
211+
// The InstallationLocation::userDefined is used by Gradle post-8.7
212+
location = (InstallationLocation) MethodHandles.publicLookup()
213+
.findStatic(
214+
InstallationLocation.class,
215+
"userDefined",
216+
MethodType.methodType(InstallationLocation.class, File.class, String.class)
217+
)
218+
.invokeExact(javaHome, "Java home");
219+
220+
}
221+
} catch (Throwable ex) {
222+
throw new IllegalStateException("Unable to find suitable InstallationLocation constructor / factory method", ex);
223+
}
203224

204225
try {
205226
try {

buildSrc/src/main/java/org/opensearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ private void configureGeneralTaskDefaults(Project project) {
148148
project.getTasks().withType(AbstractCopyTask.class).configureEach(t -> {
149149
t.dependsOn(project.getTasks().withType(EmptyDirTask.class));
150150
t.setIncludeEmptyDirs(true);
151-
t.setDirMode(0755);
152-
t.setFileMode(0644);
151+
t.dirPermissions(perms -> perms.unix(0755));
152+
t.filePermissions(perms -> perms.unix(0644));
153153
});
154154

155155
// common config across all archives

buildSrc/src/main/java/org/opensearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.gradle.api.Task;
3838
import org.gradle.api.artifacts.Configuration;
3939
import org.gradle.api.artifacts.ProjectDependency;
40+
import org.gradle.api.internal.artifacts.ivyservice.LenientConfigurationInternal;
41+
import org.gradle.api.internal.artifacts.ivyservice.ResolvedFilesCollectingVisitor;
4042
import org.gradle.api.plugins.JavaPlugin;
4143
import org.gradle.api.tasks.TaskProvider;
4244

@@ -53,9 +55,13 @@ public TaskProvider<? extends Task> createTask(Project project) {
5355
Configuration runtimeClasspath = project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
5456
Configuration compileOnly = project.getConfigurations()
5557
.getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME);
56-
t.setDependencies(
57-
runtimeClasspath.fileCollection(dependency -> dependency instanceof ProjectDependency == false).minus(compileOnly)
58-
);
58+
59+
final ResolvedFilesCollectingVisitor visitor = new ResolvedFilesCollectingVisitor();
60+
final LenientConfigurationInternal configuration = (LenientConfigurationInternal) runtimeClasspath.getResolvedConfiguration()
61+
.getLenientConfiguration();
62+
configuration.select(dependency -> dependency instanceof ProjectDependency == false).visitArtifacts(visitor, false);
63+
64+
t.setDependencies(project.files(visitor.getFiles()).minus(compileOnly));
5965
});
6066

6167
// we also create the updateShas helper task that is associated with dependencyLicenses

buildSrc/src/main/java/org/opensearch/gradle/precommit/ThirdPartyAuditTask.java

+16-5
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import org.gradle.api.artifacts.Dependency;
4444
import org.gradle.api.file.FileCollection;
4545
import org.gradle.api.file.FileTree;
46+
import org.gradle.api.internal.artifacts.ivyservice.LenientConfigurationInternal;
47+
import org.gradle.api.internal.artifacts.ivyservice.ResolvedFilesCollectingVisitor;
4648
import org.gradle.api.provider.Property;
4749
import org.gradle.api.specs.Spec;
4850
import org.gradle.api.tasks.CacheableTask;
@@ -203,11 +205,12 @@ public Set<File> getJarsToScan() {
203205
// or dependencies added as `files(...)`, we can't be sure if those are third party or not.
204206
// err on the side of scanning these to make sure we don't miss anything
205207
Spec<Dependency> reallyThirdParty = dep -> dep.getGroup() != null && dep.getGroup().startsWith("org.opensearch") == false;
206-
Set<File> jars = getRuntimeConfiguration().getResolvedConfiguration().getFiles(reallyThirdParty);
207-
Set<File> compileOnlyConfiguration = getProject().getConfigurations()
208-
.getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME)
209-
.getResolvedConfiguration()
210-
.getFiles(reallyThirdParty);
208+
209+
Set<File> jars = getFiles(getRuntimeConfiguration(), reallyThirdParty);
210+
Set<File> compileOnlyConfiguration = getFiles(
211+
getProject().getConfigurations().getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME),
212+
reallyThirdParty
213+
);
211214
// don't scan provided dependencies that we already scanned, e.x. don't scan cores dependencies for every plugin
212215
if (compileOnlyConfiguration != null) {
213216
jars.removeAll(compileOnlyConfiguration);
@@ -286,6 +289,14 @@ public void runThirdPartyAudit() throws IOException {
286289
Files.write(getSuccessMarker().toPath(), new byte[] {});
287290
}
288291

292+
private Set<File> getFiles(Configuration configuration, Spec<Dependency> spec) {
293+
final ResolvedFilesCollectingVisitor visitor = new ResolvedFilesCollectingVisitor();
294+
final LenientConfigurationInternal cfg = (LenientConfigurationInternal) configuration.getResolvedConfiguration()
295+
.getLenientConfiguration();
296+
cfg.select(spec).visitArtifacts(visitor, false);
297+
return visitor.getFiles();
298+
}
299+
289300
private void logForbiddenAPIsOutput(String forbiddenApisOutput) {
290301
getLogger().error("Forbidden APIs output:\n{}==end of forbidden APIs==", forbiddenApisOutput);
291302
}

buildSrc/src/main/java/org/opensearch/gradle/tar/SymbolicLinkPreservingTar.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ private void visitSymbolicLink(final FileCopyDetailsInternal details) {
184184
visitedSymbolicLinks.add(details.getFile());
185185
final TarArchiveEntry entry = new TarArchiveEntry(details.getRelativePath().getPathString(), TarConstants.LF_SYMLINK);
186186
entry.setModTime(getModTime(details));
187-
entry.setMode(UnixStat.LINK_FLAG | details.getMode());
187+
entry.setMode(UnixStat.LINK_FLAG | details.getPermissions().toUnixNumeric());
188188
try {
189189
entry.setLinkName(Files.readSymbolicLink(details.getFile().toPath()).toString());
190190
tar.putArchiveEntry(entry);
@@ -197,7 +197,7 @@ private void visitSymbolicLink(final FileCopyDetailsInternal details) {
197197
private void visitDirectory(final FileCopyDetailsInternal details) {
198198
final TarArchiveEntry entry = new TarArchiveEntry(details.getRelativePath().getPathString() + "/");
199199
entry.setModTime(getModTime(details));
200-
entry.setMode(UnixStat.DIR_FLAG | details.getMode());
200+
entry.setMode(UnixStat.DIR_FLAG | details.getPermissions().toUnixNumeric());
201201
try {
202202
tar.putArchiveEntry(entry);
203203
tar.closeArchiveEntry();
@@ -209,7 +209,7 @@ private void visitDirectory(final FileCopyDetailsInternal details) {
209209
private void visitFile(final FileCopyDetailsInternal details) {
210210
final TarArchiveEntry entry = new TarArchiveEntry(details.getRelativePath().getPathString());
211211
entry.setModTime(getModTime(details));
212-
entry.setMode(UnixStat.FILE_FLAG | details.getMode());
212+
entry.setMode(UnixStat.FILE_FLAG | details.getPermissions().toUnixNumeric());
213213
entry.setSize(details.getSize());
214214
try {
215215
tar.putArchiveEntry(entry);

distribution/archives/build.gradle

+15-5
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,17 @@ CopySpec archiveFiles(CopySpec modulesFiles, String distributionType, String pla
3939
with libFiles()
4040
}
4141
into('config') {
42-
dirMode 0750
43-
fileMode 0660
42+
dirPermissions {
43+
unix 0750
44+
}
45+
filePermissions {
46+
unix 0660
47+
}
4448
with configFiles(distributionType, java)
4549
from {
46-
dirMode 0750
50+
dirPermissions {
51+
unix 0750
52+
}
4753
jvmOptionsDir.getParent()
4854
}
4955
}
@@ -61,13 +67,17 @@ CopySpec archiveFiles(CopySpec modulesFiles, String distributionType, String pla
6167
}
6268
into('') {
6369
from {
64-
dirMode 0755
70+
dirPermissions {
71+
unix 0755
72+
}
6573
logsDir.getParent()
6674
}
6775
}
6876
into('') {
6977
from {
70-
dirMode 0755
78+
dirPermissions {
79+
unix 0755
80+
}
7181
pluginsDir.getParent()
7282
}
7383
}

distribution/build.gradle

+6-6
Original file line numberDiff line numberDiff line change
@@ -363,9 +363,9 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
363363
if (it.relativePath.segments[-2] == 'bin' || ((platform == 'darwin-x64' || platform == 'darwin-arm64') && it.relativePath.segments[-2] == 'MacOS')) {
364364
// bin files, wherever they are within modules (eg platform specific) should be executable
365365
// and MacOS is an alternative to bin on macOS
366-
it.mode = 0755
366+
it.permissions(perm -> perm.unix(0755))
367367
} else {
368-
it.mode = 0644
368+
it.permissions(perm -> perm.unix(0644))
369369
}
370370
}
371371
def buildModules = buildModulesTaskProvider
@@ -413,7 +413,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
413413
from '../src/bin'
414414
exclude '*.exe'
415415
exclude '*.bat'
416-
eachFile { it.setMode(0755) }
416+
eachFile { it.permissions(perm -> perm.unix(0755)) }
417417
MavenFilteringHack.filter(it, expansionsForDistribution(distributionType, java))
418418
}
419419
// windows files, only for zip
@@ -431,7 +431,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
431431
}
432432
// module provided bin files
433433
with copySpec {
434-
eachFile { it.setMode(0755) }
434+
eachFile { it.permissions(perm -> perm.unix(0755)) }
435435
from project(':distribution').buildBin
436436
if (distributionType != 'zip') {
437437
exclude '*.bat'
@@ -473,7 +473,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
473473
}
474474
eachFile { FileCopyDetails details ->
475475
if (details.relativePath.segments[-2] == 'bin' || details.relativePath.segments[-1] == 'jspawnhelper') {
476-
details.mode = 0755
476+
details.permissions(perm -> perm.unix(0755))
477477
}
478478
if (details.name == 'src.zip') {
479479
details.exclude()
@@ -501,7 +501,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
501501
}
502502
eachFile { FileCopyDetails details ->
503503
if (details.relativePath.segments[-2] == 'bin' || details.relativePath.segments[-1] == 'jspawnhelper') {
504-
details.mode = 0755
504+
details.permissions(perm -> perm.unix(0755))
505505
}
506506
}
507507
}

distribution/packages/build.gradle

+44-16
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,9 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
160160
}
161161
from(rootProject.projectDir) {
162162
include 'README.md'
163-
fileMode 0644
163+
filePermissions {
164+
unix 0644
165+
}
164166
}
165167
into('lib') {
166168
with libFiles()
@@ -183,9 +185,9 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
183185
directory('/' + segments[0..i].join('/'), 0755)
184186
}
185187
if (segments[-2] == 'bin' || segments[-1] == 'jspawnhelper') {
186-
fcp.mode = 0755
188+
fcp.permissions(perm -> perm.unix(0755))
187189
} else {
188-
fcp.mode = 0644
190+
fcp.permissions(perm -> perm.unix(0644))
189191
}
190192
}
191193
}
@@ -195,7 +197,9 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
195197
if (type == 'deb') {
196198
into("/usr/share/doc/${packageName}") {
197199
from "${packagingFiles}/copyright"
198-
fileMode 0644
200+
filePermissions {
201+
unix 0644
202+
}
199203
}
200204
} else {
201205
assert type == 'rpm'
@@ -204,7 +208,9 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
204208
include 'APACHE-LICENSE-2.0.txt'
205209
rename { 'LICENSE.txt' }
206210
}
207-
fileMode 0644
211+
filePermissions {
212+
unix 0644
213+
}
208214
}
209215
}
210216

@@ -213,7 +219,9 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
213219
configurationFile '/etc/opensearch/jvm.options'
214220
configurationFile '/etc/opensearch/log4j2.properties'
215221
from("${packagingFiles}") {
216-
dirMode 0750
222+
dirPermissions {
223+
unix 0750
224+
}
217225
into('/etc')
218226
permissionGroup 'opensearch'
219227
includeEmptyDirs true
@@ -223,8 +231,12 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
223231
}
224232
from("${packagingFiles}/etc/opensearch") {
225233
into('/etc/opensearch')
226-
dirMode 0750
227-
fileMode 0660
234+
dirPermissions {
235+
unix 0750
236+
}
237+
filePermissions{
238+
unix 0660
239+
}
228240
permissionGroup 'opensearch'
229241
includeEmptyDirs true
230242
createDirectoryEntry true
@@ -235,34 +247,46 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
235247
into(new File(envFile).getParent()) {
236248
fileType CONFIG | NOREPLACE
237249
permissionGroup 'opensearch'
238-
fileMode 0660
250+
filePermissions {
251+
unix 0660
252+
}
239253
from "${packagingFiles}/env/opensearch"
240254
}
241255

242256
// ========= systemd =========
243257
into('/usr/lib/tmpfiles.d') {
244258
from "${packagingFiles}/systemd/opensearch.conf"
245-
fileMode 0644
259+
filePermissions {
260+
unix 0644
261+
}
246262
}
247263
into('/usr/lib/systemd/system') {
248264
fileType CONFIG | NOREPLACE
249265
from "${packagingFiles}/systemd/opensearch.service"
250-
fileMode 0644
266+
filePermissions {
267+
unix 0644
268+
}
251269
}
252270
into('/usr/lib/sysctl.d') {
253271
fileType CONFIG | NOREPLACE
254272
from "${packagingFiles}/systemd/sysctl/opensearch.conf"
255-
fileMode 0644
273+
filePermissions {
274+
unix 0644
275+
}
256276
}
257277
into('/usr/share/opensearch/bin') {
258278
from "${packagingFiles}/systemd/systemd-entrypoint"
259-
fileMode 0755
279+
filePermissions {
280+
unix 0755
281+
}
260282
}
261283

262284
// ========= sysV init =========
263285
configurationFile '/etc/init.d/opensearch'
264286
into('/etc/init.d') {
265-
fileMode 0750
287+
filePermissions {
288+
unix 0750
289+
}
266290
fileType CONFIG | NOREPLACE
267291
from "${packagingFiles}/init.d/opensearch"
268292
}
@@ -278,7 +302,9 @@ Closure commonPackageConfig(String type, boolean jdk, String architecture) {
278302
createDirectoryEntry true
279303
user u
280304
permissionGroup g
281-
dirMode mode
305+
dirPermissions {
306+
unix mode
307+
}
282308
}
283309
}
284310
copyEmptyDir('/var/log/opensearch', 'opensearch', 'opensearch', 0750)
@@ -341,7 +367,9 @@ Closure commonDebConfig(boolean jdk, String architecture) {
341367

342368
into('/usr/share/lintian/overrides') {
343369
from('src/deb/lintian/opensearch')
344-
fileMode 0644
370+
filePermissions {
371+
unix 0644
372+
}
345373
}
346374
}
347375
}

gradle/wrapper/gradle-wrapper.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
distributionBase=GRADLE_USER_HOME
1313
distributionPath=wrapper/dists
14-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
14+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip
1515
zipStoreBase=GRADLE_USER_HOME
1616
zipStorePath=wrapper/dists
17-
distributionSha256Sum=194717442575a6f96e1c1befa2c30e9a4fc90f701d7aee33eb879b79e7ff05c0
17+
distributionSha256Sum=f8b4f4772d302c8ff580bc40d0f56e715de69b163546944f787c87abf209c961

0 commit comments

Comments
 (0)