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 <ma...@talismancloud.io>
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>

Reply via email to