57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
func uploadGo(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != "POST" {
|
|
return
|
|
}
|
|
w.Header().Set("Content-Type", "application/json")
|
|
|
|
err := r.ParseForm()
|
|
if err != nil {
|
|
http.Error(w, `{"success": false, "message": "Request parameters not parsed"}`, 500)
|
|
return
|
|
}
|
|
err = r.ParseMultipartForm(5 << 20)
|
|
if err != nil {
|
|
http.Error(w, `{"success": false, "message": "Request parameters too large"}`, 500)
|
|
return
|
|
}
|
|
|
|
name := r.Form.Get("project-name")
|
|
tag := r.Form.Get("tag")
|
|
id := r.Form.Get("id")
|
|
|
|
if name == "" || tag == "" || id == "" {
|
|
http.Error(w, `{"success": false, "message": "Request parameters [secret, name, tag, id] not found"}`, 400)
|
|
return
|
|
}
|
|
file, _, err := r.FormFile("file")
|
|
if err != nil {
|
|
http.Error(w, `{"success": false, "message": "Request parameter file not found"}`, 400)
|
|
return
|
|
}
|
|
b, _ := ioutil.ReadAll(file)
|
|
coverage := parseCoverage(string(b))
|
|
|
|
db.Exec("INSERT INTO badge (commit_hash, percentage) VALUES (?, ?)", id, coverage)
|
|
|
|
_, err = db.Query("SELECT commit_hash FROM alias WHERE project_name=? AND project_tag=?", name, tag)
|
|
|
|
if err == nil {
|
|
db.Exec("UPDATE ALIAS SET commit_hash=? WHERE project_name=? AND project_tag=?", id, name, tag)
|
|
} else if err == sql.ErrNoRows {
|
|
db.Exec("INSERT INTO alias (commit_hash, project_name, project_tag VALUES (?, ?, ?)", id, name, tag)
|
|
} else {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Fprintf(w, `{"success": "true", "coverage": %s%%}`, toOneDecimal(coverage*100))
|
|
}
|