diff --git a/backend/go-app/main.go b/backend/go-app/main.go index 998e04e8..29f3cf9a 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -5955,6 +5955,7 @@ func init() { // App specific r.HandleFunc("/api/v1/apps/get_existing", loadSpecificApps).Methods("POST", "OPTIONS") + r.HandleFunc("/api/v1/apps/download_remote", loadSpecificApps).Methods("POST", "OPTIONS") r.HandleFunc("/api/v1/apps/validate", validateAppInput).Methods("POST", "OPTIONS") r.HandleFunc("/api/v1/apps/{appId}", deleteWorkflowApp).Methods("DELETE", "OPTIONS") r.HandleFunc("/api/v1/apps/{appId}/config", getWorkflowAppConfig).Methods("GET", "OPTIONS") diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 2c9e29cc..cf165594 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -3661,7 +3661,6 @@ func iterateWorkflowGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra // Onlyname is used to func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra string, onlyname string) error { var err error - runUpload := false for _, file := range dir { if len(onlyname) > 0 && file.Name() != onlyname { continue @@ -3688,83 +3687,71 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin if filename == "Dockerfile" { log.Printf("Handle Dockerfile in location %s", extra) - extraSplit := strings.Split(extra, "/") - tags := []string{} - if len(extraSplit) > 1 { - tags = []string{ - fmt.Sprintf("%s:%s_%s", baseDockerName, strings.ReplaceAll(extraSplit[0], " ", "-"), extraSplit[1]), - // Version = folder of last part of extra - // Name = first folder of extra - } - } else { - // Skip - runUpload = false - log.Printf("Skipping folder %s because the extra variable is empty~", extra) - break - //return nil - } - - /// Only upload if successful and no errors - err := buildImageMemory(fs, tags, extra) - if err != nil { - log.Printf("Failed image build memory: %s", err) - runUpload = false - } else { - runUpload = true - } - } - } - } - - // Done sequentailly to prevent bad uploads - if runUpload && err == nil { - for _, file := range dir { - if file.Name() == "api.yaml" || file.Name() == "api.yaml" { - log.Printf("Run update of %sapi.yaml in backend if it doesn't exist!!", extra) - fullPath := fmt.Sprintf("%s%s", extra, file.Name()) - + // Try api.yaml and api.yml + fullPath := fmt.Sprintf("%s%s", extra, "api.yaml") fileReader, err := fs.Open(fullPath) if err != nil { - return err + fullPath = fmt.Sprintf("%s%s", extra, "api.yml") + fileReader, err = fs.Open(fullPath) + if err != nil { + log.Printf("Failed finding api.yaml/yml: %s", err) + continue + } } readFile, err := ioutil.ReadAll(fileReader) if err != nil { - log.Printf("Filereader error: %s", err) - return err + log.Printf("Failed reading %s: %s", fullPath, err) + continue } var workflowapp WorkflowApp err = gyaml.Unmarshal(readFile, &workflowapp) if err != nil { - log.Printf("Failed api.yaml unmarshal: %s", err) - return err + log.Printf("Failed unmarshaling %s: %s", fullPath, err) + continue } - log.Printf("APIName: %s", workflowapp.Name) - extraSplit := strings.Split(extra, "/") - appName := fmt.Sprintf("%s_%s", strings.ReplaceAll(extraSplit[0], " ", "-"), extraSplit[1]) + newName := workflowapp.Name + newName = strings.ReplaceAll(newName, " ", "-") + + tags := []string{ + fmt.Sprintf("%s:%s_%s", baseDockerName, newName, workflowapp.AppVersion), + } ctx := context.Background() allapps, err := getAllWorkflowApps(ctx) if err != nil { log.Printf("Failed getting apps to verify: %s", err) - return err + continue + //return err } log.Printf("APPS: %d", len(allapps)) + // Make an option to override existing apps? + removeApps := []string{} for _, app := range allapps { if app.Name == workflowapp.Name && app.AppVersion == workflowapp.AppVersion { - log.Printf("App upload for %s:%s already exists.", app.Name, app.AppVersion) - return errors.New(fmt.Sprintf("App %s already exists. ", appName)) + //log.Printf("App upload for %s:%s already exists.", app.Name, app.AppVersion) + log.Printf("Overriding app %s:%s as it exists.", app.Name, app.AppVersion) + removeApps = append(removeApps, app.ID) } } err = checkWorkflowApp(workflowapp) if err != nil { log.Printf("%s for app %s:%s", err, workflowapp.Name, workflowapp.AppVersion) - return err + continue + } + + if len(removeApps) > 0 { + for _, item := range removeApps { + err = DeleteKey(ctx, "workflowapp", item) + if err != nil { + log.Printf("Failed deleting %s", item) + } + } } //if workflowapp.Environment == "" { @@ -3780,7 +3767,8 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin err = setWorkflowAppDatastore(ctx, workflowapp, workflowapp.ID) if err != nil { log.Printf("Failed setting workflowapp: %s", err) - return err + continue + //return err } err = increaseStatisticsField(ctx, "total_apps_created", workflowapp.ID, 1) @@ -3794,8 +3782,16 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin } log.Printf("Added %s:%s to the database", workflowapp.Name, workflowapp.AppVersion) - //memcache.Delete(ctx, "all_apps") - //os.Exit(3) + + /// Only upload if successful and no errors + err = buildImageMemory(fs, tags, extra) + if err != nil { + log.Printf("Failed image build memory: %s", err) + } else { + if len(tags) > 0 { + log.Printf("Successfully built image %s", tags[0]) + } + } } } } diff --git a/frontend/src/Apps.js b/frontend/src/Apps.js index d0c6ff9e..c4cd8878 100644 --- a/frontend/src/Apps.js +++ b/frontend/src/Apps.js @@ -648,10 +648,7 @@ const Apps = (props) => { }) .then((response) => { if (response.status === 200) { - response.text().then(function (text) { - console.log("RETURN: ", text) - alert.success("Loaded existing apps!") - }) + alert.success("Loaded existing apps!") } setIsLoading(false) stop() @@ -662,11 +659,10 @@ const Apps = (props) => { console.log("DATA: ", responseJson) if (responseJson.reason !== undefined) { alert.error("Failed loading: "+responseJson.reason) - } else { - alert.error("Failed loading") } }) .catch(error => { + console.log("ERROR: ", error.toString()) alert.error(error.toString()) }) } diff --git a/frontend/src/Docs.js b/frontend/src/Docs.js index 2ac9c2f3..9a0df2ea 100644 --- a/frontend/src/Docs.js +++ b/frontend/src/Docs.js @@ -32,7 +32,7 @@ const hrefStyle = { } const Docs = (props) => { - const { isLoaded, globalUrl } = props; + const { isLoaded, globalUrl, inputColor } = props; const [data, setData] = useState(""); const [firstrequest, setFirstrequest] = useState(true); @@ -179,6 +179,23 @@ const Docs = (props) => { return {props.alt} } + function CodeHandler(props) { + return {props.value} + } + + function Heading(props) { + const element = React.createElement(`h${props.level}`, {style: {marginTop: 25}}, props.children) + console.log(props) + return ( + + + {element} + + ) + } + //React.createElement("p", {style: {color: "red", backgroundColor: "blue"}}, this.props.paragraph) + + //function unicodeToChar(text) { // return text.replace(/\\u[\dA-F]{4}/gi, // function (match) { @@ -214,7 +231,12 @@ const Docs = (props) => { id="markdown_wrapper" escapeHtml={false} source={data} - renderers={{link: OuterLink, image: Img}} + renderers={{ + link: OuterLink, + image: Img, + code: CodeHandler, + heading: Heading, + }} />