-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 47a0a9b
Showing
25 changed files
with
2,353 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
name: release | ||
on: | ||
push: | ||
tags: | ||
- v*.*.* | ||
|
||
jobs: | ||
release: | ||
name: Build | ||
runs-on: ubuntu-latest | ||
steps: | ||
|
||
- name: Set up Go 1.18 | ||
uses: actions/setup-go@v1 | ||
with: | ||
go-version: 1.18 | ||
id: go | ||
|
||
- name: Check out code into the Go module directory | ||
uses: actions/checkout@master | ||
|
||
- name: Build | ||
env: | ||
GO111MODULE: on | ||
GOPATH: /home/runner/work/ | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
export TAGNAME=$(jq --raw-output .ref "$GITHUB_EVENT_PATH" | sed -e "s/refs\/tags\///") | ||
echo "=========================================================" | ||
echo "DEBUG:" $TAGNAME | ||
echo "=========================================================" | ||
make cross | ||
echo "=========================================================" | ||
echo "DEBUG: ls pkg/" | ||
ls pkg/ | ||
echo "=========================================================" | ||
echo "go get -u github.com/tcnksm/ghr" | ||
go install github.com/tcnksm/ghr@latest | ||
echo "=========================================================" | ||
echo "DEBUG: ls $GOPATH" | ||
ls $GOPATH | ||
echo "=========================================================" | ||
echo "DEBUG: ls $GOPATH/bin" | ||
ls $GOPATH/bin | ||
echo "=========================================================" | ||
echo "DEBUG: ls $GOPATHbin" | ||
ls $GOPATHbin | ||
echo "=========================================================" | ||
$GOPATH/bin/ghr -n ${TAGNAME} -b "ʕ◔ϖ◔ʔ Release ${TAGNAME}" -draft ${TAGNAME} pkg/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
name: test | ||
on: | ||
pull_request: | ||
branches: | ||
- master | ||
push: | ||
branches: | ||
- master | ||
|
||
jobs: | ||
test: | ||
name: Test | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Set up Go 1.18 | ||
uses: actions/setup-go@v1 | ||
with: | ||
go-version: 1.18 | ||
id: go | ||
|
||
- name: Check out code into the Go module directory | ||
uses: actions/checkout@master | ||
|
||
- name: Running go tests | ||
env: | ||
GO111MODULE: on | ||
run: make test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# IDE | ||
.idea | ||
*.iml | ||
|
||
# Binaries for programs and plugins | ||
*.exe | ||
*.exe~ | ||
*.dll | ||
*.so | ||
*.dylib | ||
/schnegge | ||
|
||
# Test binary, built with `go test -c` | ||
*.test | ||
|
||
# Output of the go coverage tool, specifically when used with LiteIDE | ||
*.out | ||
|
||
# build | ||
pkg | ||
|
||
# Dependency directories (remove the comment below to include it) | ||
# vendor/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
NAME := schnegge | ||
VERSION := $(shell git describe --tags --abbrev=0) | ||
REVISION := $(shell git rev-parse --short HEAD) | ||
LDFLAGS := -X 'main.version=$(VERSION)' \ | ||
-X 'main.revision=$(REVISION)' | ||
GOIMPORTS ?= goimports | ||
GOCILINT ?= golangci-lint | ||
GO ?= GO111MODULE=on go | ||
.DEFAULT_GOAL := help | ||
|
||
.PHONY: test | ||
test: ## Run the tests. | ||
@$(GO) test ./... | ||
|
||
.PHONY: build | ||
build: cmd/schnegge/main.go ## Build a binary. | ||
$(GO) build -ldflags "$(LDFLAGS)" -o ${NAME} cmd/schnegge/main.go | ||
|
||
.PHONY: cross | ||
cross: cmd/schnegge/main.go ## Build binaries for cross platform. | ||
mkdir -p pkg | ||
@# darwin | ||
@for arch in "amd64" "arm64"; do \ | ||
GOOS=darwin GOARCH=$${arch} make build; \ | ||
zip pkg/$(NAME)_$(VERSION)_darwin_$${arch}.zip $(NAME); \ | ||
done; | ||
@# linux | ||
@for arch in "amd64"; do \ | ||
GOOS=linux GOARCH=$${arch} make build; \ | ||
zip pkg/$(NAME)_$(VERSION)_linux_$${arch}.zip $(NAME); \ | ||
done; | ||
@# windows | ||
@for arch in "amd64"; do \ | ||
GOOS=windows GOARCH=$${arch} make build; \ | ||
zip pkg/$(NAME)_$(VERSION)_windows_$${arch}.zip $(NAME); \ | ||
done; | ||
|
||
|
||
.PHONY: help | ||
help: ## Show help text | ||
@echo "Commands:" | ||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,171 @@ | ||
# SCHNEGGE | ||
**SCHnell Noch Etwas Gutes Geld Erarbeiten** | ||
|
||
Schnegge ermöglicht es die wichtigsten Funktionen (Buchungen anlegen und anschauen) | ||
von Salat über ein CLI aufzurufen. | ||
|
||
Einerseits kann Schnegge direkt vom Terminal bedient werden, andererseits kann | ||
Schnegge aber auch ohne Kommando aufgerufen werden und verfügt dann über eine interaktive | ||
Shell die bei der Eingabe hilft. | ||
|
||
## Vorbereitung in Salat | ||
Damit Schnegge Salat für dich aufrufen kann musst du zuerst in Salat ein Token generiert werden: | ||
1. Im [Salat](https://salat.hbt.de) einloggen | ||
2. `Verwaltung`-> `Einstellungen` | ||
3. `Neuen Token Erzeugen` | ||
4. Einen Kommentar und eine Gültigkeitsdauer eingeben und `Speichern` anklicken | ||
5. Die TokenID und das TokenSecret muss jetzt schnegge bekannt gemacht werden. | ||
Diese werden dann unter `~/.schnegge` gespeichert: | ||
|
||
```schnegge set -tokenID #### -tokenSecret ####``` | ||
6. Testen mit `schnegge list` | ||
|
||
## Bedienung | ||
|
||
Wenn `schnegge` ohne Parameter aufgerufen wird startet es mit einer interaktiven Shell. | ||
Diese unterstützt den Nutzer bei der Eingabe. | ||
**Schnegge** kann aber auch bereits auf der Console direkt mir den Commands und | ||
zugehörigen Parametern aufgerufen werden. **Schnegge** unterstützt aktuell die | ||
Befehle set, list und add. | ||
|
||
Auch bei einem Aufruf ohne ein Command können bereits Parameter angegeben werden. | ||
Diese bilden dann für diesen Aufruf eine Art Default-Werte. Ein Beispiel wäre z.B. | ||
der Aufruf `schnegge -server http://localhost`. Hier werden dann alle weiteren Commands | ||
gegen diesen Server aufgerufen, auch wenn dieser nicht per set gesetzt wurde. | ||
|
||
### set | ||
Setzt konfigurative Werte in der Datei `~/.schnegge` | ||
|
||
Im Grunde können alle diese Parameter auch bei einem einzelnen Aufruf von *add* oder *list* | ||
angegeben werden - dies macht nur meistens wenig Sinn (Ausnahme *-auftrag* für das Command *add*). | ||
|
||
#### -tokenID | ||
Die TokenID aus Salat. | ||
|
||
#### -tokenSecret | ||
Das Secret des Tokens aus Salat. | ||
|
||
#### -auftrag | ||
Der Auftrag, der zukünftig von schnegge als Default-Auftrag angenommen wird. | ||
Hier reicht ein Substring, dieser muss nur eindeutig sein. | ||
|
||
Innerhalb der interaktiven Shell gibt es hier eine Unterstützung. | ||
|
||
#### -server | ||
Ein alternativer Server statt https://salat.hbt.de (für die Entwicklung). | ||
|
||
#### -noSplash | ||
(kein Parameter notwendig) | ||
|
||
Der Splashscreen wird nicht mehr angezeigt. | ||
|
||
### list | ||
Zeigt deine Buchungen an. | ||
|
||
#### -datum | ||
Für welches Datum / Zeitbereich sollen die Buchungen angezeigt werden, default ist "heute". | ||
Typische Werte sind: | ||
- heute (default value) | ||
- gestern | ||
- vorgestern | ||
- morgen | ||
- woche / vorwoche (die aktuelle Woche, die vorherige Woche) | ||
- monat (der aktuelle Monat) | ||
- Montag, Dienstag ... der entspreche Wochentag innerhalb der letzten 7 Tage | ||
- Januar, Februar ... der entsprechende Monat innerhalb der letzten 12 Monate | ||
- 25.06.2022 | ||
- 2006-01-02 | ||
- -2 (von vor 2 Tagen bis heute) | ||
|
||
#### -nachAuftrag | ||
(kein Parameter notwendig) | ||
|
||
Die Ausgabe erfolgt nicht nach Datum sortiert, sondern nach Aufträgen. | ||
|
||
### add | ||
Fügt eine Buchung in Salat hinzu. Es ist allerdings nur möglich eine Buchung | ||
für einen Tag anzulegen, Serienbuchen werden bisher nicht unterstützt. | ||
|
||
Alle Strings nach den Parametern werden als Kommentar für die Buchung angenommen. | ||
|
||
#### -datum | ||
Siehe `-datum` im Abschnitt `list`, allerdings wird hier der erste Tag innerhalb des Zeitraums für | ||
die Buchung genommen, wenn der Parameter mehrere Tage beschreibt. | ||
|
||
So wird z.B. eine Buchung `schnegge add -datum -2` für Vorgestern vorgenommen. | ||
|
||
#### -auftrag | ||
Der Auftrag/Subauftrag auf den Gebucht werden soll. | ||
Hier reicht ein Substring, dieser muss nur eindeutig sein. | ||
|
||
Innerhalb der interaktiven Shell gibt es hier eine Unterstützung. | ||
|
||
#### -stunden | ||
Die Anzahl Stunden, default ist 0. | ||
|
||
#### -minuten | ||
Die Anzahl Minuten, default ist 0. | ||
|
||
#### -fortbildung | ||
(kein Parameter notwendig) | ||
|
||
Gibt an, ob die Buchung Fortbildungscharakter hat (vergl. Haken in Salat) | ||
|
||
|
||
## Anwendungsbeispiele | ||
|
||
### Den aktuellen Tag anzeigen | ||
```schnegge list``` | ||
|
||
oder | ||
|
||
```schnegge list -datum heute``` | ||
|
||
### Die letzten 5 Tage anzeigen | ||
```schnegge list -datum -5``` | ||
|
||
### Den aktuellen Monat nach Projekten sortiert anzeigen | ||
```schnegger list -datum monat -nachAuftrag``` | ||
|
||
### Den default Auftrag setzen | ||
```schnegger set -auftrag HBT-Zeit``` | ||
|
||
### Auf HBT Zeit 2 Stunden 15 Minuten buchen | ||
```schnegge add -auftrag HBT-Zeit -stunden 2 -minuten 15 Ich bin der Kommentar``` | ||
|
||
### Auf Projekt_X 8 Stunden mit Fortbildungsanteil buchen | ||
```schnegge add -auftrag Projekt_X -stunden 8 -fortbildung Das war ein toller Workshop beim Kunden``` | ||
|
||
## ToDos | ||
- Retry einbauen, falls es wegen Überlast zu falschen Antworten kommt (z.B. bei `schnegge list -datum Monat`) | ||
- Tests schreiben | ||
|
||
## Feature Ideen in der Zukunft | ||
- Samstag/Sonntag und Feiertage einfärben | ||
- Salat Rest Schnittstelle für Feiertage bereitstellen | ||
|
||
- Buchung löschen | ||
- Salat Rest Schnittstelle bereitstellen | ||
- Workflow in schnegge bauen | ||
- z.B. | ||
|
||
```remove -datum heute -auftrag HBT-Zeit -buchung "Ich bin der Kommentar dazu" ``` | ||
- monatliche Freigabe ermöglichen | ||
- Salat Rest Schnittstelle bereitstellen | ||
- Workflow in schnegge bauen | ||
- z.B. erst den aktuellen Monat darstellen und dann muss noch mal explizit bestätigt werden | ||
|
||
``` | ||
> approv | ||
Aktuell freigegeben bis 31.12.2014 | ||
> approv -datum Monat | ||
... | ||
Möchtest du bis zum 31.06.2022 freigeben (ja/nein) | ||
> nein | ||
> approv -datum Monat -nachAuftrag | ||
... | ||
Möchtest du bis zum 31.06.2022 freigeben (ja/nein) | ||
> ja | ||
Aktuell freigegeben bis 31.06.2022 | ||
> ... | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
"schnegge/internal/base" | ||
"schnegge/internal/cli" | ||
"schnegge/internal/client" | ||
"schnegge/internal/command" | ||
"schnegge/internal/config" | ||
) | ||
|
||
func main() { | ||
configCfg, err := config.ReadConfig() | ||
if err != nil { | ||
base.Log.Panic(err) | ||
} | ||
parameterCfg := config.NewHierarchyConfig(configCfg) | ||
cmd := command.ParseCommandLine(parameterCfg, os.Args) | ||
if b, _ := parameterCfg.GetValue(config.NoSplash); b != "true" { | ||
cli.PrintSplashScreen() | ||
} | ||
checkVerbose(parameterCfg) | ||
if cmd == "" { | ||
for { | ||
cmd, inputCfg := cli.Input(parameterCfg) | ||
checkVerbose(inputCfg) | ||
config.ReadConfig() | ||
excecuteCommand(inputCfg, cmd) | ||
} | ||
} | ||
excecuteCommand(parameterCfg, cmd) | ||
} | ||
|
||
func excecuteCommand(cfg config.Config, cmd string) { | ||
switch cmd { | ||
case "set": | ||
if err := config.WriteConfigFile(cfg); err != nil { | ||
fmt.Println("Fehler beim Schreiben der Konfiguration", err) | ||
} | ||
case "add": | ||
order, _ := cfg.GetValue(config.Order) | ||
record := client.NewDailyReportData(cfg, cli.GetEmployeeId(cfg, order)) | ||
base.Log.Println("DailyReportData:", record) | ||
client.Record(cfg, record) | ||
case "list": | ||
cli.PrintOvertime(client.ReadOvertime(cfg)) | ||
sortByProject, _ := cfg.GetValue(config.SortByProject) | ||
if sortByProject == "true" { | ||
cli.PrintByProject(client.ReadDailyReports(cfg)) | ||
} else { | ||
cli.PrintDailyReports(client.ReadDailyReports(cfg)) | ||
} | ||
case "exit": | ||
os.Exit(0) | ||
default: | ||
fmt.Println("Unknown command:", cmd) | ||
} | ||
} | ||
|
||
func checkVerbose(cfg config.Config) { | ||
if verbose, _ := cfg.GetValue(config.Verbose); verbose == "true" { | ||
command.PrintVerboseCommand(cfg) | ||
config.PrintVerboseConfig() | ||
base.EnableLogs() | ||
} else { | ||
base.DisableLogs() | ||
} | ||
} |
Oops, something went wrong.