From e9c03ceb97f1a9686780760886be011cf37f12c7 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Sun, 7 Feb 2016 00:03:14 +0800 Subject: [PATCH 01/15] Add about page, new home page --- handlers/about.go | 12 ++ templates/about.html | 82 ++++++++ templates/home.html | 458 ++++++++++++++++++++----------------------- 3 files changed, 311 insertions(+), 241 deletions(-) create mode 100644 handlers/about.go create mode 100644 templates/about.html diff --git a/handlers/about.go b/handlers/about.go new file mode 100644 index 0000000..5460ad7 --- /dev/null +++ b/handlers/about.go @@ -0,0 +1,12 @@ +package handlers + +import ( + "log" + "net/http" +) + +// AboutHandler handles the about page +func AboutHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Serving about page") + http.ServeFile(w, r, "templates/about.html") +} diff --git a/templates/about.html b/templates/about.html new file mode 100644 index 0000000..4ae3935 --- /dev/null +++ b/templates/about.html @@ -0,0 +1,82 @@ + + + + + + + Go Report Card | Go project code quality report cards + + + + + +
+
+ + + + + + + + + + + +
+ + High Scores + + + Source + + + About + +
+
+
+
+
+

About

+

Go Report Card was initially developed during Gopher Gala 2015. It is free, open source and run by volunteers. If you feel like there is something that could be improved, we encourage you to open an issue or contribute on Github!

+
+

Credits

+

The Go gopher on the home page was designed by Renée French.

+
+
+ + + diff --git a/templates/home.html b/templates/home.html index ad2239d..d4e0f9e 100644 --- a/templates/home.html +++ b/templates/home.html @@ -4,266 +4,258 @@ - Go Report Card | A Gopher Gala Hackathon Product - - + Go Report Card | Go project code quality report cards +
-
-
-
-
-

Go Report Card

-

Enter the Github URL below to generate a report on the quality of the Go code in the project

-
-
-
-
-
-
-

- -

-
-
- -
-
-
-
-
-
+
-
-
- -
-
-
+
+
+
+

+ Enter the go get path to the project below: +

+
+
+

+ +

+
+
+ +
+
+
- -
+ + + + + From 5e2bc9d0ddc17991661f280cc77c0975e5e295ba Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Sun, 7 Feb 2016 00:03:43 +0800 Subject: [PATCH 02/15] Add new gopher --- assets/biggopher.png | Bin 0 -> 77189 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/biggopher.png diff --git a/assets/biggopher.png b/assets/biggopher.png new file mode 100644 index 0000000000000000000000000000000000000000..35df82e502d76846bc44f0706f9a9e3d75add799 GIT binary patch literal 77189 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 WMZBaTW$q04BPk~PDCdFh>;D1A6rQsH literal 0 HcmV?d00001 From 468f6f76763f311ca806aafeb8ea452a4605286f Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Sun, 7 Feb 2016 00:08:01 +0800 Subject: [PATCH 03/15] Fix github link names --- main.go | 1 + templates/about.html | 2 +- templates/home.html | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 2d0e4e3..cfaf992 100644 --- a/main.go +++ b/main.go @@ -68,6 +68,7 @@ func main() { http.HandleFunc("/report/", makeHandler("report", handlers.ReportHandler)) http.HandleFunc("/badge/", makeHandler("badge", handlers.BadgeHandler)) http.HandleFunc("/high_scores/", handlers.HighScoresHandler) + http.HandleFunc("/about/", handlers.AboutHandler) http.HandleFunc("/", handlers.HomeHandler) fmt.Println("Running on 127.0.0.1:8080...") diff --git a/templates/about.html b/templates/about.html index 4ae3935..8c6b492 100644 --- a/templates/about.html +++ b/templates/about.html @@ -45,7 +45,7 @@ High Scores - Source + Github About diff --git a/templates/home.html b/templates/home.html index d4e0f9e..4e07426 100644 --- a/templates/home.html +++ b/templates/home.html @@ -146,7 +146,7 @@ High Scores - Source + Github About From 6d7c696a4406ed93008b6553d209414b6dd21a8c Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Sun, 7 Feb 2016 00:14:52 +0800 Subject: [PATCH 04/15] Update high scores page and change text on home page --- templates/high_scores.html | 141 ++++++++++++++++++++----------------- templates/home.html | 4 +- 2 files changed, 77 insertions(+), 68 deletions(-) diff --git a/templates/high_scores.html b/templates/high_scores.html index fcf8530..59c2aed 100644 --- a/templates/high_scores.html +++ b/templates/high_scores.html @@ -4,9 +4,8 @@ - Go Report Card | A Gopher Gala Hackathon Product - - + Go Report Card | Go project code quality report cards + -
-

High Scores

-

Back

- - - - - - - - - - - {{ range $index, $highScore := .HighScores }} - - - - - - - {{end}} - -
RankNameGo FilesScore
{{ add $index 1 }}{{ $highScore.Repo }}{{ $highScore.Files }}{{ formatScore $highScore.Score }}
-

Stats

-
    -
  • Reports generated for {{ .Count }} repos.

  • -
-
- - - - + diff --git a/templates/home.html b/templates/home.html index 4e07426..ed2e7e7 100644 --- a/templates/home.html +++ b/templates/home.html @@ -158,12 +158,12 @@

- Enter the go get path to the project below: + Enter the github path to the project below:

- +

From 8b1d3a056647fd319a4e09697c19970c4e764591 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Sun, 7 Feb 2016 00:29:43 +0800 Subject: [PATCH 05/15] Git clone -> go get --- handlers/checks.go | 36 ++++++++++++++++++++++-------------- templates/home.html | 4 ++-- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/handlers/checks.go b/handlers/checks.go index 2f6c14b..9049c3b 100644 --- a/handlers/checks.go +++ b/handlers/checks.go @@ -7,6 +7,7 @@ import ( "log" "os" "os/exec" + "path/filepath" "strings" "time" @@ -86,12 +87,19 @@ func clone(url string) error { if err := os.Mkdir(fmt.Sprintf("repos/src/github.com/%s", org), 0755); err != nil && !os.IsExist(err) { return fmt.Errorf("could not create dir: %v", err) } + d, err := filepath.Abs("repos") + if err != nil { + return fmt.Errorf("could not fetch absolute path: %v", err) + } + os.Setenv("GOPATH", d) dir := dirName(url) - _, err := os.Stat(dir) + _, err = os.Stat(dir) if os.IsNotExist(err) { - cmd := exec.Command("git", "clone", "--depth", "1", "--single-branch", url, dir) + cmd := exec.Command("go", "get", "-u", url) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { - return fmt.Errorf("could not run git clone: %v", err) + return fmt.Errorf("could not run go get: %v", err) } return nil @@ -100,23 +108,23 @@ func clone(url string) error { return fmt.Errorf("could not stat dir: %v", err) } - cmd := exec.Command("git", "-C", dir, "fetch", "origin", "master") - if err := cmd.Run(); err != nil { - return fmt.Errorf("could not fetch master branch: %v", err) - } - cmd = exec.Command("git", "-C", dir, "reset", "--hard", "origin/master") - if err = cmd.Run(); err != nil { - return fmt.Errorf("could not reset origin/master: %v", err) - } + // cmd := exec.Command("git", "-C", dir, "fetch", "origin", "master") + // if err := cmd.Run(); err != nil { + // return fmt.Errorf("could not fetch master branch: %v", err) + // } + // cmd = exec.Command("git", "-C", dir, "reset", "--hard", "origin/master") + // if err = cmd.Run(); err != nil { + // return fmt.Errorf("could not reset origin/master: %v", err) + // } return nil } func newChecksResp(repo string, forceRefresh bool) (checksResp, error) { url := repo - if !strings.HasPrefix(url, "https://gojp:gojp@github.com/") { - url = "https://gojp:gojp@github.com/" + url - } + // if !strings.HasPrefix(url, "https://gojp:gojp@github.com/") { + // url = "https://gojp:gojp@github.com/" + url + // } if !forceRefresh { resp, err := getFromCache(repo) diff --git a/templates/home.html b/templates/home.html index ed2e7e7..f789ea7 100644 --- a/templates/home.html +++ b/templates/home.html @@ -158,12 +158,12 @@

- Enter the github path to the project below: + Enter the go get path to the project below:

- +

From ae8cb838a82f937ebb7345d02cdd4f1a506a2079 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Sun, 7 Feb 2016 00:41:44 +0800 Subject: [PATCH 06/15] go get --- handlers/checks.go | 6 +++--- templates/home.html | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/handlers/checks.go b/handlers/checks.go index 9049c3b..7d2f290 100644 --- a/handlers/checks.go +++ b/handlers/checks.go @@ -122,9 +122,9 @@ func clone(url string) error { func newChecksResp(repo string, forceRefresh bool) (checksResp, error) { url := repo - // if !strings.HasPrefix(url, "https://gojp:gojp@github.com/") { - // url = "https://gojp:gojp@github.com/" + url - // } + if strings.Count(repo, ".") == 0 { + url = "github.com/" + url + } if !forceRefresh { resp, err := getFromCache(repo) diff --git a/templates/home.html b/templates/home.html index f789ea7..e8c4a6b 100644 --- a/templates/home.html +++ b/templates/home.html @@ -354,8 +354,8 @@ url = $form.attr("action"), method = $form.attr("method"), data = {}; - shrinkHeader(); hideResults(); + $("#check_form .button").addClass("is-loading"); $form.serializeArray().map(function(x){data[x.name] = x.value;}); $.ajax({ type: getRequest ? "GET" : "POST", @@ -365,7 +365,9 @@ }).fail(function(xhr, status, err){; alertMessage("There was an error processing your request: " + xhr.responseText); }).done(function(data, textStatus, jqXHR){ + shrinkHeader(); populateResults(data); + $("#check_form .button").removeClass("is-loading"); }).always(function(){ loading = false; }); @@ -374,7 +376,7 @@ }; var hideResults = function(){ - // $(".container-results").hide(); + $(".container-results").hide(); }; // on ready From 2149fb04073ddcdbf7076ab99ec1ad09afc2a02a Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Sun, 7 Feb 2016 02:00:27 +0800 Subject: [PATCH 07/15] fix number of go get-related bugs --- handlers/badge.go | 4 ++-- handlers/check.go | 12 ++++++++++- handlers/checks.go | 50 +++++++++++---------------------------------- handlers/report.go | 2 +- main.go | 12 +++-------- templates/home.html | 6 +++--- 6 files changed, 32 insertions(+), 54 deletions(-) diff --git a/handlers/badge.go b/handlers/badge.go index be332c0..338e000 100644 --- a/handlers/badge.go +++ b/handlers/badge.go @@ -57,8 +57,8 @@ func badgeURL(grade Grade) string { } // BadgeHandler handles fetching the badge images -func BadgeHandler(w http.ResponseWriter, r *http.Request, org, repo string) { - name := fmt.Sprintf("%s/%s", org, repo) +func BadgeHandler(w http.ResponseWriter, r *http.Request, repo string) { + name := fmt.Sprintf("%s", repo) resp, err := newChecksResp(name, false) if err != nil { log.Printf("ERROR: fetching badge for %s: %v", name, err) diff --git a/handlers/check.go b/handlers/check.go index 71a85b0..09d528a 100644 --- a/handlers/check.go +++ b/handlers/check.go @@ -30,6 +30,16 @@ func CheckHandler(w http.ResponseWriter, r *http.Request) { repo := r.FormValue("repo") log.Printf("Checking repo %s...", repo) + + // repoRoot, err := vcs.RepoRootForImportPath(repo, true) + // if err != nil { + // log.Println("ERROR:", err) + // http.Error(w, err.Error(), 404) + // return + // } + // repo = repoRoot.Root + // log.Println("RepoRootForImportPath:", repo) + if strings.ToLower(repo) == "golang/go" { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("We've decided to omit results for the Go repository because it has lots of test files that (purposely) don't pass our checks. Go gets an A+ in our books though!")) @@ -38,7 +48,7 @@ func CheckHandler(w http.ResponseWriter, r *http.Request) { forceRefresh := r.Method != "GET" // if this is a GET request, try to fetch from cached version in boltdb first resp, err := newChecksResp(repo, forceRefresh) if err != nil { - log.Println("ERROR: ", err) + log.Println("ERROR: from newChecksResp: ", err) b, _ := json.Marshal(err) w.WriteHeader(http.StatusInternalServerError) w.Write(b) diff --git a/handlers/checks.go b/handlers/checks.go index 7d2f290..9e9ca57 100644 --- a/handlers/checks.go +++ b/handlers/checks.go @@ -8,13 +8,16 @@ import ( "os" "os/exec" "path/filepath" - "strings" "time" "github.com/boltdb/bolt" "github.com/gojp/goreportcard/check" ) +func dirName(repo string) string { + return fmt.Sprintf("repos/src/%s", repo) +} + func getFromCache(repo string) (checksResp, error) { // try and fetch from boltdb db, err := bolt.Open(DBPath, 0600, &bolt.Options{Timeout: 1 * time.Second}) @@ -67,24 +70,11 @@ type checksResp struct { LastRefresh time.Time `json:"last_refresh"` } -func orgRepoNames(url string) (string, string) { - dir := strings.TrimSuffix(url, ".git") - split := strings.Split(dir, "/") - org := split[len(split)-2] - repoName := split[len(split)-1] - - return org, repoName -} - -func dirName(url string) string { - org, repoName := orgRepoNames(url) - - return fmt.Sprintf("repos/src/github.com/%s/%s", org, repoName) -} - -func clone(url string) error { - org, _ := orgRepoNames(url) - if err := os.Mkdir(fmt.Sprintf("repos/src/github.com/%s", org), 0755); err != nil && !os.IsExist(err) { +func goGet(repo string) error { + log.Println("Go getting", repo, "...") + dir := dirName(repo) + log.Println("dirName is", dir) + if err := os.Mkdir("repos", 0755); err != nil && !os.IsExist(err) { return fmt.Errorf("could not create dir: %v", err) } d, err := filepath.Abs("repos") @@ -92,40 +82,24 @@ func clone(url string) error { return fmt.Errorf("could not fetch absolute path: %v", err) } os.Setenv("GOPATH", d) - dir := dirName(url) _, err = os.Stat(dir) if os.IsNotExist(err) { - cmd := exec.Command("go", "get", "-u", url) + cmd := exec.Command("go", "get", "-d", repo) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("could not run go get: %v", err) } - return nil } if err != nil { return fmt.Errorf("could not stat dir: %v", err) } - // cmd := exec.Command("git", "-C", dir, "fetch", "origin", "master") - // if err := cmd.Run(); err != nil { - // return fmt.Errorf("could not fetch master branch: %v", err) - // } - // cmd = exec.Command("git", "-C", dir, "reset", "--hard", "origin/master") - // if err = cmd.Run(); err != nil { - // return fmt.Errorf("could not reset origin/master: %v", err) - // } - return nil } func newChecksResp(repo string, forceRefresh bool) (checksResp, error) { - url := repo - if strings.Count(repo, ".") == 0 { - url = "github.com/" + url - } - if !forceRefresh { resp, err := getFromCache(repo) if err != nil { @@ -138,12 +112,12 @@ func newChecksResp(repo string, forceRefresh bool) (checksResp, error) { } // fetch the repo and grade it - err := clone(url) + err := goGet(repo) if err != nil { return checksResp{}, fmt.Errorf("could not clone repo: %v", err) } - dir := dirName(url) + dir := dirName(repo) filenames, err := check.GoFiles(dir) if err != nil { return checksResp{}, fmt.Errorf("could not get filenames: %v", err) diff --git a/handlers/report.go b/handlers/report.go index 19b043c..7fe2fd6 100644 --- a/handlers/report.go +++ b/handlers/report.go @@ -3,6 +3,6 @@ package handlers import "net/http" // ReportHandler handles the report page -func ReportHandler(w http.ResponseWriter, r *http.Request, org, repo string) { +func ReportHandler(w http.ResponseWriter, r *http.Request, repo string) { http.ServeFile(w, r, "templates/home.html") } diff --git a/main.go b/main.go index cfaf992..8037eea 100644 --- a/main.go +++ b/main.go @@ -12,9 +12,9 @@ import ( "github.com/gojp/goreportcard/handlers" ) -func makeHandler(name string, fn func(http.ResponseWriter, *http.Request, string, string)) http.HandlerFunc { +func makeHandler(name string, fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - validPath := regexp.MustCompile(fmt.Sprintf(`^/%s/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_.]+)$`, name)) + validPath := regexp.MustCompile(fmt.Sprintf(`^/%s/([a-zA-Z0-9\-_\/\.]+)$`, name)) m := validPath.FindStringSubmatch(r.URL.Path) @@ -23,13 +23,7 @@ func makeHandler(name string, fn func(http.ResponseWriter, *http.Request, string return } - // catch the special period cases that github does not allow for repos - if m[2] == "." || m[2] == ".." { - http.NotFound(w, r) - return - } - - fn(w, r, m[1], m[2]) + fn(w, r, m[1]) } } diff --git a/templates/home.html b/templates/home.html index e8c4a6b..be9f515 100644 --- a/templates/home.html +++ b/templates/home.html @@ -211,7 +211,7 @@