Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package hcloud-cli for openSUSE:Factory checked in at 2026-04-09 16:11:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hcloud-cli (Old) and /work/SRC/openSUSE:Factory/.hcloud-cli.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hcloud-cli" Thu Apr 9 16:11:40 2026 rev:17 rq:1345512 version:1.62.2 Changes: -------- --- /work/SRC/openSUSE:Factory/hcloud-cli/hcloud-cli.changes 2026-03-22 14:13:41.277007912 +0100 +++ /work/SRC/openSUSE:Factory/.hcloud-cli.new.21863/hcloud-cli.changes 2026-04-09 16:24:28.417842245 +0200 @@ -1,0 +2,28 @@ +Thu Apr 09 08:13:27 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.62.2: + * Bug Fixes + - invalid goreleaser artifacts name for signing step (#1380) +- Update to version 1.62.1: + * Bug Fixes + - server-type: do not print locations that are unavailable + (after deprecation) (#1369) + - long version info not displayed correctly in release builds + (#1374) + - only generate signature for checksums.txt release asset + (#1366) + * Dependencies + - deps: update module github.com/jedib0t/go-pretty/v6 to v6.7.9 + (#1379) + - deps: update module github.com/guptarohit/asciigraph to + v0.9.0 (#1377) + - deps: update dependency github:goreleaser/goreleaser to + v2.15.2 (#1378) + - deps: update module github.com/hetznercloud/hcloud-go/v2 to + v2.37.0 (#1376) + - deps: update codecov/codecov-action action to v6 (#1375) + - deps: update dependency github:golangci/golangci-lint to + v2.11.4 (#1368) + - deps: update dependency go to v1.26.1 (#1373) + +------------------------------------------------------------------- Old: ---- hcloud-cli-1.62.0.obscpio New: ---- hcloud-cli-1.62.2.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hcloud-cli.spec ++++++ --- /var/tmp/diff_new_pack.okc0DE/_old 2026-04-09 16:24:29.533888178 +0200 +++ /var/tmp/diff_new_pack.okc0DE/_new 2026-04-09 16:24:29.537888342 +0200 @@ -19,7 +19,7 @@ %define executable_name hcloud Name: hcloud-cli -Version: 1.62.0 +Version: 1.62.2 Release: 0 Summary: A command-line interface for Hetzner Cloud License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.okc0DE/_old 2026-04-09 16:24:29.585890318 +0200 +++ /var/tmp/diff_new_pack.okc0DE/_new 2026-04-09 16:24:29.589890483 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/hetznercloud/cli</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.62.0</param> + <param name="revision">v1.62.2</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.okc0DE/_old 2026-04-09 16:24:29.613891470 +0200 +++ /var/tmp/diff_new_pack.okc0DE/_new 2026-04-09 16:24:29.617891636 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/hetznercloud/cli</param> - <param name="changesrevision">d96cd205a03f93d8cddd6586d918c86be68f83ab</param></service></servicedata> + <param name="changesrevision">4b2b4e089e3b6d09f68469bec3ead54b08991bf7</param></service></servicedata> (No newline at EOF) ++++++ hcloud-cli-1.62.0.obscpio -> hcloud-cli-1.62.2.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/.goreleaser.yml new/hcloud-cli-1.62.2/.goreleaser.yml --- old/hcloud-cli-1.62.0/.goreleaser.yml 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/.goreleaser.yml 2026-04-07 19:36:15.000000000 +0200 @@ -1,7 +1,6 @@ version: 2 before: hooks: - - go mod tidy - ./scripts/completions.sh - go run ./scripts manpages @@ -16,6 +15,9 @@ - -w - -X {{ .ModulePath }}/internal/version.version={{ .Version }} - -X {{ .ModulePath }}/internal/version.versionPrerelease={{- if .IsSnapshot -}}dev+{{ .ShortCommit }}{{- end -}} + - -X {{ .ModulePath }}/internal/version.commit={{ .FullCommit }} + - -X {{ .ModulePath }}/internal/version.commitDate={{ .CommitDate }} + - -X {{ .ModulePath }}/internal/version.modified={{ .IsGitDirty }} env: - CGO_ENABLED=0 @@ -110,6 +112,9 @@ - -w - -X {{ .ModulePath }}/internal/version.version={{ .Version }} - -X {{ .ModulePath }}/internal/version.versionPrerelease={{- if .IsSnapshot -}}dev+{{ .ShortCommit }}{{- end -}} + - -X {{ .ModulePath }}/internal/version.commit={{ .FullCommit }} + - -X {{ .ModulePath }}/internal/version.commitDate={{ .CommitDate }} + - -X {{ .ModulePath }}/internal/version.modified={{ .IsGitDirty }} - -X {{ .ModulePath }}/internal/state/config.defaultConfigPathOverride=/config.toml snapshot: @@ -120,7 +125,7 @@ algorithm: sha256 signs: - - artifacts: all + - artifacts: checksum signature: ${artifact}.sig id: hcloud-sign args: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/CHANGELOG.md new/hcloud-cli-1.62.2/CHANGELOG.md --- old/hcloud-cli-1.62.0/CHANGELOG.md 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/CHANGELOG.md 2026-04-07 19:36:15.000000000 +0200 @@ -1,5 +1,19 @@ # Changelog +## [v1.62.2](https://github.com/hetznercloud/cli/releases/tag/v1.62.2) + +### Bug Fixes + +- invalid goreleaser artifacts name for signing step (#1380) + +## [v1.62.1](https://github.com/hetznercloud/cli/releases/tag/v1.62.1) + +### Bug Fixes + +- **server-type**: do not print locations that are unavailable (after deprecation) (#1369) +- long version info not displayed correctly in release builds (#1374) +- only generate signature for `checksums.txt` release asset (#1366) + ## [v1.62.0](https://github.com/hetznercloud/cli/releases/tag/v1.62.0) ### Features diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/go.mod new/hcloud-cli-1.62.2/go.mod --- old/hcloud-cli-1.62.0/go.mod 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/go.mod 2026-04-07 19:36:15.000000000 +0200 @@ -2,7 +2,7 @@ go 1.25.0 -toolchain go1.25.8 +toolchain go1.26.1 require ( github.com/BurntSushi/toml v1.6.0 @@ -11,9 +11,9 @@ github.com/fatih/color v1.19.0 github.com/fatih/structs v1.1.0 github.com/goccy/go-yaml v1.19.2 - github.com/guptarohit/asciigraph v0.8.1 - github.com/hetznercloud/hcloud-go/v2 v2.36.0 - github.com/jedib0t/go-pretty/v6 v6.7.8 + github.com/guptarohit/asciigraph v0.9.0 + github.com/hetznercloud/hcloud-go/v2 v2.37.0 + github.com/jedib0t/go-pretty/v6 v6.7.9 github.com/spf13/cast v1.10.0 github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/go.sum new/hcloud-cli-1.62.2/go.sum --- old/hcloud-cli-1.62.0/go.sum 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/go.sum 2026-04-07 19:36:15.000000000 +0200 @@ -35,16 +35,16 @@ github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/guptarohit/asciigraph v0.8.1 h1:JBeHTGj2ntBODnZxLQhp+GQZdlZ/48S/m7J1i1+KqFw= -github.com/guptarohit/asciigraph v0.8.1/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= -github.com/hetznercloud/hcloud-go/v2 v2.36.0 h1:HlLL/aaVXUulqe+rsjoJmrxKhPi1MflL5O9iq5QEtvo= -github.com/hetznercloud/hcloud-go/v2 v2.36.0/go.mod h1:MnN/QJEa/RYNQiiVoJjNHPntM7Z1wlYPgJ2HA40/cDE= +github.com/guptarohit/asciigraph v0.9.0 h1:MvCSRRVkT2XvU1IO6n92o7l7zqx1DiFaoszOUZQztbY= +github.com/guptarohit/asciigraph v0.9.0/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= +github.com/hetznercloud/hcloud-go/v2 v2.37.0 h1:PMnuOA8pL8aHLLPp6nnnCTo2Xk2tqu4dAfYsC3bWdT0= +github.com/hetznercloud/hcloud-go/v2 v2.37.0/go.mod h1:zaDOCKmpnI86ftoCpUpaiYaw9Wew1ib1AcXTh96deYI= github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc= github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jedib0t/go-pretty/v6 v6.7.8 h1:BVYrDy5DPBA3Qn9ICT+PokP9cvCv1KaHv2i+Hc8sr5o= -github.com/jedib0t/go-pretty/v6 v6.7.8/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= +github.com/jedib0t/go-pretty/v6 v6.7.9 h1:frarzQWmkZd97syT81+TH8INKPpzoxQnk+Mk5EIHSrM= +github.com/jedib0t/go-pretty/v6 v6.7.9/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/internal/cmd/servertype/list.go new/hcloud-cli-1.62.2/internal/cmd/servertype/list.go --- old/hcloud-cli-1.62.0/internal/cmd/servertype/list.go 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/internal/cmd/servertype/list.go 2026-04-07 19:36:15.000000000 +0200 @@ -2,6 +2,7 @@ import ( "fmt" + "slices" "strings" "time" @@ -34,11 +35,17 @@ t. AddAllowedFields(&hcloud.ServerType{}). AddFieldFn("location", func(serverType *hcloud.ServerType) string { - locationNames := sliceutil.Transform( - serverType.Locations, - func(l hcloud.ServerTypeLocation) string { return l.Location.Name }, + now := time.Now() + return strings.Join( + sliceutil.Transform( + slices.DeleteFunc( + slices.Clone(serverType.Locations), + func(l hcloud.ServerTypeLocation) bool { return l.IsDeprecated() && l.UnavailableAfter().Before(now) }, + ), + func(l hcloud.ServerTypeLocation) string { return l.Location.Name }, + ), + ",", ) - return strings.Join(locationNames, ",") }). AddFieldAlias("storagetype", "storage type"). AddFieldFn("memory", func(serverType *hcloud.ServerType) string { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/internal/cmd/servertype/list_test.go new/hcloud-cli-1.62.2/internal/cmd/servertype/list_test.go --- old/hcloud-cli-1.62.0/internal/cmd/servertype/list_test.go 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/internal/cmd/servertype/list_test.go 2026-04-07 19:36:15.000000000 +0200 @@ -21,6 +21,11 @@ cmd := servertype.ListCmd.CobraCommand(fx.State()) + serverTypeDeprecation := hcloud.DeprecatableResource{Deprecation: &hcloud.DeprecationInfo{ + Announced: time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC), + UnavailableAfter: time.Date(2025, 4, 1, 0, 0, 0, 0, time.UTC), + }} + fx.ExpectEnsureToken() fx.Client.ServerTypeClient.EXPECT(). AllWithOpts( @@ -41,7 +46,7 @@ Disk: 80, StorageType: hcloud.StorageTypeLocal, Locations: []hcloud.ServerTypeLocation{ - {Location: &hcloud.Location{ID: 1, Name: "fsn1"}}, + {Location: &hcloud.Location{ID: 1, Name: "fsn1"}, DeprecatableResource: serverTypeDeprecation}, {Location: &hcloud.Location{ID: 2, Name: "nbg1"}}, {Location: &hcloud.Location{ID: 3, Name: "hel1"}}, }, @@ -51,7 +56,7 @@ out, errOut, err := fx.Run(cmd, []string{}) expOut := `ID NAME CORES CPU TYPE ARCHITECTURE MEMORY DISK LOCATION -123 test 2 shared arm 8.0 GB 80 GB fsn1,nbg1,hel1 +123 test 2 shared arm 8.0 GB 80 GB nbg1,hel1 ` require.NoError(t, err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/internal/cmd/version/version.go new/hcloud-cli-1.62.2/internal/cmd/version/version.go --- old/hcloud-cli-1.62.0/internal/cmd/version/version.go 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/internal/cmd/version/version.go 2026-04-07 19:36:15.000000000 +0200 @@ -3,7 +3,6 @@ import ( "fmt" "runtime" - "runtime/debug" "text/tabwriter" "github.com/spf13/cobra" @@ -35,25 +34,14 @@ fmt.Fprintf(tw, "go version:\t%s (%s)\n", runtime.Version(), runtime.Compiler) fmt.Fprintf(tw, "platform:\t%s/%s\n", runtime.GOOS, runtime.GOARCH) - if info, ok := debug.ReadBuildInfo(); ok { - rev := getSettingsValue(info.Settings, "vcs.revision", "unknown") - if modified := getSettingsValue(info.Settings, "vcs.modified", "false"); modified == "true" { - rev += " (modified)" - } - - fmt.Fprintf(tw, "revision:\t%s\n", rev) - fmt.Fprintf(tw, "revision date:\t%s\n", getSettingsValue(info.Settings, "vcs.time", "unknown")) + rev := version.Commit + if version.Modified { + rev += " (modified)" } + + fmt.Fprintf(tw, "revision:\t%s\n", rev) + fmt.Fprintf(tw, "revision date:\t%s\n", version.CommitDate) return tw.Flush() } return nil } - -func getSettingsValue(settings []debug.BuildSetting, key, def string) string { - for _, setting := range settings { - if setting.Key == key { - return setting.Value - } - } - return def -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/internal/cmd/version/version_test.go new/hcloud-cli-1.62.2/internal/cmd/version/version_test.go --- old/hcloud-cli-1.62.0/internal/cmd/version/version_test.go 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/internal/cmd/version/version_test.go 2026-04-07 19:36:15.000000000 +0200 @@ -42,7 +42,7 @@ assert.Empty(t, errOut) require.Regexp(t, `^hcloud .* -go version: *go1.[0-9]+.[0-9]+ \((gc|gccgo)\) +go version: *go1.[0-9]+.[0-9]+.* platform: *.+/.+ revision: *(unknown|[0-9a-f]+)( \(modified\))? revision date: *.+`, out) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/internal/version/version.go new/hcloud-cli-1.62.2/internal/version/version.go --- old/hcloud-cli-1.62.0/internal/version/version.go 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/internal/version/version.go 2026-04-07 19:36:15.000000000 +0200 @@ -1,8 +1,10 @@ package version +import "runtime/debug" + var ( // version is a semver version (https://semver.org). - version = "1.62.0" // x-releaser-pleaser-version + version = "1.62.2" // x-releaser-pleaser-version // versionPrerelease is a semver version pre-release identifier (https://semver.org). // @@ -16,4 +18,56 @@ } return version }() + + // Can be set by goreleaser because debug.ReadBuildInfo() is not available for goreleaser builds + commit = "" + + // Commit is the latest full commit hash during build time + Commit = func() string { + if commit != "" { + return commit + } + return getSettingsValue("vcs.revision", "unknown") + }() + + // Can be set by goreleaser because debug.ReadBuildInfo() is not available for goreleaser builds + commitDate = "" + + // CommitDate is the timestamp of the latest commit during build time in RFC3339 + CommitDate = func() string { + if commitDate != "" { + return commitDate + } + return getSettingsValue("vcs.time", "unknown") + }() + + // Can be set by goreleaser because debug.ReadBuildInfo() is not available for goreleaser builds + modified = "" + + // Modified specifies whether the git worktree was dirty during build time + Modified = func() bool { + if modified != "" { + return modified == "true" + } + return getSettingsValue("vcs.modified", "false") == "true" + }() + + // used for getSettingsValue + info, ok = debug.ReadBuildInfo() ) + +// getSettingsValue is a helper for getting values from debug.ReadBuildInfo() +// This is only a fallback for builds that do not use goreleaser, since goreleaser +// usually injects the above variables using ldflags. debug.ReadBuildInfo() will be +// used for example when installing using 'go install'. +func getSettingsValue(key, def string) string { + if !ok { + return def + } + for _, setting := range info.Settings { + if setting.Key == key { + return setting.Value + } + } + return def +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.0/mise.toml new/hcloud-cli-1.62.2/mise.toml --- old/hcloud-cli-1.62.0/mise.toml 2026-03-20 17:37:17.000000000 +0100 +++ new/hcloud-cli-1.62.2/mise.toml 2026-04-07 19:36:15.000000000 +0200 @@ -1,7 +1,7 @@ [tools] -go = "1.25.8" +go = "1.26.1" "go:go.uber.org/mock/mockgen" = "v0.6.0" -"github:golangci/golangci-lint" = "2.11.3" -"github:goreleaser/goreleaser" = "v2.14.3" +"github:golangci/golangci-lint" = "2.11.4" +"github:goreleaser/goreleaser" = "v2.15.2" "github:anchore/quill" = "v0.7.1" "github:jstemmer/go-junit-report" = "v2.1.0" ++++++ hcloud-cli.obsinfo ++++++ --- /var/tmp/diff_new_pack.okc0DE/_old 2026-04-09 16:24:30.329920941 +0200 +++ /var/tmp/diff_new_pack.okc0DE/_new 2026-04-09 16:24:30.337921270 +0200 @@ -1,5 +1,5 @@ name: hcloud-cli -version: 1.62.0 -mtime: 1774024637 -commit: d96cd205a03f93d8cddd6586d918c86be68f83ab +version: 1.62.2 +mtime: 1775583375 +commit: 4b2b4e089e3b6d09f68469bec3ead54b08991bf7 ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/.goreleaser.yml new/vendor/github.com/guptarohit/asciigraph/.goreleaser.yml --- old/vendor/github.com/guptarohit/asciigraph/.goreleaser.yml 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/.goreleaser.yml 2026-04-07 19:36:15.000000000 +0200 @@ -73,6 +73,10 @@ platforms: - linux/amd64 - linux/arm64 + build_args: + VERSION: '{{ .Version }}' + COMMIT: '{{ .FullCommit }}' + DATE: '{{ .Date }}' labels: org.opencontainers.image.title: '{{ .ProjectName }}' org.opencontainers.image.name: '{{ .ProjectName }}' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/.release-please-manifest.json new/vendor/github.com/guptarohit/asciigraph/.release-please-manifest.json --- old/vendor/github.com/guptarohit/asciigraph/.release-please-manifest.json 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/.release-please-manifest.json 2026-04-07 19:36:15.000000000 +0200 @@ -1,3 +1,3 @@ { - ".": "0.8.1" + ".": "0.9.0" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/CHANGELOG.md new/vendor/github.com/guptarohit/asciigraph/CHANGELOG.md --- old/vendor/github.com/guptarohit/asciigraph/CHANGELOG.md 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/CHANGELOG.md 2026-04-07 19:36:15.000000000 +0200 @@ -2,6 +2,19 @@ All notable changes to this project will be documented in this file. +## [0.9.0](https://github.com/guptarohit/asciigraph/compare/v0.8.1...v0.9.0) (2026-03-28) + + +### Added + +* **plot:** add X-axis rendering with tick marks and labels ([#78](https://github.com/guptarohit/asciigraph/pull/78)) +* **cli:** add -xmin, -xmax, and -xt flags for X-axis support ([#78](https://github.com/guptarohit/asciigraph/pull/78)) + + +### Fixed + +* **docker:** add OCI labels to Dockerfile for ghcr.io metadata ([#76](https://github.com/guptarohit/asciigraph/issues/76)) ([02f3e4a](https://github.com/guptarohit/asciigraph/commit/02f3e4a0f5136d710be39c407f77cfffc384821b)) + ## [0.8.1](https://github.com/guptarohit/asciigraph/compare/v0.8.0...v0.8.1) (2026-03-08) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/README.md new/vendor/github.com/guptarohit/asciigraph/README.md --- old/vendor/github.com/guptarohit/asciigraph/README.md 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/README.md 2026-04-07 19:36:15.000000000 +0200 @@ -116,6 +116,45 @@ 2.00 GiB ┤ ╰─ ``` +### X-axis Support + +Use `XAxisRange(min, max)` to add a labeled X-axis below the graph. +`XAxisTickCount(n)` controls how many tick marks appear (default 5, minimum 2). + +```go +package main + +import ( + "fmt" + "github.com/guptarohit/asciigraph" +) + +func main() { + data := []float64{3, 4, 9, 6, 2, 4, 5, 8, 5, 10, 2, 7, 2, 5, 6} + graph := asciigraph.Plot(data, + asciigraph.XAxisRange(0, 14), + asciigraph.XAxisTickCount(3), + ) + + fmt.Println(graph) +} +``` + +Running this example would render the following graph: +```bash + 10.00 ┤ ╭╮ + 9.00 ┤ ╭╮ ││ + 8.00 ┤ ││ ╭╮││ + 7.00 ┤ ││ ││││╭╮ + 6.00 ┤ │╰╮ ││││││ ╭ + 5.00 ┤ │ │ ╭╯╰╯│││╭╯ + 4.00 ┤╭╯ │╭╯ ││││ + 3.00 ┼╯ ││ ││││ + 2.00 ┤ ╰╯ ╰╯╰╯ + └┬──────┬──────┬ + 0 7 14 +``` + ### Colored graphs ```go @@ -248,18 +287,24 @@ upper bound set the maximum value for the vertical axis (ignored if series contains larger values) (default -Inf) -w width width in columns, 0 for auto-scaling + -xmax value + x-axis maximum value (default NaN) + -xmin value + x-axis minimum value (default NaN) + -xt tick count + x-axis tick count (default 5, minimum 2) asciigraph expects data points from stdin. Invalid values are logged to stderr. ``` Feed it data points via stdin: ```bash -seq 1 72 | asciigraph -h 10 -c "plot data from stdin" +seq 1 72 | asciigraph -h 10 -c "plot data from stdin" -xmin 0 -xmax 40 -xt 5 ``` or use Docker image: ```bash -seq 1 72 | docker run -i --rm ghcr.io/guptarohit/asciigraph -h 10 -c "plot data from stdin" +seq 1 72 | docker run -i --rm ghcr.io/guptarohit/asciigraph -h 10 -c "plot data from stdin" -xmin 0 -xmax 40 -xt 5 ``` Output: @@ -276,6 +321,8 @@ 15.20 ┤ ╭──────╯ 8.10 ┤ ╭──────╯ 1.00 ┼──╯ + └┬─────────────────┬─────────────────┬────────────────┬─────────────────┬ + 0 10 20 30 40 plot data from stdin ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/asciigraph.go new/vendor/github.com/guptarohit/asciigraph/asciigraph.go --- old/vendor/github.com/guptarohit/asciigraph/asciigraph.go 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/asciigraph.go 2026-04-07 19:36:15.000000000 +0200 @@ -42,6 +42,12 @@ if charSet.StartCap == "" { charSet.StartCap = DefaultCharSet.StartCap } + if charSet.UpRight == "" { + charSet.UpRight = DefaultCharSet.UpRight + } + if charSet.DownHorizontal == "" { + charSet.DownHorizontal = DefaultCharSet.DownHorizontal + } return charSet } return DefaultCharSet @@ -313,6 +319,11 @@ } } + // add x-axis if configured + if config.XAxisRange != nil { + addXAxis(&lines, config, lenMax, leftPad) + } + // add caption if not empty if config.Caption != "" { lines.WriteString(config.LineEnding) @@ -335,3 +346,156 @@ return lines.String() } + +// defaultXAxisFormatter formats X-axis tick values using %g. +var defaultXAxisFormatter XAxisValueFormatterFunc = func(v float64) string { + return fmt.Sprintf("%g", v) +} + +// addXAxis appends an X-axis line and tick labels below the plot body. +func addXAxis(lines *bytes.Buffer, config *config, lenMax int, leftPad int) { + if lenMax <= 0 { + return + } + + xMin := config.XAxisRange[0] + xMax := config.XAxisRange[1] + + tickCount := config.XAxisTickCount + if lenMax == 1 { + tickCount = 1 + } else if tickCount < 2 { + tickCount = 5 + } + if tickCount > lenMax { + tickCount = lenMax + } + + formatter := config.XAxisValueFormatter + + // compute tick column positions and values + type tick struct { + col int + value float64 + label string + } + ticks := make([]tick, tickCount) + for i := 0; i < tickCount; i++ { + if tickCount == 1 { + ticks[i].col = 0 + ticks[i].value = xMin + } else { + ticks[i].value = xMin + float64(i)/float64(tickCount-1)*(xMax-xMin) + ticks[i].col = int(math.Round(float64(lenMax-1) * float64(i) / float64(tickCount-1))) + } + } + + // select formatter: when using default, auto-detect precision based on visible ticks + if formatter == nil { + // simulate overlap with %g labels to find visible ticks with fractional values + hasDecimal := false + lastEnd := -1 + for i := range ticks { + label := defaultXAxisFormatter(ticks[i].value) + labelLen := utf8.RuneCountInString(label) + startCol := leftPad + ticks[i].col - labelLen/2 + if startCol < 0 { + startCol = 0 + } + if startCol > lastEnd { + if ticks[i].value != math.Floor(ticks[i].value) { + hasDecimal = true + break + } + lastEnd = startCol + labelLen + } + } + if hasDecimal { + formatter = func(v float64) string { return fmt.Sprintf("%.2f", v) } + } else { + formatter = defaultXAxisFormatter + } + } + + // format labels + for i := range ticks { + ticks[i].label = formatter(ticks[i].value) + } + + // axis line: leftPad-1 spaces + └ + ─/┬ characters + totalWidth := leftPad + lenMax + axisLine := make([]rune, totalWidth) + for i := range axisLine { + axisLine[i] = ' ' + } + axisLine[leftPad-1] = []rune(DefaultCharSet.UpRight)[0] + for i := 0; i < lenMax; i++ { + axisLine[leftPad+i] = []rune(DefaultCharSet.Horizontal)[0] + } + for _, tk := range ticks { + axisLine[leftPad+tk.col] = []rune(DefaultCharSet.DownHorizontal)[0] + } + + // write axis line with colors + lines.WriteString(config.LineEnding) + axisStr := strings.TrimRight(string(axisLine), " ") + if config.AxisColor != Default { + lines.WriteString(config.AxisColor.String()) + } + lines.WriteString(axisStr) + if config.AxisColor != Default { + lines.WriteString(Default.String()) + } + + // label line: place each label centered on its tick column + maxRightExtent := totalWidth + for _, tk := range ticks { + labelLen := utf8.RuneCountInString(tk.label) + endCol := leftPad + tk.col + (labelLen - labelLen/2) + if endCol > maxRightExtent { + maxRightExtent = endCol + } + } + labelLine := make([]rune, maxRightExtent) + for i := range labelLine { + labelLine[i] = ' ' + } + + lastEnd := -1 // tracks the rightmost column used by the previous label + for _, tk := range ticks { + labelRunes := []rune(tk.label) + labelLen := len(labelRunes) + + // center the label on the tick column + startCol := leftPad + tk.col - labelLen/2 + if startCol < 0 { + startCol = 0 + } + + // skip if this label would overlap the previous one (need 1-space gap) + if startCol <= lastEnd { + continue + } + + for j, r := range labelRunes { + pos := startCol + j + if pos < len(labelLine) { + labelLine[pos] = r + } + } + lastEnd = startCol + labelLen + } + + // trim and write label line + labelStr := strings.TrimRight(string(labelLine), " ") + if labelStr != "" { + lines.WriteString(config.LineEnding) + if config.LabelColor != Default { + lines.WriteString(config.LabelColor.String()) + } + lines.WriteString(labelStr) + if config.LabelColor != Default { + lines.WriteString(Default.String()) + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/goreleaser.dockerfile new/vendor/github.com/guptarohit/asciigraph/goreleaser.dockerfile --- old/vendor/github.com/guptarohit/asciigraph/goreleaser.dockerfile 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/goreleaser.dockerfile 2026-04-07 19:36:15.000000000 +0200 @@ -1,4 +1,16 @@ FROM scratch ARG TARGETPLATFORM +ARG VERSION +ARG COMMIT +ARG DATE COPY $TARGETPLATFORM/asciigraph /asciigraph +LABEL org.opencontainers.image.title="asciigraph" \ + org.opencontainers.image.name="asciigraph" \ + org.opencontainers.image.description="Go package to make lightweight line graphs ╭┈╯ in CLI" \ + org.opencontainers.image.url="https://github.com/guptarohit/asciigraph" \ + org.opencontainers.image.source="https://github.com/guptarohit/asciigraph" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.created="${DATE}" \ + org.opencontainers.image.revision="${COMMIT}" \ + org.opencontainers.image.licenses="BSD-3-Clause" ENTRYPOINT ["/asciigraph"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/options.go new/vendor/github.com/guptarohit/asciigraph/options.go --- old/vendor/github.com/guptarohit/asciigraph/options.go 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/options.go 2026-04-07 19:36:15.000000000 +0200 @@ -6,40 +6,46 @@ // CharSet defines the characters used for plotting a series. type CharSet struct { - Horizontal string // Horizontal line character (default: ─) - VerticalLine string // Vertical line character (default: │) - ArcDownRight string // Arc character going down and right (default: ╭) - ArcDownLeft string // Arc character going down and left (default: ╮) - ArcUpRight string // Arc character going up and right (default: ╰) - ArcUpLeft string // Arc character going up and left (default: ╯) - EndCap string // End cap character (default: ╴) - StartCap string // Start cap character (default: ╶) + Horizontal string // Horizontal line character (default: ─) + VerticalLine string // Vertical line character (default: │) + ArcDownRight string // Arc character going down and right (default: ╭) + ArcDownLeft string // Arc character going down and left (default: ╮) + ArcUpRight string // Arc character going up and right (default: ╰) + ArcUpLeft string // Arc character going up and left (default: ╯) + EndCap string // End cap character (default: ╴) + StartCap string // Start cap character (default: ╶) + UpRight string // Axis corner character (default: └) + DownHorizontal string // X-axis tick mark character (default: ┬) } // DefaultCharSet provides the default box-drawing characters. var DefaultCharSet = CharSet{ - Horizontal: "─", - VerticalLine: "│", - ArcDownRight: "╭", - ArcDownLeft: "╮", - ArcUpRight: "╰", - ArcUpLeft: "╯", - EndCap: "╴", - StartCap: "╶", + Horizontal: "─", + VerticalLine: "│", + ArcDownRight: "╭", + ArcDownLeft: "╮", + ArcUpRight: "╰", + ArcUpLeft: "╯", + EndCap: "╴", + StartCap: "╶", + UpRight: "└", + DownHorizontal: "┬", } // CreateCharSet is a helper function that creates a CharSet with all fields set to the same character. // This is useful for simple uniform character sets like "*", "•", "#", etc. func CreateCharSet(char string) CharSet { return CharSet{ - Horizontal: char, - VerticalLine: char, - ArcDownRight: char, - ArcDownLeft: char, - ArcUpRight: char, - ArcUpLeft: char, - EndCap: char, - StartCap: char, + Horizontal: char, + VerticalLine: char, + ArcDownRight: char, + ArcDownLeft: char, + ArcUpRight: char, + ArcUpLeft: char, + EndCap: char, + StartCap: char, + UpRight: char, + DownHorizontal: char, } } @@ -63,11 +69,17 @@ LineEnding string SeriesChars []CharSet YAxisValueFormatter YAxisValueFormatterFunc + XAxisRange *[2]float64 + XAxisTickCount int + XAxisValueFormatter XAxisValueFormatterFunc } // YAxisValueFormatterFunc formats a single Y-axis value. type YAxisValueFormatterFunc func(float64) string +// XAxisValueFormatterFunc formats a single X-axis tick value. +type XAxisValueFormatterFunc func(float64) string + // An optionFunc applies an option. type optionFunc func(*config) @@ -196,3 +208,26 @@ c.YAxisValueFormatter = f }) } + +// XAxisRange enables the X-axis and maps the given domain [min, max] onto the plot width. +func XAxisRange(min, max float64) Option { + return optionFunc(func(c *config) { + c.XAxisRange = &[2]float64{min, max} + }) +} + +// XAxisTickCount sets the number of ticks on the X-axis. Default is 5, minimum is 2. +func XAxisTickCount(n int) Option { + return optionFunc(func(c *config) { + if n >= 2 { + c.XAxisTickCount = n + } + }) +} + +// XAxisValueFormatter formats values printed on the X-axis. +func XAxisValueFormatter(f XAxisValueFormatterFunc) Option { + return optionFunc(func(c *config) { + c.XAxisValueFormatter = f + }) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/guptarohit/asciigraph/release-please-config.json new/vendor/github.com/guptarohit/asciigraph/release-please-config.json --- old/vendor/github.com/guptarohit/asciigraph/release-please-config.json 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/guptarohit/asciigraph/release-please-config.json 2026-04-07 19:36:15.000000000 +0200 @@ -52,7 +52,8 @@ "packages": { ".": { "release-type": "go", - "changelog-path": "CHANGELOG.md" + "changelog-path": "CHANGELOG.md", + "release-as": "0.9.0" } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go 2026-04-07 19:36:15.000000000 +0200 @@ -80,4 +80,4 @@ package hcloud // Version is the library's version following Semantic Versioning. -const Version = "2.36.0" // x-releaser-pleaser-version +const Version = "2.37.0" // x-releaser-pleaser-version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go new/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go --- old/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go 2026-04-07 19:36:15.000000000 +0200 @@ -51,22 +51,49 @@ if colIdx < len(row) { colStr = row[colIdx] } - out.WriteRune(' ') colStr = strings.ReplaceAll(colStr, "|", "\\|") colStr = strings.ReplaceAll(colStr, "\n", "<br/>") - out.WriteString(colStr) - out.WriteRune(' ') + if t.style.Markdown.PadContent { + out.WriteRune(' ') + align := t.getAlign(colIdx, hint) + out.WriteString(align.Apply(colStr, t.maxColumnLengths[colIdx])) + out.WriteRune(' ') + } else { + out.WriteRune(' ') + out.WriteString(colStr) + out.WriteRune(' ') + } out.WriteRune('|') } } func (t *Table) markdownRenderRowAutoIndex(out *strings.Builder, colIdx int, hint renderHint) { if colIdx == 0 && t.autoIndex { - out.WriteRune(' ') if hint.isSeparatorRow { - out.WriteString("---:") + if t.style.Markdown.PadContent { + out.WriteString(" " + strings.Repeat("-", t.autoIndexVIndexMaxLength) + ":") + } else { + out.WriteRune(' ') + out.WriteString("---:") + } } else if hint.isRegularRow() { - fmt.Fprintf(out, "%d ", hint.rowNumber) + if t.style.Markdown.PadContent { + rowNumStr := fmt.Sprint(hint.rowNumber) + out.WriteRune(' ') + fmt.Fprintf(out, "%*s", t.autoIndexVIndexMaxLength, rowNumStr) + out.WriteRune(' ') + } else { + out.WriteRune(' ') + fmt.Fprintf(out, "%d ", hint.rowNumber) + } + } else { + if t.style.Markdown.PadContent { + out.WriteRune(' ') + out.WriteString(strings.Repeat(" ", t.autoIndexVIndexMaxLength)) + out.WriteRune(' ') + } else { + out.WriteRune(' ') + } } out.WriteRune('|') } @@ -107,7 +134,12 @@ for colIdx := 0; colIdx < t.numColumns; colIdx++ { t.markdownRenderRowAutoIndex(out, colIdx, hint) - out.WriteString(t.getAlign(colIdx, hint).MarkdownProperty()) + align := t.getAlign(colIdx, hint) + if t.style.Markdown.PadContent { + out.WriteString(align.MarkdownProperty(t.maxColumnLengths[colIdx])) + } else { + out.WriteString(align.MarkdownProperty()) + } out.WriteRune('|') } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/jedib0t/go-pretty/v6/table/style.go new/vendor/github.com/jedib0t/go-pretty/v6/table/style.go --- old/vendor/github.com/jedib0t/go-pretty/v6/table/style.go 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/jedib0t/go-pretty/v6/table/style.go 2026-04-07 19:36:15.000000000 +0200 @@ -3,14 +3,15 @@ // Style declares how to render the Table and provides very fine-grained control // on how the Table gets rendered on the Console. type Style struct { - Name string // name of the Style - Box BoxStyle // characters to use for the boxes - Color ColorOptions // colors to use for the rows and columns - Format FormatOptions // formatting options for the rows and columns - HTML HTMLOptions // rendering options for HTML mode - Options Options // misc. options for the table - Size SizeOptions // size (width) options for the table - Title TitleOptions // formation options for the title text + Name string // name of the Style + Box BoxStyle // characters to use for the boxes + Color ColorOptions // colors to use for the rows and columns + Format FormatOptions // formatting options for the rows and columns + HTML HTMLOptions // rendering options for HTML mode + Markdown MarkdownOptions // rendering options for Markdown mode + Options Options // misc. options for the table + Size SizeOptions // size (width) options for the table + Title TitleOptions // formation options for the title text } var ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/jedib0t/go-pretty/v6/table/style_markdown.go new/vendor/github.com/jedib0t/go-pretty/v6/table/style_markdown.go --- old/vendor/github.com/jedib0t/go-pretty/v6/table/style_markdown.go 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/github.com/jedib0t/go-pretty/v6/table/style_markdown.go 2026-04-07 19:36:15.000000000 +0200 @@ -0,0 +1,25 @@ +package table + +// MarkdownOptions defines options to control Markdown rendering. +type MarkdownOptions struct { + // PadContent pads each column content to match the longest content in + // the column, and extends the separator dashes to match. This makes the + // raw Markdown source more readable without affecting the rendered + // output. + // + // When disabled (default): + // | # | First Name | Last Name | Salary | | + // | ---:| --- | --- | ---:| --- | + // | 1 | Arya | Stark | 3000 | | + // + // When enabled: + // | # | First Name | Last Name | Salary | | + // | ---:| ---------- | --------- | ------:| --------------------------- | + // | 1 | Arya | Stark | 3000 | | + PadContent bool +} + +var ( + // DefaultMarkdownOptions defines sensible Markdown rendering defaults. + DefaultMarkdownOptions = MarkdownOptions{} +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/jedib0t/go-pretty/v6/text/align.go new/vendor/github.com/jedib0t/go-pretty/v6/text/align.go --- old/vendor/github.com/jedib0t/go-pretty/v6/text/align.go 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/github.com/jedib0t/go-pretty/v6/text/align.go 2026-04-07 19:36:15.000000000 +0200 @@ -76,16 +76,24 @@ } // MarkdownProperty returns the equivalent Markdown horizontal-align separator. -func (a Align) MarkdownProperty() string { +// An optional minLength can be provided to extend the dashes to match the +// column content width; the result will be max(minLength, 3)+2 wide (including +// leading/trailing space or colon). Without minLength (or 0), it defaults to 3. +func (a Align) MarkdownProperty(minLength ...int) string { + length := 3 + if len(minLength) > 0 && minLength[0] > length { + length = minLength[0] + } + dashes := strings.Repeat("-", length) switch a { case AlignLeft: - return ":--- " + return ":" + dashes + " " case AlignCenter: - return ":---:" + return ":" + dashes + ":" case AlignRight: - return " ---:" + return " " + dashes + ":" default: - return " --- " + return " " + dashes + " " } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2026-03-20 17:37:17.000000000 +0100 +++ new/vendor/modules.txt 2026-04-07 19:36:15.000000000 +0200 @@ -52,11 +52,11 @@ github.com/goccy/go-yaml/printer github.com/goccy/go-yaml/scanner github.com/goccy/go-yaml/token -# github.com/guptarohit/asciigraph v0.8.1 +# github.com/guptarohit/asciigraph v0.9.0 ## explicit; go 1.11 github.com/guptarohit/asciigraph -# github.com/hetznercloud/hcloud-go/v2 v2.36.0 -## explicit; go 1.24.0 +# github.com/hetznercloud/hcloud-go/v2 v2.37.0 +## explicit; go 1.25.0 github.com/hetznercloud/hcloud-go/v2/hcloud github.com/hetznercloud/hcloud-go/v2/hcloud/exp/actionutil github.com/hetznercloud/hcloud-go/v2/hcloud/exp/ctxutil @@ -73,7 +73,7 @@ # github.com/inconshreveable/mousetrap v1.1.0 ## explicit; go 1.18 github.com/inconshreveable/mousetrap -# github.com/jedib0t/go-pretty/v6 v6.7.8 +# github.com/jedib0t/go-pretty/v6 v6.7.9 ## explicit; go 1.18 github.com/jedib0t/go-pretty/v6/table github.com/jedib0t/go-pretty/v6/text
