This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new 0b4a23df Fix #1223
0b4a23df is described below
commit 0b4a23df6cd080ccf4aa36594da918d84cafbc2d
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Thu Apr 11 12:57:29 2024 -0400
Fix #1223
---
.../apache/camel/karavan/api/BuildResource.java | 3 +--
.../karavan/kubernetes/KubernetesService.java | 11 +++++---
karavan-app/src/main/webui/package-lock.json | 2 +-
karavan-app/src/main/webui/src/api/KaravanApi.tsx | 4 ++-
karavan-app/src/main/webui/src/api/ProjectStore.ts | 11 --------
.../src/main/webui/src/editor/EditorToolbar.tsx | 28 +++++++++++++++++++--
.../main/webui/src/project/files/FilesToolbar.tsx | 29 +++-------------------
7 files changed, 42 insertions(+), 46 deletions(-)
diff --git
a/karavan-app/src/main/java/org/apache/camel/karavan/api/BuildResource.java
b/karavan-app/src/main/java/org/apache/camel/karavan/api/BuildResource.java
index f8590a56..6b74800d 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/BuildResource.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/BuildResource.java
@@ -45,8 +45,7 @@ public class BuildResource {
@Path("/update-config-map")
public Response updateConfigMaps() {
if (karavanCacheService.isReady()) {
- String script = codeService.getBuilderScript();
- kubernetesService.createBuildScriptConfigmap(script, true);
+ kubernetesService.createBuildScriptConfigmap();
return Response.ok().build();
} else {
return Response.noContent().build();
diff --git
a/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
b/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
index 684b16d0..8b7c8baf 100644
---
a/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
+++
b/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
@@ -25,6 +25,7 @@ import
io.fabric8.kubernetes.client.informers.SharedIndexInformer;
import io.fabric8.openshift.api.model.ImageStream;
import io.fabric8.openshift.client.OpenShiftClient;
import io.quarkus.runtime.configuration.ProfileManager;
+import io.quarkus.vertx.ConsumeEvent;
import io.smallrye.mutiny.tuples.Tuple2;
import io.smallrye.mutiny.tuples.Tuple3;
import io.vertx.mutiny.core.eventbus.EventBus;
@@ -48,6 +49,7 @@ import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
+import static org.apache.camel.karavan.service.KaravanService.KARAVAN_STARTED;
import static org.apache.camel.karavan.shared.Constants.*;
@Default
@@ -151,21 +153,24 @@ public class KubernetesService implements HealthCheck {
informers.clear();
}
- public void createBuildScriptConfigmap(String script, boolean overwrite) {
+ @ConsumeEvent(value = KARAVAN_STARTED, blocking = true)
+ public void createBuildScriptConfigmap() {
try (KubernetesClient client = kubernetesClient()) {
+ String script = codeService.getBuilderScript();
ConfigMap configMap =
client.configMaps().inNamespace(getNamespace()).withName(BUILD_CONFIG_MAP).get();
if (configMap == null) {
configMap = getConfigMapForBuilder(BUILD_CONFIG_MAP,
getPartOfLabels());
configMap.setData(Map.of("build.sh", script));
client.resource(configMap).create();
- } else if (overwrite) {
+ } else {
configMap.setData(Map.of("build.sh", script));
client.resource(configMap).patch();
}
} catch (Exception e) {
- LOGGER.error("Error starting informers: " + e.getMessage());
+ LOGGER.error("Error createBuildScriptConfigmap: " +
e.getMessage());
}
}
+
public void runBuildProject(Project project, String script, List<String>
env, String tag) {
try (KubernetesClient client = kubernetesClient()) {
String containerName = project.getProjectId() + BUILDER_SUFFIX;
diff --git a/karavan-app/src/main/webui/package-lock.json
b/karavan-app/src/main/webui/package-lock.json
index 3a1cb6e6..a90378bf 100644
--- a/karavan-app/src/main/webui/package-lock.json
+++ b/karavan-app/src/main/webui/package-lock.json
@@ -77,7 +77,7 @@
}
},
"../../../../karavan-core": {
- "version": "4.4.1",
+ "version": "4.5.0",
"license": "Apache-2.0",
"dependencies": {
"@types/js-yaml": "^4.0.7",
diff --git a/karavan-app/src/main/webui/src/api/KaravanApi.tsx
b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
index 9d30fb80..e8bc7f59 100644
--- a/karavan-app/src/main/webui/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
@@ -28,6 +28,7 @@ import {Buffer} from 'buffer';
import {SsoApi} from "./SsoApi";
import {v4 as uuidv4} from "uuid";
import {useAppConfigStore} from "./ProjectStore";
+import {EventBus} from "../designer/utils/EventBus";
const USER_ID_KEY = 'KARAVAN_USER_ID';
axios.defaults.headers.common['Accept'] = 'application/json';
@@ -308,8 +309,9 @@ export class KaravanApi {
if (res.status === 200) {
after(res.data);
}
- }).catch(err => {
+ }).catch((err: any) => {
console.log(err);
+ EventBus.sendAlert("Error", err.message, "danger")
});
}
diff --git a/karavan-app/src/main/webui/src/api/ProjectStore.ts
b/karavan-app/src/main/webui/src/api/ProjectStore.ts
index 00434f84..154c2ee9 100644
--- a/karavan-app/src/main/webui/src/api/ProjectStore.ts
+++ b/karavan-app/src/main/webui/src/api/ProjectStore.ts
@@ -218,17 +218,12 @@ interface FileState {
operation: "create" | "select" | "delete" | "none" | "copy" | "upload";
designerTab?: "routes" | "rest" | "beans";
setFile: (operation: "create" | "select" | "delete"| "none" | "copy" |
"upload", file?: ProjectFile, designerTab?: "routes" | "rest" | "beans") =>
void;
- editAdvancedProperties: boolean;
- setEditAdvancedProperties: (editAdvancedProperties: boolean) => void;
- addProperty: string;
- setAddProperty: (addProperty: string) => void;
}
export const useFileStore = createWithEqualityFn<FileState>((set) => ({
file: undefined,
operation: "none",
designerTab: undefined,
- editAdvancedProperties: false,
addProperty: '',
setFile: (operation: "create" | "select" | "delete"| "none" | "copy" |
"upload", file?: ProjectFile, designerTab?: "routes" | "rest" | "beans") => {
set((state: FileState) => ({
@@ -237,12 +232,6 @@ export const useFileStore =
createWithEqualityFn<FileState>((set) => ({
designerTab: designerTab
}));
},
- setEditAdvancedProperties: (editAdvancedProperties: boolean) => {
- set(() => ({editAdvancedProperties: editAdvancedProperties}));
- },
- setAddProperty: (addProperty: string) => {
- set(() => ({addProperty: addProperty}));
- },
}), shallow)
diff --git a/karavan-app/src/main/webui/src/editor/EditorToolbar.tsx
b/karavan-app/src/main/webui/src/editor/EditorToolbar.tsx
index f583fa00..76d7ce03 100644
--- a/karavan-app/src/main/webui/src/editor/EditorToolbar.tsx
+++ b/karavan-app/src/main/webui/src/editor/EditorToolbar.tsx
@@ -17,24 +17,37 @@
import React, {useEffect} from 'react';
import {
+ Button,
Flex,
FlexItem,
Toolbar,
- ToolbarContent,
+ ToolbarContent, ToolbarItem, Tooltip,
} from '@patternfly/react-core';
import '../designer/karavan.css';
-import {useFileStore, useProjectStore} from "../api/ProjectStore";
+import {useAppConfigStore, useFileStore, useProjectStore} from
"../api/ProjectStore";
import {shallow} from "zustand/shallow";
import {DevModeToolbar} from "../project/DevModeToolbar";
+import RefreshIcon from "@patternfly/react-icons/dist/esm/icons/sync-alt-icon";
+import {KaravanApi} from "../api/KaravanApi";
+import {EventBus} from "../designer/utils/EventBus";
+import UpdateIcon from "@patternfly/react-icons/dist/esm/icons/cog-icon";
+
export function EditorToolbar() {
+ const {config} = useAppConfigStore();
const [project, tabIndex] = useProjectStore((s) => [s.project,
s.tabIndex], shallow)
const [file] = useFileStore((state) => [state.file], shallow)
useEffect(() => {
}, [project, file]);
+ function updateScripts () {
+ KaravanApi.updateBuildConfigMap(res => {
+ EventBus.sendAlert("Success", "Script updated!", "info")
+ })
+ }
+
function isKameletsProject(): boolean {
return project.projectId === 'kamelets';
}
@@ -62,6 +75,17 @@ export function EditorToolbar() {
<DevModeToolbar reloadOnly={true}/>
</FlexItem>
}
+ {file?.name === 'build.sh' && config.infrastructure ===
'kubernetes' &&
+ <FlexItem>
+ <Tooltip content="Update Build Script in Config Maps"
position={"bottom-end"}>
+ <Button className="dev-action-button" size="sm"
variant={"primary"} icon={<UpdateIcon/>}
+ onClick={e => updateScripts()}
+ >
+ Update Build Script
+ </Button>
+ </Tooltip>
+ </FlexItem>
+ }
</Flex>
</ToolbarContent>
</Toolbar>
diff --git a/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx
b/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx
index 3545aeaf..30048bcf 100644
--- a/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx
+++ b/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx
@@ -33,27 +33,23 @@ import {
import '../../designer/karavan.css';
import UploadIcon from "@patternfly/react-icons/dist/esm/icons/upload-icon";
import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon";
-import {useAppConfigStore, useFilesStore, useFileStore, useProjectStore} from
"../../api/ProjectStore";
+import {useFilesStore, useFileStore, useProjectStore} from
"../../api/ProjectStore";
import {shallow} from "zustand/shallow";
import {ProjectService} from "../../api/ProjectService";
import PushIcon from "@patternfly/react-icons/dist/esm/icons/code-branch-icon";
-import UpdateIcon from "@patternfly/react-icons/dist/esm/icons/cog-icon";
import {ProjectType} from "../../api/ProjectModels";
-import {KaravanApi} from "../../api/KaravanApi";
-import {EventBus} from "../../designer/utils/EventBus";
import {isEmpty} from "../../util/StringUtils";
export function FileToolbar () {
- const {config} = useAppConfigStore();
const [commitMessageIsOpen, setCommitMessageIsOpen] = useState(false);
const [pullIsOpen, setPullIsOpen] = useState(false);
const [commitMessage, setCommitMessage] = useState('');
const [project, isPushing, isPulling] =
useProjectStore((s) => [s.project, s.isPushing, s.isPulling], shallow )
const {files} = useFilesStore();
- const [file, editAdvancedProperties, setEditAdvancedProperties,
setAddProperty, setFile] = useFileStore((s) =>
- [s.file, s.editAdvancedProperties, s.setEditAdvancedProperties,
s.setAddProperty, s.setFile], shallow )
+ const [file, setFile] = useFileStore((s) =>
+ [s.file, s.setFile], shallow )
useEffect(() => {
}, [project, file]);
@@ -64,12 +60,6 @@ export function FileToolbar () {
ProjectService.pushProject(project, commitMessage);
}
- function updateScripts () {
- KaravanApi.updateBuildConfigMap(res => {
- EventBus.sendAlert("Success", "Script updated!", "info")
- })
- }
-
function pull () {
setPullIsOpen(false);
ProjectService.pullProject(project.projectId);
@@ -79,10 +69,6 @@ export function FileToolbar () {
return !['templates', 'services'].includes(project.projectId);
}
- function isTemplates(): boolean {
- return project.projectId === 'templates' && project.type ===
ProjectType.templates;
- }
-
function onKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {
event.stopPropagation();
if (event.key === 'Enter') {
@@ -208,15 +194,6 @@ export function FileToolbar () {
</Button>
</Tooltip>
</FlexItem>
- {isTemplates() && config.infrastructure === 'kubernetes' && <FlexItem>
- <Tooltip content="Update Build Script in Config Maps"
position={"bottom-end"}>
- <Button className="dev-action-button" size="sm"
variant={"primary"} icon={<UpdateIcon/>}
- onClick={e => updateScripts()}
- >
- Update Script
- </Button>
- </Tooltip>
- </FlexItem>}
{canAddFiles() && <FlexItem>
<Button className="dev-action-button" size="sm"
variant={"primary"} icon={<PlusIcon/>}
onClick={e => setFile("create")}>Create</Button>