Skip to content

Commit 69a9cf3

Browse files
committed
Modifications from production version
1 parent 5183b4a commit 69a9cf3

13 files changed

Lines changed: 468 additions & 281 deletions

File tree

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919

2020
distributionBase=GRADLE_USER_HOME
2121
distributionPath=wrapper/dists
22-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
22+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
2323
zipStoreBase=GRADLE_USER_HOME
2424
zipStorePath=wrapper/dists

src/main/java/io/foojay/api/DiscoService.java

Lines changed: 21 additions & 10 deletions
Large diffs are not rendered by default.

src/main/java/io/foojay/api/distribution/GraalVM.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.slf4j.Logger;
4747
import org.slf4j.LoggerFactory;
4848

49+
import java.io.StringReader;
4950
import java.net.http.HttpResponse;
5051
import java.util.ArrayList;
5152
import java.util.Comparator;
@@ -67,13 +68,16 @@
6768
import static eu.hansolo.jdktools.OperatingSystem.MACOS;
6869
import static eu.hansolo.jdktools.OperatingSystem.WINDOWS;
6970
import static eu.hansolo.jdktools.PackageType.JDK;
71+
import static eu.hansolo.jdktools.PackageType.JRE;
7072

7173

7274
public class GraalVM implements Distribution {
7375
private static final Logger LOGGER = LoggerFactory.getLogger(GraalVM.class);
7476
private static final String PACKAGE_URL = "https://download.oracle.com/graalvm/";
7577
private static final Pattern FILENAME_PATTERN = Pattern.compile(new StringBuilder().append("^(graalvm-jdk-").append(")(.*)(_bin)(\\.tar\\.gz|\\.zip)$").toString());
7678
private static final Matcher FILENAME_MATCHER = FILENAME_PATTERN.matcher("");
79+
private static final String EA_BUILDS_URL = "https://raw.githubusercontent.com/graalvm/oracle-graalvm-ea-builds/main/versions/";
80+
7781

7882
// URL parameters
7983
private static final String ARCHITECTURE_PARAM = "";
@@ -427,4 +431,73 @@ public List<Pkg> getAllPkgsFrom17AndAbove(final boolean onlyNewPkgs) {
427431
});
428432
return pkgs;
429433
}
434+
435+
public List<Pkg> getEaBuildsFromGithub() {
436+
List<Pkg> pkgsFound = new ArrayList<>();
437+
CacheManager.INSTANCE.getMajorVersions().stream().filter(majorVersion -> majorVersion.getAsInt() > 21).forEach(majorVersion -> {
438+
String jsonFilename = majorVersion.getAsInt() + "-ea.json";
439+
String eaJsonUri = EA_BUILDS_URL + jsonFilename;
440+
System.out.println(eaJsonUri);
441+
try {
442+
HttpResponse<String> response = Helper.get(eaJsonUri);
443+
if (null != response) {
444+
String body = response.body();
445+
if (!body.isEmpty()) {
446+
Gson gson = new Gson();
447+
JsonElement element = gson.fromJson(body, JsonElement.class);
448+
if (element instanceof JsonArray) {
449+
JsonArray jsonArray = element.getAsJsonArray();
450+
for (JsonElement jsonVersionElement : jsonArray) {
451+
final JsonObject jsonObj = jsonVersionElement.getAsJsonObject();
452+
final String version = jsonObj.get("version").getAsString();
453+
final boolean latest = jsonObj.get("latest").getAsBoolean();
454+
final String downloadBaseUrl = jsonObj.get("download_base_url").getAsString();
455+
final JsonArray files = jsonObj.get("files").getAsJsonArray();
456+
457+
final VersionNumber versionNumber = VersionNumber.fromText(version);
458+
for (JsonElement jsonFileElement : files) {
459+
final JsonObject fileObj = jsonFileElement.getAsJsonObject();
460+
final String filename = fileObj.get("filename").getAsString();
461+
final String arch = fileObj.get("arch").getAsString();
462+
final String platform = fileObj.get("platform").getAsString();
463+
464+
final ArchiveType archiveType = ArchiveType.getFromFileName(filename);
465+
final Architecture architecture = Architecture.fromText(arch);
466+
final OperatingSystem operatingSystem = OperatingSystem.fromText(platform);
467+
final String fileDownloadUri = downloadBaseUrl + filename;
468+
final PackageType packageType = filename.toLowerCase().contains("-jdk") ? JDK : JRE;
469+
470+
Pkg pkg = new Pkg();
471+
pkg.setDistribution(getDistro().get());
472+
pkg.setVersionNumber(versionNumber);
473+
pkg.setJavaVersion(versionNumber);
474+
pkg.setDistributionVersion(versionNumber);
475+
pkg.setJdkVersion(new MajorVersion(versionNumber.getFeature().getAsInt()));
476+
pkg.setPackageType(packageType);
477+
pkg.setArchitecture(architecture);
478+
pkg.setBitness(architecture.getBitness());
479+
pkg.setOperatingSystem(operatingSystem);
480+
pkg.setReleaseStatus(ReleaseStatus.EA);
481+
pkg.setTermOfSupport(versionNumber.getMajorVersion().getTermOfSupport());
482+
pkg.setFileName(filename);
483+
pkg.setArchiveType(archiveType);
484+
pkg.setJavaFXBundled(false);
485+
pkg.setDirectlyDownloadable(true);
486+
pkg.setFreeUseInProduction(Boolean.TRUE);
487+
pkg.setDirectDownloadUri(fileDownloadUri);
488+
pkg.setSize(Helper.getFileSize(fileDownloadUri));
489+
pkg.setLatestBuildAvailable(latest);
490+
491+
pkgsFound.add(pkg);
492+
}
493+
}
494+
}
495+
}
496+
}
497+
} catch (Exception e) {
498+
LOGGER.error("Error reading {} file from github. {}", jsonFilename, e.getMessage());
499+
}
500+
});
501+
return pkgsFound;
502+
}
430503
}

src/main/java/io/foojay/api/distribution/JetBrains.java

Lines changed: 69 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import java.util.Comparator;
4848
import java.util.List;
4949
import java.util.Map.Entry;
50+
import java.util.Optional;
5051
import java.util.OptionalInt;
5152
import java.util.Properties;
5253
import java.util.TreeSet;
@@ -94,6 +95,15 @@ public class JetBrains implements Distribution {
9495

9596
private static final Pattern JBRSDK_PATTERN = Pattern.compile("JBRSDK\\s+\\|\\s+\\[([0-9a-zA-Z_.-]+)\\]\\(([0-9a-z:/._-]+)\\)");
9697
private static final Matcher JBRSDK_MATCHER = JBRSDK_PATTERN.matcher("");
98+
private static final Pattern JBRSDK_JCEF_PATTERN = Pattern.compile("(https:\\/\\/[a-zA-Z0-9_\\/\\.\\-]+)((jbrsdk_jcef)-([a-zA-Z0-9\\.]*)-([a-zA-Z]*)-([a-zA-Z0-9]*)-([bB0-9\\.]*)(((\\.tar\\.gz)|(\\.zip)|(\\.pkg)|(\\.msi))(\\.checksum)?))");//Pattern.compile("(https:\\/\\/[a-zA-Z0-9_\\/\\.\\-]+)((jbrsdk_jcef)-([a-zA-Z0-9\\.]*)-([a-zA-Z]*)-([a-zA-Z0-9]*)-([bB0-9\\.]*)((\\.tar\\.gz)|(\\.zip))(?!\\.checksum))");
99+
private static final Matcher JBRSDK_JCEF_MATCHER = JBRSDK_JCEF_PATTERN.matcher("");
100+
// Group 0 -> download link
101+
// Group 2 -> filename
102+
// Group 4 -> version number
103+
// Group 5 -> operating system
104+
// Group 6 -> architecture
105+
// Group 7 -> build number
106+
// Group 8 -> file ending
97107

98108
@Override public Distro getDistro() { return Distro.JETBRAINS; }
99109

@@ -267,78 +277,81 @@ public List<Pkg> getAllPkgs(final boolean onlyNewPkgs) {
267277

268278
public List<Pkg> getAllPkgsFromString(final String bodyText, final boolean onlyNewPkgs) {
269279
List<Pkg> pkgs = new ArrayList<>();
270-
JBRSDK_MATCHER.reset(bodyText);
271-
while(JBRSDK_MATCHER.find()) {
272-
if (JBRSDK_MATCHER.groupCount() >= 2) {
273-
String filename = JBRSDK_MATCHER.group(1);
274-
if (null == filename || filename.isEmpty() || filename.contains("checksum") || filename.contains("fastdebug") || filename.endsWith("diz.tar.gz")) { continue; }
275-
276-
String strippedFilename = filename.replaceFirst("jbrsdk-", "").replaceAll("(\\.tar\\.gz|\\.zip)", "");
277-
String[] filenameParts = strippedFilename.split("-");
278-
String downloadLink = JBRSDK_MATCHER.group(2);
279-
280-
281-
if (onlyNewPkgs) {
282-
if (CacheManager.INSTANCE.pkgCache.getPkgs().stream().filter(p -> p.getFilename().equals(filename)).filter(p -> p.getDirectDownloadUri().equals(downloadLink)).count() > 0) { continue; }
280+
281+
// SDK + JCEF
282+
JBRSDK_JCEF_MATCHER.reset(bodyText);
283+
while(JBRSDK_JCEF_MATCHER.find()) {
284+
final String downloadLink = JBRSDK_JCEF_MATCHER.group(0);
285+
final String filename = JBRSDK_JCEF_MATCHER.group(2);
286+
final String versionNumber = JBRSDK_JCEF_MATCHER.group(4);
287+
final String operatingSystem = JBRSDK_JCEF_MATCHER.group(5);
288+
final String architecture = JBRSDK_JCEF_MATCHER.group(6);
289+
final String buildNumber = JBRSDK_JCEF_MATCHER.group(7).replaceAll("\\.", "");
290+
final String fileEnding = JBRSDK_JCEF_MATCHER.group(8);
291+
292+
// Fetch checksum
293+
if (fileEnding.endsWith("checksum")) {
294+
final String filenameWithoutChecksum = filename.replace(".checksum", "");
295+
final Optional<Pkg> optPkg = pkgs.stream().filter(pkg -> pkg.getFilename().equals(filenameWithoutChecksum)).findFirst();
296+
if (optPkg.isPresent()) {
297+
optPkg.get().setChecksumUri(downloadLink);
298+
optPkg.get().setChecksumType(HashAlgorithm.SHA512);
283299
}
300+
continue;
301+
}
284302

285-
Pkg pkg = new Pkg();
303+
if (onlyNewPkgs) {
304+
if (CacheManager.INSTANCE.pkgCache.getPkgs().stream().filter(p -> p.getFilename().equals(filename)).filter(p -> p.getDirectDownloadUri().equals(downloadLink)).count() > 0) { continue; }
305+
}
286306

287-
pkg.setDistribution(Distro.JETBRAINS.get());
288-
pkg.setFileName(filename);
289-
pkg.setDirectDownloadUri(downloadLink);
307+
Pkg pkg = new Pkg();
290308

291-
ArchiveType ext = getFromFileName(filename);
292-
pkg.setArchiveType(ext);
309+
pkg.setDistribution(JetBrains.this);
310+
pkg.setFileName(filename);
311+
pkg.setDirectDownloadUri(downloadLink);
293312

294-
Architecture arch = Constants.ARCHITECTURE_LOOKUP.entrySet().stream()
295-
.filter(entry -> filename.contains(entry.getKey()))
296-
.findFirst()
297-
.map(Entry::getValue)
298-
.orElse(Architecture.NONE);
313+
ArchiveType ext = ArchiveType.fromText(fileEnding);
314+
pkg.setArchiveType(ext);
299315

300-
pkg.setArchitecture(arch);
301-
pkg.setBitness(arch.getBitness());
316+
Architecture arch = Architecture.fromText(architecture);
302317

318+
pkg.setArchitecture(arch);
319+
pkg.setBitness(arch.getBitness());
303320

304-
VersionNumber vNumber = VersionNumber.fromText(filenameParts[0].replaceAll("_", "."));
305-
pkg.setVersionNumber(vNumber);
306-
pkg.setJavaVersion(vNumber);
307-
pkg.setDistributionVersion(vNumber);
308-
pkg.setJdkVersion(new MajorVersion(vNumber.getFeature().getAsInt()));
321+
VersionNumber vNumber = VersionNumber.fromText(versionNumber);
322+
vNumber.setBuild(Integer.parseInt(buildNumber.substring(1)));
323+
pkg.setVersionNumber(vNumber);
324+
pkg.setJavaVersion(vNumber);
325+
pkg.setDistributionVersion(vNumber);
326+
pkg.setJdkVersion(new MajorVersion(vNumber.getFeature().getAsInt()));
309327

310-
pkg.setTermOfSupport(TermOfSupport.LTS);
328+
pkg.setTermOfSupport(Helper.getTermOfSupport(vNumber));
311329

312-
pkg.setPackageType(JDK);
330+
pkg.setPackageType(JDK);
313331

314-
pkg.setReleaseStatus(GA);
332+
pkg.setReleaseStatus(GA);
315333

316-
OperatingSystem os = Constants.OPERATING_SYSTEM_LOOKUP.entrySet().stream()
317-
.filter(entry -> strippedFilename.contains(entry.getKey()))
318-
.findFirst()
319-
.map(Entry::getValue)
320-
.orElse(OperatingSystem.NONE);
334+
OperatingSystem os = OperatingSystem.fromText(operatingSystem);
321335

322-
if (OperatingSystem.NONE == os) {
323-
LOGGER.debug("Operating System not found in {} for filename: {}", getName(), filename);
324-
continue;
325-
}
326-
pkg.setOperatingSystem(os);
327-
328-
if (WINDOWS == os) {
329-
pkg.setLibCType(LibCType.C_STD_LIB);
330-
} else if (LINUX == os ) {
331-
pkg.setLibCType(LibCType.GLIBC);
332-
} else if (MACOS == os) {
333-
pkg.setLibCType(LibCType.LIBC);
334-
}
336+
if (OperatingSystem.NONE == os) {
337+
LOGGER.debug("Operating System not found in {} for filename: {}", getName(), filename);
338+
continue;
339+
}
340+
pkg.setOperatingSystem(os);
335341

336-
pkg.setFreeUseInProduction(Boolean.TRUE);
342+
if (WINDOWS == os) {
343+
pkg.setLibCType(LibCType.C_STD_LIB);
344+
} else if (LINUX == os ) {
345+
pkg.setLibCType(LibCType.GLIBC);
346+
} else if (MACOS == os) {
347+
pkg.setLibCType(LibCType.LIBC);
348+
}
337349

338-
pkg.setSize(Helper.getFileSize(downloadLink));
350+
pkg.setFreeUseInProduction(Boolean.TRUE);
339351

340-
pkgs.add(pkg);
341-
}
352+
pkg.setSize(Helper.getFileSize(downloadLink));
353+
354+
pkgs.add(pkg);
342355
}
343356

344357
Helper.checkPkgsForTooEarlyGA(pkgs);

src/main/java/io/foojay/api/distribution/Liberica.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import eu.hansolo.jdktools.versioning.VersionNumber;
3636
import io.foojay.api.CacheManager;
3737
import io.foojay.api.pkg.Distro;
38+
import io.foojay.api.pkg.Feature;
3839
import io.foojay.api.pkg.MajorVersion;
3940
import io.foojay.api.pkg.Pkg;
4041
import io.foojay.api.util.Constants;
@@ -374,6 +375,10 @@ public class Liberica implements Distribution {
374375

375376
pkg.setFreeUseInProduction(Boolean.TRUE);
376377

378+
if (filename.contains("crac")) {
379+
pkg.getFeatures().add(Feature.CRAC);
380+
}
381+
377382
if (jsonObj.has(FIELD_SHA1)) {
378383
String hash = jsonObj.get(FIELD_SHA1).getAsString();
379384
pkg.setChecksum(hash.isEmpty() ? "" : hash);

0 commit comments

Comments
 (0)