diff --git a/README.md b/README.md index 895bd472..c09bd090 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ These are the main areas to contribute in: * Workflow creation (GUI & Conceptualizing) * Content Creation (Blogs, videos etc) -Contributing guidelines for Github are outlined [here](https://github.com/frikky/Shuffle/blob/master/.github/CONTRIBUTING.md). +Contributing guidelines are outlined [here](https://github.com/frikky/Shuffle/blob/master/.github/CONTRIBUTING.md). ## Contributors ![ICPL logo](https://github.com/frikky/Shuffle/blob/launch/frontend/src/assets/img/icpl_logo.png) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index fb6f86bc..9c0556db 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -195,6 +195,11 @@ type WorkflowApp struct { DocumentationUrl string `json:"documentation_url" datastore:"documentation_url"` GithubUrl string `json:"github_url" datastore:"github_url"` } + FolderMount struct { + FolderMount bool `json:"folder_mount" datastore:"folder_mount"` + SourceFolder string `json:"source_folder" datastore:"source_folder"` + DestinationFolder string `json:"destination_folder" datastore:"destination_folder"` + } Actions []WorkflowAppAction `json:"actions" yaml:"actions" required:true datastore:"actions,noindex"` Authentication Authentication `json:"authentication" yaml:"authentication" required:false datastore:"authentication"` Tags []string `json:"tags" yaml:"tags" required:false datastore:"activated"` @@ -6421,7 +6426,7 @@ func iterateWorkflowGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra } } */ - + log.Printf("Import workflow from file: %s", filename) ctx := context.Background() err = setWorkflow(ctx, workflow, workflow.ID, secondsOffset) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 8b10e7ff..4cd2a35b 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -987,7 +987,7 @@ const AngularWorkflow = (props) => { setApps(responseJson) //getAppAuthentication() - setFilteredApps(responseJson.filter(app => !internalIds.includes(app.name))) + setFilteredApps(responseJson.filter(app => !internalIds.includes(app.name) && !(!app.activated && app.generated))) setPrioritizedApps(responseJson.filter(app => internalIds.includes(app.name))) }) .catch(error => { @@ -6637,7 +6637,7 @@ const AngularWorkflow = (props) => { Actions
- {executionData.status !== undefined && executionData.status !== "ABORTED" && executionData.status !== "FINISHED" && executionData.status !== "FAILURE" && executionData.status !== "WAITING" ? : null} + {executionData.status !== undefined && executionData.status !== "ABORTED" && executionData.status !== "FINISHED" && executionData.status !== "FAILURE" && executionData.status !== "WAITING" && !(executionData.results === undefined || executionData.results === null || executionData.results.length === 0 && executionData.status === "EXECUTING")? : null}
{executionData.results === undefined || executionData.results === null || executionData.results.length === 0 && executionData.status === "EXECUTING" ? @@ -6712,7 +6712,7 @@ const AngularWorkflow = (props) => { }} name={"Results for "+data.action.label} /> - {data.action.app_name === "shuffle-subflow" ? + {data.action.app_name === "shuffle-subflow" && validate.result.success !== undefined && validate.result.success === true ? {validate.valid && data.action.parameters !== undefined && data.action.parameters !== null ? See subflow execution @@ -6724,7 +6724,7 @@ const AngularWorkflow = (props) => { } : -
+
Result  {data.result}
diff --git a/frontend/src/views/Apps.jsx b/frontend/src/views/Apps.jsx index 050b1d27..99a9b0bb 100644 --- a/frontend/src/views/Apps.jsx +++ b/frontend/src/views/Apps.jsx @@ -201,7 +201,8 @@ const Apps = (props) => { }) .then((responseJson) => { //console.log("Apps: ", responseJson) - responseJson = sortByKey(responseJson, "large_image") + //responseJson = sortByKey(responseJson, "large_image") + responseJson = sortByKey(responseJson, "generated") setApps(responseJson) setFilteredApps(responseJson) @@ -781,6 +782,7 @@ const Apps = (props) => { var tmpapps = searchableApps.filter(data => data.name.toLowerCase().includes(searchfield) || data.description.toLowerCase().includes(searchfield)) newapps.push(...tmpapps) + console.log(newapps) setFilteredApps(newapps) //if ((newapps.length === 0 || searchBackend) && !appSearchLoading) { diff --git a/functions/onprem/worker/Dockerfile b/functions/onprem/worker/Dockerfile index a6d82d61..a95b099e 100644 --- a/functions/onprem/worker/Dockerfile +++ b/functions/onprem/worker/Dockerfile @@ -2,20 +2,16 @@ FROM golang:1.16.0-buster as builder WORKDIR /app +COPY worker.go /app/worker.go +RUN go env -w GO111MODULE=auto + RUN go get -u github.com/docker/docker/api/types RUN go get -u github.com/docker/docker/api/types/container RUN go get -u github.com/docker/docker/client RUN go get -u github.com/gorilla/mux RUN go get -u github.com/patrickmn/go-cache -COPY worker.go /app/worker.go -RUN go env -w GO111MODULE=auto && \ - go get github.com/docker/docker/api/types && \ - go get github.com/docker/docker/api/types/container && \ - go get github.com/docker/docker/client && \ - go get github.com/gorilla/mux && \ - go get github.com/patrickmn/go-cache && \ - CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o worker . +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o worker . FROM alpine:3.12 diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 7a11bb0c..1672fb22 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -18,6 +18,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/mount" dockerclient "github.com/docker/docker/client" "github.com/gorilla/mux" @@ -877,6 +878,37 @@ func deployApp(cli *dockerclient.Client, image string, identifier string, env [] hostConfig.AutoRemove = true } + // FIXME: Add proper foldermounts here + //log.Printf("\n\nPRE FOLDERMOUNT\n\n") + //volumeBinds := []string{"/tmp/shuffle-mount:/rules"} + //volumeBinds := []string{"/tmp/shuffle-mount:/rules"} + volumeBinds := []string{} + if len(volumeBinds) > 0 { + log.Printf("[INFO] Setting up binds for container!") + hostConfig.Binds = volumeBinds + hostConfig.Mounts = []mount.Mount{} + for _, bind := range volumeBinds { + if !strings.Contains(bind, ":") || strings.Contains(bind, "..") || strings.HasPrefix(bind, "~") { + log.Printf("[WARNING] Bind %s is invalid.", bind) + continue + } + + log.Printf("[INFO] Appending bind %s", bind) + bindSplit := strings.Split(bind, ":") + sourceFolder := bindSplit[0] + destinationFolder := bindSplit[0] + hostConfig.Mounts = append(hostConfig.Mounts, mount.Mount{ + Type: mount.TypeBind, + Source: sourceFolder, + Target: destinationFolder, + }) + } + } else { + log.Printf("[WARNING] No mounted folders") + } + // hostConfig.Binds = volumeBinds + //} + config := &container.Config{ Image: image, Env: env,