diff --git a/backend/go-app/go.mod b/backend/go-app/go.mod index 9929130c..aa007e28 100644 --- a/backend/go-app/go.mod +++ b/backend/go-app/go.mod @@ -5,7 +5,7 @@ go 1.24.0 toolchain go1.24.3 //replace github.com/frikky/schemaless => ../../../schemaless -//replace github.com/shuffle/shuffle-shared => ../../../shuffle-shared +replace github.com/shuffle/shuffle-shared => ../../../shuffle-shared //replace github.com/frikky/kin-openapi => ../../../../git/kin-openapi diff --git a/backend/go-app/main.go b/backend/go-app/main.go index 4e4cce58..4279e19f 100755 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -4099,8 +4099,9 @@ func runInitEs(ctx context.Context) { time.Sleep(30 * time.Second) } - // FIXME: This should ONLY run on one backend instance + shuffle.InitOpensearchIndexes() + // FIXME: This should ONLY run on one backend instance. This may cause interference. schedules, err := shuffle.GetAllSchedules(ctx, "ALL") if err != nil { log.Printf("[WARNING] Failed getting schedules during service init: %s", err) diff --git a/frontend/src/components/EditWorkflow.jsx b/frontend/src/components/EditWorkflow.jsx index dbd8d3ea..00b9608d 100644 --- a/frontend/src/components/EditWorkflow.jsx +++ b/frontend/src/components/EditWorkflow.jsx @@ -63,6 +63,7 @@ import { Add as AddIcon, Remove as RemoveIcon, EditNote as EditNoteIcon, + AutoAwesome as AutoAwesomeIcon } from "@mui/icons-material"; const EditWorkflow = (props) => { @@ -72,6 +73,7 @@ const EditWorkflow = (props) => { const {themeMode, brandColor} = useContext(Context) const theme = getTheme(themeMode, brandColor) const [submitLoading, setSubmitLoading] = React.useState(false); + const [aiGenerateLoading, setAiGenerateLoading] = React.useState(false); const [showMoreClicked, setShowMoreClicked] = React.useState(isEditing !== false ? true : false); const [innerWorkflow, setInnerWorkflow] = React.useState(workflow) @@ -220,7 +222,7 @@ const EditWorkflow = (props) => {
- + {newWorkflow ? "New" : "Editing"} Workflow @@ -298,93 +300,316 @@ const EditWorkflow = (props) => { paddingLeft: 30, backgroundColor: themeMode === "dark" ? "#262626" : theme.palette.DialogStyle.backgroundColor, }}> - + + + Generate using the name, description, usecases and tags provided. Required: Name + Description + + } + > + + + + +
+ ) : ( + + // If new workflow, don't close it + if (isEditing) { + setModalOpen(false) + } + }} + color="primary" + > + {submitLoading ? : "Save Changes"} + + )}
@@ -409,6 +634,29 @@ const EditWorkflow = (props) => { id="Enter-Workflow-Name" /> + {newWorkflow === true ? + { + innerWorkflow.default_return_value = event.target.value + setInnerWorkflow(innerWorkflow) + setUpdate(Math.random()) + }} + InputProps={{ + style: { + color: "white", + }, + }} + color="primary" + defaultValue={innerWorkflow.default_return_value} + placeholder="Please describe your workflow below so the AI can generate it." + rows="3" + multiline + label="Description" + margin="dense" + fullWidth + /> + : null} +
{usecases !== null && usecases !== undefined && usecases.length > 0 ? @@ -1285,7 +1533,7 @@ const EditWorkflow = (props) => { - {newWorkflow === true ? + {/*newWorkflow === true ? Relevant Workflows @@ -1311,9 +1559,8 @@ const EditWorkflow = (props) => { } - : null} - - {/*newWorkflow === true && name.length > 2 ? + : null*/} + {/*newWorkflow === true && name.length > 2 ?
{ //toast("No Orborus necessary for environment cloud. Create and use a different environment to run executions on-premises.",) return } - + if ( props.userdata.active_org === undefined || props.userdata.active_org === null ) { return; } - + const elementName = "copy_element_shuffle"; var auth = environment.auth === "" ? "cb5st3d3Z!3X3zaJ*Pc" : environment.auth - - // Escape exclamation marks for copying - auth = auth.replace("\\!", "!").replace(/!/g, "\\!") - + // Escape exclamation marks for copying + auth = auth.replace("\\!", "!").replace(/!/g, "\\!") const newUrl = globalUrl === "https://shuffler.io" ? "https://shuffle-backend-stbuwivzoq-nw.a.run.app" : globalUrl; - + var skipPipeline = false if (commandController.pipelines === true) { skipPipeline = true } - + var addProxy = false if (commandController.proxies === true) { addProxy = true } - + if (installationTab === 1) { return (`docker run -d \\ --restart=always \\ @@ -428,14 +426,32 @@ const EnvironmentTab = memo((props) => { -e SHUFFLE_SWARM_CONFIG=run \\ -e SHUFFLE_LOGS_DISABLED=true \\ -e BASE_URL="${newUrl}" \\${addProxy ? ` - -e HTTPS_PROXY=IP:PORT \\` : ""}${skipPipeline ? ` - -e SHUFFLE_SKIP_PIPELINES=true \\` : ""} + -e HTTPS_PROXY=IP:PORT \\` : ""}${skipPipeline ? ` + -e SHUFFLE_SKIP_PIPELINES=true \\` : ""} ghcr.io/shuffle/shuffle-orborus:latest `) } else if (installationTab === 2) { - return `https://shuffler.io/docs/configuration#kubernetes` + return `helm install shuffle-orborus oci://ghcr.io/shuffle/charts/shuffle \\ + --namespace shuffle --create-namespace \\ + --set opensearch.enabled=false \\ + --set backend.replicaCount=0 \\ + --set frontend.replicaCount=0 \\ + --set 'orborus.extraEnvVars[0].name=AUTH' \\ + --set 'orborus.extraEnvVars[0].value=${auth}' \\ + --set 'orborus.extraEnvVars[1].name=BASE_URL' \\ + --set 'orborus.extraEnvVars[1].value=${newUrl}' \\ + --set 'orborus.extraEnvVars[2].name=ENVIRONMENT_NAME' \\ + --set 'orborus.extraEnvVars[2].value=${environment.Name}' \\ + --set 'orborus.extraEnvVars[3].name=ORG' \\ + --set 'orborus.extraEnvVars[3].value=${environment.org_id}' \\ + --set shuffle.org="${environment.org_id}"${addProxy ? ` \\ + --set 'orborus.extraEnvVars[4].name=HTTPS_PROXY' \\ + --set 'orborus.extraEnvVars[4].value=IP:PORT'` : ""}${skipPipeline ? ` \\ + --set 'orborus.extraEnvVars[${addProxy ? 5 : 4}].name=SHUFFLE_SKIP_PIPELINES' \\ + --set 'orborus.extraEnvVars[${addProxy ? 5 : 4}].value=true'` : ""} \\ + --set persistence.storageClass=standard` } - + const commandData = `docker rm shuffle-orborus --force; \\\ndocker run -d \\ --restart=always \\ --name="shuffle-orborus" \\ @@ -445,12 +461,13 @@ const EnvironmentTab = memo((props) => { -e ENVIRONMENT_NAME="${environment.Name}" \\ -e ORG="${props.userdata.active_org.id}" \\ -e BASE_URL="${newUrl}" \\${addProxy ? ` - -e HTTPS_PROXY=IP:PORT \\` : ""}${skipPipeline ? ` - -e SHUFFLE_SKIP_PIPELINES=true \\` : ""} + -e HTTPS_PROXY=IP:PORT \\` : ""}${skipPipeline ? ` + -e SHUFFLE_SKIP_PIPELINES=true \\` : ""} ghcr.io/shuffle/shuffle-orborus:latest` - + return commandData - }; + }; + const submitEnvironment = (data) => { // FIXME - add some check here ROFL @@ -1475,7 +1492,7 @@ const EnvironmentTab = memo((props) => { {installationTab === 2 ? - Check our Kubernetes documentation for more information on how to run Shuffle on Kubernetes. The status of the node will change when connected. + Simply connect to your Kubernetes cluster and run the following command: : @@ -1489,7 +1506,6 @@ const EnvironmentTab = memo((props) => { "2. Run this command on the server you want to run workflows or store Pipeline data on"} - {installationTab === 2 ? null :
{ }} />
-
- } +
{installationTab === 2 ? null : diff --git a/frontend/src/components/PartnerHeader.jsx b/frontend/src/components/PartnerHeader.jsx index 8cb84c0a..3a6a910b 100644 --- a/frontend/src/components/PartnerHeader.jsx +++ b/frontend/src/components/PartnerHeader.jsx @@ -741,7 +741,7 @@ const PartnerHeader = (props) => {