Made docs easier to read
This commit is contained in:
@@ -5955,6 +5955,7 @@ func init() {
|
|||||||
|
|
||||||
// App specific
|
// App specific
|
||||||
r.HandleFunc("/api/v1/apps/get_existing", loadSpecificApps).Methods("POST", "OPTIONS")
|
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/validate", validateAppInput).Methods("POST", "OPTIONS")
|
||||||
r.HandleFunc("/api/v1/apps/{appId}", deleteWorkflowApp).Methods("DELETE", "OPTIONS")
|
r.HandleFunc("/api/v1/apps/{appId}", deleteWorkflowApp).Methods("DELETE", "OPTIONS")
|
||||||
r.HandleFunc("/api/v1/apps/{appId}/config", getWorkflowAppConfig).Methods("GET", "OPTIONS")
|
r.HandleFunc("/api/v1/apps/{appId}/config", getWorkflowAppConfig).Methods("GET", "OPTIONS")
|
||||||
|
|||||||
+47
-51
@@ -3661,7 +3661,6 @@ func iterateWorkflowGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra
|
|||||||
// Onlyname is used to
|
// Onlyname is used to
|
||||||
func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra string, onlyname string) error {
|
func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra string, onlyname string) error {
|
||||||
var err error
|
var err error
|
||||||
runUpload := false
|
|
||||||
for _, file := range dir {
|
for _, file := range dir {
|
||||||
if len(onlyname) > 0 && file.Name() != onlyname {
|
if len(onlyname) > 0 && file.Name() != onlyname {
|
||||||
continue
|
continue
|
||||||
@@ -3688,83 +3687,71 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
|
|||||||
if filename == "Dockerfile" {
|
if filename == "Dockerfile" {
|
||||||
log.Printf("Handle Dockerfile in location %s", extra)
|
log.Printf("Handle Dockerfile in location %s", extra)
|
||||||
|
|
||||||
extraSplit := strings.Split(extra, "/")
|
// Try api.yaml and api.yml
|
||||||
tags := []string{}
|
fullPath := fmt.Sprintf("%s%s", extra, "api.yaml")
|
||||||
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())
|
|
||||||
|
|
||||||
fileReader, err := fs.Open(fullPath)
|
fileReader, err := fs.Open(fullPath)
|
||||||
if err != nil {
|
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)
|
readFile, err := ioutil.ReadAll(fileReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Filereader error: %s", err)
|
log.Printf("Failed reading %s: %s", fullPath, err)
|
||||||
return err
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var workflowapp WorkflowApp
|
var workflowapp WorkflowApp
|
||||||
err = gyaml.Unmarshal(readFile, &workflowapp)
|
err = gyaml.Unmarshal(readFile, &workflowapp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed api.yaml unmarshal: %s", err)
|
log.Printf("Failed unmarshaling %s: %s", fullPath, err)
|
||||||
return err
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("APIName: %s", workflowapp.Name)
|
newName := workflowapp.Name
|
||||||
extraSplit := strings.Split(extra, "/")
|
newName = strings.ReplaceAll(newName, " ", "-")
|
||||||
appName := fmt.Sprintf("%s_%s", strings.ReplaceAll(extraSplit[0], " ", "-"), extraSplit[1])
|
|
||||||
|
tags := []string{
|
||||||
|
fmt.Sprintf("%s:%s_%s", baseDockerName, newName, workflowapp.AppVersion),
|
||||||
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
allapps, err := getAllWorkflowApps(ctx)
|
allapps, err := getAllWorkflowApps(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed getting apps to verify: %s", err)
|
log.Printf("Failed getting apps to verify: %s", err)
|
||||||
return err
|
continue
|
||||||
|
//return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("APPS: %d", len(allapps))
|
log.Printf("APPS: %d", len(allapps))
|
||||||
|
|
||||||
|
// Make an option to override existing apps?
|
||||||
|
removeApps := []string{}
|
||||||
for _, app := range allapps {
|
for _, app := range allapps {
|
||||||
if app.Name == workflowapp.Name && app.AppVersion == workflowapp.AppVersion {
|
if app.Name == workflowapp.Name && app.AppVersion == workflowapp.AppVersion {
|
||||||
log.Printf("App upload for %s:%s already exists.", app.Name, app.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("Overriding app %s:%s as it exists.", app.Name, app.AppVersion)
|
||||||
|
removeApps = append(removeApps, app.ID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = checkWorkflowApp(workflowapp)
|
err = checkWorkflowApp(workflowapp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("%s for app %s:%s", err, workflowapp.Name, workflowapp.AppVersion)
|
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 == "" {
|
//if workflowapp.Environment == "" {
|
||||||
@@ -3780,7 +3767,8 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
|
|||||||
err = setWorkflowAppDatastore(ctx, workflowapp, workflowapp.ID)
|
err = setWorkflowAppDatastore(ctx, workflowapp, workflowapp.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed setting workflowapp: %s", err)
|
log.Printf("Failed setting workflowapp: %s", err)
|
||||||
return err
|
continue
|
||||||
|
//return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = increaseStatisticsField(ctx, "total_apps_created", workflowapp.ID, 1)
|
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)
|
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])
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -648,10 +648,7 @@ const Apps = (props) => {
|
|||||||
})
|
})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
response.text().then(function (text) {
|
alert.success("Loaded existing apps!")
|
||||||
console.log("RETURN: ", text)
|
|
||||||
alert.success("Loaded existing apps!")
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
setIsLoading(false)
|
setIsLoading(false)
|
||||||
stop()
|
stop()
|
||||||
@@ -662,11 +659,10 @@ const Apps = (props) => {
|
|||||||
console.log("DATA: ", responseJson)
|
console.log("DATA: ", responseJson)
|
||||||
if (responseJson.reason !== undefined) {
|
if (responseJson.reason !== undefined) {
|
||||||
alert.error("Failed loading: "+responseJson.reason)
|
alert.error("Failed loading: "+responseJson.reason)
|
||||||
} else {
|
|
||||||
alert.error("Failed loading")
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
console.log("ERROR: ", error.toString())
|
||||||
alert.error(error.toString())
|
alert.error(error.toString())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-2
@@ -32,7 +32,7 @@ const hrefStyle = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Docs = (props) => {
|
const Docs = (props) => {
|
||||||
const { isLoaded, globalUrl } = props;
|
const { isLoaded, globalUrl, inputColor } = props;
|
||||||
|
|
||||||
const [data, setData] = useState("");
|
const [data, setData] = useState("");
|
||||||
const [firstrequest, setFirstrequest] = useState(true);
|
const [firstrequest, setFirstrequest] = useState(true);
|
||||||
@@ -179,6 +179,23 @@ const Docs = (props) => {
|
|||||||
return <img style={{maxWidth: "100%"}} alt={props.alt} src={props.src}/>
|
return <img style={{maxWidth: "100%"}} alt={props.alt} src={props.src}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function CodeHandler(props) {
|
||||||
|
return <code style={{padding: 5, backgroundColor: inputColor}}>{props.value}</code>
|
||||||
|
}
|
||||||
|
|
||||||
|
function Heading(props) {
|
||||||
|
const element = React.createElement(`h${props.level}`, {style: {marginTop: 25}}, props.children)
|
||||||
|
console.log(props)
|
||||||
|
return (
|
||||||
|
<span>
|
||||||
|
<Divider style={{width: "90%", marginTop: 25, backgroundColor: inputColor}} />
|
||||||
|
{element}
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
//React.createElement("p", {style: {color: "red", backgroundColor: "blue"}}, this.props.paragraph)
|
||||||
|
|
||||||
|
|
||||||
//function unicodeToChar(text) {
|
//function unicodeToChar(text) {
|
||||||
// return text.replace(/\\u[\dA-F]{4}/gi,
|
// return text.replace(/\\u[\dA-F]{4}/gi,
|
||||||
// function (match) {
|
// function (match) {
|
||||||
@@ -214,7 +231,12 @@ const Docs = (props) => {
|
|||||||
id="markdown_wrapper"
|
id="markdown_wrapper"
|
||||||
escapeHtml={false}
|
escapeHtml={false}
|
||||||
source={data}
|
source={data}
|
||||||
renderers={{link: OuterLink, image: Img}}
|
renderers={{
|
||||||
|
link: OuterLink,
|
||||||
|
image: Img,
|
||||||
|
code: CodeHandler,
|
||||||
|
heading: Heading,
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user