Skip to content
This repository has been archived by the owner on Jun 16, 2023. It is now read-only.

Commit

Permalink
Merge pull request #3 from caarlos0/improvements
Browse files Browse the repository at this point in the history
Improvements
  • Loading branch information
caarlos0 committed Apr 17, 2017
2 parents 011c53b + d2b42c7 commit b928ba9
Show file tree
Hide file tree
Showing 13 changed files with 201 additions and 125 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1 +1,2 @@
vendor/
coverage.out
9 changes: 3 additions & 6 deletions .travis.yml
@@ -1,10 +1,7 @@
language: go
go: 1.8
install:
- go get github.com/Masterminds/glide
- glide install
script: go test -cover `glide nv`
after_success:
test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash
install: make setup
script: make ci
after_success: test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash
notifications:
email: false
67 changes: 67 additions & 0 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions Gopkg.toml
@@ -0,0 +1,16 @@

[[dependencies]]
branch = "master"
name = "github.com/caarlos0/spin"

[[dependencies]]
branch = "master"
name = "github.com/google/go-github"

[[dependencies]]
branch = "master"
name = "github.com/urfave/cli"

[[dependencies]]
branch = "master"
name = "golang.org/x/oauth2"
44 changes: 44 additions & 0 deletions Makefile
@@ -0,0 +1,44 @@
SOURCE_FILES?=$$(go list ./... | grep -v /vendor/)
TEST_PATTERN?=.
TEST_OPTIONS?=

setup: ## Install all the build and lint dependencies
go get -u github.com/alecthomas/gometalinter
go get -u github.com/golang/dep/...
go get -u github.com/pierrre/gotestcover
go get -u golang.org/x/tools/cmd/cover
dep ensure
gometalinter --install

test: ## Run all the tests
gotestcover $(TEST_OPTIONS) -covermode=count -coverprofile=coverage.out $(SOURCE_FILES) -run $(TEST_PATTERN) -timeout=30s

fmt: ## gofmt and goimports all go files
find . -name '*.go' -not -wholename './vendor/*' | while read -r file; do gofmt -w -s "$$file"; goimports -w "$$file"; done

lint: ## Run all the linters
gometalinter --vendor --disable-all \
--enable=deadcode \
--enable=ineffassign \
--enable=gosimple \
--enable=staticcheck \
--enable=gofmt \
--enable=goimports \
--enable=dupl \
--enable=misspell \
--enable=errcheck \
--enable=vet \
--enable=vetshadow \
--deadline=10m \
./...

ci: lint test ## Run all the tests and code checks

build: ## Build
go build -o karmahub ./cmd/main/main.go

# Absolutely awesome: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

.DEFAULT_GOAL := build
13 changes: 11 additions & 2 deletions README.md
@@ -1,4 +1,13 @@
# karmahub [![Build Status](https://travis-ci.org/caarlos0/karmahub.svg?branch=master)](https://travis-ci.org/caarlos0/karmahub) [![Powered By: GoReleaser](https://img.shields.io/badge/powered%20by-goreleaser-green.svg?style=flat-square)](https://github.com/goreleaser) [![SayThanks.io](https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg?style=flat-square)](https://saythanks.io/to/caarlos0)
# karmahub

[![Release](https://img.shields.io/github/release/caarlos0/karmahub.svg?style=flat-square)](https://github.com/caarlos0/karmahub/releases/latest)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
[![Travis](https://img.shields.io/travis/caarlos0/karmahub.svg?style=flat-square)](https://travis-ci.org/caarlos0/karmahub)
<!-- [![Coverage Status](https://img.shields.io/coveralls/caarlos0/karmahub/master.svg?style=flat-square)](https://coveralls.io/github/caarlos0/karmahub?branch=master) -->
[![Go Report Card](https://goreportcard.com/badge/github.com/caarlos0/karmahub?style=flat-square)](https://goreportcard.com/report/github.com/caarlos0/karmahub)
[![Godoc](https://godoc.org/github.com/caarlos0/karmahub?status.svg&style=flat-square)](http://godoc.org/github.com/caarlos0/karmahub)
[![SayThanks.io](https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg?style=flat-square)](https://saythanks.io/to/caarlos0)
[![Powered By: GoReleaser](https://img.shields.io/badge/powered%20by-goreleaser-green.svg?style=flat-square)](https://github.com/goreleaser)

Compares the amount of issues and pull requests you created with the amount
of comments and code reviews you did.
Expand All @@ -11,7 +20,7 @@ For example, at the company I work, the "rule of thumb" is

I can check my progress like this:

[![asciicast](https://asciinema.org/a/96142.png)](https://asciinema.org/a/96142)
[![asciicast](https://asciinema.org/a/113762.png)](https://asciinema.org/a/113762)

So, in this scenario, its clear that I'm not following the rule.

Expand Down
59 changes: 31 additions & 28 deletions main.go → cmd/main/main.go
@@ -1,13 +1,12 @@
package main

import (
"context"
"fmt"
"os"
"strconv"
"strings"
"time"

"github.com/caarlos0/karmahub/internal/karma"
"github.com/caarlos0/karmahub/internal/search"
"github.com/caarlos0/karmahub"
"github.com/caarlos0/spin"
"github.com/google/go-github/github"
"github.com/urfave/cli"
Expand Down Expand Up @@ -38,52 +37,56 @@ func main() {
},
}
app.Action = func(c *cli.Context) error {
token := c.String("token")
var token = c.String("token")
var user = c.String("user")
var filter = c.String("filter")
if token == "" {
return cli.NewExitError("Missing GitHub Token", 1)
return cli.NewExitError("missing github token", 1)
}
spin := spin.New("%s Gathering data...")
var spin = spin.New("%s Gathering data...")
spin.Start()
user := c.String("user")
filter := c.String("filter")
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: token},
)
tc := oauth2.NewClient(oauth2.NoContext, ts)
client := github.NewClient(tc)
fn := search.Github(client)

var ctx = context.Background()
var client = github.NewClient(oauth2.NewClient(
ctx,
oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token}),
))
var fn = karmahub.GitHubSearch(ctx, client)
if user == "" {
guser, _, err := client.Users.Get("")
guser, _, err := client.Users.Get(ctx, "")
if err != nil {
spin.Stop()
return cli.NewExitError(err.Error(), 1)
}
user = *guser.Login
}
prs, err := karma.Authors(fn, user, filter)
prs, err := karmahub.Authors(fn, user, filter)
if err != nil {
spin.Stop()
return cli.NewExitError(err.Error(), 1)
}
crs, err := karma.Reviews(fn, user, filter)
crs, err := karmahub.Reviews(fn, user, filter)
if err != nil {
spin.Stop()
return cli.NewExitError(err.Error(), 1)
}
spin.Stop()

fmt.Println("\033[1mAction \t1m\t2m\t3m\033[0m")
fmt.Println("Authored\t" + intsToStr(prs))
fmt.Println("Reviewed\t" + intsToStr(crs))
fmt.Printf(
"\033[1;36mAction \t%v\t%v\t%v\033[0m\n",
month(0),
month(-1),
month(-2),
)
fmt.Printf("Authored \t%v\t%v\t%v\n", prs[0], prs[1], prs[2])
fmt.Printf("Reviewed \t%v\t%v\t%v\n", crs[0], crs[1], crs[2])
return nil
}
app.Run(os.Args)
if err := app.Run(os.Args); err != nil {
panic(err)
}
}

func intsToStr(arr []int) string {
var strs []string
for _, n := range arr {
strs = append(strs, strconv.Itoa(n))
}
return strings.Join(strs, "\t")
func month(i int) string {
return time.Now().AddDate(0, i, 0).UTC().Format("Jan")
}
50 changes: 0 additions & 50 deletions glide.lock

This file was deleted.

15 changes: 0 additions & 15 deletions glide.yaml

This file was deleted.

8 changes: 7 additions & 1 deletion goreleaser.yml
@@ -1,3 +1,9 @@
build:
main: ./cmd/main/main.go
goarch:
- amd64
brew:
repo: caarlos0/homebrew-tap
github:
owner: caarlos0
name: homebrew-tap
folder: Formula
18 changes: 8 additions & 10 deletions internal/karma/karma.go → karma.go
@@ -1,21 +1,19 @@
package karma
package karmahub

import (
"time"

"github.com/caarlos0/karmahub/internal/search"
)

// MONTHS of data gathered
const MONTHS = 3

// Authors in each of the last MONTHS
func Authors(search search.Fn, login, filter string) (result []int, err error) {
func Authors(search SearchFn, login, filter string) (result []int, err error) {
return totals(search, filter+" author:"+login)
}

// Reviews in each of the last MONTHS
func Reviews(search search.Fn, login, filter string) (result []int, err error) {
func Reviews(search SearchFn, login, filter string) (result []int, err error) {
mine, err := totals(search, filter+" commenter:"+login+" author:"+login)
if err != nil {
return result, err
Expand All @@ -30,19 +28,19 @@ func Reviews(search search.Fn, login, filter string) (result []int, err error) {
return result, err
}

func totals(search search.Fn, query string) (result []int, err error) {
func totals(search SearchFn, query string) (result []int, err error) {
var counts []int
for i := 1; i <= MONTHS; i++ {
d := time.Now().AddDate(0, i*-1, 0).Format("2006-01-02")
count, err := search(query + " created:>" + d)
if err != nil {
return result, err
count, serr := search(query + " created:>" + d)
if serr != nil {
return result, serr
}
counts = append(counts, count)
}
result = append(result, counts[0])
for i := 1; i <= MONTHS-1; i++ {
result = append(result, counts[i]-counts[i-1])
}
return result, err
return
}

0 comments on commit b928ba9

Please sign in to comment.