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>