diff --git a/cli/root_test.go b/cli/root_test.go index 5689691226aa2..7edc46f17c5a7 100644 --- a/cli/root_test.go +++ b/cli/root_test.go @@ -13,6 +13,8 @@ import ( "strings" "testing" + "github.com/charmbracelet/lipgloss" + "github.com/muesli/termenv" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -33,8 +35,17 @@ var updateGoldenFiles = flag.Bool("update", false, "update .golden files") var timestampRegex = regexp.MustCompile(`(?i)\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(.\d+)?Z`) +// We need to override the global color profile. +// +//nolint:tparallel,paralleltest func TestCommandHelp(t *testing.T) { - t.Parallel() + ogColorProfile := lipgloss.ColorProfile() + // ANSI256 escape codes are far easier for humans to parse in a diff, + // but TrueColor is probably more popular with modern terminals. + lipgloss.SetColorProfile(termenv.ANSI) + t.Cleanup(func() { + lipgloss.SetColorProfile(ogColorProfile) + }) rootClient, replacements := prepareTestData(t) type testCase struct { diff --git a/cli/testdata/coder_--help.golden b/cli/testdata/coder_--help.golden index cca6cf17b352b..7b2fcd494a5db 100644 --- a/cli/testdata/coder_--help.golden +++ b/cli/testdata/coder_--help.golden @@ -3,11 +3,11 @@ Usage: coder [global-flags] Coder v0.0.0-devel — A tool for provisioning self-hosted development environments with Terraform. - Start a Coder server: - $ coder server +  $ coder server  - Get started by creating a template from an example: - $ coder templates init +  $ coder templates init  Subcommands config-ssh Add an SSH Host entry for your workspaces "ssh diff --git a/cli/testdata/coder_config-ssh_--help.golden b/cli/testdata/coder_config-ssh_--help.golden index 8fa97d85ca0f3..299eeb39ddaa6 100644 --- a/cli/testdata/coder_config-ssh_--help.golden +++ b/cli/testdata/coder_config-ssh_--help.golden @@ -5,11 +5,11 @@ Add an SSH Host entry for your workspaces "ssh coder.workspace" - You can use -o (or --ssh-option) so set SSH options to be used for all your workspaces: - $ coder config-ssh -o ForwardAgent=yes +  $ coder config-ssh -o ForwardAgent=yes  - You can use --dry-run (or -n) to see the changes that would be made: - $ coder config-ssh --dry-run +  $ coder config-ssh --dry-run  Options -n, --dry-run bool, $CODER_SSH_DRY_RUN diff --git a/cli/testdata/coder_dotfiles_--help.golden b/cli/testdata/coder_dotfiles_--help.golden index 8b3ca813ae4ae..ee2aade95155f 100644 --- a/cli/testdata/coder_dotfiles_--help.golden +++ b/cli/testdata/coder_dotfiles_--help.golden @@ -4,7 +4,7 @@ Personalize your workspace by applying a canonical dotfiles repository - Check out and install a dotfiles repository without prompts: - $ coder dotfiles --yes git@github.com:example/dotfiles.git +  $ coder dotfiles --yes git@github.com:example/dotfiles.git  Options --symlink-dir string, $CODER_SYMLINK_DIR diff --git a/cli/testdata/coder_port-forward_--help.golden b/cli/testdata/coder_port-forward_--help.golden index d9340fc20f942..fd87e6b4fbe2d 100644 --- a/cli/testdata/coder_port-forward_--help.golden +++ b/cli/testdata/coder_port-forward_--help.golden @@ -7,20 +7,20 @@ Aliases: tunnel - Port forward a single TCP port from 1234 in the workspace to port 5678 on your local machine: - $ coder port-forward --tcp 5678:1234 +  $ coder port-forward --tcp 5678:1234  - Port forward a single UDP port from port 9000 to port 9000 on your local machine: - $ coder port-forward --udp 9000 +  $ coder port-forward --udp 9000  - Port forward multiple TCP ports and a UDP port: - $ coder port-forward --tcp 8080:8080 --tcp 9000:3000 --udp 5353:53 +  $ coder port-forward --tcp 8080:8080 --tcp 9000:3000 --udp 5353:53  - Port forward multiple ports (TCP or UDP) in condensed syntax: - $ coder port-forward --tcp 8080,9000:3000,9090-9092,10000-10002:10010-10012 +  $ coder port-forward --tcp 8080,9000:3000,9090-9092,10000-10002:10010-10012  Options -p, --tcp string-array, $CODER_PORT_FORWARD_TCP diff --git a/cli/testdata/coder_schedule_override-stop_--help.golden b/cli/testdata/coder_schedule_override-stop_--help.golden index 102e7fd9329b2..b0b5ca3050ca9 100644 --- a/cli/testdata/coder_schedule_override-stop_--help.golden +++ b/cli/testdata/coder_schedule_override-stop_--help.golden @@ -6,7 +6,7 @@ Override the stop time of a currently running workspace instance. * The new stop time must be at least 30 minutes in the future. * The workspace template may restrict the maximum workspace runtime. - $ coder schedule override-stop my-workspace 90m +  $ coder schedule override-stop my-workspace 90m  --- Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_schedule_start_--help.golden b/cli/testdata/coder_schedule_start_--help.golden index 73d661de70987..21854d2e39081 100644 --- a/cli/testdata/coder_schedule_start_--help.golden +++ b/cli/testdata/coder_schedule_start_--help.golden @@ -14,7 +14,7 @@ Schedule format: [day-of-week] [location]. - Set the workspace to start at 9:30am (in Dublin) from Monday to Friday: - $ coder schedule start my-workspace 9:30AM Mon-Fri Europe/Dublin +  $ coder schedule start my-workspace 9:30AM Mon-Fri Europe/Dublin  --- Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_schedule_stop_--help.golden b/cli/testdata/coder_schedule_stop_--help.golden index 14cd6cac9f2f7..44cda6c083d72 100644 --- a/cli/testdata/coder_schedule_stop_--help.golden +++ b/cli/testdata/coder_schedule_stop_--help.golden @@ -15,7 +15,7 @@ When enabling scheduled stop, enter a duration in one of the following formats: * 2m (2 minutes) * 2 (2 minutes) - $ coder schedule stop my-workspace 2h30m +  $ coder schedule stop my-workspace 2h30m  --- Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_--help.golden b/cli/testdata/coder_templates_--help.golden index a11729b1d3d84..0bcc6c7978df7 100644 --- a/cli/testdata/coder_templates_--help.golden +++ b/cli/testdata/coder_templates_--help.golden @@ -7,15 +7,15 @@ Aliases: template Templates are written in standard Terraform and describe the infrastructure for workspaces - Create a template for developers to create workspaces: - $ coder templates create +  $ coder templates create  - Make changes to your template, and plan the changes: - $ coder templates plan my-template +  $ coder templates plan my-template  - Push an update to the template. Your developers can update their workspaces: - $ coder templates push my-template +  $ coder templates push my-template  Subcommands create Create a template from the current directory or as specified by diff --git a/cli/testdata/coder_templates_versions_--help.golden b/cli/testdata/coder_templates_versions_--help.golden index 4f7388cd460c6..58636e2ccdf6c 100644 --- a/cli/testdata/coder_templates_versions_--help.golden +++ b/cli/testdata/coder_templates_versions_--help.golden @@ -6,7 +6,7 @@ Aliases: version - List versions of a specific template: - $ coder templates versions list my-template +  $ coder templates versions list my-template  Subcommands list List all the versions of the specified template diff --git a/cli/testdata/coder_tokens_--help.golden b/cli/testdata/coder_tokens_--help.golden index 921577860e6ba..0ba7c3f1fe316 100644 --- a/cli/testdata/coder_tokens_--help.golden +++ b/cli/testdata/coder_tokens_--help.golden @@ -7,15 +7,15 @@ Aliases: token Tokens are used to authenticate automated clients to Coder. - Create a token for automation: - $ coder tokens create +  $ coder tokens create  - List your tokens: - $ coder tokens ls +  $ coder tokens ls  - Remove a token by ID: - $ coder tokens rm WuoWs4ZsMX +  $ coder tokens rm WuoWs4ZsMX  Subcommands create Create a token diff --git a/cli/testdata/coder_users_activate_--help.golden b/cli/testdata/coder_users_activate_--help.golden index 3b89a12a95149..2d76f7257242e 100644 --- a/cli/testdata/coder_users_activate_--help.golden +++ b/cli/testdata/coder_users_activate_--help.golden @@ -5,7 +5,7 @@ platform Aliases: active -$ coder users activate example_user + $ coder users activate example_user  Options -c, --column string-array (default: username,email,created_at,status) diff --git a/cli/testdata/coder_users_show_--help.golden b/cli/testdata/coder_users_show_--help.golden index f3b36485a6cf9..2d20c844dd5f6 100644 --- a/cli/testdata/coder_users_show_--help.golden +++ b/cli/testdata/coder_users_show_--help.golden @@ -2,7 +2,7 @@ Usage: coder users show [flags] Show a single user. Use 'me' to indicate the currently authenticated user. -$ coder users show me + $ coder users show me  Options -o, --output string (default: table) diff --git a/cli/testdata/coder_users_suspend_--help.golden b/cli/testdata/coder_users_suspend_--help.golden index 8d57baa33f8b3..b5abb4a2c908e 100644 --- a/cli/testdata/coder_users_suspend_--help.golden +++ b/cli/testdata/coder_users_suspend_--help.golden @@ -5,7 +5,7 @@ platform Aliases: rm, delete -$ coder users suspend example_user + $ coder users suspend example_user  Options -c, --column string-array (default: username,email,created_at,status) diff --git a/cli/version_test.go b/cli/version_test.go index 6c2067886219f..4267e46f9ad69 100644 --- a/cli/version_test.go +++ b/cli/version_test.go @@ -6,18 +6,28 @@ import ( "strings" "testing" + "github.com/charmbracelet/lipgloss" + "github.com/muesli/termenv" "github.com/stretchr/testify/require" "github.com/coder/coder/cli/clitest" "github.com/coder/coder/testutil" ) +// We need to override the global color profile to test escape codes. +// +//nolint:tparallel,paralleltest func TestVersion(t *testing.T) { - t.Parallel() + ogColorProfile := lipgloss.ColorProfile() + lipgloss.SetColorProfile(termenv.ANSI) + t.Cleanup(func() { + lipgloss.SetColorProfile(ogColorProfile) + }) + expectedText := `Coder v0.0.0-devel https://github.com/coder/coder -Full build of Coder, supports the server subcommand. +Full build of Coder, supports the  server  subcommand. ` expectedJSON := `{ "version": "v0.0.0-devel", diff --git a/coderd/workspaceagents.go b/coderd/workspaceagents.go index e6ffa5d4d6ef9..6028336892864 100644 --- a/coderd/workspaceagents.go +++ b/coderd/workspaceagents.go @@ -930,7 +930,12 @@ func (api *API) workspaceAgentCoordinate(rw http.ResponseWriter, r *http.Request } api.publishWorkspaceUpdate(ctx, build.WorkspaceID) - api.Logger.Info(ctx, "accepting agent", slog.F("agent", workspaceAgent)) + api.Logger.Info(ctx, "accepting agent", + slog.F("owner", owner.Username), + slog.F("workspace", workspace.Name), + slog.F("name", workspaceAgent.Name), + ) + api.Logger.Debug(ctx, "accepting agent details", slog.F("agent", workspaceAgent)) defer conn.Close(websocket.StatusNormalClosure, "") diff --git a/enterprise/audit/backends/slog.go b/enterprise/audit/backends/slog.go index c4c67c0932a0d..2c1302563acb1 100644 --- a/enterprise/audit/backends/slog.go +++ b/enterprise/audit/backends/slog.go @@ -23,10 +23,14 @@ func (slogBackend) Decision() audit.FilterDecision { } func (b slogBackend) Export(ctx context.Context, alog database.AuditLog) error { - m := structs.Map(alog) - fields := make([]slog.Field, 0, len(m)) - for k, v := range m { - fields = append(fields, slog.F(k, v)) + // We don't use structs.Map because we don't want to recursively convert + // fields into maps. When we keep the type information, slog can more + // pleasantly format the output. For example, the clean result of + // (*NullString).Value() may be printed instead of {String: "foo", Valid: true}. + sfs := structs.Fields(alog) + var fields []slog.Field + for _, sf := range sfs { + fields = append(fields, slog.F(sf.Name(), sf.Value())) } b.log.Info(ctx, "audit_log", fields...) diff --git a/go.mod b/go.mod index fed0d2b11cd01..fda2c6e4c914a 100644 --- a/go.mod +++ b/go.mod @@ -51,7 +51,7 @@ replace github.com/gliderlabs/ssh => github.com/coder/ssh v0.0.0-20230421140225- replace github.com/imulab/go-scim/pkg/v2 => github.com/coder/go-scim/pkg/v2 v2.0.0-20230221055123-1d63c1222136 require ( - cdr.dev/slog v1.4.2 + cdr.dev/slog v1.5.3 cloud.google.com/go/compute/metadata v0.2.3 github.com/AlecAivazis/survey/v2 v2.3.5 github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d @@ -67,7 +67,9 @@ require ( github.com/cenkalti/backoff/v4 v4.2.0 github.com/charmbracelet/charm v0.12.4 github.com/charmbracelet/glamour v0.6.0 - github.com/charmbracelet/lipgloss v0.6.0 + // In later at least v0.7.1, lipgloss changes its terminal detection + // which breaks most of our CLI golden files tests. + github.com/charmbracelet/lipgloss v0.7.1 github.com/cli/safeexec v1.0.0 github.com/codeclysm/extract v2.2.0+incompatible github.com/coder/flog v1.1.0 @@ -86,7 +88,7 @@ require ( github.com/gen2brain/beeep v0.0.0-20220402123239-6a3042f4b71a github.com/gliderlabs/ssh v0.3.4 github.com/go-chi/chi v1.5.4 - github.com/go-chi/chi/v5 v5.0.7 + github.com/go-chi/chi/v5 v5.0.8 github.com/go-chi/httprate v0.7.1 github.com/go-chi/render v1.0.1 github.com/go-jose/go-jose/v3 v3.0.0 @@ -116,7 +118,7 @@ require ( github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f github.com/klauspost/compress v1.16.3 github.com/lib/pq v1.10.6 - github.com/mattn/go-isatty v0.0.17 + github.com/mattn/go-isatty v0.0.18 github.com/mitchellh/go-wordwrap v1.0.1 github.com/mitchellh/mapstructure v1.5.0 github.com/moby/moby v20.10.23+incompatible @@ -158,11 +160,11 @@ require ( golang.org/x/mod v0.10.0 golang.org/x/oauth2 v0.5.0 golang.org/x/sync v0.1.0 - golang.org/x/sys v0.7.0 + golang.org/x/sys v0.8.0 golang.org/x/term v0.7.0 golang.org/x/tools v0.6.0 golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 - golang.zx2c4.com/wireguard v0.0.0-20230223181233-21636207a675 + golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b google.golang.org/api v0.108.0 google.golang.org/grpc v1.54.0 google.golang.org/protobuf v1.28.2-0.20230118093459-a9481185b34d @@ -174,9 +176,11 @@ require ( tailscale.com v1.32.2 ) +require github.com/go-chi/cors v1.2.1 + require ( github.com/armon/go-radix v1.0.0 // indirect - github.com/go-chi/cors v1.2.1 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect ) require ( @@ -197,7 +201,6 @@ require ( github.com/ammario/tlru v0.3.0 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/aymanbagabas/go-osc52 v1.2.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bep/godartsass v0.16.0 // indirect @@ -293,7 +296,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/muesli/ansi v0.0.0-20221106050444-61f0cd9a192a // indirect github.com/muesli/cancelreader v0.2.2 // indirect - github.com/muesli/termenv v0.14.0 // indirect + github.com/muesli/termenv v0.15.1 github.com/niklasfasching/go-org v1.6.5 // indirect github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect @@ -306,7 +309,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect - github.com/rivo/uniseg v0.4.3 // indirect + github.com/rivo/uniseg v0.4.4 // indirect github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/spf13/cast v1.5.0 // indirect diff --git a/go.sum b/go.sum index eff37e92f44fd..2e8842c9317d8 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= -cdr.dev/slog v1.4.2 h1:fIfiqASYQFJBZiASwL825atyzeA96NsqSxx2aL61P8I= -cdr.dev/slog v1.4.2/go.mod h1:0EkH+GkFNxizNR+GAXUEdUHanxUH5t9zqPILmPM/Vn8= +cdr.dev/slog v1.5.3 h1:Ry3RZLX6r1/n7Yud9K9Wz7h230VWKxl8m/COPmnWIyM= +cdr.dev/slog v1.5.3/go.mod h1:vW6Q4gGoDZSb4Db2wxAZoUba/HRUpen1g0fCu06zrjQ= 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= @@ -228,8 +228,9 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21 github.com/aws/smithy-go v1.7.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= -github.com/aymanbagabas/go-osc52 v1.2.1 h1:q2sWUyDcozPLcLabEMd+a+7Ea2DitxZVN9hTxab9L4E= github.com/aymanbagabas/go-osc52 v1.2.1/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= @@ -291,8 +292,9 @@ github.com/charmbracelet/charm v0.12.4/go.mod h1:BOvE692iyhnFctYs6Es3gb7xjx/JBgK github.com/charmbracelet/glamour v0.6.0 h1:wi8fse3Y7nfcabbbDuwolqTqMQPMnVPeZhDM273bISc= github.com/charmbracelet/glamour v0.6.0/go.mod h1:taqWV4swIMMbWALc0m7AfE9JkPSU8om2538k9ITBxOc= github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= -github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= +github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= +github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= @@ -597,8 +599,8 @@ github.com/github/fakeca v0.1.0 h1:Km/MVOFvclqxPM9dZBC4+QE564nU4gz4iZ0D9pMw28I= github.com/github/fakeca v0.1.0/go.mod h1:+bormgoGMMuamOscx7N91aOuUST7wdaJ2rNjeohylyo= github.com/go-chi/chi v1.5.4 h1:QHdzF2szwjqVV4wmByUnTcsbIg7UGaQ0tPF2t5GcAIs= github.com/go-chi/chi v1.5.4/go.mod h1:uaf8YgoFazUOkPBG7fxPftUylNumIev9awIWOENIuEg= -github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= +github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4= github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= github.com/go-chi/httprate v0.7.1 h1:d5kXARdms2PREQfU4pHvq44S6hJ1hPu4OXLeBKmCKWs= @@ -1183,8 +1185,9 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -1293,8 +1296,9 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc= -github.com/muesli/termenv v0.14.0 h1:8x9NFfOe8lmIWK4pgy3IfVEy47f+ppe3tUqdPZG2Uy0= github.com/muesli/termenv v0.14.0/go.mod h1:kG/pF1E7fh949Xhe156crRUrHNyK221IuGO7Ez60Uc8= +github.com/muesli/termenv v0.15.1 h1:UzuTb/+hhlBugQz28rpzey4ZuKcZ03MeKsoG7IJZIxs= +github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4ANqrZs2sQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mutecomm/go-sqlcipher/v4 v4.4.0/go.mod h1:PyN04SaWalavxRGH9E8ZftG6Ju7rsPrGmQRjrEaVpiY= @@ -1460,8 +1464,8 @@ github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qq github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -2140,8 +2144,9 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -2270,8 +2275,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= -golang.zx2c4.com/wireguard v0.0.0-20230223181233-21636207a675 h1:/J/RVnr7ng4fWPRH3xa4WtBJ1Jp+Auu4YNLmGiPv5QU= -golang.zx2c4.com/wireguard v0.0.0-20230223181233-21636207a675/go.mod h1:whfbyDBt09xhCYQWtO2+3UVjlaq6/9hDZrjg2ZE6SyA= +golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b h1:J1CaxgLerRR5lgx3wnr6L04cJFbWoceSK9JWBdglINo= +golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b/go.mod h1:tqur9LnfstdR9ep2LaJT4lFUl0EjlHtge+gAjmsHUG4= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230215201556-9c5414ab4bde h1:ybF7AMzIUikL9x4LgwEmzhXtzRpKNqngme1VGDWz+Nk= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230215201556-9c5414ab4bde/go.mod h1:mQqgjkW8GQQcJQsbBvK890TKqUK1DfKWkuBGbOkuMHQ= golang.zx2c4.com/wireguard/windows v0.5.3 h1:On6j2Rpn3OEMXqBq00QEDC7bWSZrPIHKIus8eIuExIE=