Skip to content

Commit

Permalink
Draft:Update process should check version and not allow reversion th…
Browse files Browse the repository at this point in the history
…rough update wildfly-extras#759
  • Loading branch information
parsharma committed Oct 16, 2024
1 parent c4a6f65 commit 203706a
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.eclipse.aether.artifact.Artifact;
import org.jboss.galleon.ProvisioningException;
import org.jboss.galleon.diff.FsDiff;
import org.jboss.galleon.diff.FsEntry;
Expand All @@ -39,6 +40,7 @@
import org.wildfly.channel.ChannelManifest;
import org.wildfly.channel.ChannelManifestCoordinate;
import org.wildfly.channel.Repository;
import org.wildfly.channel.version.VersionMatcher;
import org.wildfly.prospero.ProsperoLogger;
import org.wildfly.prospero.actions.ApplyCandidateAction;
import org.wildfly.prospero.actions.SubscribeNewServerAction;
Expand All @@ -60,6 +62,7 @@
import org.wildfly.prospero.api.TemporaryFilesManager;
import org.wildfly.prospero.galleon.FeaturePackLocationParser;
import org.wildfly.prospero.galleon.GalleonUtils;
import org.wildfly.prospero.metadata.ManifestVersionRecord;
import org.wildfly.prospero.metadata.ProsperoMetadataUtils;
import org.wildfly.prospero.model.InstallationProfile;
import org.wildfly.prospero.updates.UpdateSet;
Expand Down Expand Up @@ -120,7 +123,6 @@ public Integer call() throws Exception {
log.tracef("Perform full update");

console.println(CliMessages.MESSAGES.updateHeader(installationDir));

try (UpdateAction updateAction = actionFactory.update(installationDir, mavenOptions, console, repositories)) {
performUpdate(updateAction, yes, console, installationDir, noConflictsOnly);
}
Expand All @@ -136,6 +138,11 @@ private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole
Path targetDir = null;
try {
targetDir = Files.createTempDirectory("update-candidate");
InstallationMetadata installationMetadata = InstallationMetadata.loadInstallation(installDir);
List<ManifestVersionRecord.MavenManifest> mavenManifests = installationMetadata.getManifestVersions().get().getMavenManifests();
final List<Artifact> manifestUpdates = updateAction.findCurrentChannelSessionManifests();
compareManifests(mavenManifests,manifestUpdates);

if (buildUpdate(updateAction, targetDir, yes, console, () -> console.confirmUpdates())) {
console.println("");
console.buildUpdatesComplete();
Expand Down Expand Up @@ -444,17 +451,17 @@ private FeaturePackLocation getFpl(InstallationProfile knownFeaturePack, String
public UpdateCommand(CliConsole console, ActionFactory actionFactory) {
super(console, actionFactory, CliConstants.Commands.UPDATE,
List.of(
new UpdateCommand.PrepareCommand(console, actionFactory),
new UpdateCommand.ApplyCommand(console, actionFactory),
new UpdateCommand.PerformCommand(console, actionFactory),
new UpdateCommand.ListCommand(console, actionFactory),
new PrepareCommand(console, actionFactory),
new ApplyCommand(console, actionFactory),
new PerformCommand(console, actionFactory),
new ListCommand(console, actionFactory),
new SubscribeCommand(console, actionFactory))
);

}

private static boolean buildUpdate(UpdateAction updateAction, Path updateDirectory, boolean yes, CliConsole console, Supplier<Boolean> confirmation) throws OperationException, ProvisioningException {
final UpdateSet updateSet = updateAction.findUpdates();

console.updatesFound(updateSet.getArtifactUpdates());
if (updateSet.isEmpty()) {
return false;
Expand Down Expand Up @@ -493,4 +500,34 @@ public static Path detectProsperoInstallationPath() throws ArgumentParsingExcept
return Paths.get(modulePath).toAbsolutePath().getParent();
}


public static void compareManifests(List<ManifestVersionRecord.MavenManifest> mavenManifests, List<Artifact> manifestUpdates ) {

for (ManifestVersionRecord.MavenManifest installedManifest : mavenManifests) {
Artifact updateArtifact = null;

// Find the corresponding update artifact for the installedManifest
for (Artifact manifestUpdate : manifestUpdates) {
if (manifestUpdate.getGroupId().equals(installedManifest.getGroupId()) &&
manifestUpdate.getArtifactId().equals(installedManifest.getArtifactId())) {
updateArtifact = manifestUpdate;
break;
}
}

if (updateArtifact != null) {
// Compare versions
String installedVersion = installedManifest.getVersion();
String availableVersion = updateArtifact.getVersion();
if (VersionMatcher.COMPARATOR.compare(installedVersion, availableVersion) < 0) {
System.out.println("Upgrade available for " + installedManifest.getArtifactId() + ": " + installedVersion + " -> " + availableVersion);
} else if (VersionMatcher.COMPARATOR.compare(installedVersion, availableVersion) > 0) {
System.out.println("Downgrade detected for " + installedManifest.getArtifactId() + ": " + installedVersion + " -> " + availableVersion);
} else {
System.out.println(installedManifest.getArtifactId() + " is up to date.");
}
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,13 @@
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.jboss.galleon.util.PathsUtils;
import org.wildfly.channel.ChannelSession;
import org.wildfly.channel.Channel;
import org.wildfly.channel.Repository;
import org.wildfly.prospero.ProsperoLogger;
Expand Down Expand Up @@ -171,4 +175,15 @@ private ProsperoConfig addTemporaryRepositories(List<Repository> repositories) {

return new ProsperoConfig(channels, prosperoConfig.getMavenOptions());
}

public List<Artifact> findCurrentChannelSessionManifests() throws ProvisioningException, OperationException {
try (GalleonEnvironment galleonEnv = getGalleonEnv(installDir);
ChannelSession channelSession = galleonEnv.getChannelSession()) {

return channelSession.getRuntimeChannels().stream()
.map(runtimeChannel -> runtimeChannel.getChannelDefinition().getManifestCoordinate())
.map(coordinate -> new DefaultArtifact(coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getExtension(), coordinate.getVersion()))
.collect(Collectors.toList());
}
}
}

0 comments on commit 203706a

Please sign in to comment.