Skip to content

Commit

Permalink
🐰 Split app to multiple binaries
Browse files Browse the repository at this point in the history
  • Loading branch information
bullshitsoftware committed Jul 10, 2022
1 parent 4ef7b7f commit 0a0a5f4
Show file tree
Hide file tree
Showing 11 changed files with 202 additions and 284 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
youtimetrack
bin
coverage.*
30 changes: 20 additions & 10 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
project_name: youtimetrack
builds:
- id: youtimetrack
binary: ytt
goos:
- linux
- darwin
- windows
goarch:
- amd64
- arm
- arm64
- id: yttadd
binary: yttadd
main: ./cmd/yttadd
goos: [linux, darwin, windows]
goarch: [amd64, arm, arm64]
- id: yttconf
binary: yttconf
main: ./cmd/yttconf
goos: [linux, darwin, windows]
goarch: [amd64, arm, arm64]
- id: yttdet
binary: yttdet
main: ./cmd/yttdet
goos: [linux, darwin, windows]
goarch: [amd64, arm, arm64]
- id: yttsum
binary: yttsum
main: ./cmd/yttsum
goos: [linux, darwin, windows]
goarch: [amd64, arm, arm64]
7 changes: 7 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,10 @@ cover:
.PHONY: test
test:
go test -v -cover ./...

.PHONY: build
build:
go build -o bin/yttadd cmd/yttadd/main.go
go build -o bin/yttconf cmd/yttconf/main.go
go build -o bin/yttdet cmd/yttdet/main.go
go build -o bin/yttsum cmd/yttsum/main.go
36 changes: 36 additions & 0 deletions cmd/yttadd/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"errors"
"os"
"strings"

"github.com/bullshitsoftware/youtimetrack/internal/app"
yt "github.com/bullshitsoftware/youtimetrack/internal/pkg/youtrack"
)

func main() {
if len(os.Args) != 4 {
app.ExitOnError(errors.New("invalid arguments number"))
}

a := app.Default()
err := a.ReadConfig()
app.ExitOnError(err)
typeName := strings.ToLower(os.Args[0])
types, err := a.Youtrack.WorkItemTypes()
app.ExitOnError(err)
var t yt.Type
for _, i := range types {
s := strings.ToLower(i.Name)
if strings.HasPrefix(s, typeName) {
t = i
break
}
}
issue := os.Args[1]
duration := os.Args[2]
text := os.Args[3]

a.Youtrack.Add(t, issue, duration, text)
}
14 changes: 14 additions & 0 deletions cmd/yttconf/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package main

import (
"fmt"

"github.com/bullshitsoftware/youtimetrack/internal/app"
)

func main() {
a := app.Default()
p, err := a.SaveConfig()
app.ExitOnError(err)
fmt.Println("Created", p, "edit it with your favorite text editor")
}
40 changes: 40 additions & 0 deletions cmd/yttdet/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package main

import (
"flag"
"fmt"
"os"
"strings"
"time"

"github.com/bullshitsoftware/youtimetrack/internal/app"
)

func main() {
a := app.Default()
err := a.ReadConfig()
app.ExitOnError(err)

now := time.Now()
period := a.Calendar.Period(now)
fs := flag.NewFlagSet("details", flag.ExitOnError)
fs.Func("start", "start date (2006-01-02)", period.ParseStart)
fs.Func("end", "end date (2006-01-02)", period.ParseEnd)
fs.Parse(os.Args)

items, err := a.Youtrack.WorkItems(period.Start, period.End)
app.ExitOnError(err)
for _, i := range items {
date := time.Unix(i.Date/1000, 0)
fmt.Printf(
"%s\t%s\t%s\t%s\n",
date.Format("2006-01-02"),
app.FormatMinutes(i.Duration.Minutes),
i.Issue.IdReadable,
i.Issue.Summary,
)
for _, s := range strings.Split(i.Text, "\n") {
fmt.Printf("\t\t\t%s\n", s)
}
}
}
47 changes: 47 additions & 0 deletions cmd/yttsum/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package main

import (
"flag"
"fmt"
"os"
"time"

"github.com/bullshitsoftware/youtimetrack/internal/app"
)

func main() {
a := app.Default()
err := a.ReadConfig()
app.ExitOnError(err)

now := time.Now()
period := a.Calendar.Period(now)
fs := flag.NewFlagSet("summary", flag.ExitOnError)
fs.Func("start", "start date (2006-01-02)", period.ParseStart)
fs.Func("end", "end date (2006-01-02)", period.ParseEnd)
fs.Parse(os.Args)

month := a.Calendar.Calc(period.Start, period.End)
items, err := a.Youtrack.WorkItems(period.Start, period.End)
app.ExitOnError(err)
worked := 0
for _, i := range items {
worked += i.Duration.Minutes
}

if now.Before(period.Start) || now.After(period.End) {
fmt.Printf("%s / %s (worked / month)\n",
app.FormatMinutes(worked),
app.FormatMinutes(month),
)

return
}

today := a.Calendar.Calc(period.Start, now)
fmt.Printf("%s / %s / %s (worked / today / month)\n",
app.FormatMinutes(worked),
app.FormatMinutes(today),
app.FormatMinutes(month),
)
}
113 changes: 0 additions & 113 deletions command.go

This file was deleted.

45 changes: 37 additions & 8 deletions internal/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package app

import (
"encoding/json"
"fmt"
"os"
"path"
"time"
Expand All @@ -12,6 +13,12 @@ import (

const config = "config.json"

var home string

func init() {
home = path.Join(os.Getenv("HOME"), ".config", "ytt")
}

type App struct {
Youtrack yt.Client `json:"youtrack"`
Calendar cal.Calendar `json:"calendar"`
Expand All @@ -35,38 +42,60 @@ func Default() *App {
}
}

func (a *App) SaveConfig(home string) string {
func (a *App) SaveConfig() (string, error) {
err := os.MkdirAll(home, 0700)
if err != nil {
panic(err)
return "", err
}

p := path.Join(home, config)
f, err := os.Create(p)
if err != nil {
panic(err)
return "", err
}
defer f.Close()

enc := json.NewEncoder(f)
enc.SetIndent("", " ")
err = enc.Encode(a)
if err != nil {
panic(err)
return "", err
}

return p
return p, nil
}

func (a *App) ReadConfig(home string) {
func (a *App) ReadConfig() error {
f, err := os.Open(path.Join(home, config))
if err != nil {
panic(err)
return err
}
defer f.Close()

err = json.NewDecoder(f).Decode(a)
if err != nil {
panic(err)
return err
}

return nil
}

func ExitOnError(err error) {
if err != nil {
printError(err)
os.Exit(1)
}
}

func printError(err error) {
fmt.Println("Error:", err)
}

func FormatMinutes(m int) string {
s := fmt.Sprintf("%dh", m/60)
if m%60 > 0 {
s += fmt.Sprintf("%dm", m%60)
}

return s
}
Loading

0 comments on commit 0a0a5f4

Please sign in to comment.