diff --git a/apps/evm/go.mod b/apps/evm/go.mod index ece25a5b8b..4dc7b86019 100644 --- a/apps/evm/go.mod +++ b/apps/evm/go.mod @@ -1,6 +1,6 @@ module github.com/evstack/ev-node/apps/evm -go 1.25.7 +go 1.25.8 replace ( github.com/evstack/ev-node => ../../ diff --git a/apps/grpc/go.mod b/apps/grpc/go.mod index 1a1683207a..354082cf17 100644 --- a/apps/grpc/go.mod +++ b/apps/grpc/go.mod @@ -1,6 +1,6 @@ module github.com/evstack/ev-node/apps/grpc -go 1.25.7 +go 1.25.8 replace ( github.com/evstack/ev-node => ../../ diff --git a/apps/testapp/go.mod b/apps/testapp/go.mod index 99395ea781..32d1e3a3d6 100644 --- a/apps/testapp/go.mod +++ b/apps/testapp/go.mod @@ -1,6 +1,6 @@ module github.com/evstack/ev-node/apps/testapp -go 1.25.7 +go 1.25.8 replace github.com/evstack/ev-node => ../../. diff --git a/execution/evm/go.mod b/execution/evm/go.mod index f34218a378..5814f92a3a 100644 --- a/execution/evm/go.mod +++ b/execution/evm/go.mod @@ -1,6 +1,6 @@ module github.com/evstack/ev-node/execution/evm -go 1.25.7 +go 1.25.8 require ( github.com/ethereum/go-ethereum v1.17.2 diff --git a/execution/evm/test/go.mod b/execution/evm/test/go.mod index a43ea17fdd..54edefdcd4 100644 --- a/execution/evm/test/go.mod +++ b/execution/evm/test/go.mod @@ -1,9 +1,9 @@ module github.com/evstack/ev-node/execution/evm/test -go 1.25.7 +go 1.25.8 require ( - github.com/celestiaorg/tastora v0.19.0 + github.com/celestiaorg/tastora v0.20.0 github.com/ethereum/go-ethereum v1.17.2 github.com/evstack/ev-node/execution/evm v0.0.0-00010101000000-000000000000 github.com/golang-jwt/jwt/v5 v5.3.1 @@ -116,7 +116,7 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/go-cid v0.6.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/compress v1.18.5 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect diff --git a/execution/evm/test/go.sum b/execution/evm/test/go.sum index edb892438d..e62f61297f 100644 --- a/execution/evm/test/go.sum +++ b/execution/evm/test/go.sum @@ -128,8 +128,8 @@ github.com/celestiaorg/go-header v0.8.5 h1:MkzlioiSeybKVNDa0805fS3mS3NG8ub93Gs2x github.com/celestiaorg/go-header v0.8.5/go.mod h1:DKl6pcKCJ0ehGUgDmfxBNz6Lv0Ky4E1Oyrcx96eQm/4= github.com/celestiaorg/go-square/v3 v3.0.2 h1:eSQOgNII8inK9IhiBZ+6GADQeWbRq4HYY72BOgcduA4= github.com/celestiaorg/go-square/v3 v3.0.2/go.mod h1:oFReMLsSDMRs82ICFEeFQFCqNvwdsbIM1BzCcb0f7dM= -github.com/celestiaorg/tastora v0.19.0 h1:m5MiDxYqlEdeY2i+vIpPZzjn5iA7U0JUM1PxE7Vs/UA= -github.com/celestiaorg/tastora v0.19.0/go.mod h1:uhEz7v8YJmJuVgsJaCe0M0Q/HJiQAQNMu3w/OtmFIQY= +github.com/celestiaorg/tastora v0.20.0 h1:J5ytjPfvH5JJjGJNpKRCTjVH4Bu9z29HGHkqbt2El0M= +github.com/celestiaorg/tastora v0.20.0/go.mod h1:kCxob6KWSGYGPwbgKdphi3mjwKVI6iMZQXbBMYYMo3w= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= @@ -472,8 +472,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= 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/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/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= diff --git a/go.mod b/go.mod index 462ceef91e..5864b3710e 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/evstack/ev-node -go 1.25.7 +go 1.25.8 retract v0.12.0 // Published by accident diff --git a/test/docker-e2e/go.mod b/test/docker-e2e/go.mod index cf66164584..318e87d513 100644 --- a/test/docker-e2e/go.mod +++ b/test/docker-e2e/go.mod @@ -1,10 +1,10 @@ module github.com/evstack/ev-node/test/docker-e2e -go 1.25.7 +go 1.25.8 require ( cosmossdk.io/math v1.5.3 - github.com/celestiaorg/tastora v0.19.0 + github.com/celestiaorg/tastora v0.20.0 github.com/ethereum/go-ethereum v1.17.2 github.com/evstack/ev-node/execution/evm v1.0.1 github.com/libp2p/go-libp2p v0.48.0 @@ -186,7 +186,7 @@ require ( github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/compress v1.18.5 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect diff --git a/test/docker-e2e/go.sum b/test/docker-e2e/go.sum index 8161c034f5..55cb8811dd 100644 --- a/test/docker-e2e/go.sum +++ b/test/docker-e2e/go.sum @@ -168,8 +168,8 @@ github.com/celestiaorg/go-square/v3 v3.0.2 h1:eSQOgNII8inK9IhiBZ+6GADQeWbRq4HYY7 github.com/celestiaorg/go-square/v3 v3.0.2/go.mod h1:oFReMLsSDMRs82ICFEeFQFCqNvwdsbIM1BzCcb0f7dM= github.com/celestiaorg/nmt v0.24.3 h1:ylQnRlXkVoTtq36CxtCyXYZX4JISBsHgKlAAUAnf7ig= github.com/celestiaorg/nmt v0.24.3/go.mod h1:vgLBpWBi8F5KLxTdXSwb7AU4NhiIQ1AQRGa+PzdcLEA= -github.com/celestiaorg/tastora v0.19.0 h1:m5MiDxYqlEdeY2i+vIpPZzjn5iA7U0JUM1PxE7Vs/UA= -github.com/celestiaorg/tastora v0.19.0/go.mod h1:uhEz7v8YJmJuVgsJaCe0M0Q/HJiQAQNMu3w/OtmFIQY= +github.com/celestiaorg/tastora v0.20.0 h1:J5ytjPfvH5JJjGJNpKRCTjVH4Bu9z29HGHkqbt2El0M= +github.com/celestiaorg/tastora v0.20.0/go.mod h1:kCxob6KWSGYGPwbgKdphi3mjwKVI6iMZQXbBMYYMo3w= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= @@ -613,8 +613,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -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/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/klauspost/reedsolomon v1.12.5 h1:4cJuyH926If33BeDgiZpI5OU0pE+wUHZvMSyNGqN73Y= diff --git a/test/e2e/benchmark/spamoor_node.go b/test/e2e/benchmark/spamoor_node.go deleted file mode 100644 index 9ddc2e9778..0000000000 --- a/test/e2e/benchmark/spamoor_node.go +++ /dev/null @@ -1,368 +0,0 @@ -//go:build evm - -package benchmark - -import ( - "context" - "fmt" - "net/http" - "net/netip" - "strings" - "sync" - "time" - - "github.com/celestiaorg/tastora/framework/docker/consts" - tastoracontainer "github.com/celestiaorg/tastora/framework/docker/container" - "github.com/celestiaorg/tastora/framework/docker/evstack/spamoor" - "github.com/celestiaorg/tastora/framework/docker/port" - tastoratypes "github.com/celestiaorg/tastora/framework/types" - "github.com/containerd/errdefs" - mobycontainer "github.com/moby/moby/api/types/container" - mobynetwork "github.com/moby/moby/api/types/network" - mobyclient "github.com/moby/moby/client" - "go.uber.org/zap" -) - -type spamoorBenchmarkNodeType int - -func (spamoorBenchmarkNodeType) String() string { return "spamoor" } - -const defaultSpamoorHTTPPort = "8080" - -type spamoorBenchmarkConfig struct { - DockerClient tastoratypes.TastoraDockerClient - DockerNetworkID string - Logger *zap.Logger - Image tastoracontainer.Image - - RPCHosts []string - PrivateKey string - AdditionalStartArgs []string - HostNetwork bool -} - -type spamoorBenchmarkBuilder struct { - testName string - dockerClient tastoratypes.TastoraDockerClient - dockerNetwork string - logger *zap.Logger - image tastoracontainer.Image - - rpcHosts []string - privateKey string - nameSuffix string - additionalStartArgs []string - hostNetwork bool -} - -func newSpamoorNodeBuilder(testName string) *spamoorBenchmarkBuilder { - return &spamoorBenchmarkBuilder{ - testName: testName, - image: tastoracontainer.NewImage("ethpandaops/spamoor", "latest", ""), - } -} - -func (b *spamoorBenchmarkBuilder) WithDockerClient(c tastoratypes.TastoraDockerClient) *spamoorBenchmarkBuilder { - b.dockerClient = c - return b -} - -func (b *spamoorBenchmarkBuilder) WithDockerNetworkID(id string) *spamoorBenchmarkBuilder { - b.dockerNetwork = id - return b -} - -func (b *spamoorBenchmarkBuilder) WithLogger(l *zap.Logger) *spamoorBenchmarkBuilder { - b.logger = l - return b -} - -func (b *spamoorBenchmarkBuilder) WithImage(img tastoracontainer.Image) *spamoorBenchmarkBuilder { - b.image = img - return b -} - -func (b *spamoorBenchmarkBuilder) WithRPCHosts(hosts ...string) *spamoorBenchmarkBuilder { - b.rpcHosts = hosts - return b -} - -func (b *spamoorBenchmarkBuilder) WithPrivateKey(pk string) *spamoorBenchmarkBuilder { - b.privateKey = pk - return b -} - -func (b *spamoorBenchmarkBuilder) WithNameSuffix(s string) *spamoorBenchmarkBuilder { - b.nameSuffix = s - return b -} - -func (b *spamoorBenchmarkBuilder) WithAdditionalStartArgs(args ...string) *spamoorBenchmarkBuilder { - b.additionalStartArgs = args - return b -} - -func (b *spamoorBenchmarkBuilder) WithHostNetwork() *spamoorBenchmarkBuilder { - b.hostNetwork = true - return b -} - -func (b *spamoorBenchmarkBuilder) Build(ctx context.Context) (*spamoorBenchmarkNode, error) { - cfg := spamoorBenchmarkConfig{ - DockerClient: b.dockerClient, - DockerNetworkID: b.dockerNetwork, - Logger: b.logger, - Image: b.image, - RPCHosts: b.rpcHosts, - PrivateKey: b.privateKey, - AdditionalStartArgs: b.additionalStartArgs, - HostNetwork: b.hostNetwork, - } - return newSpamoorBenchmarkNode(ctx, cfg, b.testName, 0, b.nameSuffix) -} - -type spamoorBenchmarkNode struct { - *tastoracontainer.Node - - cfg spamoorBenchmarkConfig - logger *zap.Logger - started bool - mu sync.Mutex - external tastoratypes.Ports - name string - containerID string - preStartListeners port.Listeners -} - -func newSpamoorBenchmarkNode(ctx context.Context, cfg spamoorBenchmarkConfig, testName string, index int, name string) (*spamoorBenchmarkNode, error) { - if cfg.Image.Repository == "" { - cfg.Image = tastoracontainer.NewImage("ethpandaops/spamoor", "latest", "") - } - if cfg.Logger == nil { - cfg.Logger = zap.NewNop() - } - - log := cfg.Logger.With(zap.String("component", "spamoor-daemon"), zap.Int("i", index)) - n := &spamoorBenchmarkNode{cfg: cfg, logger: log, name: name} - n.Node = tastoracontainer.NewNode(cfg.DockerNetworkID, cfg.DockerClient, testName, cfg.Image, "/home/spamoor", index, spamoorBenchmarkNodeType(0), log) - if err := n.CreateAndSetupVolume(ctx, n.Name()); err != nil { - return nil, err - } - return n, nil -} - -func (n *spamoorBenchmarkNode) Name() string { - if n.name != "" { - return fmt.Sprintf("spamoor-%s-%d-%s", n.name, n.Index, sanitizeDockerResourceName(n.TestName)) - } - return fmt.Sprintf("spamoor-%d-%s", n.Index, sanitizeDockerResourceName(n.TestName)) -} - -func (n *spamoorBenchmarkNode) HostName() string { - return condenseHostName(n.Name()) -} - -func (n *spamoorBenchmarkNode) GetNetworkInfo(ctx context.Context) (tastoratypes.NetworkInfo, error) { - internalIP, err := n.containerInternalIP(ctx) - if err != nil { - return tastoratypes.NetworkInfo{}, err - } - return tastoratypes.NetworkInfo{ - Internal: tastoratypes.Network{Hostname: n.HostName(), IP: internalIP, Ports: tastoratypes.Ports{HTTP: defaultSpamoorHTTPPort}}, - External: tastoratypes.Network{Hostname: "0.0.0.0", Ports: n.external}, - }, nil -} - -func (n *spamoorBenchmarkNode) Start(ctx context.Context) error { - n.mu.Lock() - defer n.mu.Unlock() - if n.started { - return n.startContainer(ctx) - } - if err := n.createContainer(ctx); err != nil { - return err - } - if err := n.startContainer(ctx); err != nil { - return err - } - - mapped := defaultSpamoorHTTPPort - if !n.cfg.HostNetwork { - hostPort, err := n.hostPort(ctx, defaultSpamoorHTTPPort+"/tcp") - if err != nil { - return err - } - mapped, err = extractPort(hostPort) - if err != nil { - return err - } - } - n.external = tastoratypes.Ports{HTTP: mapped} - n.started = true - waitHTTP("http://127.0.0.1:"+n.external.HTTP+"/metrics", 20*time.Second) - return nil -} - -func (n *spamoorBenchmarkNode) API() *spamoor.API { - return spamoor.NewAPI("http://127.0.0.1:" + n.external.HTTP) -} - -func (n *spamoorBenchmarkNode) Remove(ctx context.Context, opts ...tastoratypes.RemoveOption) error { - removeOpts := mobyclient.ContainerRemoveOptions{ - Force: true, - RemoveVolumes: true, - } - for _, opt := range opts { - opt(&removeOpts) - } - - if n.containerID != "" { - if err := n.stopContainer(ctx); err != nil { - return err - } - if _, err := n.DockerClient.ContainerRemove(ctx, n.containerID, removeOpts); err != nil && !errdefs.IsNotFound(err) { - return fmt.Errorf("remove container %s: %w", n.Name(), err) - } - } - if removeOpts.RemoveVolumes && n.VolumeName != "" { - if _, err := n.DockerClient.VolumeRemove(ctx, n.VolumeName, mobyclient.VolumeRemoveOptions{Force: true}); err != nil && !errdefs.IsNotFound(err) { - return fmt.Errorf("remove volume %s: %w", n.VolumeName, err) - } - } - return nil -} - -func (n *spamoorBenchmarkNode) createContainer(ctx context.Context) error { - imageRef := n.cfg.Image.Ref() - if err := n.cfg.Image.PullImage(ctx, n.DockerClient); err != nil { - return err - } - - cmd := []string{ - "--privkey", n.cfg.PrivateKey, - "--port", defaultSpamoorHTTPPort, - "--db", fmt.Sprintf("%s/%s", n.HomeDir(), "spamoor.db"), - } - for _, host := range n.cfg.RPCHosts { - if host = strings.TrimSpace(host); host != "" { - cmd = append(cmd, "--rpchost", host) - } - } - cmd = append(cmd, n.cfg.AdditionalStartArgs...) - - containerCfg := &mobycontainer.Config{ - Image: imageRef, - Entrypoint: []string{"/app/spamoor-daemon"}, - Cmd: cmd, - Hostname: n.HostName(), - Labels: map[string]string{consts.CleanupLabel: n.DockerClient.CleanupLabel()}, - } - hostCfg := &mobycontainer.HostConfig{ - Binds: n.Bind(), - AutoRemove: false, - DNS: []netip.Addr{}, - } - var netCfg *mobynetwork.NetworkingConfig - if n.cfg.HostNetwork { - hostCfg.NetworkMode = mobycontainer.NetworkMode(mobynetwork.NetworkHost) - } else { - ports := mobynetwork.PortMap{ - mobynetwork.MustParsePort(defaultSpamoorHTTPPort + "/tcp"): {}, - } - portBindings, listeners, err := port.GenerateBindings(ports) - if err != nil { - return fmt.Errorf("generate port bindings: %w", err) - } - n.preStartListeners = listeners - containerCfg.ExposedPorts = portSet(ports) - hostCfg.PortBindings = portBindings - hostCfg.PublishAllPorts = true - netCfg = &mobynetwork.NetworkingConfig{ - EndpointsConfig: map[string]*mobynetwork.EndpointSettings{ - n.NetworkID: &mobynetwork.EndpointSettings{}, - }, - } - } - - n.logger.Info("Will run spamoor daemon", zap.String("image", imageRef), zap.String("container", n.Name())) - created, err := n.DockerClient.ContainerCreate(ctx, mobyclient.ContainerCreateOptions{ - Name: n.Name(), - Config: containerCfg, - HostConfig: hostCfg, - NetworkingConfig: netCfg, - }) - if err != nil { - n.preStartListeners.CloseAll() - n.preStartListeners = nil - return err - } - n.containerID = created.ID - return nil -} - -func (n *spamoorBenchmarkNode) startContainer(ctx context.Context) error { - n.preStartListeners.CloseAll() - n.preStartListeners = nil - if _, err := n.DockerClient.ContainerStart(ctx, n.containerID, mobyclient.ContainerStartOptions{}); err != nil { - return err - } - n.logger.Info("Container started", zap.String("container", n.Name())) - return nil -} - -func (n *spamoorBenchmarkNode) stopContainer(ctx context.Context) error { - timeoutSec := 30 - if _, err := n.DockerClient.ContainerStop(ctx, n.containerID, mobyclient.ContainerStopOptions{Timeout: &timeoutSec}); err != nil && !errdefs.IsNotFound(err) && !errdefs.IsNotModified(err) { - return fmt.Errorf("stop container %s: %w", n.Name(), err) - } - return nil -} - -func (n *spamoorBenchmarkNode) hostPort(ctx context.Context, portID string) (string, error) { - inspectResult, err := n.DockerClient.ContainerInspect(ctx, n.containerID, mobyclient.ContainerInspectOptions{}) - if err != nil { - return "", err - } - return port.GetForHost(inspectResult.Container, portID), nil -} - -func (n *spamoorBenchmarkNode) containerInternalIP(ctx context.Context) (string, error) { - inspectResult, err := n.DockerClient.ContainerInspect(ctx, n.containerID, mobyclient.ContainerInspectOptions{}) - if err != nil { - return "", fmt.Errorf("inspecting container: %w", err) - } - inspect := inspectResult.Container - if inspect.NetworkSettings == nil || inspect.NetworkSettings.Networks == nil { - return "", nil - } - for _, network := range inspect.NetworkSettings.Networks { - if network.IPAddress.IsValid() { - return network.IPAddress.String(), nil - } - } - return "", nil -} - -func portSet(ports mobynetwork.PortMap) mobynetwork.PortSet { - portSet := mobynetwork.PortSet{} - for port := range ports { - portSet[port] = struct{}{} - } - return portSet -} - -func waitHTTP(url string, timeout time.Duration) { - deadline := time.Now().Add(timeout) - client := &http.Client{Timeout: 500 * time.Millisecond} - for time.Now().Before(deadline) { - resp, err := client.Get(url) - if err == nil && resp.StatusCode >= 200 && resp.StatusCode < 500 { - _ = resp.Body.Close() - return - } - if resp != nil && resp.Body != nil { - _ = resp.Body.Close() - } - time.Sleep(100 * time.Millisecond) - } -} diff --git a/test/e2e/benchmark/suite_test.go b/test/e2e/benchmark/suite_test.go index dec6810f9a..051750459f 100644 --- a/test/e2e/benchmark/suite_test.go +++ b/test/e2e/benchmark/suite_test.go @@ -5,12 +5,14 @@ package benchmark import ( "os" "path/filepath" + "strings" "testing" "time" tastoradocker "github.com/celestiaorg/tastora/framework/docker" "github.com/celestiaorg/tastora/framework/docker/evstack/reth" "github.com/celestiaorg/tastora/framework/docker/evstack/spamoor" + "github.com/celestiaorg/tastora/framework/docker/victoriatraces" "github.com/celestiaorg/tastora/framework/testutil/maps" tastoratypes "github.com/celestiaorg/tastora/framework/types" "github.com/ethereum/go-ethereum/ethclient" @@ -74,8 +76,11 @@ func (s *SpamoorSuite) setupLocalEnv(cfg benchConfig) *env { sut := e2e.NewSystemUnderTest(t) // victoriatraces - vtCfg := victoriaTracesConfig{Logger: zaptest.NewLogger(t), DockerClient: s.dockerCli, DockerNetworkID: s.networkID} - vt, err := newVictoriaTracesNode(ctx, vtCfg, t.Name(), 0) + vt, err := victoriatraces.New(ctx, victoriatraces.Config{ + Logger: zaptest.NewLogger(t), + DockerClient: s.dockerCli, + DockerNetworkID: s.networkID, + }, t.Name(), 0) s.Require().NoError(err, "failed to create victoriatraces node") t.Cleanup(func() { _ = vt.Remove(t.Context()) }) s.Require().NoError(vt.Start(ctx), "failed to start victoriatraces node") @@ -107,7 +112,9 @@ func (s *SpamoorSuite) setupLocalEnv(cfg benchConfig) *env { // sequencer with tracing sequencerHome := filepath.Join(t.TempDir(), "sequencer") - otlpHTTP := vt.External.IngestHTTPEndpoint() + // sequencer runs locally (not in Docker), so replace 0.0.0.0 with 127.0.0.1 + // since macOS cannot connect to 0.0.0.0 as a destination address. + otlpHTTP := strings.Replace(vt.External.IngestHTTPEndpoint(), "0.0.0.0", "127.0.0.1", 1) e2e.SetupSequencerNode(t, sut, sequencerHome, evmEnv.SequencerJWT, evmEnv.GenesisHash, evmEnv.Endpoints, "--evnode.instrumentation.tracing=true", "--evnode.instrumentation.tracing_endpoint", otlpHTTP, @@ -128,7 +135,7 @@ func (s *SpamoorSuite) setupLocalEnv(cfg benchConfig) *env { s.Require().NoError(err, "failed to get reth network info") internalRPC := "http://" + ni.Internal.RPCAddress() - spBuilder := newSpamoorNodeBuilder(t.Name()). + spBuilder := spamoor.NewNodeBuilder(t.Name()). WithDockerClient(evmEnv.RethNode.DockerClient). WithDockerNetworkID(evmEnv.RethNode.NetworkID). WithLogger(evmEnv.RethNode.Logger). @@ -148,7 +155,7 @@ func (s *SpamoorSuite) setupLocalEnv(cfg benchConfig) *env { return &env{ traces: &victoriaTraceProvider{ - queryURL: vt.External.QueryURL(), + queryURL: strings.TrimRight(strings.Replace(vt.External.QueryURL(), "0.0.0.0", "127.0.0.1", 1), "/"), t: t, startTime: time.Now(), }, @@ -178,7 +185,7 @@ func (s *SpamoorSuite) setupExternalEnv(cfg benchConfig, rpcURL string) *env { // spamoor — connects to the external RPC via host networking so it can // resolve the same hostnames as the host machine. - spBuilder := newSpamoorNodeBuilder(t.Name()). + spBuilder := spamoor.NewNodeBuilder(t.Name()). WithDockerClient(s.dockerCli). WithDockerNetworkID(s.networkID). WithLogger(zaptest.NewLogger(t)). @@ -204,7 +211,7 @@ func (s *SpamoorSuite) setupExternalEnv(cfg benchConfig, rpcURL string) *env { return &env{ traces: &victoriaTraceProvider{ - queryURL: traceURL, + queryURL: strings.TrimRight(traceURL, "/"), t: t, startTime: time.Now(), }, diff --git a/test/e2e/benchmark/traces.go b/test/e2e/benchmark/traces.go index 7ff151b729..7b92eda5dc 100644 --- a/test/e2e/benchmark/traces.go +++ b/test/e2e/benchmark/traces.go @@ -69,7 +69,7 @@ func (v *victoriaTraceProvider) uiURL(serviceName string, end time.Time) string rangeInput := end.Sub(v.startTime).Round(time.Second).String() endInput := end.UTC().Format("2006-01-02T15:04:05") return fmt.Sprintf("%s/select/vmui/?#/?g0.expr=%s&g0.range_input=%s&g0.end_input=%s", - strings.TrimRight(v.queryURL, "/"), + v.queryURL, neturl.QueryEscape(query), rangeInput, endInput) @@ -162,12 +162,11 @@ func (v *victoriaTraceProvider) collectRichSpans(ctx context.Context, serviceNam func (v *victoriaTraceProvider) fetchLogStream(ctx context.Context, serviceName string) (*bufio.Scanner, io.Closer, error) { end := time.Now() query := fmt.Sprintf(`_stream:{resource_attr:service.name="%s"}`, serviceName) - baseURL := strings.TrimRight(v.queryURL, "/") url := fmt.Sprintf("%s/select/logsql/query?query=%s&start=%s&end=%s", - baseURL, + v.queryURL, neturl.QueryEscape(query), - v.startTime.Format(time.RFC3339Nano), - end.Format(time.RFC3339Nano)) + v.startTime.UTC().Format(time.RFC3339Nano), + end.UTC().Format(time.RFC3339Nano)) req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { @@ -263,38 +262,15 @@ func (v *victoriaTraceProvider) fetchAllSpans(ctx context.Context, serviceName s } // fetchResourceAttrs queries a single span and extracts OTEL resource attributes -// from it. Uses limit=1 to avoid streaming the full span set on long-lived -// instances. Returns nil if no spans are available. +// from it. Returns nil if no spans are available. func (v *victoriaTraceProvider) fetchResourceAttrs(ctx context.Context, serviceName string) *resourceAttrs { - end := time.Now() - query := fmt.Sprintf(`_stream:{resource_attr:service.name="%s"}`, serviceName) - baseURL := strings.TrimRight(v.queryURL, "/") - url := fmt.Sprintf("%s/select/logsql/query?query=%s&start=%s&end=%s&limit=1", - baseURL, - neturl.QueryEscape(query), - v.startTime.Format(time.RFC3339Nano), - end.Format(time.RFC3339Nano)) - - req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) - if err != nil { - v.t.Logf("warning: failed to create resource attrs request: %v", err) - return nil - } - - resp, err := http.DefaultClient.Do(req) + scanner, body, err := v.fetchLogStream(ctx, serviceName) if err != nil { v.t.Logf("warning: failed to fetch resource attrs: %v", err) return nil } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - v.t.Logf("warning: unexpected status %d fetching resource attrs", resp.StatusCode) - return nil - } + defer body.Close() - scanner := bufio.NewScanner(resp.Body) - scanner.Buffer(make([]byte, 0, 64*1024), 1024*1024) for scanner.Scan() { line := scanner.Bytes() if len(line) == 0 { @@ -357,14 +333,26 @@ type resourceAttrs struct { // extractResourceAttrs pulls all known OTEL resource attributes from a raw LogsQL JSON line. func extractResourceAttrs(line []byte) resourceAttrs { + var raw map[string]string + if err := json.Unmarshal(line, &raw); err != nil { + return resourceAttrs{} + } + find := func(attr string) string { + for k, v := range raw { + if strings.Contains(k, attr) { + return v + } + } + return "" + } return resourceAttrs{ - HostName: extractResourceAttr(line, "host.name"), - HostCPU: extractResourceAttr(line, "host.cpu"), - HostMemory: extractResourceAttr(line, "host.memory"), - HostType: extractResourceAttr(line, "host.type"), - OSName: extractResourceAttr(line, "os.name"), - OSVersion: extractResourceAttr(line, "os.version"), - ServiceType: extractResourceAttr(line, "service.type"), + HostName: find("host.name"), + HostCPU: find("host.cpu"), + HostMemory: find("host.memory"), + HostType: find("host.type"), + OSName: find("os.name"), + OSVersion: find("os.version"), + ServiceType: find("service.type"), } } diff --git a/test/e2e/benchmark/victoriatraces_node.go b/test/e2e/benchmark/victoriatraces_node.go deleted file mode 100644 index cb5f1a5ed7..0000000000 --- a/test/e2e/benchmark/victoriatraces_node.go +++ /dev/null @@ -1,142 +0,0 @@ -//go:build evm - -package benchmark - -import ( - "context" - "fmt" - "net" - "regexp" - "sync" - - "github.com/celestiaorg/tastora/framework/docker/container" - tastoratypes "github.com/celestiaorg/tastora/framework/types" - "github.com/moby/moby/api/types/network" - "go.uber.org/zap" -) - -type victoriaTracesNodeType int - -func (victoriaTracesNodeType) String() string { return "victoriatraces" } - -const defaultVictoriaTracesHTTPPort = "10428" - -type victoriaTracesConfig struct { - Logger *zap.Logger - DockerClient tastoratypes.TastoraDockerClient - DockerNetworkID string - Image container.Image -} - -type victoriaTracesNode struct { - *container.Node - - cfg victoriaTracesConfig - logger *zap.Logger - started bool - mu sync.Mutex - - internalHTTPPort string - externalHTTPPort string - - Internal victoriaTracesScope - External victoriaTracesScope -} - -func newVictoriaTracesNode(ctx context.Context, cfg victoriaTracesConfig, testName string, index int) (*victoriaTracesNode, error) { - img := cfg.Image - if img.Repository == "" { - img = container.NewImage("victoriametrics/victoria-traces", "latest", "") - } - - log := cfg.Logger.With(zap.String("component", "victoriatraces"), zap.Int("i", index)) - home := "/home/victoriatraces" - n := &victoriaTracesNode{cfg: cfg, logger: log} - n.Node = container.NewNode(cfg.DockerNetworkID, cfg.DockerClient, testName, img, home, index, victoriaTracesNodeType(0), log) - n.SetContainerLifecycle(container.NewLifecycle(cfg.Logger, cfg.DockerClient, n.Name())) - if err := n.CreateAndSetupVolume(ctx, n.Name()); err != nil { - return nil, err - } - n.Internal = victoriaTracesScope{hostname: func() string { return n.Name() }, port: &n.internalHTTPPort} - n.External = victoriaTracesScope{hostname: func() string { return "0.0.0.0" }, port: &n.externalHTTPPort} - return n, nil -} - -func (n *victoriaTracesNode) Name() string { - return fmt.Sprintf("victoriatraces-%d-%s", n.Index, sanitizeDockerResourceName(n.TestName)) -} - -func (n *victoriaTracesNode) HostName() string { - return condenseHostName(n.Name()) -} - -func (n *victoriaTracesNode) Start(ctx context.Context) error { - n.mu.Lock() - defer n.mu.Unlock() - if n.started { - return n.StartContainer(ctx) - } - if err := n.createContainer(ctx); err != nil { - return err - } - if err := n.ContainerLifecycle.StartContainer(ctx); err != nil { - return err - } - hostPorts, err := n.ContainerLifecycle.GetHostPorts(ctx, n.internalHTTPPort+"/tcp") - if err != nil { - return err - } - n.externalHTTPPort, err = extractPort(hostPorts[0]) - if err != nil { - return err - } - n.started = true - return nil -} - -func (n *victoriaTracesNode) createContainer(ctx context.Context) error { - if n.internalHTTPPort == "" { - n.internalHTTPPort = defaultVictoriaTracesHTTPPort - } - - ports := network.PortMap{ - network.MustParsePort(n.internalHTTPPort + "/tcp"): {}, - } - cmd := []string{"-storageDataPath", n.HomeDir() + "/data"} - return n.CreateContainer(ctx, n.TestName, n.NetworkID, n.Image, ports, "", n.Bind(), nil, n.HostName(), cmd, nil, nil) -} - -type victoriaTracesScope struct { - hostname func() string - port *string -} - -func (s victoriaTracesScope) IngestHTTPEndpoint() string { - return fmt.Sprintf("http://%s:%s/insert/opentelemetry/v1/traces", s.hostname(), *s.port) -} - -func (s victoriaTracesScope) OTLPBaseEndpoint() string { - return fmt.Sprintf("http://%s:%s/insert/opentelemetry", s.hostname(), *s.port) -} - -func (s victoriaTracesScope) QueryURL() string { - return fmt.Sprintf("http://%s:%s", s.hostname(), *s.port) -} - -func extractPort(address string) (string, error) { - _, port, err := net.SplitHostPort(address) - return port, err -} - -func condenseHostName(name string) string { - if len(name) < 64 { - return name - } - return name[:30] + "_._" + name[len(name)-30:] -} - -var validContainerCharsRE = regexp.MustCompile(`[^a-zA-Z0-9_.-]`) - -func sanitizeDockerResourceName(name string) string { - return validContainerCharsRE.ReplaceAllLiteralString(name, "_") -} diff --git a/test/e2e/go.mod b/test/e2e/go.mod index ba3330be20..c3a2362413 100644 --- a/test/e2e/go.mod +++ b/test/e2e/go.mod @@ -1,12 +1,11 @@ module github.com/evstack/ev-node/test/e2e -go 1.25.7 +go 1.25.8 require ( cosmossdk.io/math v1.5.3 github.com/celestiaorg/go-square/v3 v3.0.2 - github.com/celestiaorg/tastora v0.19.0 - github.com/containerd/errdefs v1.0.0 + github.com/celestiaorg/tastora v0.20.0 github.com/cosmos/cosmos-sdk v0.53.6 github.com/cosmos/ibc-go/v8 v8.8.0 github.com/ethereum/go-ethereum v1.17.2 @@ -14,8 +13,6 @@ require ( github.com/evstack/ev-node/execution/evm v0.0.0-20250602130019-2a732cf903a5 github.com/evstack/ev-node/execution/evm/test v0.0.0-00010101000000-000000000000 github.com/libp2p/go-libp2p v0.48.0 - github.com/moby/moby/api v1.54.2 - github.com/moby/moby/client v0.4.1 github.com/prometheus/client_model v0.6.2 github.com/rs/zerolog v1.35.1 github.com/stretchr/testify v1.11.1 @@ -104,6 +101,7 @@ require ( github.com/cometbft/cometbft v0.38.21 // indirect github.com/cometbft/cometbft-db v1.0.4 // indirect github.com/consensys/gnark-crypto v0.18.2 // indirect + github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.1.3 // indirect @@ -173,6 +171,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-metrics v0.5.4 // indirect @@ -200,7 +199,7 @@ require ( github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/compress v1.18.5 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/koron/go-ssdp v0.0.6 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -230,6 +229,8 @@ require ( github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/moby/api v1.54.2 // indirect + github.com/moby/moby/client v0.4.1 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/multiformats/go-base32 v0.1.0 // indirect diff --git a/test/e2e/go.sum b/test/e2e/go.sum index b5f45e1d94..9a69b5e67d 100644 --- a/test/e2e/go.sum +++ b/test/e2e/go.sum @@ -154,11 +154,11 @@ github.com/avast/retry-go/v4 v4.6.1 h1:VkOLRubHdisGrHnTu89g08aQEWEgRU7LVEop3GbIc github.com/avast/retry-go/v4 v4.6.1/go.mod h1:V6oF8njAwxJ5gRo1Q7Cxab24xs5NCWZBeaHHBklR8mA= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= -github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU= github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE= github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU= @@ -173,10 +173,16 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 h1:FLudkZLt5ci0ozzgkVo8BJGwvqNaZbTWb3UcucAateA= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9/go.mod h1:w7wZ/s9qK7c8g4al+UyoF1Sp/Z45UwMGcqIzLWVQHWk= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/kuIwgEsOPLkaHu0O+m4fNgLU8B3vxQ+72jTPw= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= github.com/aws/aws-sdk-go-v2/service/kms v1.51.1 h1:zuSf4olLKZW8cF/W9Y5wvGT+/0raY/3kVp49KsGs0QY= github.com/aws/aws-sdk-go-v2/service/kms v1.51.1/go.mod h1:Y0+uxvxz6ib4KktRdK0V4X45Vcs/JyYoz8H71pO8xeI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= @@ -231,8 +237,8 @@ github.com/celestiaorg/go-square/v3 v3.0.2 h1:eSQOgNII8inK9IhiBZ+6GADQeWbRq4HYY7 github.com/celestiaorg/go-square/v3 v3.0.2/go.mod h1:oFReMLsSDMRs82ICFEeFQFCqNvwdsbIM1BzCcb0f7dM= github.com/celestiaorg/nmt v0.24.3 h1:ylQnRlXkVoTtq36CxtCyXYZX4JISBsHgKlAAUAnf7ig= github.com/celestiaorg/nmt v0.24.3/go.mod h1:vgLBpWBi8F5KLxTdXSwb7AU4NhiIQ1AQRGa+PzdcLEA= -github.com/celestiaorg/tastora v0.19.0 h1:m5MiDxYqlEdeY2i+vIpPZzjn5iA7U0JUM1PxE7Vs/UA= -github.com/celestiaorg/tastora v0.19.0/go.mod h1:uhEz7v8YJmJuVgsJaCe0M0Q/HJiQAQNMu3w/OtmFIQY= +github.com/celestiaorg/tastora v0.20.0 h1:J5ytjPfvH5JJjGJNpKRCTjVH4Bu9z29HGHkqbt2El0M= +github.com/celestiaorg/tastora v0.20.0/go.mod h1:kCxob6KWSGYGPwbgKdphi3mjwKVI6iMZQXbBMYYMo3w= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= @@ -632,6 +638,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= @@ -643,8 +651,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.9 h1:G9gcjrDixz7glqJ+ll5IWvggSBR+R0B54DSRt4qfdC4= -github.com/hashicorp/go-getter v1.7.9/go.mod h1:dyFCmT1AQkDfOIt9NH8pw9XBDqNrIKJT5ylbpi7zPNE= +github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= +github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= github.com/hashicorp/go-hclog v1.6.2/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= @@ -663,8 +671,6 @@ github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0U github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= 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= @@ -743,8 +749,6 @@ github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPw github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -769,8 +773,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -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/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1218,8 +1222,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= -github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.10 h1:p8Fspmz3iTctJstry1PYS3HVdllxnEzTEsgIgtxTrCk=