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

commit 624691aa8100782b1204b43e321202febe0ba7ef
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Fri Sep 8 19:06:46 2023 -0400

    DevMode vs Run prod for #817
---
 .../apache/camel/karavan/api/ImagesResource.java   |  1 -
 .../camel/karavan/docker/DockerForKaravan.java     |  8 +--
 .../camel/karavan/service/ProjectService.java      |  5 +-
 .../src/main/webui/src/api/KaravanApi.tsx          |  5 +-
 .../src/main/webui/src/api/ProjectModels.ts        |  2 +-
 .../src/main/webui/src/api/ProjectService.ts       |  4 +-
 .../src/main/webui/src/project/BuildToolbar.tsx    | 67 +++-------------------
 .../{BuildToolbar.tsx => ContainerPanel.tsx}       |  2 +-
 .../src/main/webui/src/project/DevModeToolbar.tsx  | 33 +++++------
 .../main/webui/src/project/build/ImagesPanel.tsx   |  4 +-
 10 files changed, 38 insertions(+), 93 deletions(-)

diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
index b4605110..0c172856 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
@@ -75,7 +75,6 @@ public class ImagesResource {
     @Path("/{imageName}")
     public Response deleteImage(@HeaderParam("username") String username, 
@PathParam("imageName") String imageName) {
         imageName= new String(Base64.decode(imageName));
-        System.out.println(imageName);
         if (ConfigService.inKubernetes()) {
             return Response.ok().build();
         } else {
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
index 41861af7..b551d547 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
@@ -45,13 +45,13 @@ public class DockerForKaravan {
     @Inject
     RegistryService registryService;
 
-    public void runProjectInDevMode(String projectId, String jBangOptions, 
Map<Integer, Integer> ports, Map<String, String> files) throws Exception {
-        Container c = createDevmodeContainer(projectId, jBangOptions, ports);
+    public void runProjectInDevMode(String projectId, String jBangOptions, 
Map<Integer, Integer> ports, Map<String, String> files, Map<String, String> 
volumes) throws Exception {
+        Container c = createDevmodeContainer(projectId, jBangOptions, ports, 
volumes);
         dockerService.runContainer(projectId);
         dockerService.copyFiles(c.getId(), "/code", files);
     }
 
-    protected Container createDevmodeContainer(String projectId, String 
jBangOptions, Map<Integer, Integer> ports) throws InterruptedException {
+    protected Container createDevmodeContainer(String projectId, String 
jBangOptions, Map<Integer, Integer> ports, Map<String, String> volumes) throws 
InterruptedException {
         LOGGER.infof("DevMode starting for %s with JBANG_OPTIONS=%s", 
projectId, jBangOptions);
 
         HealthCheck healthCheck = new HealthCheck().withTest(List.of("CMD", 
"curl", "-f", "http://localhost:8080/q/dev/health";))
@@ -64,7 +64,7 @@ public class DockerForKaravan {
         return dockerService.createContainer(projectId, devmodeImage,
                 env, ports, healthCheck,
                 Map.of(LABEL_TYPE, 
ContainerStatus.ContainerType.devmode.name(), LABEL_PROJECT_ID, projectId),
-                Map.of(), null);
+                volumes, null);
 
     }
 
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index ebd49e08..b92d8e23 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -113,7 +113,10 @@ public class ProjectService implements HealthCheck {
                         .collect(Collectors.toMap(ProjectFile::getName, 
ProjectFile::getCode));
                 ProjectFile compose = 
infinispanService.getProjectFile(project.getProjectId(), 
PROJECT_COMPOSE_FILENAME);
                 DockerComposeService dcs = 
DockerComposeConverter.fromCode(compose.getCode(), project.getProjectId());
-                dockerForKaravan.runProjectInDevMode(project.getProjectId(), 
jBangOptions, dcs.getPortsMap(), files);
+                Map<String, String> volumes = mavenCache
+                        .map(s -> Map.of(s, "/root/.m2"))
+                        .orElseGet(Map::of);
+                dockerForKaravan.runProjectInDevMode(project.getProjectId(), 
jBangOptions, dcs.getPortsMap(), files, volumes);
             }
             return containerName;
         } else {
diff --git a/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx 
b/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx
index 63573e24..05915131 100644
--- a/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx
@@ -485,7 +485,7 @@ export class KaravanApi {
     }
 
     static async manageContainer(environment: string,
-                                 type: 'devmove' | 'devservice' | 'project' | 
'internal' | 'build' | 'unknown',
+                                 type: 'devmode' | 'devservice' | 'project' | 
'internal' | 'build' | 'unknown',
                                  name: string,
                                  command: 'run' | 'pause' | 'stop' | 'delete',
                                  after: (res: AxiosResponse<any>) => void) {
@@ -497,7 +497,7 @@ export class KaravanApi {
         });
     }
 
-    static async deleteContainer(environment: string, type: 'devmove' | 
'devservice' | 'project' | 'internal' | 'build' | 'unknown', name: string, 
after: (res: AxiosResponse<any>) => void) {
+    static async deleteContainer(environment: string, type: 'devmode' | 
'devservice' | 'project' | 'internal' | 'build' | 'unknown', name: string, 
after: (res: AxiosResponse<any>) => void) {
         instance.delete('/api/container/' + environment + '/' + type + "/" + 
name)
             .then(res => {
                 after(res);
@@ -531,7 +531,6 @@ export class KaravanApi {
     static async deleteImage(imageName: string, after: () => void) {
         instance.delete('/api/image/' + 
Buffer.from(imageName).toString('base64'))
             .then(res => {
-                console.log(res.status)
                 if (res.status === 200) {
                     after();
                 }
diff --git a/karavan-web/karavan-app/src/main/webui/src/api/ProjectModels.ts 
b/karavan-web/karavan-app/src/main/webui/src/api/ProjectModels.ts
index 8dd5e485..6ca10133 100644
--- a/karavan-web/karavan-app/src/main/webui/src/api/ProjectModels.ts
+++ b/karavan-web/karavan-app/src/main/webui/src/api/ProjectModels.ts
@@ -73,7 +73,7 @@ export class ContainerStatus {
     deployment: string = '';
     projectId: string = '';
     env: string = '';
-    type: 'devmove' | 'devservice' | 'project' | 'internal' | 'build' | 
'unknown' = 'unknown';
+    type: 'devmode' | 'devservice' | 'project' | 'internal' | 'build' | 
'unknown' = 'unknown';
     memoryInfo: string = '';
     cpuInfo: string = '';
     created: string = '';
diff --git a/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts 
b/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts
index 6004cc97..34430a6b 100644
--- a/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts
+++ b/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts
@@ -43,7 +43,7 @@ export class ProjectService {
 
     public static stopDevModeContainer(project: Project) {
         useDevModeStore.setState({status: 'wip'})
-        KaravanApi.manageContainer('dev', 'devmove', project.projectId, 
'stop', res => {
+        KaravanApi.manageContainer('dev', 'devmode', project.projectId, 
'stop', res => {
             useDevModeStore.setState({status: 'none'})
             if (res.status === 200) {
                 useLogStore.setState({showLog: false, type: 'container'})
@@ -55,7 +55,7 @@ export class ProjectService {
 
     public static pauseDevModeContainer(project: Project) {
         useDevModeStore.setState({status: 'wip'})
-        KaravanApi.manageContainer('dev', 'devmove', project.projectId, 
'pause', res => {
+        KaravanApi.manageContainer('dev', 'devmode', project.projectId, 
'pause', res => {
             useDevModeStore.setState({status: 'none'})
             if (res.status === 200) {
                 useLogStore.setState({showLog: false, type: 'container'})
diff --git 
a/karavan-web/karavan-app/src/main/webui/src/project/BuildToolbar.tsx 
b/karavan-web/karavan-app/src/main/webui/src/project/BuildToolbar.tsx
index e18284c5..dd061f75 100644
--- a/karavan-web/karavan-app/src/main/webui/src/project/BuildToolbar.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/project/BuildToolbar.tsx
@@ -1,18 +1,11 @@
 import React from 'react';
-import {Button, Flex, FlexItem, Label, Spinner, Tooltip, TooltipPosition} from 
'@patternfly/react-core';
+import {Badge, Button, Flex, FlexItem, Label, Spinner, Tooltip, 
TooltipPosition} from '@patternfly/react-core';
 import '../designer/karavan.css';
-import DeleteIcon from "@patternfly/react-icons/dist/esm/icons/trash-icon";
 import {useAppConfigStore, useDevModeStore, useLogStore, useProjectStore, 
useStatusesStore} from "../api/ProjectStore";
 import {shallow} from "zustand/shallow";
-import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
+import UpIcon from "@patternfly/react-icons/dist/esm/icons/running-icon";
 import DownIcon from 
"@patternfly/react-icons/dist/esm/icons/error-circle-o-icon";
-import RunIcon from "@patternfly/react-icons/dist/esm/icons/play-icon";
-import {ProjectService} from "../api/ProjectService";
-import ReloadIcon from "@patternfly/react-icons/dist/esm/icons/bolt-icon";
-import {KaravanApi} from "../api/KaravanApi";
-import {ProjectEventBus} from "../api/ProjectEventBus";
-import {EventBus} from "../designer/utils/EventBus";
-import StopIcon from "@patternfly/react-icons/dist/js/icons/stop-icon";
+import DeleteIcon from "@patternfly/react-icons/dist/esm/icons/trash-icon";
 
 interface Props {
     reloadOnly?: boolean
@@ -27,7 +20,6 @@ export function BuildToolbar (props: Props) {
     const [setShowLog] = useLogStore((s) => [s.setShowLog], shallow);
 
     const containerStatus = containers.filter(c => c.containerName === 
project.projectId).at(0);
-    const commands = containerStatus?.commands || ['run'];
     const isRunning = containerStatus?.state === 'running';
     const inTransit = containerStatus?.inTransit;
     const isLoading = status === 'wip';
@@ -36,63 +28,20 @@ export function BuildToolbar (props: Props) {
 
     return (<Flex className="toolbar" direction={{default: "row"}} 
alignItems={{default: "alignItemsCenter"}}>
         <FlexItem>
-            {(inTransit || isLoading) && <Spinner size="lg" 
aria-label="spinner"/>}
+            <Button style={{visibility:"hidden"}} size="sm" 
variant={"control"} icon={<DeleteIcon/>} onClick={() => {}}>
+            </Button>
         </FlexItem>
         {containerStatus?.containerId && <FlexItem>
             <Label icon={icon} color={color}>
                 <Tooltip content={"Show log"} 
position={TooltipPosition.bottom}>
                     <Button className='labeled-button' variant="link" 
isDisabled={!isRunning}
                             onClick={e =>
-                                setShowLog(true, 'container', 
containerStatus.containerName)}>
+                                setShowLog( true, 'container', 
containerStatus.containerName)}>
                         {containerStatus.containerName}
                     </Button>
                 </Tooltip>
+                <Badge isRead>{containerStatus.type}</Badge>
             </Label>
         </FlexItem>}
-        {!isRunning && <FlexItem>
-            <Tooltip content="Run container" position={TooltipPosition.bottom}>
-                <Button size="sm"
-                        isDisabled={(!(commands.length === 0) && 
!commands.includes('run')) || inTransit}
-                        variant={"primary"}
-                        icon={<RunIcon/>}
-                        onClick={() => {
-                            KaravanApi.manageContainer('dev', 'project', 
project.projectId, 'run', res => {
-                                setShowLog(false, 'container', undefined)
-                            });
-                        }}>
-                    {"Run"}
-                </Button>
-            </Tooltip>
-        </FlexItem>}
-        {config.infrastructure !== 'kubernetes' &&
-            <FlexItem>
-                <Tooltip content="Stop container" 
position={TooltipPosition.bottom}>
-                    <Button size="sm"
-                            isDisabled={!commands.includes('stop') || 
inTransit}
-                            variant={"control"}
-                            icon={<StopIcon/>}
-                            onClick={() => {
-                                KaravanApi.manageContainer('dev', 'project', 
project.projectId, 'stop', res => {
-                                    setShowLog(false, 'container', undefined)
-                                });
-                            }}>
-                    </Button>
-                </Tooltip>
-            </FlexItem>
-        }
-        <FlexItem>
-            <Tooltip content="Delete container" 
position={TooltipPosition.bottom}>
-                <Button size="sm"
-                        isDisabled={!commands.includes('delete') || inTransit}
-                        variant={"control"}
-                        icon={<DeleteIcon/>}
-                        onClick={() => {
-                            KaravanApi.manageContainer('dev', 'project', 
project.projectId, 'delete', res => {
-                                setShowLog(false, 'container', undefined)
-                            });
-                        }}>
-                </Button>
-            </Tooltip>
-        </FlexItem>
-    </Flex>);
+    </Flex>)
 }
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/webui/src/project/BuildToolbar.tsx 
b/karavan-web/karavan-app/src/main/webui/src/project/ContainerPanel.tsx
similarity index 98%
copy from karavan-web/karavan-app/src/main/webui/src/project/BuildToolbar.tsx
copy to karavan-web/karavan-app/src/main/webui/src/project/ContainerPanel.tsx
index e18284c5..c32fb4a7 100644
--- a/karavan-web/karavan-app/src/main/webui/src/project/BuildToolbar.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/project/ContainerPanel.tsx
@@ -18,7 +18,7 @@ interface Props {
     reloadOnly?: boolean
 }
 
-export function BuildToolbar (props: Props) {
+export function ContainerPanel (props: Props) {
 
     const [config] = useAppConfigStore((state) => [state.config], shallow)
     const [status] = useDevModeStore((state) => [state.status], shallow)
diff --git 
a/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx 
b/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
index a659487a..2705447b 100644
--- a/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
@@ -1,5 +1,5 @@
 import React, {useState} from 'react';
-import {Button, Flex, FlexItem, Label, Spinner, Switch, Tooltip, 
TooltipPosition} from '@patternfly/react-core';
+import {Badge, Button, Flex, FlexItem, Label, Spinner, Switch, Tooltip, 
TooltipPosition} from '@patternfly/react-core';
 import '../designer/karavan.css';
 import RocketIcon from "@patternfly/react-icons/dist/esm/icons/rocket-icon";
 import ReloadIcon from "@patternfly/react-icons/dist/esm/icons/bolt-icon";
@@ -7,9 +7,8 @@ import DeleteIcon from 
"@patternfly/react-icons/dist/esm/icons/trash-icon";
 import {useAppConfigStore, useDevModeStore, useLogStore, useProjectStore, 
useStatusesStore} from "../api/ProjectStore";
 import {ProjectService} from "../api/ProjectService";
 import {shallow} from "zustand/shallow";
-import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
+import UpIcon from "@patternfly/react-icons/dist/esm/icons/running-icon";
 import DownIcon from 
"@patternfly/react-icons/dist/esm/icons/error-circle-o-icon";
-import StopIcon from "@patternfly/react-icons/dist/js/icons/stop-icon";
 
 interface Props {
     reloadOnly?: boolean
@@ -22,6 +21,7 @@ export function DevModeToolbar (props: Props) {
     const [project] = useProjectStore((state) => [state.project], shallow)
     const [containers] = useStatusesStore((state) => [state.containers], 
shallow);
     const [verbose, setVerbose] = useState(false);
+    const [setShowLog] = useLogStore((s) => [s.setShowLog], shallow);
 
     const containerStatus = containers.filter(c => c.containerName === 
project.projectId).at(0);
     const commands = containerStatus?.commands || ['run'];
@@ -30,7 +30,13 @@ export function DevModeToolbar (props: Props) {
     const isLoading = status === 'wip';
     const color = containerStatus?.state === 'running' ? "green" : "grey";
     const icon = isRunning ? <UpIcon/> : <DownIcon/>;
+    const inDevMode = containerStatus?.type === 'devmode';
+
     return (<Flex className="toolbar" direction={{default: "row"}} 
alignItems={{default: "alignItemsCenter"}}>
+        <FlexItem>
+            <Button style={{visibility:"hidden"}} size="sm" 
variant={"control"} icon={<DeleteIcon/>} onClick={() => {}}>
+            </Button>
+        </FlexItem>
         <FlexItem>
             {(inTransit || isLoading) && <Spinner size="lg" 
aria-label="spinner"/>}
         </FlexItem>
@@ -39,10 +45,11 @@ export function DevModeToolbar (props: Props) {
                 <Tooltip content={"Show log"} 
position={TooltipPosition.bottom}>
                     <Button className='labeled-button' variant="link" 
isDisabled={!isRunning}
                             onClick={e =>
-                                useLogStore.setState({showLog: true, type: 
'container', podName: containerStatus.containerName})}>
+                                setShowLog( true, 'container', 
containerStatus.containerName)}>
                         {containerStatus.containerName}
                     </Button>
                 </Tooltip>
+                <Badge isRead>{containerStatus.type}</Badge>
             </Label>
         </FlexItem>}
         {!isRunning && <FlexItem>
@@ -65,7 +72,7 @@ export function DevModeToolbar (props: Props) {
                 </Button>
             </Tooltip>
         </FlexItem>}
-        {isRunning && <FlexItem>
+        {isRunning && inDevMode && <FlexItem>
             <Tooltip content="Reload" position={TooltipPosition.bottom}>
                 <Button size="sm"
                         isDisabled={inTransit}
@@ -76,19 +83,7 @@ export function DevModeToolbar (props: Props) {
                 </Button>
             </Tooltip>
         </FlexItem>}
-        {/*{config.infrastructure !== 'kubernetes' &&*/}
-        {/*    <FlexItem>*/}
-        {/*        <Tooltip content="Stop container" 
position={TooltipPosition.bottom}>*/}
-        {/*            <Button size="sm"*/}
-        {/*                    isDisabled={!commands.includes('stop') || 
inTransit}*/}
-        {/*                    variant={"control"}*/}
-        {/*                    icon={<StopIcon/>}*/}
-        {/*                    onClick={() => 
ProjectService.stopDevModeContainer(project)}>*/}
-        {/*            </Button>*/}
-        {/*        </Tooltip>*/}
-        {/*    </FlexItem>*/}
-        {/*}*/}
-        <FlexItem>
+        {inDevMode && <FlexItem>
             <Tooltip content="Delete container" 
position={TooltipPosition.bottom}>
                 <Button size="sm"
                         isDisabled={!commands.includes('delete') || inTransit}
@@ -97,6 +92,6 @@ export function DevModeToolbar (props: Props) {
                         onClick={() => 
ProjectService.deleteDevModeContainer(project)}>
                 </Button>
             </Tooltip>
-        </FlexItem>
+        </FlexItem>}
     </Flex>);
 }
diff --git 
a/karavan-web/karavan-app/src/main/webui/src/project/build/ImagesPanel.tsx 
b/karavan-web/karavan-app/src/main/webui/src/project/build/ImagesPanel.tsx
index 9c829267..31fc581d 100644
--- a/karavan-web/karavan-app/src/main/webui/src/project/build/ImagesPanel.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/project/build/ImagesPanel.tsx
@@ -149,9 +149,9 @@ export function ImagesPanel () {
                 <Thead>
                     <Tr>
                         <Th key='status' width={10}></Th>
-                        <Th key='image' width={30}>Image</Th>
+                        <Th key='image' width={20}>Image</Th>
                         <Th key='tag' width={10}>Tag</Th>
-                        <Th key='actions'></Th>
+                        <Th key='actions' width={10}></Th>
                     </Tr>
                 </Thead>
                 <Tbody>

Reply via email to