Skip to content
This repository was archived by the owner on Apr 23, 2025. It is now read-only.

Commit d3ebe16

Browse files
committed
feat: add/remove/edit helm repo (#673, #803)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 126eec9 commit d3ebe16

File tree

19 files changed

+896
-114
lines changed

19 files changed

+896
-114
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ dependencies {
150150
'org.junit.platform:junit-platform-launcher:1.10.2',
151151
'org.mockito:mockito-core:5.11.0',
152152
'org.easytesting:fest-assert:1.4',
153-
'com.redhat.devtools.intellij:intellij-common:1.9.5:test',
153+
'com.redhat.devtools.intellij:intellij-common:1.9.6-SNAPSHOT:test',
154154
'org.awaitility:awaitility:4.2.1',
155155
'org.mock-server:mockserver-client-java:5.15.0',
156156
'org.mock-server:mockserver-netty:5.15.0',

src/it/java/org/jboss/tools/intellij/openshift/test/ui/annotations/UITest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
******************************************************************************/
1111
package org.jboss.tools.intellij.openshift.test.ui.annotations;
1212

13-
import java.lang.annotation.RetentionPolicy;
14-
import java.lang.annotation.Target;
13+
import org.junit.jupiter.api.Tag;
14+
1515
import java.lang.annotation.ElementType;
1616
import java.lang.annotation.Retention;
17-
18-
import org.junit.jupiter.api.Tag;
17+
import java.lang.annotation.RetentionPolicy;
18+
import java.lang.annotation.Target;
1919

2020
/**
2121
* @author Ondrej Dockal

src/it/java/org/jboss/tools/intellij/openshift/test/ui/views/GettingStartedView.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212

1313
import com.intellij.remoterobot.RemoteRobot;
1414
import com.intellij.remoterobot.data.RemoteComponent;
15-
import com.intellij.remoterobot.fixtures.*;
15+
import com.intellij.remoterobot.fixtures.ComponentFixture;
16+
import com.intellij.remoterobot.fixtures.ContainerFixture;
17+
import com.intellij.remoterobot.fixtures.DefaultXpath;
18+
import com.intellij.remoterobot.fixtures.FixtureName;
19+
import com.intellij.remoterobot.fixtures.JTreeFixture;
1620
import com.intellij.remoterobot.search.locators.Locator;
1721
import com.intellij.remoterobot.utils.Keyboard;
1822
import com.intellij.remoterobot.utils.WaitForConditionTimeoutException;

src/it/java/org/jboss/tools/intellij/openshift/utils/helm/Charts.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static Chart get(String name, Helm helm) throws Exception {
3131
}
3232

3333
public static void addRepository(Pair<String, String> pair, Helm helm) throws IOException {
34-
helm.addRepo(pair.first, pair.second);
34+
helm.addRepo(pair.first, pair.second, null);
3535
}
3636

3737
}

src/it/java/org/jboss/tools/intellij/openshift/utils/helm/HelmCliRepoTest.java

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,59 @@
1313

1414
import java.io.IOException;
1515
import java.util.List;
16+
import java.util.stream.Collectors;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
1619

1720
public class HelmCliRepoTest extends HelmCliTest {
1821

1922
public void testListRepos_should_list_repo_that_was_added() throws IOException {
20-
// given openshift repo was added to helm repos
2123
String name = "openshift";
22-
String url = "https://charts.openshift.io/";
23-
helm.addRepo(name, url);
24-
// when
25-
List<HelmRepository> repositories = helm.listRepos();
26-
// then
27-
boolean found = repositories.stream().anyMatch((HelmRepository repository) ->
28-
repository.getName().equals(name)
29-
&& repository.getUrl().equals(url)
30-
);
31-
assertTrue(found);
24+
try {
25+
// given openshift repo was added to helm repos
26+
String url = "https://charts.openshift.io/";
27+
helm.addRepo(name, url, null);
28+
// when
29+
List<HelmRepository> repositories = helm.listRepos();
30+
// then
31+
boolean found = repositories.stream().anyMatch((HelmRepository repository) ->
32+
repository.getName().equals(name)
33+
&& repository.getUrl().equals(url)
34+
);
35+
assertTrue(found);
36+
} finally {
37+
silentlyRemoveRepos(name);
38+
}
39+
}
40+
41+
public void testRemoveRepos_should_remove_repo_that_was_added() throws IOException {
42+
String name = "openshift-charts";
43+
String name2 = "openshift-charts2";
44+
try {
45+
// given openshift repo was added to helm repos
46+
helm.addRepo(name, "https://charts.openshift.io/", null);
47+
helm.addRepo(name2, "https://charts.openshift.io/", null);
48+
List<String> helmRepositoryNames = helm.listRepos().stream()
49+
.map(HelmRepository::getName)
50+
.collect(Collectors.toList());
51+
assertThat(helmRepositoryNames).contains(name, name2);
52+
// when
53+
helm.removeRepos(name, name2);
54+
// then
55+
helmRepositoryNames = helm.listRepos().stream()
56+
.map(HelmRepository::getName)
57+
.collect(Collectors.toList());
58+
assertThat(helmRepositoryNames).doesNotContain(name, name2);
59+
} finally {
60+
silentlyRemoveRepos(name, name2);
61+
}
3262
}
3363

64+
private void silentlyRemoveRepos(String... names) {
65+
try {
66+
helm.removeRepos(names);
67+
} catch(Exception e) {
68+
// ignore
69+
}
70+
}
3471
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2024 Red Hat, Inc.
3+
* Distributed under license by Red Hat, Inc. All rights reserved.
4+
* This program is made available under the terms of the
5+
* Eclipse Public License v2.0 which accompanies this distribution,
6+
* and is available at http://www.eclipse.org/legal/epl-v20.html
7+
*
8+
* Contributors:
9+
* Red Hat, Inc. - initial API and implementation
10+
******************************************************************************/
11+
package org.jboss.tools.intellij.openshift.actions.helm;
12+
13+
import com.intellij.openapi.actionSystem.AnActionEvent;
14+
import com.intellij.openapi.project.Project;
15+
import com.redhat.devtools.intellij.common.utils.ApplicationUtils;
16+
import com.redhat.devtools.intellij.common.utils.SwingUtils;
17+
import java.awt.Point;
18+
import java.io.IOException;
19+
import java.util.Collection;
20+
import java.util.Collections;
21+
import java.util.concurrent.CompletableFuture;
22+
import org.jboss.tools.intellij.openshift.actions.HelmAction;
23+
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
24+
import org.jboss.tools.intellij.openshift.tree.application.HelmRepositoriesNode;
25+
import org.jboss.tools.intellij.openshift.ui.helm.AddHelmRepoDialog;
26+
import org.jboss.tools.intellij.openshift.utils.helm.Helm;
27+
import org.jboss.tools.intellij.openshift.utils.helm.HelmRepository;
28+
import org.jetbrains.annotations.NotNull;
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
31+
32+
33+
public class AddHelmRepoAction extends HelmAction {
34+
35+
private static final Logger LOGGER = LoggerFactory.getLogger(AddHelmRepoAction.class);
36+
37+
@Override
38+
public void actionPerformedOnSelectedObject(AnActionEvent anActionEvent, Object selected, @NotNull Helm helm) {
39+
Project project = getEventProject(anActionEvent);
40+
if (!(selected instanceof HelmRepositoriesNode repositoriesNode)) {
41+
return;
42+
}
43+
openAddHelmRepoDialog(repositoriesNode, helm, project, SwingUtils.getMouseLocation(anActionEvent));
44+
}
45+
46+
private void openAddHelmRepoDialog(HelmRepositoriesNode repositoriesNode, Helm helm, Project project, Point location) {
47+
CompletableFuture.supplyAsync(
48+
() -> listRepositories(helm),
49+
ApplicationUtils.PLATFORM_EXECUTOR
50+
).thenAcceptAsync(
51+
repositories -> {
52+
AddHelmRepoDialog dialog = new AddHelmRepoDialog(repositories, repositoriesNode, helm, project, location);
53+
sendTelemetryResults(TelemetryService.TelemetryResult.SUCCESS);
54+
dialog.show();
55+
},
56+
ApplicationUtils.UI_EXECUTOR
57+
);
58+
}
59+
60+
private Collection<HelmRepository> listRepositories(Helm helm) {
61+
try {
62+
return helm.listRepos();
63+
} catch (IOException e) {
64+
LOGGER.warn("Could not list helm repositories", e);
65+
return Collections.emptyList();
66+
}
67+
}
68+
69+
@Override
70+
public String getTelemetryActionName() {
71+
return "helm-add repo";
72+
}
73+
74+
@Override
75+
public boolean isVisible(Object selected) {
76+
return selected instanceof HelmRepositoriesNode;
77+
}
78+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2024 Red Hat, Inc.
3+
* Distributed under license by Red Hat, Inc. All rights reserved.
4+
* This program is made available under the terms of the
5+
* Eclipse Public License v2.0 which accompanies this distribution,
6+
* and is available at http://www.eclipse.org/legal/epl-v20.html
7+
*
8+
* Contributors:
9+
* Red Hat, Inc. - initial API and implementation
10+
******************************************************************************/
11+
package org.jboss.tools.intellij.openshift.actions.helm;
12+
13+
import com.intellij.openapi.actionSystem.AnActionEvent;
14+
import com.intellij.openapi.project.Project;
15+
import com.redhat.devtools.intellij.common.utils.ApplicationUtils;
16+
import com.redhat.devtools.intellij.common.utils.SwingUtils;
17+
import java.awt.Point;
18+
import java.io.IOException;
19+
import java.util.Collection;
20+
import java.util.Collections;
21+
import java.util.concurrent.CompletableFuture;
22+
import org.jboss.tools.intellij.openshift.actions.HelmAction;
23+
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
24+
import org.jboss.tools.intellij.openshift.tree.application.HelmRepositoriesNode;
25+
import org.jboss.tools.intellij.openshift.tree.application.HelmRepositoryNode;
26+
import org.jboss.tools.intellij.openshift.ui.helm.EditHelmRepoDialog;
27+
import org.jboss.tools.intellij.openshift.utils.helm.Helm;
28+
import org.jboss.tools.intellij.openshift.utils.helm.HelmRepository;
29+
import org.jetbrains.annotations.NotNull;
30+
import org.slf4j.Logger;
31+
import org.slf4j.LoggerFactory;
32+
33+
34+
public class EditHelmRepoAction extends HelmAction {
35+
36+
private static final Logger LOGGER = LoggerFactory.getLogger(EditHelmRepoAction.class);
37+
38+
@Override
39+
public void actionPerformedOnSelectedObject(AnActionEvent anActionEvent, Object selected, @NotNull Helm helm) {
40+
Project project = getEventProject(anActionEvent);
41+
if (!(selected instanceof HelmRepositoryNode repositoryNode)) {
42+
return;
43+
}
44+
openAddHelmRepoDialog(repositoryNode, repositoryNode.getParent(), helm, project, SwingUtils.getMouseLocation(anActionEvent));
45+
}
46+
47+
private void openAddHelmRepoDialog(HelmRepositoryNode repositoryNode, HelmRepositoriesNode repositoriesNode, Helm helm, Project project, Point location) {
48+
CompletableFuture.supplyAsync(
49+
() -> listRepositories(helm),
50+
ApplicationUtils.PLATFORM_EXECUTOR
51+
).thenAcceptAsync(
52+
repositories -> {
53+
EditHelmRepoDialog dialog = new EditHelmRepoDialog(repositories, repositoryNode, repositoriesNode, helm, project, location);
54+
sendTelemetryResults(TelemetryService.TelemetryResult.SUCCESS);
55+
dialog.show();
56+
},
57+
ApplicationUtils.UI_EXECUTOR
58+
);
59+
}
60+
61+
private Collection<HelmRepository> listRepositories(Helm helm) {
62+
try {
63+
return helm.listRepos();
64+
} catch (IOException e) {
65+
LOGGER.warn("Could not list helm repositories", e);
66+
return Collections.emptyList();
67+
}
68+
}
69+
70+
@Override
71+
public String getTelemetryActionName() {
72+
return "helm-edit repo";
73+
}
74+
75+
@Override
76+
public boolean isVisible(Object selected) {
77+
return selected instanceof HelmRepositoryNode;
78+
}
79+
}

src/main/java/org/jboss/tools/intellij/openshift/actions/helm/OpenHelmChartsAction.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import com.intellij.openapi.actionSystem.AnActionEvent;
1414
import com.intellij.openapi.project.Project;
1515
import org.jboss.tools.intellij.openshift.actions.HelmAction;
16+
import org.jboss.tools.intellij.openshift.actions.NodeUtils;
1617
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
1718
import org.jboss.tools.intellij.openshift.tree.application.ApplicationsRootNode;
1819
import org.jboss.tools.intellij.openshift.tree.application.NamespaceNode;
19-
import org.jboss.tools.intellij.openshift.tree.application.ParentableNode;
2020
import org.jboss.tools.intellij.openshift.ui.helm.ChartsDialog;
2121
import org.jboss.tools.intellij.openshift.utils.helm.Helm;
2222
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
@@ -27,11 +27,10 @@ public class OpenHelmChartsAction extends HelmAction {
2727
@Override
2828
public void actionPerformedOnSelectedObject(AnActionEvent anActionEvent, Object selected, @NotNull Helm helm) {
2929
Project project = getEventProject(anActionEvent);
30-
ParentableNode<?> parentableNode = ((ParentableNode<?>) selected);
31-
if (parentableNode == null) {
30+
ApplicationsRootNode rootNode = NodeUtils.getRoot(selected);
31+
if (rootNode == null) {
3232
return;
3333
}
34-
ApplicationsRootNode rootNode = parentableNode.getRoot();
3534
Odo odo = rootNode.getOdo().getNow(null);
3635
if (odo == null) {
3736
return;

0 commit comments

Comments
 (0)