From dd6bc5c9b80e5aaa1a269d047141c1462df176a7 Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Mon, 25 Mar 2024 20:18:50 +0100 Subject: [PATCH 01/56] Refactor project structure and provide first ui test --- .github/workflows/debian.yml | 43 +- .github/workflows/go.yml | 18 +- .gitignore | 2 +- cmd/cli/go.mod | 3 + internal/cli/cli.go => cmd/cli/main.go | 18 +- .../cli/cli_test.go => cmd/cli/main_test.go | 6 +- cmd/main.go | 33 - cmd/main_test.go | 62 -- cmd/ui/go.mod | 35 + cmd/ui/go.sum | 665 ++++++++++++++++++ cmd/ui/main.go | 69 ++ go.mod | 3 - go.sum | 0 go.work | 7 + go.work.sum | 1 + logic/go.mod | 3 + {internal/logic => logic}/logic.go | 0 {internal/logic => logic}/logic_test.go | 0 records.csv | 1 + status | 2 + systemd/timetracker.service | 2 +- 21 files changed, 855 insertions(+), 118 deletions(-) create mode 100644 cmd/cli/go.mod rename internal/cli/cli.go => cmd/cli/main.go (58%) rename internal/cli/cli_test.go => cmd/cli/main_test.go (96%) delete mode 100644 cmd/main.go delete mode 100644 cmd/main_test.go create mode 100644 cmd/ui/go.mod create mode 100644 cmd/ui/go.sum create mode 100644 cmd/ui/main.go delete mode 100644 go.mod delete mode 100644 go.sum create mode 100644 go.work create mode 100644 go.work.sum create mode 100644 logic/go.mod rename {internal/logic => logic}/logic.go (100%) rename {internal/logic => logic}/logic_test.go (100%) create mode 100644 records.csv create mode 100644 status diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index 704f950..91f4f4a 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -9,15 +9,15 @@ on: - 'v*' jobs: - Create_Packages: - name: Create Package + Create_Cli_Package: + name: Create Cli Package runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Build - run: go build -o timetracker cmd/main.go + run: go build -o timetracker-cli ronnyfriedland/timetracker/v2/cli - name: Copy necessary files run: | @@ -25,14 +25,45 @@ jobs: mkdir -p PKG_SOURCE/var/lib/timetracker mkdir -p PKG_SOURCE/lib/systemd/system cp -Rf ./DEBIAN PKG_SOURCE/ - cp -Rf ./timetracker PKG_SOURCE/usr/local/bin/ + cp -Rf ./timetracker-cli PKG_SOURCE/usr/local/bin/ cp -Rf ./systemd/* PKG_SOURCE/lib/systemd/system/ - name: Create Deb package run: | - dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb + dpkg-deb --build PKG_SOURCE timetracker-cli_${{github.ref_name}}.deb - name: Release the Deb package uses: softprops/action-gh-release@v1 with: - files: timetracker_${{github.ref_name}}.deb \ No newline at end of file + files: timetracker-cli_${{github.ref_name}}.deb + Create_Ui_Package: + name: Create Ui Package + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Build UI + run: go build -o build/timetracker-ui ronnyfriedland/timetracker/v2/ui + + - name: Build CLI + run: go build -o build/timetracker-cli ronnyfriedland/timetracker/v2/cli + + - name: Copy necessary files + run: | + mkdir -p PKG_SOURCE/usr/local/bin + mkdir -p PKG_SOURCE/var/lib/timetracker + mkdir -p PKG_SOURCE/lib/systemd/system + cp -Rf ./DEBIAN PKG_SOURCE/ + cp -Rf ./build/timetracker-ui PKG_SOURCE/usr/local/bin/ + cp -Rf ./build/timetracker-cli PKG_SOURCE/usr/local/bin/ + cp -Rf ./systemd/* PKG_SOURCE/lib/systemd/system/ + + - name: Create Deb package + run: | + dpkg-deb --build PKG_SOURCE timetracker-ui_${{github.ref_name}}.deb + + - name: Release the Deb package + uses: softprops/action-gh-release@v1 + with: + files: timetracker-ui_${{github.ref_name}}.deb \ No newline at end of file diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index eab49d2..c2b3e9a 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -21,8 +21,18 @@ jobs: with: go-version: '1.18' - - name: Build - run: go build -v ./... + - name: Test UI + run: go test -cover -v go test ronnyfriedland/timetracker/v2/ui + + - name: Test CLI + run: go test -cover -v go test ronnyfriedland/timetracker/v2/cli + + - name: Test Logic + run: go test -cover -v go test ronnyfriedland/timetracker/v2/logic + + - name: Build UI + run: go build -o build/timetracker-ui ronnyfriedland/timetracker/v2/ui + + - name: Build CLI + run: go build -o build/timetracker-cli ronnyfriedland/timetracker/v2/cli - - name: Test - run: go test -cover -v ./... diff --git a/.gitignore b/.gitignore index 3a7e3f3..4afcf19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .idea -status +build \ No newline at end of file diff --git a/cmd/cli/go.mod b/cmd/cli/go.mod new file mode 100644 index 0000000..ba34885 --- /dev/null +++ b/cmd/cli/go.mod @@ -0,0 +1,3 @@ +module ronnyfriedland/timetracker/v2/cli + +go 1.18 diff --git a/internal/cli/cli.go b/cmd/cli/main.go similarity index 58% rename from internal/cli/cli.go rename to cmd/cli/main.go index 0229763..a4e1ce5 100644 --- a/internal/cli/cli.go +++ b/cmd/cli/main.go @@ -1,15 +1,23 @@ -package cli +package main import ( + "flag" "log" - "ronnyfriedland/timetracker/v2/internal/logic" + "ronnyfriedland/timetracker/v2/logic" ) const dateLayout = "02.01.2006" const timeLayout = "15:04:05" -func Run(configPath *string) { - duration := logic.Execute(configPath) +func main() { + configPath := flag.String("configpath", "/var/lib/timetracker", "the config path") + flag.Parse() + + execute(configPath) +} + +func execute(directory *string) { + duration := logic.Execute(directory) if duration.Complete { log.Printf("[%s] - Work duration: %2.2fh", duration.Date.Format(dateLayout), @@ -19,6 +27,6 @@ func Run(configPath *string) { duration.Date.Format(dateLayout), duration.StartTime.Format(timeLayout), duration.EndTime.Format(timeLayout)) - } + } diff --git a/internal/cli/cli_test.go b/cmd/cli/main_test.go similarity index 96% rename from internal/cli/cli_test.go rename to cmd/cli/main_test.go index 9067166..8561d60 100644 --- a/internal/cli/cli_test.go +++ b/cmd/cli/main_test.go @@ -1,4 +1,4 @@ -package cli +package main import ( "bytes" @@ -17,7 +17,7 @@ func TestRunNotComplete(t *testing.T) { directory, _ := createStatusFile() - Run(&directory) + execute(&directory) if logContent.String() != "" { log.Fatalf("Expected empty logmessage") @@ -34,7 +34,7 @@ func TestRunComplete(t *testing.T) { setModificationDate(fileName, "28.02.2022") - Run(&directory) + execute(&directory) if logContent.String() == "" { log.Fatalf("Expected logmessage") diff --git a/cmd/main.go b/cmd/main.go deleted file mode 100644 index 9bb302a..0000000 --- a/cmd/main.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "flag" - "os" - "ronnyfriedland/timetracker/v2/internal/cli" -) - -func main() { - mode, configPath := parseArguments() - if mode == "" { - os.Exit(0) - } else if mode == "cli" { - cli.Run(&configPath) - os.Exit(0) - } else { - os.Exit(1) - } -} - -func parseArguments() (string, string) { - mode := flag.String("mode", "cli", "the application mode, available: cli") - configPath := flag.String("configpath", "/var/lib/timetracker", "the config path") - help := flag.Bool("help", false, "print this help message") - flag.Parse() - - if *help { - flag.PrintDefaults() - return "", "" - } else { - return *mode, *configPath - } -} diff --git a/cmd/main_test.go b/cmd/main_test.go deleted file mode 100644 index b909b74..0000000 --- a/cmd/main_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "flag" - "log" - "os" - "testing" -) - -func TestParameter(t *testing.T) { - oldArgs := os.Args - defer func() { os.Args = oldArgs }() - - params := []string{"-configpath", "/foo", "-mode", "testmode"} - - flag.CommandLine = flag.NewFlagSet("test", flag.ContinueOnError) - os.Args = append([]string{"params"}, params...) - - mode, configPath := parseArguments() - if mode != "testmode" { - log.Fatalf("Got unexpected mode result, got %s, expected %s", "testmode", mode) - } - if configPath != "/foo" { - log.Fatalf("Got unexpected config path result, got %s, expected %s", "/foo", configPath) - } -} - -func TestParameterDefaults(t *testing.T) { - oldArgs := os.Args - defer func() { os.Args = oldArgs }() - - params := []string{} - - flag.CommandLine = flag.NewFlagSet("test", flag.ContinueOnError) - os.Args = append([]string{"defaults"}, params...) - - mode, configPath := parseArguments() - if mode != "cli" { - log.Fatalf("Got unexpected mode result, got %s, expected %s", "cli", mode) - } - if configPath != "/var/lib/timetracker" { - log.Fatalf("Got unexpected config path result, got %s, expected %s", "/var/lib/timetracker", configPath) - } -} - -func TestParameterHelp(t *testing.T) { - oldArgs := os.Args - defer func() { os.Args = oldArgs }() - - params := []string{"-help"} - - flag.CommandLine = flag.NewFlagSet("test", flag.ContinueOnError) - os.Args = append([]string{"help"}, params...) - - mode, configPath := parseArguments() - if mode != "" { - log.Fatalf("Got unexpected mode result, got %s, expected %s", "", mode) - } - if configPath != "" { - log.Fatalf("Got unexpected config path result, got %s, expected %s", "", configPath) - } -} diff --git a/cmd/ui/go.mod b/cmd/ui/go.mod new file mode 100644 index 0000000..24973ca --- /dev/null +++ b/cmd/ui/go.mod @@ -0,0 +1,35 @@ +module ronnyfriedland/timetracker/v2/ui + +go 1.18 + +require fyne.io/fyne/v2 v2.4.4 + +require ( + fyne.io/systray v1.10.1-0.20231115130155-104f5ef7839e // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fredbi/uri v1.0.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe // indirect + github.com/fyne-io/glfw-js v0.0.0-20220120001248-ee7290d23504 // indirect + github.com/fyne-io/image v0.0.0-20220602074514-4956b0afb3d2 // indirect + github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect + github.com/go-text/render v0.0.0-20230619120952-35bccb6164b8 // indirect + github.com/go-text/typesetting v0.1.0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/gopherjs/gopherjs v1.17.2 // indirect + github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect + github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect + github.com/stretchr/testify v1.8.4 // indirect + github.com/tevino/abool v1.2.0 // indirect + github.com/yuin/goldmark v1.5.5 // indirect + golang.org/x/image v0.11.0 // indirect + golang.org/x/mobile v0.0.0-20230531173138-3c911d8e3eda // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2 // indirect +) diff --git a/cmd/ui/go.sum b/cmd/ui/go.sum new file mode 100644 index 0000000..5752f70 --- /dev/null +++ b/cmd/ui/go.sum @@ -0,0 +1,665 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +fyne.io/fyne/v2 v2.4.4 h1:4efSRpoikcGbqQN83yzC9WmF8UNq9olsaJQ/Ejme6Z8= +fyne.io/fyne/v2 v2.4.4/go.mod h1:VyrxAOZ3NRZRWBvNIJbfqoKOG4DdbewoPk7ozqJKNPY= +fyne.io/systray v1.10.1-0.20231115130155-104f5ef7839e h1:Hvs+kW2VwCzNToF3FmnIAzmivNgrclwPgoUdVSrjkP8= +fyne.io/systray v1.10.1-0.20231115130155-104f5ef7839e/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fredbi/uri v1.0.0 h1:s4QwUAZ8fz+mbTsukND+4V5f+mJ/wjaTokwstGUAemg= +github.com/fredbi/uri v1.0.0/go.mod h1:1xC40RnIOGCaQzswaOvrzvG/3M3F0hyDVb3aO/1iGy0= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe h1:A/wiwvQ0CAjPkuJytaD+SsXkPU0asQ+guQEIg1BJGX4= +github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe/go.mod h1:d4clgH0/GrRwWjRzJJQXxT/h1TyuNSfF/X64zb/3Ggg= +github.com/fyne-io/glfw-js v0.0.0-20220120001248-ee7290d23504 h1:+31CdF/okdokeFNoy9L/2PccG3JFidQT3ev64/r4pYU= +github.com/fyne-io/glfw-js v0.0.0-20220120001248-ee7290d23504/go.mod h1:gLRWYfYnMA9TONeppRSikMdXlHQ97xVsPojddUv3b/E= +github.com/fyne-io/image v0.0.0-20220602074514-4956b0afb3d2 h1:hnLq+55b7Zh7/2IRzWCpiTcAvjv/P8ERF+N7+xXbZhk= +github.com/fyne-io/image v0.0.0-20220602074514-4956b0afb3d2/go.mod h1:eO7W361vmlPOrykIg+Rsh1SZ3tQBaOsfzZhsIOb/Lm0= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 h1:zDw5v7qm4yH7N8C8uWd+8Ii9rROdgWxQuGoJ9WDXxfk= +github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211213063430-748e38ca8aec/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b h1:GgabKamyOYguHqHjSkDACcgoPIz3w0Dis/zJ1wyHHHU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-text/render v0.0.0-20230619120952-35bccb6164b8 h1:VkKnvzbvHqgEfm351rfr8Uclu5fnwq8HP2ximUzJsBM= +github.com/go-text/render v0.0.0-20230619120952-35bccb6164b8/go.mod h1:h29xCucjNsDcYb7+0rJokxVwYAq+9kQ19WiFuBKkYtc= +github.com/go-text/typesetting v0.1.0 h1:vioSaLPYcHwPEPLT7gsjCGDCoYSbljxoHJzMnKwVvHw= +github.com/go-text/typesetting v0.1.0/go.mod h1:d22AnmeKq/on0HNv73UFriMKc4Ez6EqZAofLhAzpSzI= +github.com/go-text/typesetting-utils v0.0.0-20231211103740-d9332ae51f04 h1:zBx+p/W2aQYtNuyZNcTfinWvXBQwYtDfme051PR/lAY= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20211219123610-ec9572f70e60/go.mod h1:cz9oNYuRUWGdHmLF2IodMLkAhcPtXeULvcBNagUrxTI= +github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= +github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= +github.com/goxjs/gl v0.0.0-20210104184919-e3fafc6f8f2a/go.mod h1:dy/f2gjY09hwVfIyATps4G2ai7/hLwLkc5TrPqONuXY= +github.com/goxjs/glfw v0.0.0-20191126052801-d2efb5f20838/go.mod h1:oS8P8gVOT4ywTcjV6wZlOU4GuVFQ8F5328KY3MJ79CY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e h1:LvL4XsI70QxOGHed6yhQtAU34Kx3Qq2wwBzGFKY8zKk= +github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e/go.mod h1:kLgvv7o6UM+0QSf0QjAse3wReFDsb9qbZJdfexWlrQw= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c h1:km8GpoQut05eY3GiYWEedbTT0qnSxrCjsVbb7yKY1KE= +github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c/go.mod h1:cNQ3dwVJtS5Hmnjxy6AgTPd0Inb3pW05ftPSX7NZO7Q= +github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ= +github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tevino/abool v1.2.0 h1:heAkClL8H6w+mK5md9dzsuohKeXHUpY7Vw0ZCKW+huA= +github.com/tevino/abool v1.2.0/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.5.5 h1:IJznPe8wOzfIKETmMkd06F8nXkmlhaHqFRM9l1hAGsU= +github.com/yuin/goldmark v1.5.5/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.11.0 h1:ds2RoQvBvYTiJkwpSFDwCcDFNX7DqjL2WsUgTNk0Ooo= +golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mobile v0.0.0-20211207041440-4e6c2922fdee/go.mod h1:pe2sM7Uk+2Su1y7u/6Z8KJ24D7lepUjFZbhFOrmDfuQ= +golang.org/x/mobile v0.0.0-20230531173138-3c911d8e3eda h1:O+EUvnBNPwI4eLthn8W5K+cS8zQZfgTABPLNm6Bna34= +golang.org/x/mobile v0.0.0-20230531173138-3c911d8e3eda/go.mod h1:aAjjkJNdrh3PMckS4B10TGS2nag27cbKR1y2BpUxsiY= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2 h1:oomkgU6VaQDsV6qZby2uz1Lap0eXmku8+2em3A/l700= +honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/cmd/ui/main.go b/cmd/ui/main.go new file mode 100644 index 0000000..6d05087 --- /dev/null +++ b/cmd/ui/main.go @@ -0,0 +1,69 @@ +package main + +import ( + "encoding/csv" + "flag" + "log" + "os" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/app" + "fyne.io/fyne/v2/widget" + + "ronnyfriedland/timetracker/v2/logic" +) + +func main() { + configPath := flag.String("configpath", "/var/lib/timetracker", "the config path") + flag.Parse() + + duration := logic.Execute(configPath) + if duration.Complete { + + persistStatus(duration) + + } + + a := app.New() + w := a.NewWindow("Timetracker") + + list := widget.NewList( + func() int { + return 3 + }, + func() fyne.CanvasObject { + return widget.NewLabel("template") + }, + func(i widget.ListItemID, o fyne.CanvasObject) { + if i == 0 { + o.(*widget.Label).SetText(duration.StartTime.GoString()) + } + if i == 1 { + o.(*widget.Label).SetText(duration.EndTime.GoString()) + } + if i == 2 { + o.(*widget.Label).SetText(duration.Duration.String()) + } + }) + + w.SetContent(list) + + w.ShowAndRun() +} + + +func persistStatus(duration logic.Duration) { + file, err := os.Create("records.csv") + defer file.Close() + + if err != nil { + log.Fatalln("failed to open file", err) + } + w := csv.NewWriter(file) + defer w.Flush() + + row := []string{duration.Date.Format("02.01.2006"), duration.StartTime.Format("02.01.2006"), duration.EndTime.Format("02.01.2006"), duration.Duration.String()} + if err := w.Write(row); err != nil { + log.Fatalln("error writing record to file", err) + } +} diff --git a/go.mod b/go.mod deleted file mode 100644 index 11b91b5..0000000 --- a/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module ronnyfriedland/timetracker/v2 - -go 1.18 diff --git a/go.sum b/go.sum deleted file mode 100644 index e69de29..0000000 diff --git a/go.work b/go.work new file mode 100644 index 0000000..e83f744 --- /dev/null +++ b/go.work @@ -0,0 +1,7 @@ +go 1.18 + +use ( + ./cmd/cli + ./cmd/ui + ./logic +) diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 0000000..806de33 --- /dev/null +++ b/go.work.sum @@ -0,0 +1 @@ +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= diff --git a/logic/go.mod b/logic/go.mod new file mode 100644 index 0000000..ce5a38c --- /dev/null +++ b/logic/go.mod @@ -0,0 +1,3 @@ +module ronnyfriedland/timetracker/v2/logic + +go 1.18 diff --git a/internal/logic/logic.go b/logic/logic.go similarity index 100% rename from internal/logic/logic.go rename to logic/logic.go diff --git a/internal/logic/logic_test.go b/logic/logic_test.go similarity index 100% rename from internal/logic/logic_test.go rename to logic/logic_test.go diff --git a/records.csv b/records.csv new file mode 100644 index 0000000..cb3a2e8 --- /dev/null +++ b/records.csv @@ -0,0 +1 @@ +01.02.2024,04.03.2024,04.03.2024,12h39m30s diff --git a/status b/status new file mode 100644 index 0000000..a9d37df --- /dev/null +++ b/status @@ -0,0 +1,2 @@ +2024-03-25T20:15:48+01:00 +2024-03-25T20:16:09+01:00 diff --git a/systemd/timetracker.service b/systemd/timetracker.service index 3160253..33cfb6a 100644 --- a/systemd/timetracker.service +++ b/systemd/timetracker.service @@ -3,6 +3,6 @@ Description=track time [Service] Type=oneshot -ExecStart=/usr/local/bin/timetracker +ExecStart=/usr/local/bin/timetracker-cli User=timetracker Group=systemd-journal \ No newline at end of file From d2ff1bcc80ce7babee18149ce74d936d634c5d15 Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Wed, 19 Mar 2025 20:51:09 +0100 Subject: [PATCH 02/56] Add excel export --- Readme.md | 3 ++ cmd/main.go | 11 ++++--- cmd/main_test.go | 17 +++++++--- go.mod | 15 ++++++++- go.sum | 24 ++++++++++++++ internal/cli/cli.go | 8 ++++- internal/cli/cli_test.go | 6 ++-- internal/excel/excel.go | 61 ++++++++++++++++++++++++++++++++++++ internal/excel/excel_test.go | 47 +++++++++++++++++++++++++++ 9 files changed, 179 insertions(+), 13 deletions(-) create mode 100644 internal/excel/excel.go create mode 100644 internal/excel/excel_test.go diff --git a/Readme.md b/Readme.md index 25859e7..db1fd65 100644 --- a/Readme.md +++ b/Readme.md @@ -11,12 +11,15 @@ The timetracker application provides the following arguments which can be passed | Property | Description | |---------------|----------------------------------------------------------------------------| +| archivedata | Enables archiving timetracker status to excel archive file, default: false | | configpath | Defines the location of the necessary files, default: /var/lib/timetracker | ## Execution The application is triggered by a systemd timer which triggers the application via systemd unit. +*Note:* Running timetracker with ystemd unit uses the default property values. To change it you have to modify the unit file. + To enable the timer you have to (requires root privileges): ### enable the timer diff --git a/cmd/main.go b/cmd/main.go index 9bb302a..41097f1 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -7,27 +7,28 @@ import ( ) func main() { - mode, configPath := parseArguments() + mode, configPath, archiveData := parseArguments() if mode == "" { os.Exit(0) } else if mode == "cli" { - cli.Run(&configPath) + cli.Run(&configPath, &archiveData) os.Exit(0) } else { os.Exit(1) } } -func parseArguments() (string, string) { +func parseArguments() (string, string, bool) { mode := flag.String("mode", "cli", "the application mode, available: cli") configPath := flag.String("configpath", "/var/lib/timetracker", "the config path") + archiveData := flag.Bool("archivedata", false, "flag to enable data archiving") help := flag.Bool("help", false, "print this help message") flag.Parse() if *help { flag.PrintDefaults() - return "", "" + return "", "", false } else { - return *mode, *configPath + return *mode, *configPath, *archiveData } } diff --git a/cmd/main_test.go b/cmd/main_test.go index b909b74..3af1815 100644 --- a/cmd/main_test.go +++ b/cmd/main_test.go @@ -11,18 +11,21 @@ func TestParameter(t *testing.T) { oldArgs := os.Args defer func() { os.Args = oldArgs }() - params := []string{"-configpath", "/foo", "-mode", "testmode"} + params := []string{"-mode", "testmode", "-configpath", "/foo", "-archivedata", "true"} flag.CommandLine = flag.NewFlagSet("test", flag.ContinueOnError) os.Args = append([]string{"params"}, params...) - mode, configPath := parseArguments() + mode, configPath, archiveData := parseArguments() if mode != "testmode" { log.Fatalf("Got unexpected mode result, got %s, expected %s", "testmode", mode) } if configPath != "/foo" { log.Fatalf("Got unexpected config path result, got %s, expected %s", "/foo", configPath) } + if !archiveData { + log.Fatalf("Got unexpected archive data flag result, got %t, expected %t", true, archiveData) + } } func TestParameterDefaults(t *testing.T) { @@ -34,13 +37,16 @@ func TestParameterDefaults(t *testing.T) { flag.CommandLine = flag.NewFlagSet("test", flag.ContinueOnError) os.Args = append([]string{"defaults"}, params...) - mode, configPath := parseArguments() + mode, configPath, archiveData := parseArguments() if mode != "cli" { log.Fatalf("Got unexpected mode result, got %s, expected %s", "cli", mode) } if configPath != "/var/lib/timetracker" { log.Fatalf("Got unexpected config path result, got %s, expected %s", "/var/lib/timetracker", configPath) } + if archiveData { + log.Fatalf("Got unexpected archive data flag result, got %t, expected %t", false, archiveData) + } } func TestParameterHelp(t *testing.T) { @@ -52,11 +58,14 @@ func TestParameterHelp(t *testing.T) { flag.CommandLine = flag.NewFlagSet("test", flag.ContinueOnError) os.Args = append([]string{"help"}, params...) - mode, configPath := parseArguments() + mode, configPath, archiveData := parseArguments() if mode != "" { log.Fatalf("Got unexpected mode result, got %s, expected %s", "", mode) } if configPath != "" { log.Fatalf("Got unexpected config path result, got %s, expected %s", "", configPath) } + if archiveData { + log.Fatalf("Got unexpected archive data flag result, got %t, expected %t", false, archiveData) + } } diff --git a/go.mod b/go.mod index 11b91b5..4fb5f89 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,16 @@ module ronnyfriedland/timetracker/v2 -go 1.18 +go 1.19 + +require github.com/xuri/excelize/v2 v2.9.0 + +require ( + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.4 // indirect + github.com/xuri/efp v0.0.0-20250227110027-3491fafc2b79 // indirect + github.com/xuri/nfp v0.0.0-20250226145837-86d5fc24b2ba // indirect + golang.org/x/crypto v0.36.0 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/text v0.23.0 // indirect +) diff --git a/go.sum b/go.sum index e69de29..e6e8908 100644 --- a/go.sum +++ b/go.sum @@ -0,0 +1,24 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= +github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= +github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00= +github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/xuri/efp v0.0.0-20250227110027-3491fafc2b79 h1:78nKszZqigiBRBVcoe/AuPzyLTWW5B+ltBaUX1rlIXA= +github.com/xuri/efp v0.0.0-20250227110027-3491fafc2b79/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/excelize/v2 v2.9.0 h1:1tgOaEq92IOEumR1/JfYS/eR0KHOCsRv/rYXXh6YJQE= +github.com/xuri/excelize/v2 v2.9.0/go.mod h1:uqey4QBZ9gdMeWApPLdhm9x+9o2lq4iVmjiLfBS5hdE= +github.com/xuri/nfp v0.0.0-20250226145837-86d5fc24b2ba h1:DhIu6n3qU0joqG9f4IO6a/Gkerd+flXrmlJ+0yX2W8U= +github.com/xuri/nfp v0.0.0-20250226145837-86d5fc24b2ba/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 0229763..b33ea19 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -2,14 +2,17 @@ package cli import ( "log" + + "ronnyfriedland/timetracker/v2/internal/excel" "ronnyfriedland/timetracker/v2/internal/logic" ) const dateLayout = "02.01.2006" const timeLayout = "15:04:05" -func Run(configPath *string) { +func Run(configPath *string, archiveData *bool) { duration := logic.Execute(configPath) + if duration.Complete { log.Printf("[%s] - Work duration: %2.2fh", duration.Date.Format(dateLayout), @@ -20,5 +23,8 @@ func Run(configPath *string) { duration.StartTime.Format(timeLayout), duration.EndTime.Format(timeLayout)) + if *archiveData { + excel.Export(configPath, duration) + } } } diff --git a/internal/cli/cli_test.go b/internal/cli/cli_test.go index 9067166..fe27786 100644 --- a/internal/cli/cli_test.go +++ b/internal/cli/cli_test.go @@ -16,8 +16,9 @@ func TestRunNotComplete(t *testing.T) { log.SetOutput(&logContent) directory, _ := createStatusFile() + archiveData := false - Run(&directory) + Run(&directory, &archiveData) if logContent.String() != "" { log.Fatalf("Expected empty logmessage") @@ -31,10 +32,11 @@ func TestRunComplete(t *testing.T) { log.SetOutput(&logContent) directory, fileName := createStatusFile() + archiveData := false setModificationDate(fileName, "28.02.2022") - Run(&directory) + Run(&directory, &archiveData) if logContent.String() == "" { log.Fatalf("Expected logmessage") diff --git a/internal/excel/excel.go b/internal/excel/excel.go new file mode 100644 index 0000000..7df466c --- /dev/null +++ b/internal/excel/excel.go @@ -0,0 +1,61 @@ +package excel + +import ( + "fmt" + "log" + "time" + + "github.com/xuri/excelize/v2" + + "ronnyfriedland/timetracker/v2/internal/logic" +) + +var SheetName = time.Now().Format("2006") +var Headers = []string{"Date", "From", "To", "Duration"} + +const dateLayout = "02.01.2006" +const timeLayout = "15:04:05" + +func Export(configPath *string, duration logic.Duration) string { + archiveDataFile := *configPath + "/timetracker.xlsx" + + file, err := excelize.OpenFile(archiveDataFile) + if err != nil { + file = excelize.NewFile() + } + defer func() { + err := file.Close() + if err != nil { + log.Fatal(err) + } + }() + + _, err = file.NewSheet(SheetName) + if err != nil { + log.Fatalf("Failed to ensure sheet created: %v", err) + } + file.DeleteSheet("Sheet1") + + for i, header := range Headers { + file.SetCellValue(SheetName, fmt.Sprintf("%s%d", string(rune(65+i)), 1), header) + } + + rows, err := file.GetRows(SheetName) + if err != nil { + log.Fatalf("Failed to get rows from sheet: %v", err) + } + + next := len(rows) + 1 + + file.SetCellValue(SheetName, fmt.Sprintf("A%d", next), duration.Date.Format(dateLayout)) + file.SetCellValue(SheetName, fmt.Sprintf("B%d", next), duration.StartTime.Format(timeLayout)) + file.SetCellValue(SheetName, fmt.Sprintf("C%d", next), duration.EndTime.Format(timeLayout)) + file.SetCellValue(SheetName, fmt.Sprintf("D%d", next), fmt.Sprintf("%2.2f", duration.Duration.Hours())) + + if err := file.SaveAs(archiveDataFile); + err != nil { + log.Fatal(err) + } + + return archiveDataFile +} diff --git a/internal/excel/excel_test.go b/internal/excel/excel_test.go new file mode 100644 index 0000000..8eef735 --- /dev/null +++ b/internal/excel/excel_test.go @@ -0,0 +1,47 @@ +package excel + +import ( + "log" + "os" + "ronnyfriedland/timetracker/v2/internal/logic" + "testing" + "time" + + "github.com/xuri/excelize/v2" +) + +func TestExport(t *testing.T) { + + testData := logic.Duration{ + Date: time.Now(), + StartTime: time.Now(), + EndTime: time.Now(), + Duration: time.Duration(1000), + } + + excelDirectory := os.TempDir() + excelFile := Export(&excelDirectory, testData) + + file, err := excelize.OpenFile(excelFile) + if err != nil { + log.Fatalf("Expected excel file") + } + + rows, err := file.GetRows(SheetName) + if err != nil { + log.Fatalf("Expected no error getting rows") + } + + if len(rows) != 2 { + log.Fatalf("Unexpected line count - expected 2, got %d", len(rows)) + } + + headers := rows[0] + for i := 0; i < len(headers); i++ { + if headers[i] != Headers[i] { + log.Fatalf("Unexpected header value - expected %s, got %s", Headers[i], headers[i]) + } + } + + defer os.Remove(excelFile) +} From 27711692bfa48978753abc8b05cea4d1e336f111 Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Thu, 20 Mar 2025 19:58:00 +0100 Subject: [PATCH 03/56] raise go version to 1.19 --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index eab49d2..25b15e2 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: '1.18' + go-version: '1.19' - name: Build run: go build -v ./... From 80c4c07682289be8c1732faf6334de6801651b15 Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Thu, 20 Mar 2025 20:02:08 +0100 Subject: [PATCH 04/56] switch to debian --- .github/workflows/anchore-syft.yml | 2 +- .github/workflows/debian.yml | 2 +- .github/workflows/go.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/anchore-syft.yml b/.github/workflows/anchore-syft.yml index 9fb52ac..704982e 100644 --- a/.github/workflows/anchore-syft.yml +++ b/.github/workflows/anchore-syft.yml @@ -24,7 +24,7 @@ jobs: Anchore-Build-Scan: permissions: contents: write # required to upload to the Dependency submission API - runs-on: ubuntu-latest + runs-on: debian-latest steps: - name: Checkout the code uses: actions/checkout@v3 diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index 704f950..33d1f9e 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -11,7 +11,7 @@ on: jobs: Create_Packages: name: Create Package - runs-on: ubuntu-latest + runs-on: debian-latest steps: - name: Checkout code uses: actions/checkout@v3 diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 25b15e2..37a8350 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -12,7 +12,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: debian-latest steps: - uses: actions/checkout@v3 From edc5fb964134c1a1297528d73c6ec6baae8549de Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Thu, 20 Mar 2025 20:05:22 +0100 Subject: [PATCH 05/56] Revert "switch to debian" This reverts commit 80c4c07682289be8c1732faf6334de6801651b15. --- .github/workflows/anchore-syft.yml | 2 +- .github/workflows/debian.yml | 2 +- .github/workflows/go.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/anchore-syft.yml b/.github/workflows/anchore-syft.yml index 704982e..9fb52ac 100644 --- a/.github/workflows/anchore-syft.yml +++ b/.github/workflows/anchore-syft.yml @@ -24,7 +24,7 @@ jobs: Anchore-Build-Scan: permissions: contents: write # required to upload to the Dependency submission API - runs-on: debian-latest + runs-on: ubuntu-latest steps: - name: Checkout the code uses: actions/checkout@v3 diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index 33d1f9e..704f950 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -11,7 +11,7 @@ on: jobs: Create_Packages: name: Create Package - runs-on: debian-latest + runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 37a8350..25b15e2 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -12,7 +12,7 @@ on: jobs: build: - runs-on: debian-latest + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From 239fe92bff0f2d331444b550e831168b87c9904e Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Thu, 20 Mar 2025 20:07:06 +0100 Subject: [PATCH 06/56] Use go 1.18 again --- .github/workflows/go.yml | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 25b15e2..eab49d2 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: '1.19' + go-version: '1.18' - name: Build run: go build -v ./... diff --git a/go.mod b/go.mod index 4fb5f89..f179543 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module ronnyfriedland/timetracker/v2 -go 1.19 +go 1.18 require github.com/xuri/excelize/v2 v2.9.0 From 760d906be93137aa3f40a8f2bd18282f1ece7d39 Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Thu, 20 Mar 2025 20:20:17 +0100 Subject: [PATCH 07/56] change version --- .github/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index 704f950..61203e2 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build run: go build -o timetracker cmd/main.go From 432e5ab9f2004b79d29c90035ab8feb488b1c0c2 Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Thu, 20 Mar 2025 20:21:56 +0100 Subject: [PATCH 08/56] go mod tidy --- .github/workflows/debian.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index 61203e2..d01d462 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -15,6 +15,9 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + + - name: Tidy dependencies + run: go mod tidy - name: Build run: go build -o timetracker cmd/main.go From 907a7505a87171a3eaeec6094300fd6c5957e3fa Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 4 Jun 2025 11:54:36 +0200 Subject: [PATCH 09/56] Provide update-alternatives to shwitch to archive mode --- .github/workflows/debian.yml | 3 ++- DEBIAN/postinst | 5 +++++ DEBIAN/prerm | 2 ++ Readme.md | 8 +++++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index d01d462..5423edb 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -28,7 +28,8 @@ jobs: mkdir -p PKG_SOURCE/var/lib/timetracker mkdir -p PKG_SOURCE/lib/systemd/system cp -Rf ./DEBIAN PKG_SOURCE/ - cp -Rf ./timetracker PKG_SOURCE/usr/local/bin/ + cp -Rf ./timetracker PKG_SOURCE/var/lib/timetracker/ + cp -Rf ./scripts/* PKG_SOURCE/var/lib/timetracker/ cp -Rf ./systemd/* PKG_SOURCE/lib/systemd/system/ - name: Create Deb package diff --git a/DEBIAN/postinst b/DEBIAN/postinst index 3798664..4f83dd5 100755 --- a/DEBIAN/postinst +++ b/DEBIAN/postinst @@ -5,6 +5,11 @@ set -e case "$1" in configure) chown -R timetracker:timetracker /var/lib/timetracker + + chmod u+x /var/lib/timetracker/timetracker*.sh + + update-alternatives --install /usr/local/bin/timetracker timetracker /var/lib/timetracker/timetracker-archive.sh 100 + update-alternatives --install /usr/local/bin/timetracker timetracker /var/lib/timetracker/timetracker.sh 1000 ;; abort-upgrade|abort-remove|abort-deconfigure) diff --git a/DEBIAN/prerm b/DEBIAN/prerm index f536fcb..09c5cad 100755 --- a/DEBIAN/prerm +++ b/DEBIAN/prerm @@ -10,6 +10,8 @@ case "$1" in if getent group timetracker >/dev/null; then delgroup --system timetracker fi + + update-alternatives --remove-all timetracker ;; upgrade) diff --git a/Readme.md b/Readme.md index db1fd65..5fc9900 100644 --- a/Readme.md +++ b/Readme.md @@ -18,7 +18,13 @@ The timetracker application provides the following arguments which can be passed The application is triggered by a systemd timer which triggers the application via systemd unit. -*Note:* Running timetracker with ystemd unit uses the default property values. To change it you have to modify the unit file. +*Note:* Running timetracker with systemd unit uses the default property values. To change it you have use the appropriate alternative. + +### Switch alternative + +```shell +update-alternatives --config timetracker +``` To enable the timer you have to (requires root privileges): From 168cfafa938c51662a5b77e49f4d247102d61080 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 4 Jun 2025 13:19:17 +0200 Subject: [PATCH 10/56] Add missing scripts directory --- scripts/timetracker-archive.sh | 3 +++ scripts/timetracker.sh | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 scripts/timetracker-archive.sh create mode 100644 scripts/timetracker.sh diff --git a/scripts/timetracker-archive.sh b/scripts/timetracker-archive.sh new file mode 100644 index 0000000..f343215 --- /dev/null +++ b/scripts/timetracker-archive.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +timetracker -archivedata=true \ No newline at end of file diff --git a/scripts/timetracker.sh b/scripts/timetracker.sh new file mode 100644 index 0000000..ab51640 --- /dev/null +++ b/scripts/timetracker.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +timetracker \ No newline at end of file From 9347134276b7fc4109c7dddc19ee1c354f2d44a8 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 5 Jun 2025 08:24:05 +0200 Subject: [PATCH 11/56] Fix scripts - use full path to binary to prevent loops --- DEBIAN/control | 2 +- scripts/timetracker-archive.sh | 2 +- scripts/timetracker.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DEBIAN/control b/DEBIAN/control index 37be5dd..dfbc182 100644 --- a/DEBIAN/control +++ b/DEBIAN/control @@ -1,5 +1,5 @@ Package: timetracker -Version: 1.0.2 +Version: 1.2.0 Section: misc Priority: optional Architecture: all diff --git a/scripts/timetracker-archive.sh b/scripts/timetracker-archive.sh index f343215..0fd9b50 100644 --- a/scripts/timetracker-archive.sh +++ b/scripts/timetracker-archive.sh @@ -1,3 +1,3 @@ #!/usr/bin/env sh -timetracker -archivedata=true \ No newline at end of file +/var/lib/timetracker/timetracker -archivedata=true \ No newline at end of file diff --git a/scripts/timetracker.sh b/scripts/timetracker.sh index ab51640..b8e26f9 100644 --- a/scripts/timetracker.sh +++ b/scripts/timetracker.sh @@ -1,3 +1,3 @@ #!/usr/bin/env sh -timetracker \ No newline at end of file +/var/lib/timetracker/timetracker \ No newline at end of file From 24621d48fddf39e5b9b15e526ae67e6d75942ab7 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 24 Jul 2025 12:58:56 +0200 Subject: [PATCH 12/56] move github actions to forgejo --- {.github => .forgejo}/workflows/anchore-syft.yml | 0 {.github => .forgejo}/workflows/codeql.yml | 0 {.github => .forgejo}/workflows/debian.yml | 0 {.github => .forgejo}/workflows/go.yml | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {.github => .forgejo}/workflows/anchore-syft.yml (100%) rename {.github => .forgejo}/workflows/codeql.yml (100%) rename {.github => .forgejo}/workflows/debian.yml (100%) rename {.github => .forgejo}/workflows/go.yml (100%) diff --git a/.github/workflows/anchore-syft.yml b/.forgejo/workflows/anchore-syft.yml similarity index 100% rename from .github/workflows/anchore-syft.yml rename to .forgejo/workflows/anchore-syft.yml diff --git a/.github/workflows/codeql.yml b/.forgejo/workflows/codeql.yml similarity index 100% rename from .github/workflows/codeql.yml rename to .forgejo/workflows/codeql.yml diff --git a/.github/workflows/debian.yml b/.forgejo/workflows/debian.yml similarity index 100% rename from .github/workflows/debian.yml rename to .forgejo/workflows/debian.yml diff --git a/.github/workflows/go.yml b/.forgejo/workflows/go.yml similarity index 100% rename from .github/workflows/go.yml rename to .forgejo/workflows/go.yml From a216a792ff73f94382b77130c414a58086b5ac3a Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Tue, 5 Aug 2025 08:55:00 +0200 Subject: [PATCH 13/56] switch to v3 --- .forgejo/workflows/debian.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 5423edb..7a674ff 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v3 - name: Tidy dependencies run: go mod tidy @@ -39,4 +39,4 @@ jobs: - name: Release the Deb package uses: softprops/action-gh-release@v1 with: - files: timetracker_${{github.ref_name}}.deb \ No newline at end of file + files: timetracker_${{github.ref_name}}.deb From 8faa251b5e64765fb26c496cb12578cc6151ea4d Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Tue, 5 Aug 2025 11:41:25 +0200 Subject: [PATCH 14/56] use softprops --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 7a674ff..2b04b13 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -37,6 +37,6 @@ jobs: dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - name: Release the Deb package - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@59c3b4891632ff9a897f99a91d7bc557467a3a22 with: files: timetracker_${{github.ref_name}}.deb From 08385977cc824ac7b0fb6d85434c0c768becc86e Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Tue, 5 Aug 2025 13:46:12 +0200 Subject: [PATCH 15/56] switch to v4 --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 2b04b13..7509204 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Tidy dependencies run: go mod tidy From 4386eef4154394b72adac1a2cf1ba06b309c07f7 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 08:35:16 +0200 Subject: [PATCH 16/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 7509204..abeee26 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -37,6 +37,6 @@ jobs: dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - name: Release the Deb package - uses: softprops/action-gh-release@59c3b4891632ff9a897f99a91d7bc557467a3a22 + uses: softprops/action-gh-release@v2 with: files: timetracker_${{github.ref_name}}.deb From d540272153cd4f88bc02f4c099c5089f0b9966c0 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 08:45:31 +0200 Subject: [PATCH 17/56] test --- .forgejo/workflows/debian.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index abeee26..7a1886b 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -36,7 +36,7 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - name: Release the Deb package - uses: softprops/action-gh-release@v2 - with: - files: timetracker_${{github.ref_name}}.deb + #- name: Release the Deb package + #uses: softprops/action-gh-release@v2 + #with: + #files: timetracker_${{github.ref_name}}.deb From ea03051cdce96d238bb4ec07dae47e0c74f9f7bc Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 08:52:14 +0200 Subject: [PATCH 18/56] test --- .forgejo/workflows/debian.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 7a1886b..0c07c45 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -15,7 +15,12 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 - + + - name: Set up Go + uses: https://code.forgejo.org/actions/setup-go@v5 + with: + go-version: '1.18' + - name: Tidy dependencies run: go mod tidy From 390faa088b85ac681451d8bf358e6212c21fbcb8 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 08:55:14 +0200 Subject: [PATCH 19/56] test --- .forgejo/workflows/debian.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 0c07c45..e4c0f25 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,6 +41,11 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb + - name: Upload release asset + uses: https://code.forgejo.org/actions/upload-release-asset@v1 + with: + files: timetracker_${{github.ref_name}}.deb + #- name: Release the Deb package #uses: softprops/action-gh-release@v2 #with: From 9fa12746cad375bd012fc1462fab634cd7abb6c1 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 08:56:23 +0200 Subject: [PATCH 20/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index e4c0f25..6d68634 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,7 +41,7 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - name: Upload release asset + - name: Upload release asset uses: https://code.forgejo.org/actions/upload-release-asset@v1 with: files: timetracker_${{github.ref_name}}.deb From b7b725753fbbc6ef4fd452cd3cf737b65c5a4977 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 09:01:14 +0200 Subject: [PATCH 21/56] test --- .forgejo/workflows/debian.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 6d68634..69a05a8 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -45,6 +45,8 @@ jobs: uses: https://code.forgejo.org/actions/upload-release-asset@v1 with: files: timetracker_${{github.ref_name}}.deb + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} #- name: Release the Deb package #uses: softprops/action-gh-release@v2 From c9d9c0b0e70c0cc92c44e65f3d79a7674b0936b9 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 09:08:54 +0200 Subject: [PATCH 22/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 69a05a8..600897b 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -46,7 +46,7 @@ jobs: with: files: timetracker_${{github.ref_name}}.deb env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.test }} #- name: Release the Deb package #uses: softprops/action-gh-release@v2 From bc5aa1e45cb3b8d0ba32185ac9bf29abc52acc30 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 10:54:59 +0200 Subject: [PATCH 23/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 600897b..b341d02 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -46,7 +46,7 @@ jobs: with: files: timetracker_${{github.ref_name}}.deb env: - GITHUB_TOKEN: ${{ secrets.test }} + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} #- name: Release the Deb package #uses: softprops/action-gh-release@v2 From 6f7ff56a80e338b91a907eaedf5371116ec017fa Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 11:03:27 +0200 Subject: [PATCH 24/56] test --- .forgejo/workflows/debian.yml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index b341d02..3a8a3b3 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,14 +41,8 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - name: Upload release asset - uses: https://code.forgejo.org/actions/upload-release-asset@v1 + - name: 'Upload Artifact' + uses: actions/upload-artifact@v4 with: - files: timetracker_${{github.ref_name}}.deb - env: - FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} - - #- name: Release the Deb package - #uses: softprops/action-gh-release@v2 - #with: - #files: timetracker_${{github.ref_name}}.deb + name: timetracker_binary + path: timetracker_${{github.ref_name}}.deb From f3af9cb5a779cc261c3c702ec879693fcd1dac64 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 11:05:56 +0200 Subject: [PATCH 25/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 3a8a3b3..f4cdea9 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -42,7 +42,7 @@ jobs: dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - name: 'Upload Artifact' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: timetracker_binary path: timetracker_${{github.ref_name}}.deb From 2a0316008a88ea34078ad861d0be7b0bdbd1e24c Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Wed, 6 Aug 2025 11:15:29 +0200 Subject: [PATCH 26/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index f4cdea9..d734027 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -42,7 +42,7 @@ jobs: dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - name: 'Upload Artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-release-asset@v1 with: name: timetracker_binary path: timetracker_${{github.ref_name}}.deb From d0339fee455b3b39e6f57d250109c23c466b708e Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 7 Aug 2025 09:35:09 +0200 Subject: [PATCH 27/56] test --- .forgejo/workflows/debian.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index d734027..17b1396 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,8 +41,14 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - name: 'Upload Artifact' - uses: actions/upload-release-asset@v1 + - uses: actions/forgejo-release@v2.6.0 with: - name: timetracker_binary - path: timetracker_${{github.ref_name}}.deb + direction: upload + repo: ronnyfriedland/timetracker + token: ${{ secrets.test }} + + # - name: 'Upload Artifact' + # uses: actions/upload-release-asset@v1 + #with: + # name: timetracker_binary + #path: timetracker_${{github.ref_name}}.deb From eb8008273340185a8f8d0230874af12259f25824 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 7 Aug 2025 09:39:45 +0200 Subject: [PATCH 28/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 17b1396..fca0983 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -45,7 +45,7 @@ jobs: with: direction: upload repo: ronnyfriedland/timetracker - token: ${{ secrets.test }} + token: ${{ test }} # - name: 'Upload Artifact' # uses: actions/upload-release-asset@v1 From ccda5dcc01eb27b7e68d4b6be2abdce4c9eab91b Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 7 Aug 2025 09:46:08 +0200 Subject: [PATCH 29/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index fca0983..17b1396 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -45,7 +45,7 @@ jobs: with: direction: upload repo: ronnyfriedland/timetracker - token: ${{ test }} + token: ${{ secrets.test }} # - name: 'Upload Artifact' # uses: actions/upload-release-asset@v1 From 692f41c5fb3fa5142b6c09a333a6207e642c405f Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 7 Aug 2025 10:12:58 +0200 Subject: [PATCH 30/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 17b1396..407fd46 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,7 +41,7 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - uses: actions/forgejo-release@v2.6.0 + - uses: actions/forgejo-release@v2.1.0 with: direction: upload repo: ronnyfriedland/timetracker From 3d817cf7376aef60bd05723321f18bd1cd2e8dc7 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 7 Aug 2025 14:33:46 +0200 Subject: [PATCH 31/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 407fd46..cc36a98 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,7 +41,7 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - uses: actions/forgejo-release@v2.1.0 + - uses: actions/forgejo-release@v2.7.2 with: direction: upload repo: ronnyfriedland/timetracker From d218f8bbe8712f73b41aecae0722b8c15c22c044 Mon Sep 17 00:00:00 2001 From: Ronny Friedland Date: Thu, 7 Aug 2025 14:40:12 +0200 Subject: [PATCH 32/56] test --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index cc36a98..ebba925 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,7 +41,7 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - uses: actions/forgejo-release@v2.7.2 + - uses: actions/forgejo-release@v2.7.1 with: direction: upload repo: ronnyfriedland/timetracker From 09227bd266a11292223c2ec27a00a101c90c9bc6 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 09:19:58 +0000 Subject: [PATCH 33/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index ebba925..53f0e20 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,12 +41,20 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - uses: actions/forgejo-release@v2.7.1 + - name: Upload Artifact (für CI-Artefakt) + uses: actions/upload-artifact@v4 with: - direction: upload - repo: ronnyfriedland/timetracker + name: my-artifact + path: ./build/path/to/artifact.zip + retention-days: 5 token: ${{ secrets.test }} + #- uses: actions/forgejo-release@v2.7.1 + # with: + # direction: upload + # repo: ronnyfriedland/timetracker + # token: ${{ secrets.test }} + # - name: 'Upload Artifact' # uses: actions/upload-release-asset@v1 #with: From b72c4de2a60621062dfdf598286c7fd6bf896462 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 09:21:52 +0000 Subject: [PATCH 34/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 53f0e20..16bd329 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -45,7 +45,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: my-artifact - path: ./build/path/to/artifact.zip + path: timetracker_*.deb retention-days: 5 token: ${{ secrets.test }} From bc4efc49b899401a9c68f6a94ee9fad225f823ca Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:32:09 +0000 Subject: [PATCH 35/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 16bd329..7899fd1 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -42,9 +42,9 @@ jobs: dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - name: Upload Artifact (für CI-Artefakt) - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: - name: my-artifact + name: timetracker.deb path: timetracker_*.deb retention-days: 5 token: ${{ secrets.test }} From 7e65e7012e465b5ea77bb5d4942a14b23dbfebf2 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:37:26 +0000 Subject: [PATCH 36/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 7899fd1..b93f79a 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -44,19 +44,18 @@ jobs: - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: - name: timetracker.deb - path: timetracker_*.deb + name: timetracker_$(git rev-parse --short HEAD).deb + path: timetracker_$(git rev-parse --short HEAD).deb retention-days: 5 token: ${{ secrets.test }} - #- uses: actions/forgejo-release@v2.7.1 - # with: - # direction: upload - # repo: ronnyfriedland/timetracker - # token: ${{ secrets.test }} - - # - name: 'Upload Artifact' - # uses: actions/upload-release-asset@v1 - #with: - # name: timetracker_binary - #path: timetracker_${{github.ref_name}}.deb + - uses: https://data.forgejo.org/actions/checkout@v4 + - name: Upload Package + run: | + FILE="timetracker.deb" + ORG="Ronny.Friedland" + REPO="timetracker" + VERSION=$(git rev-parse --short HEAD) + curl --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ + --upload-file $FILE \ + "https://${{ env.FORGEJO_BASE_URL }}/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" From a32b8b2a5cc35a6a8bd5b3add01563bed534fed4 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:39:33 +0000 Subject: [PATCH 37/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index b93f79a..c096291 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -52,7 +52,7 @@ jobs: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Upload Package run: | - FILE="timetracker.deb" + FILE="timetracker_$(git rev-parse --short HEAD).deb" ORG="Ronny.Friedland" REPO="timetracker" VERSION=$(git rev-parse --short HEAD) From 47af533d9f0982c4fba5d22712262435792cd091 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:40:57 +0000 Subject: [PATCH 38/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index c096291..56a223e 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -44,15 +44,15 @@ jobs: - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: - name: timetracker_$(git rev-parse --short HEAD).deb - path: timetracker_$(git rev-parse --short HEAD).deb + name: timetracker.deb + path: timetracker.deb retention-days: 5 token: ${{ secrets.test }} - uses: https://data.forgejo.org/actions/checkout@v4 - name: Upload Package run: | - FILE="timetracker_$(git rev-parse --short HEAD).deb" + FILE="timetracker.deb" ORG="Ronny.Friedland" REPO="timetracker" VERSION=$(git rev-parse --short HEAD) From 074de6987828436df12467f1329c83e5011921f2 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:42:08 +0000 Subject: [PATCH 39/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 56a223e..3a7a2a4 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -44,15 +44,15 @@ jobs: - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: - name: timetracker.deb - path: timetracker.deb + name: timetracker_${{github.ref_name}}.deb + path: timetracker_${{github.ref_name}}.deb retention-days: 5 token: ${{ secrets.test }} - uses: https://data.forgejo.org/actions/checkout@v4 - name: Upload Package run: | - FILE="timetracker.deb" + FILE="timetracker_${{github.ref_name}}.deb" ORG="Ronny.Friedland" REPO="timetracker" VERSION=$(git rev-parse --short HEAD) From 4c6aca38f231d1de456549b860e2b60c427c6be4 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:44:04 +0000 Subject: [PATCH 40/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 3a7a2a4..f807b06 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -49,6 +49,9 @@ jobs: retention-days: 5 token: ${{ secrets.test }} + - name: Check files before upload + run: find . + - uses: https://data.forgejo.org/actions/checkout@v4 - name: Upload Package run: | From 489be8de02893dbe54f0927b299919cc210eb360 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:47:12 +0000 Subject: [PATCH 41/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index f807b06..da4a4de 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,16 +41,13 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - name: Upload Artifact (für CI-Artefakt) - uses: actions/upload-artifact@v3 - with: - name: timetracker_${{github.ref_name}}.deb - path: timetracker_${{github.ref_name}}.deb - retention-days: 5 - token: ${{ secrets.test }} - - - name: Check files before upload - run: find . + #- name: Upload Artifact (für CI-Artefakt) + # uses: actions/upload-artifact@v3 + # with: + # name: timetracker_${{github.ref_name}}.deb + # path: timetracker_${{github.ref_name}}.deb + # retention-days: 5 + # token: ${{ secrets.test }} - uses: https://data.forgejo.org/actions/checkout@v4 - name: Upload Package From c7c194e5a560e350ac309dda57de95273481f5b2 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:49:53 +0000 Subject: [PATCH 42/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index da4a4de..c7cf39b 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -41,13 +41,13 @@ jobs: run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - #- name: Upload Artifact (für CI-Artefakt) - # uses: actions/upload-artifact@v3 - # with: - # name: timetracker_${{github.ref_name}}.deb - # path: timetracker_${{github.ref_name}}.deb - # retention-days: 5 - # token: ${{ secrets.test }} + - name: Upload Artifact (für CI-Artefakt) + uses: actions/upload-artifact@v3 + with: + name: timetracker_${{github.ref_name}}.deb + path: timetracker_${{github.ref_name}}.deb + retention-days: 5 + token: ${{ secrets.test }} - uses: https://data.forgejo.org/actions/checkout@v4 - name: Upload Package From 9a904bd48f3d586830cbc355899d940d971a5ae1 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:51:07 +0000 Subject: [PATCH 43/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index c7cf39b..76dfcd4 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -40,7 +40,6 @@ jobs: - name: Create Deb package run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: From 8ca4b1bc439817c35763656e4df68d6a58e80985 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 11:51:28 +0000 Subject: [PATCH 44/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 76dfcd4..1d1da14 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -39,7 +39,8 @@ jobs: - name: Create Deb package run: | - dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb + "dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb" + - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: From 84c39e351954d354e3f4a098971e356d27d5c393 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:21:02 +0000 Subject: [PATCH 45/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 1d1da14..37ba06f 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -55,7 +55,7 @@ jobs: FILE="timetracker_${{github.ref_name}}.deb" ORG="Ronny.Friedland" REPO="timetracker" - VERSION=$(git rev-parse --short HEAD) + VERSION=${{github.ref_name}} curl --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ --upload-file $FILE \ "https://${{ env.FORGEJO_BASE_URL }}/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" From 438f8bfcf09794f6382ff9fcfcba6cab4260ec43 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:23:09 +0000 Subject: [PATCH 46/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 37ba06f..d10f357 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -39,8 +39,7 @@ jobs: - name: Create Deb package run: | - "dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb" - + dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: From 09966039b6160f22e124d53b5e7d849afcdb8cca Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:23:39 +0000 Subject: [PATCH 47/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index d10f357..edf0102 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -37,24 +37,3 @@ jobs: cp -Rf ./scripts/* PKG_SOURCE/var/lib/timetracker/ cp -Rf ./systemd/* PKG_SOURCE/lib/systemd/system/ - - name: Create Deb package - run: | - dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - - name: Upload Artifact (für CI-Artefakt) - uses: actions/upload-artifact@v3 - with: - name: timetracker_${{github.ref_name}}.deb - path: timetracker_${{github.ref_name}}.deb - retention-days: 5 - token: ${{ secrets.test }} - - - uses: https://data.forgejo.org/actions/checkout@v4 - - name: Upload Package - run: | - FILE="timetracker_${{github.ref_name}}.deb" - ORG="Ronny.Friedland" - REPO="timetracker" - VERSION=${{github.ref_name}} - curl --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ - --upload-file $FILE \ - "https://${{ env.FORGEJO_BASE_URL }}/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" From 53eb6001a5bc9e2162f3deb247c42a02650cb723 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:23:50 +0000 Subject: [PATCH 48/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index edf0102..6b20df6 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -37,3 +37,6 @@ jobs: cp -Rf ./scripts/* PKG_SOURCE/var/lib/timetracker/ cp -Rf ./systemd/* PKG_SOURCE/lib/systemd/system/ + - name: Create Deb package + run: | + dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb From 1a2ef19c59591c95370b701e911497404f15f545 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:24:01 +0000 Subject: [PATCH 49/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 6b20df6..c6b7641 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -40,3 +40,11 @@ jobs: - name: Create Deb package run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb + - name: Upload Artifact (für CI-Artefakt) + uses: actions/upload-artifact@v3 + with: + name: timetracker_${{github.ref_name}}.deb + path: timetracker_${{github.ref_name}}.deb + retention-days: 5 + token: ${{ secrets.test }} + From 75e1d5f03aaf336105871d7bab7c186a363ed3db Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:24:35 +0000 Subject: [PATCH 50/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index c6b7641..e45331f 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -40,11 +40,22 @@ jobs: - name: Create Deb package run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb + - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: name: timetracker_${{github.ref_name}}.deb path: timetracker_${{github.ref_name}}.deb - retention-days: 5 + retention-days: 5 token: ${{ secrets.test }} + - uses: https://data.forgejo.org/actions/checkout@v4 + - name: Upload Package + run: | + FILE="timetracker_${{github.ref_name}}.deb" + ORG="Ronny.Friedland" + REPO="timetracker" + VERSION=${{github.ref_name}} + curl --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ + --upload-file $FILE \ + "https://${{ env.FORGEJO_BASE_URL }}/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" From 2b8bfa6c93b0af61ba628a31746fe4c572d8dbc5 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:27:01 +0000 Subject: [PATCH 51/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index e45331f..12916e7 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -48,8 +48,6 @@ jobs: path: timetracker_${{github.ref_name}}.deb retention-days: 5 token: ${{ secrets.test }} - - - uses: https://data.forgejo.org/actions/checkout@v4 - name: Upload Package run: | FILE="timetracker_${{github.ref_name}}.deb" From e943de0425c1b82087825a588195c60444cd5367 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:38:49 +0000 Subject: [PATCH 52/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 12916e7..9162455 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -56,4 +56,4 @@ jobs: VERSION=${{github.ref_name}} curl --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ --upload-file $FILE \ - "https://${{ env.FORGEJO_BASE_URL }}/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" + "https://edp.buildth.ing/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" From 8ca87f58d3f088cb21905cd0394c53348502db32 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:42:08 +0000 Subject: [PATCH 53/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 9162455..2d67e0c 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -54,6 +54,6 @@ jobs: ORG="Ronny.Friedland" REPO="timetracker" VERSION=${{github.ref_name}} - curl --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ + curl -v --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ --upload-file $FILE \ "https://edp.buildth.ing/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" From 0f3e43646476d09cd6e5aadf6be3a8896075e7e8 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Wed, 3 Sep 2025 12:44:58 +0000 Subject: [PATCH 54/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 2d67e0c..3a7bc68 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -54,6 +54,6 @@ jobs: ORG="Ronny.Friedland" REPO="timetracker" VERSION=${{github.ref_name}} - curl -v --user ${{ secrets.USER }}:${{ secrets.TOKEN }} \ + curl -v --header "Authorization: Bearer ${{ secrets.TEST }}" \ --upload-file $FILE \ "https://edp.buildth.ing/api/packages/${ORG}/generic/${REPO}/${VERSION}/${FILE}" From a50bc467016bc9490a2d3a17ea12d4299fdb9f07 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Fri, 5 Sep 2025 05:34:19 +0000 Subject: [PATCH 55/56] .forgejo/workflows/debian.yml aktualisiert --- .forgejo/workflows/debian.yml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/debian.yml b/.forgejo/workflows/debian.yml index 3a7bc68..0a0ed7e 100644 --- a/.forgejo/workflows/debian.yml +++ b/.forgejo/workflows/debian.yml @@ -40,7 +40,26 @@ jobs: - name: Create Deb package run: | dpkg-deb --build PKG_SOURCE timetracker_${{github.ref_name}}.deb - + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.test }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: false + prerelease: false + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.test }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: timetracker_${{github.ref_name}}.deb + asset_name: timetracker_${{github.ref_name}}.deb + asset_content_type: application/zip - name: Upload Artifact (für CI-Artefakt) uses: actions/upload-artifact@v3 with: From 0bc6b81c8c31d1d7367337f84f91883c78ed26e9 Mon Sep 17 00:00:00 2001 From: "Ronny.Friedland" Date: Mon, 20 Oct 2025 11:28:07 +0000 Subject: [PATCH 56/56] =?UTF-8?q?.forgejo/workflows/openbao.yml=20hinzugef?= =?UTF-8?q?=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .forgejo/workflows/openbao.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .forgejo/workflows/openbao.yml diff --git a/.forgejo/workflows/openbao.yml b/.forgejo/workflows/openbao.yml new file mode 100644 index 0000000..a74d4e4 --- /dev/null +++ b/.forgejo/workflows/openbao.yml @@ -0,0 +1,23 @@ +name: openbao + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + + build: + runs-on: ubuntu-latest + steps: + - name: Read Openbao secrets + id: read-openbao-secrets + uses: hashicorp/vault-action@v2 + with: + url: https://vault-test.mms-at-work.de:8200 + token: ${{ secrets.VAULT_TEST_TOKEN }} + secrets: | + testproject/test/testproject foo | FOO + - name: Echo secret value from Openbao + run: echo "$FOO" \ No newline at end of file