From 6d37bbb956e2b06a33a5d9c9c85a3aaeac667ba3 Mon Sep 17 00:00:00 2001 From: Shawn Smith Date: Fri, 30 Jan 2015 00:35:43 +0900 Subject: [PATCH] initial commit --- .gitignore | 27 +++ LICENSE | 201 ++++++++++++++++++++ README.md | 9 + assets/gopherhat.jpg | Bin 0 -> 129627 bytes check/check.go | 9 + check/go_vet.go | 20 ++ check/gocyclo.go | 25 +++ check/gofmt.go | 20 ++ check/golint.go | 20 ++ check/utils.go | 192 +++++++++++++++++++ main.go | 242 +++++++++++++++++++++++ templates/home.html | 442 +++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 1207 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/gopherhat.jpg create mode 100644 check/check.go create mode 100644 check/go_vet.go create mode 100644 check/gocyclo.go create mode 100644 check/gofmt.go create mode 100644 check/golint.go create mode 100644 check/utils.go create mode 100644 main.go create mode 100644 templates/home.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c27405f --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof + +*.swp +repos diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5c304d1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..171e50b --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Go Report Card + +A web application that generates a report on the quality of an open source go project. It uses several measures, including `gofmt`, `go vet`, `go lint` and `gocyclo`. + +#### Live demo: [http://goreportcard.com](http://goreportcard.com) + +Or here's the result for this repo: [http://goreportcard.com/report/gophergala/go_report](http://goreportcard.com/report/gophergala/go_report) + +![Screenshot of Go Report Card in action](https://cloud.githubusercontent.com/assets/1121616/5891942/a2a38b8e-a4f1-11e4-82e3-29b25137f09b.png) diff --git a/assets/gopherhat.jpg b/assets/gopherhat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f34d7b3258b4e17df7b2110ce0669d4a534a7238 GIT binary patch literal 129627 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�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 vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string.` +} diff --git a/check/gocyclo.go b/check/gocyclo.go new file mode 100644 index 0000000..04bc5de --- /dev/null +++ b/check/gocyclo.go @@ -0,0 +1,25 @@ +package check + +type GoCyclo struct { + Dir string + Filenames []string +} + +func (g GoCyclo) Name() string { + return "gocyclo" +} + +// Percentage returns the percentage of .go files that pass gofmt +func (g GoCyclo) Percentage() (float64, []FileSummary, error) { + return GoTool(g.Dir, g.Filenames, []string{"gocyclo", "-over", "10"}) +} + +// Description returns the description of GoCyclo +func (g GoCyclo) Description() string { + return `Gocyclo calculates cyclomatic complexities of functions in Go source code. + +The cyclomatic complexity of a function is calculated according to the following rules: + +1 is the base complexity of a function ++1 for each 'if', 'for', 'case', '&&' or '||'` +} diff --git a/check/gofmt.go b/check/gofmt.go new file mode 100644 index 0000000..78fd079 --- /dev/null +++ b/check/gofmt.go @@ -0,0 +1,20 @@ +package check + +type GoFmt struct { + Dir string + Filenames []string +} + +func (g GoFmt) Name() string { + return "gofmt" +} + +// Percentage returns the percentage of .go files that pass gofmt +func (g GoFmt) Percentage() (float64, []FileSummary, error) { + return GoTool(g.Dir, g.Filenames, []string{"gofmt", "-s", "-l"}) +} + +// Description returns the description of gofmt +func (g GoFmt) Description() string { + return `Gofmt formats Go programs. We run gofmt -s on your code, where -s is for the "simplify" command` +} diff --git a/check/golint.go b/check/golint.go new file mode 100644 index 0000000..4b9d70c --- /dev/null +++ b/check/golint.go @@ -0,0 +1,20 @@ +package check + +type GoLint struct { + Dir string + Filenames []string +} + +func (g GoLint) Name() string { + return "golint" +} + +// Percentage returns the percentage of .go files that pass golint +func (g GoLint) Percentage() (float64, []FileSummary, error) { + return GoTool(g.Dir, g.Filenames, []string{"golint"}) +} + +// Description returns the description of go lint +func (g GoLint) Description() string { + return `Golint is a linter for Go source code.` +} diff --git a/check/utils.go b/check/utils.go new file mode 100644 index 0000000..7b4e1ce --- /dev/null +++ b/check/utils.go @@ -0,0 +1,192 @@ +package check + +import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "reflect" + "strconv" + "strings" + "syscall" +) + +// GoFiles returns a slice of Go filenames +// in a given directory. +func GoFiles(dir string) ([]string, error) { + var filenames []string + visit := func(fp string, fi os.FileInfo, err error) error { + if strings.Contains(fp, "Godeps") { + return nil + } + if err != nil { + fmt.Println(err) // can't walk here, + return nil // but continue walking elsewhere + } + if fi.IsDir() { + return nil // not a file. ignore. + } + ext := filepath.Ext(fi.Name()) + if ext == ".go" { + filenames = append(filenames, fp) + } + return nil + } + + err := filepath.Walk(dir, visit) + + return filenames, err +} + +// lineCount returns the number of lines in a given file +func lineCount(filepath string) (int, error) { + out, err := exec.Command("wc", "-l", filepath).Output() + if err != nil { + return 0, err + } + // wc output is like: 999 filename.go + count, err := strconv.Atoi(strings.Split(strings.TrimSpace(string(out)), " ")[0]) + if err != nil { + return 0, err + } + + return count, nil +} + +type Error struct { + LineNumber int `json:"line_number"` + ErrorString string `json:"error_string"` +} + +type FileSummary struct { + Filename string `json:"filename"` + FileURL string `json:"file_url"` + Errors []Error `json:"errors"` +} + +// ByFilename implements sort.Interface for []Person based on +// the Age field. +type ByFilename []FileSummary + +func (a ByFilename) Len() int { return len(a) } +func (a ByFilename) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a ByFilename) Less(i, j int) bool { return a[i].Filename < a[j].Filename } + +func getFileSummary(filename, dir, cmd, out string) (FileSummary, error) { + filename = strings.TrimPrefix(filename, "repos/src") + githubLink := strings.TrimPrefix(dir, "repos/src") + fileURL := "https://" + strings.TrimPrefix(dir, "repos/src/") + "/blob/master" + strings.TrimPrefix(filename, githubLink) + fs := FileSummary{ + Filename: filename, + FileURL: fileURL, + } + split := strings.Split(string(out), "\n") + for _, sp := range split[0 : len(split)-1] { + parts := strings.Split(sp, ":") + msg := sp + if cmd != "gocyclo" { + msg = parts[len(parts)-1] + } + e := Error{ErrorString: msg} + switch cmd { + case "golint", "gocyclo", "vet": + ln, err := strconv.Atoi(strings.Split(sp, ":")[1]) + if err != nil { + return fs, err + } + e.LineNumber = ln + } + + fs.Errors = append(fs.Errors, e) + } + + return fs, nil +} + +// GoTool runs a given go command (for example gofmt, go tool vet) +// on a directory +func GoTool(dir string, filenames, command []string) (float64, []FileSummary, error) { + var failed = []FileSummary{} + for _, fi := range filenames { + params := command[1:] + params = append(params, fi) + + cmd := exec.Command(command[0], params...) + stdout, err := cmd.StdoutPipe() + if err != nil { + return 0, []FileSummary{}, nil + } + + stderr, err := cmd.StderrPipe() + if err != nil { + return 0, []FileSummary{}, nil + } + + err = cmd.Start() + if err != nil { + return 0, []FileSummary{}, nil + } + + out, err := ioutil.ReadAll(stdout) + if err != nil { + return 0, []FileSummary{}, nil + } + + errout, err := ioutil.ReadAll(stderr) + if err != nil { + return 0, []FileSummary{}, nil + } + + if string(out) != "" { + fs, err := getFileSummary(fi, dir, command[0], string(out)) + if err != nil { + return 0, []FileSummary{}, nil + } + failed = append(failed, fs) + } + + // go vet logs to stderr + if string(errout) != "" { + cmd := command[0] + if reflect.DeepEqual(command, []string{"go", "tool", "vet"}) { + cmd = "vet" + } + fs, err := getFileSummary(fi, dir, cmd, string(errout)) + if err != nil { + return 0, []FileSummary{}, nil + } + failed = append(failed, fs) + } + + err = cmd.Wait() + if exitErr, ok := err.(*exec.ExitError); ok { + // The program has exited with an exit code != 0 + + if status, ok := exitErr.Sys().(syscall.WaitStatus); ok { + // some commands exit 1 when files fail to pass (for example go vet) + if status.ExitStatus() != 1 { + return 0, failed, err + // return 0, Error{}, err + } + } + } + + } + + if len(filenames) == 1 { + lc, err := lineCount(filenames[0]) + if err != nil { + return 0, failed, err + } + + var errors int + if len(failed) != 0 { + errors = len(failed[0].Errors) + } + + return float64(lc-errors) / float64(lc), failed, nil + } + + return float64(len(filenames)-len(failed)) / float64(len(filenames)), failed, nil +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..d7c0daa --- /dev/null +++ b/main.go @@ -0,0 +1,242 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + "os" + "os/exec" + "regexp" + "strings" + "time" + + "github.com/gophergala/go_report/check" + "gopkg.in/mgo.v2" + "labix.org/v2/mgo/bson" +) + +var ( + mongoURL = "mongodb://localhost:27017" + mongoDatabase = "goreportcard" + mongoCollection = "reports" +) + +func getMongoCollection() (*mgo.Collection, error) { + session, err := mgo.Dial(mongoURL) + if err != nil { + return nil, err + } + c := session.DB(mongoDatabase).C(mongoCollection) + return c, nil +} + +func homeHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Serving home page") + if r.URL.Path[1:] == "" { + http.ServeFile(w, r, "templates/home.html") + } else { + http.NotFound(w, r) + } +} + +func assetsHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Serving " + r.URL.Path[1:]) + http.ServeFile(w, r, r.URL.Path[1:]) +} + +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) { + return fmt.Errorf("could not create dir: %v", err) + } + dir := dirName(url) + _, err := os.Stat(dir) + if os.IsNotExist(err) { + cmd := exec.Command("git", "clone", "--depth", "1", "--single-branch", url, dir) + if err := cmd.Run(); err != nil { + return fmt.Errorf("could not run git clone: %v", err) + } + } else if err != nil { + return fmt.Errorf("could not stat dir: %v", err) + } else { + cmd := exec.Command("git", "-C", dir, "pull") + if err := cmd.Run(); err != nil { + return fmt.Errorf("could not pull repo: %v", err) + } + } + + return nil +} + +type score struct { + Name string `json:"name"` + Description string `json:"description"` + FileSummaries []check.FileSummary `json:"file_summaries"` + Percentage float64 `json:"percentage"` +} + +type checksResp struct { + Checks []score `json:"checks"` + Average float64 `json:"average"` + Files int `json:"files"` + Issues int `json:"issues"` + Repo string `json:"repo"` + LastRefresh time.Time `json:"last_refresh"` +} + +func checkHandler(w http.ResponseWriter, r *http.Request) { + repo := r.FormValue("repo") + url := repo + if !strings.HasPrefix(url, "https://github.com/") { + url = "https://github.com/" + url + } + + w.Header().Set("Content-Type", "application/json") + + // if this is a GET request, fetch from cached version in mongo + if r.Method == "GET" { + // try and fetch from mongo + coll, err := getMongoCollection() + if err != nil { + log.Println("Failed to get mongo collection during GET: ", err) + } else { + resp := checksResp{} + err := coll.Find(bson.M{"repo": repo}).One(&resp) + if err != nil { + log.Println("Failed to fetch from mongo: ", err) + } else { + resp.LastRefresh = resp.LastRefresh.UTC() + b, err := json.Marshal(resp) + if err != nil { + log.Println("ERROR: could not marshal json:", err) + http.Error(w, err.Error(), 500) + return + } + w.Write(b) + log.Println("Loaded from cache!", repo) + return + } + } + } + + err := clone(url) + if err != nil { + log.Println("ERROR: could not clone repo: ", err) + http.Error(w, fmt.Sprintf("Could not clone repo: %v", err), 500) + return + } + + dir := dirName(url) + filenames, err := check.GoFiles(dir) + if err != nil { + log.Println("ERROR: could not get filenames: ", err) + http.Error(w, fmt.Sprintf("Could not get filenames: %v", err), 500) + return + } + checks := []check.Check{check.GoFmt{Dir: dir, Filenames: filenames}, + check.GoVet{Dir: dir, Filenames: filenames}, + check.GoLint{Dir: dir, Filenames: filenames}, + check.GoCyclo{Dir: dir, Filenames: filenames}, + } + + ch := make(chan score) + for _, c := range checks { + go func(c check.Check) { + p, summaries, err := c.Percentage() + if err != nil { + log.Printf("ERROR: (%s) %v", c.Name(), err) + } + s := score{ + Name: c.Name(), + Description: c.Description(), + FileSummaries: summaries, + Percentage: p, + } + ch <- s + }(c) + } + + resp := checksResp{Repo: repo, + Files: len(filenames), + LastRefresh: time.Now().UTC()} + var avg float64 + var issues = make(map[string]bool) + for i := 0; i < len(checks); i++ { + s := <-ch + resp.Checks = append(resp.Checks, s) + avg += s.Percentage + for _, fs := range s.FileSummaries { + issues[fs.Filename] = true + } + } + + resp.Average = avg / float64(len(checks)) + resp.Issues = len(issues) + + b, err := json.Marshal(resp) + if err != nil { + log.Println("ERROR: could not marshal json:", err) + http.Error(w, err.Error(), 500) + return + } + w.Write(b) + + // write to mongo + coll, err := getMongoCollection() + if err != nil { + log.Println("Failed to get mongo collection: ", err) + } else { + log.Println("Writing to mongo...") + _, err := coll.Upsert(bson.M{"Repo": repo}, resp) + if err != nil { + log.Println("Mongo writing error:", err) + } + } +} + +func reportHandler(w http.ResponseWriter, r *http.Request, org, repo string) { + http.ServeFile(w, r, "templates/home.html") +} + +func makeReportHandler(fn func(http.ResponseWriter, *http.Request, string, string)) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + validPath := regexp.MustCompile(`^/report/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)$`) + + m := validPath.FindStringSubmatch(r.URL.Path) + if m == nil { + http.NotFound(w, r) + return + } + fn(w, r, m[1], m[2]) + } +} + +func main() { + if err := os.MkdirAll("repos/src/github.com", 0755); err != nil && !os.IsExist(err) { + log.Fatal("ERROR: could not create repos dir: ", err) + } + + http.HandleFunc("/assets/", assetsHandler) + http.HandleFunc("/checks", checkHandler) + http.HandleFunc("/report/", makeReportHandler(reportHandler)) + http.HandleFunc("/", homeHandler) + + fmt.Println("Running on 127.0.01:8080...") + log.Fatal(http.ListenAndServe("127.0.0.1:8080", nil)) +} diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 0000000..b2374a6 --- /dev/null +++ b/templates/home.html @@ -0,0 +1,442 @@ + + + + + + + Go Report Card | A Gopher Gala Hackathon Product + + + + + + +
+
+
+
+
+
+

Go Report Card

+

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

+
+
+
+
+
+
+

+ +

+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+ +
+ + + + + + + + + + +