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 #759
  • Loading branch information
parsharma committed Sep 25, 2024
1 parent ff41cff commit 9e37e82
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.resolution.VersionRangeResolutionException;
import org.jboss.galleon.ProvisioningException;
import org.jboss.galleon.diff.FsDiff;
import org.jboss.galleon.diff.FsEntry;
Expand Down Expand Up @@ -117,9 +119,9 @@ public Integer call() throws Exception {
log.tracef("Perform full update");

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

InstallationMetadata installationMetadata = InstallationMetadata.loadInstallation(installationDir);
try (UpdateAction updateAction = actionFactory.update(installationDir, mavenOptions, console, repositories)) {
performUpdate(updateAction, yes, console, installationDir);
performUpdate(updateAction, yes, console, installationDir, repositories);
}
}

Expand All @@ -129,10 +131,16 @@ public Integer call() throws Exception {
return ReturnCodes.SUCCESS;
}

private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole console, Path installDir) throws OperationException, ProvisioningException {
private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole console, Path installDir, List<Repository> repositories) throws OperationException, ProvisioningException {
Path targetDir = null;
try {
targetDir = Files.createTempDirectory("update-candidate");
final List<Artifact> manifestUpdates = updateAction.findCurrentChannelSessionManifests();
if(!manifestUpdates.isEmpty()){
for(Artifact version: manifestUpdates){
console.println("Manifest version update detected: Version ["+ version + "]is now available.");
}
}
if (buildUpdate(updateAction, targetDir, yes, console, () -> console.confirmUpdates())) {
console.println("");
console.buildUpdatesComplete();
Expand All @@ -151,7 +159,7 @@ private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole
} else {
return false;
}
} catch (IOException e) {
} catch (IOException | VersionRangeResolutionException e) {
throw ProsperoLogger.ROOT_LOGGER.unableToCreateTemporaryDirectory(e);
} finally {
if (targetDir != null) {
Expand Down Expand Up @@ -422,17 +430,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 {
private static boolean buildUpdate(UpdateAction updateAction, Path updateDirectory, boolean yes, CliConsole console, Supplier<Boolean> confirmation) throws OperationException, ProvisioningException, VersionRangeResolutionException {
final UpdateSet updateSet = updateAction.findUpdates();

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

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.resolution.VersionRangeResolutionException;
import org.jboss.galleon.util.PathsUtils;
import org.wildfly.channel.Channel;
import org.wildfly.channel.Repository;
Expand All @@ -35,6 +39,7 @@
import org.wildfly.prospero.api.InstallationMetadata;
import org.wildfly.prospero.api.exceptions.OperationException;
import org.wildfly.prospero.galleon.GalleonEnvironment;
import org.wildfly.prospero.metadata.ManifestVersionRecord;
import org.wildfly.prospero.model.ProsperoConfig;
import org.wildfly.prospero.updates.UpdateFinder;
import org.wildfly.prospero.updates.UpdateSet;
Expand Down Expand Up @@ -171,4 +176,14 @@ private ProsperoConfig addTemporaryRepositories(List<Repository> repositories) {

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

public List<Artifact> findCurrentChannelSessionManifests() throws VersionRangeResolutionException {
List<Artifact> manifestArtifacts = new ArrayList<>();
List<ManifestVersionRecord.MavenManifest> mavenManifests = metadata.getManifestVersions().get().getMavenManifests();
for (ManifestVersionRecord.MavenManifest mavenManifest : mavenManifests) {
manifestArtifacts.add(new DefaultArtifact(mavenManifest.getGroupId(), mavenManifest.getArtifactId(), "yaml", mavenManifest.getVersion()));
}
return manifestArtifacts;
}

}

0 comments on commit 9e37e82

Please sign in to comment.