Skip to content

Commit

Permalink
Merge pull request #280 from aloubyansky/logLatestPncBuilds
Browse files Browse the repository at this point in the history
logLatestPncBuilds option for depsToBuild
  • Loading branch information
aloubyansky authored Aug 31, 2023
2 parents a4ebf9a + b8cb31c commit 74e9a39
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import io.quarkus.bootstrap.resolver.maven.MavenArtifactResolver;
import io.quarkus.bootstrap.resolver.maven.workspace.ModelUtils;
import io.quarkus.devtools.messagewriter.MessageWriter;
import io.quarkus.domino.pnc.PncVersionProvider;
import io.quarkus.maven.dependency.ArtifactCoords;
import java.io.IOException;
import java.io.PrintStream;
Expand All @@ -34,6 +35,7 @@
import java.util.Properties;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Function;
Expand Down Expand Up @@ -293,11 +295,17 @@ public void log() {
codeReposTotal = releaseRepos.size();

final List<ReleaseRepo> sorted = ReleaseCollection.sort(releaseRepos.values());
boolean logLatestPncBuilds = Boolean.getBoolean("logLatestPncBuilds");
AtomicInteger counter = new AtomicInteger();
for (ReleaseRepo e : sorted) {
logComment("repo-url " + e.id().origin());
logComment("tag " + e.id().version().asString());
for (String s : toSortedStrings(e.artifacts.keySet(), config.isLogModulesToBuild())) {
log(s);
if (logLatestPncBuilds) {
logLatestPncBuilds(e);
} else {
for (String s : toSortedStrings(e.artifacts.keySet(), config.isLogModulesToBuild())) {
log(s);
}
}
}

Expand Down Expand Up @@ -388,6 +396,48 @@ public void log() {
}
}

private void logLatestPncBuilds(ReleaseRepo e) {
log.info("Checking the latest PNC builds of " + e.id());
var gavSet = new HashSet<io.quarkus.maven.dependency.GAV>(e.artifacts.size());
var artifactSet = e.artifacts.keySet();
for (var c : artifactSet) {
gavSet.add(new io.quarkus.maven.dependency.GAV(c.getGroupId(), c.getArtifactId(), c.getVersion()));
}
var latestVersions = PncVersionProvider.getLastRedHatBuildVersions(gavSet);
var pncRebuilds = new HashMap<io.quarkus.maven.dependency.GAV, String>(latestVersions.size());
for (var latest : latestVersions) {
if (latest.getLatestVersion() != null && !latest.getLatestVersion().equals(latest.getVersion())) {
pncRebuilds.put(
new io.quarkus.maven.dependency.GAV(latest.getGroupId(), latest.getArtifactId(), latest.getVersion()),
latest.getLatestVersion());
}
}
final List<String> lines = new ArrayList<>(latestVersions.size());
for (var c : artifactSet) {
var gav = new io.quarkus.maven.dependency.GAV(c.getGroupId(), c.getArtifactId(), c.getVersion());
StringBuilder sb = null;
if (!config.isLogModulesToBuild()) {
sb = new StringBuilder();
sb.append(c.toGACTVString());
} else if (gavSet.remove(gav)) {
sb = new StringBuilder();
sb.append(gav);
}

if (sb != null) {
String latestVersion = pncRebuilds.get(gav);
if (latestVersion != null) {
sb.append(" # was rebuilt as ").append(latestVersion);
}
lines.add(sb.toString());
}
}
Collections.sort(lines);
for (var line : lines) {
log(line);
}
}

public void resolveDependencies() {
var enforcedConstraints = getBomConstraints(config.getProjectBom());
for (var bomCoords : config.getNonProjectBoms()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.quarkus.bom.platform.version;
package io.quarkus.domino.pnc;

import java.util.Objects;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package io.quarkus.bom.platform.version;
package io.quarkus.domino.pnc;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import io.quarkus.domino.RhVersionPattern;
import io.quarkus.maven.dependency.GAV;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
Expand All @@ -14,7 +15,10 @@
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;

public class PncVersionProvider {
Expand Down Expand Up @@ -79,6 +83,27 @@ public static String getLastRedHatBuildVersion(String groupId, String artifactId
return versions.get(0).getLatestVersion();
}

public static Collection<PncArtifactLatestVersion> getLastRedHatBuildVersions(Collection<GAV> artifactList) {
final String jsonRequest = getLatestVersionJsonRequest(artifactList);
final byte[] postData = jsonRequest.getBytes(StandardCharsets.UTF_8);

final HttpURLConnection conn = initConnection(LATEST_VERSION_REQUEST_URL);
conn.setRequestProperty("Content-Length", Integer.toString(postData.length));
try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
wr.write(postData);
} catch (IOException e) {
throw new RuntimeException(e);
}

final List<PncArtifactLatestVersion> versions;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
versions = Arrays.asList(getMapper().readerForArrayOf(PncArtifactLatestVersion.class).readValue(reader));
} catch (IOException e) {
throw new RuntimeException(e);
}
return versions;
}

private static HttpURLConnection initConnection(String url) {
HttpURLConnection conn = null;
try {
Expand All @@ -99,6 +124,34 @@ private static HttpURLConnection initConnection(String url) {
return conn;
}

private static String getLatestVersionJsonRequest(Collection<GAV> artifactList) {
if (artifactList.isEmpty()) {
return null;
}
var sb = new StringBuilder();
sb.append("{\"mode\":\"PERSISTENT\",\"artifacts\":[");
var i = artifactList.iterator();
var c = i.next();
sb.append(toJson(c));
if (i.hasNext()) {
final Set<GAV> gavs = new HashSet<>(artifactList.size());
gavs.add(c);
while (i.hasNext()) {
c = i.next();
if (gavs.add(c)) {
sb.append(",").append(toJson(c));
}
}
}
return sb.append("]}").toString();
}

private static String toJson(GAV gav) {
return "{\"groupId\":\"" + gav.getGroupId()
+ "\",\"artifactId\":\"" + gav.getArtifactId()
+ "\",\"version\":\"" + gav.getVersion() + "\"}";
}

private static String getLatestVersionJsonRequest(String groupId, String artifactId, String version) {
return "{\"mode\":\"PERSISTENT\",\"artifacts\":[{\"groupId\":\"" + groupId + "\",\"artifactId\":\"" + artifactId
+ "\",\"version\":\"" + version + "\"}]}";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.quarkus.bom.decomposer.maven.platformgen;

import io.quarkus.bom.platform.version.PncVersionProvider;
import io.quarkus.domino.pnc.PncVersionProvider;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.quarkus.bom.platform.version;

import io.quarkus.domino.RhVersionPattern;
import io.quarkus.domino.pnc.PncVersionProvider;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;

public class PncVersionIncrementor implements PlatformVersionIncrementor {
Expand Down

0 comments on commit 74e9a39

Please sign in to comment.