BUG: Added remote download failover if build fails for a tag

This commit is contained in:
frikky
2020-12-19 09:56:19 +01:00
parent e60c855ce4
commit 0ceea929e9
5 changed files with 102 additions and 65 deletions
+42 -11
View File
@@ -125,24 +125,28 @@ func getParsedTarMemory(fs billy.Filesystem, tw *tar.Writer, baseDir, extra stri
return err return err
} }
log.Printf("FILENAME: %s", filename) //log.Printf("FILENAME: %s", filename)
readFile, err := ioutil.ReadAll(fileReader) readFile, err := ioutil.ReadAll(fileReader)
if err != nil { if err != nil {
log.Printf("Not file: %s", err) log.Printf("Not file: %s", err)
return err return err
} }
// Fixes issues with older versions of Docker for file format // Fixes issues with older versions of Docker and reference formats
if filename == "Dockerfile" { // Specific to Shuffle rn. Could expand.
log.Printf("Should search and replace in readfile.") // FIXME: Seems like the issue was with multi-stage builds
/*
if filename == "Dockerfile" {
log.Printf("Should search and replace in readfile.")
referenceCheck := "FROM frikky/shuffle:" referenceCheck := "FROM frikky/shuffle:"
if strings.Contains(string(readFile), referenceCheck) { if strings.Contains(string(readFile), referenceCheck) {
log.Printf("SHOULD SEARCH & REPLACE!") log.Printf("SHOULD SEARCH & REPLACE!")
newReference := fmt.Sprintf("FROM registry.hub.docker.com/frikky/shuffle:") newReference := fmt.Sprintf("FROM registry.hub.docker.com/frikky/shuffle:")
readFile = []byte(strings.Replace(string(readFile), referenceCheck, newReference, -1)) readFile = []byte(strings.Replace(string(readFile), referenceCheck, newReference, -1))
}
} }
} */
//log.Printf("Filename: %s", filename) //log.Printf("Filename: %s", filename)
// FIXME - might need the folder from EXTRA here // FIXME - might need the folder from EXTRA here
@@ -230,12 +234,39 @@ func buildImageMemory(fs billy.Filesystem, tags []string, dockerfileFolder strin
dockerFileTarReader, dockerFileTarReader,
buildOptions, buildOptions,
) )
log.Printf("Response: %#v", imageBuildResponse.Body)
//log.Printf("IMAGERESPONSE: %#v", imageBuildResponse.Body) //log.Printf("IMAGERESPONSE: %#v", imageBuildResponse.Body)
defer imageBuildResponse.Body.Close() defer imageBuildResponse.Body.Close()
_, newerr := io.Copy(os.Stdout, imageBuildResponse.Body) buildBuf := new(strings.Builder)
_, newerr := io.Copy(buildBuf, imageBuildResponse.Body)
if newerr != nil { if newerr != nil {
log.Printf("Failed reading Docker build STDOUT: %s", newerr) log.Printf("Failed reading Docker build STDOUT: %s", newerr)
} else {
if strings.Contains(buildBuf.String(), "errorDetail") {
log.Printf("[ERROR] Docker build:\n%s\nERROR ABOVE: Trying to pull tags from: %s", buildBuf.String(), strings.Join(tags, "\n"))
// Handles pulling of the same image if applicable
// This fixes some issues with older versions of Docker which can't build
// on their own ( <17.05 )
pullOptions := types.ImagePullOptions{}
canonicalName := fmt.Sprintf("registry.hub.docker.com")
for _, image := range tags {
newImage := fmt.Sprintf("%s/%s", canonicalName, image)
log.Printf("[INFO] Pulling image %s", newImage)
reader, err := client.ImagePull(ctx, newImage, pullOptions)
if err != nil {
log.Printf("[ERROR] Failed getting image %s: %s", newImage, err)
continue
}
//newBuf := buildBuf
io.Copy(os.Stdout, reader)
log.Printf("[INFO] Successfully downloaded and built %s", newImage)
}
//baseDockerName
}
} }
if err != nil { if err != nil {
+3 -3
View File
@@ -5541,7 +5541,7 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
} }
} }
log.Printf("HANDLING DOCKER FILEREADER - SEARCH&REPLACE?") //log.Printf("HANDLING DOCKER FILEREADER - SEARCH&REPLACE?")
appfileData, err := ioutil.ReadAll(fileReader) appfileData, err := ioutil.ReadAll(fileReader)
if err != nil { if err != nil {
@@ -5688,10 +5688,10 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
if len(removeApps) > 0 { if len(removeApps) > 0 {
for _, item := range removeApps { for _, item := range removeApps {
log.Printf("Removing duplicate: %s", item) log.Printf("[WARNING] Removing duplicate: %s", item)
err = DeleteKey(ctx, "workflowapp", item) err = DeleteKey(ctx, "workflowapp", item)
if err != nil { if err != nil {
log.Printf("Failed deleting %s", item) log.Printf("[ERROR] Failed deleting duplicate %s: %s", item, err)
} }
} }
} }
+2 -2
View File
@@ -2,7 +2,7 @@ version: '3'
services: services:
frontend: frontend:
#build: ./frontend #build: ./frontend
image: ghcr.io/frikky/shuffle-frontend:0.8.3 image: ghcr.io/frikky/shuffle-frontend:0.8.4
container_name: shuffle-frontend container_name: shuffle-frontend
hostname: shuffle-frontend hostname: shuffle-frontend
ports: ports:
@@ -17,7 +17,7 @@ services:
- backend - backend
backend: backend:
build: ./backend build: ./backend
image: ghcr.io/frikky/shuffle-backend:0.8.4 image: ghcr.io/frikky/shuffle-backend:0.8.42
container_name: shuffle-backend container_name: shuffle-backend
hostname: ${BACKEND_HOSTNAME} hostname: ${BACKEND_HOSTNAME}
# Here for debugging: # Here for debugging:
+54 -48
View File
@@ -101,7 +101,12 @@ const parseCurl = (s) => {
return "" return ""
} }
var args = rewrite(words.split(s)) try {
var args = rewrite(words.split(s))
} catch (e) {
return s
}
var out = { method: 'GET', header: {} } var out = { method: 'GET', header: {} }
var state = '' var state = ''
@@ -1731,64 +1736,65 @@ const AppCreator = (props) => {
var parsedurl = event.target.value var parsedurl = event.target.value
if (parsedurl.startsWith("curl")) { if (parsedurl.startsWith("curl")) {
const request = parseCurl(event.target.value) const request = parseCurl(event.target.value)
console.log(request) if (request !== event.target.value) {
if (request.method.toUpperCase() !== currentAction.Method) { if (request.method.toUpperCase() !== currentAction.Method) {
setCurrentActionMethod(request.method.toUpperCase()) setCurrentActionMethod(request.method.toUpperCase())
setActionField("method", request.method.toUpperCase()) setActionField("method", request.method.toUpperCase())
} }
if (request.header !== undefined && request.header !== null) { if (request.header !== undefined && request.header !== null) {
var headers = [] var headers = []
for (let [key, value] of Object.entries(request.header)) { for (let [key, value] of Object.entries(request.header)) {
if (parameterName !== undefined && key.toLowerCase() === parameterName.toLowerCase()) { if (parameterName !== undefined && key.toLowerCase() === parameterName.toLowerCase()) {
continue continue
}
if (key === "Authorization" && authenticationOption === "Bearer auth") {
continue
}
headers += key+"="+value+"\n"
} }
if (key === "Authorization" && authenticationOption === "Bearer auth") { setActionField("headers", headers)
continue
}
headers += key+"="+value+"\n"
} }
setActionField("headers", headers) if (request.body !== undefined && request.body !== null) {
} setActionField("body", request.body)
}
if (request.body !== undefined && request.body !== null) { // Parse URL
setActionField("body", request.body) if (request.url !== undefined) {
} parsedurl = request.url
}
// Parse URL
if (request.url !== undefined) {
parsedurl = request.url
}
} }
if (parsedurl !== undefined) { if (parsedurl !== undefined) {
if (parsedurl.includes("<") && parsedurl.includes(">")) { if (parsedurl.includes("<") && parsedurl.includes(">")) {
parsedurl = parsedurl.split("<").join("{") parsedurl = parsedurl.split("<").join("{")
parsedurl = parsedurl.split(">").join("}") parsedurl = parsedurl.split(">").join("}")
}
if (parsedurl.startsWith("http") || parsedurl.startsWith("ftp")) {
if (parsedurl !== undefined && parsedurl.includes(parameterName)) {
// Remove <> etc.
//
console.log("IT HAS THE PARAM NAME!")
const newurl = new URL(encodeURI(parsedurl))
newurl.searchParams.delete(parameterName)
parsedurl = decodeURI(newurl.href)
} }
// Remove the base URL itself if (parsedurl.startsWith("http") || parsedurl.startsWith("ftp")) {
if (parsedurl !== undefined && baseUrl !== undefined && baseUrl.length > 0 && parsedurl.includes(baseUrl)) { if (parsedurl !== undefined && parsedurl.includes(parameterName)) {
parsedurl = parsedurl.replace(baseUrl, "") // Remove <> etc.
} //
console.log("IT HAS THE PARAM NAME!")
const newurl = new URL(encodeURI(parsedurl))
newurl.searchParams.delete(parameterName)
parsedurl = decodeURI(newurl.href)
}
// Check URL query && headers // Remove the base URL itself
setActionField("url", parsedurl) if (parsedurl !== undefined && baseUrl !== undefined && baseUrl.length > 0 && parsedurl.includes(baseUrl)) {
setUrlPath(parsedurl) parsedurl = parsedurl.replace(baseUrl, "")
}
// Check URL query && headers
setActionField("url", parsedurl)
setUrlPath(parsedurl)
}
} }
} }
+1 -1
View File
@@ -130,7 +130,7 @@ const LoginDialog = props => {
if (responseJson["success"] === false) { if (responseJson["success"] === false) {
setLoginInfo(responseJson["reason"]) setLoginInfo(responseJson["reason"])
} else { } else {
setLoginInfo("Successful register :)") setLoginInfo("Successful register!")
} }
}), }),
) )