detached 4c5e5e6

feat(ports): add repo metadata, git repos and clock ports with mockery mocks

commit
4c5e5e67060627f902879ac30c8f9c233125bcad
author
brice · · 2026-10-10 06:09 UTC
parent
f7f6672
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
8 files · +1317 -4
M .hexcheck.yaml +9 -0
@@ -20,9 +20,18 @@ components:
2020 role: entrypoint
2121 paths:
2222 - cmd/**
23+ config:
24+ role: entrypoint
25+ paths:
26+ - internal/config/**
2327 generated:
2428 role: ignore
2529 paths:
2630 - gen/**
2731 - '**/mocks/**'
2832 - '**/*_templ.go'
33+mocking:
34+ generatedMockPaths:
35+ - internal/ports/mocks/**
36+ generatedMockNamePatterns:
37+ - '{{Interface}}'
@@ -20,9 +20,18 @@ components:
20 role: entrypoint20 role: entrypoint
21 paths:21 paths:
22 - cmd/**22 - cmd/**
23+ config:
24+ role: entrypoint
25+ paths:
26+ - internal/config/**
23 generated:27 generated:
24 role: ignore28 role: ignore
25 paths:29 paths:
26 - gen/**30 - gen/**
27 - '**/mocks/**'31 - '**/mocks/**'
28 - '**/*_templ.go'32 - '**/*_templ.go'
33+mocking:
34+ generatedMockPaths:
35+ - internal/ports/mocks/**
36+ generatedMockNamePatterns:
37+ - '{{Interface}}'
A .mockery.yml +13 -0
@@ -0,0 +1,13 @@
1+# Mocks of the ports. Regenerate with: go generate ./internal/ports
2+template: testify
3+packages:
4+ bnema.dev/ermite/internal/ports:
5+ config:
6+ dir: "{{.InterfaceDir}}/mocks"
7+ pkgname: mocks
8+ filename: "{{.InterfaceName}}.go"
9+ structname: "{{.InterfaceName}}"
10+ interfaces:
11+ RepoMetaStore:
12+ GitRepos:
13+ Clock:
@@ -0,0 +1,13 @@
1+# Mocks of the ports. Regenerate with: go generate ./internal/ports
2+template: testify
3+packages:
4+ bnema.dev/ermite/internal/ports:
5+ config:
6+ dir: "{{.InterfaceDir}}/mocks"
7+ pkgname: mocks
8+ filename: "{{.InterfaceName}}.go"
9+ structname: "{{.InterfaceName}}"
10+ interfaces:
11+ RepoMetaStore:
12+ GitRepos:
13+ Clock:
M go.mod +121 -1
@@ -2,12 +2,132 @@ module bnema.dev/ermite
22
33 go 1.27.1
44
5-tool github.com/bnema/hexcheck/cmd/hexcheck
5+tool (
6+ github.com/bnema/hexcheck/cmd/hexcheck
7+ github.com/bufbuild/buf/cmd/buf
8+ github.com/vektra/mockery/v3
9+ google.golang.org/protobuf/cmd/protoc-gen-go
10+)
11+
12+require (
13+ github.com/bnema/zerowrap v1.4.1
14+ github.com/stretchr/testify v1.12.1
15+)
616
717 require (
18+ buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.12-20260722160903-4d94f3df3a7b.2 // indirect
19+ buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.12-20250109164928-1da0de137947.2 // indirect
20+ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260825204119-511051f7f437.2 // indirect
21+ buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260831211851-b4432e12a6e7.1 // indirect
22+ buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.12-20260831211851-b4432e12a6e7.2 // indirect
23+ buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.12-20241007202033-cf42259fcbfc.2 // indirect
24+ buf.build/go/app v0.2.1-0.20260824172350-b0e76892c61a // indirect
25+ buf.build/go/bufplugin v0.10.0 // indirect
26+ buf.build/go/bufprivateusage v0.1.0 // indirect
27+ buf.build/go/interrupt v1.1.0 // indirect
28+ buf.build/go/protovalidate v1.4.0 // indirect
29+ buf.build/go/protoyaml v0.7.0 // indirect
30+ buf.build/go/spdx v0.2.0 // indirect
31+ buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 // indirect
32+ cel.dev/cel-go v0.32.0 // indirect
33+ cel.dev/expr v0.25.3 // indirect
34+ connectrpc.com/connect v1.20.0 // indirect
35+ connectrpc.com/otelconnect v0.9.0 // indirect
36+ github.com/Microsoft/go-winio v0.6.2 // indirect
37+ github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
838 github.com/bnema/hexcheck v0.3.1 // indirect
39+ github.com/brunoga/deep v1.3.1 // indirect
40+ github.com/bufbuild/buf v1.73.0 // indirect
41+ github.com/bufbuild/protocompile v0.14.2-0.20260910151042-7436f7c76201 // indirect
42+ github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b // indirect
43+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
44+ github.com/cli/browser v1.3.0 // indirect
45+ github.com/clipperhouse/uax29/v2 v2.2.0 // indirect
46+ github.com/containerd/errdefs v1.0.0 // indirect
47+ github.com/containerd/errdefs/pkg v0.3.0 // indirect
48+ github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
49+ github.com/distribution/reference v0.6.0 // indirect
50+ github.com/docker/cli v29.8.0+incompatible // indirect
51+ github.com/docker/docker-credential-helpers v0.9.9 // indirect
52+ github.com/docker/go-connections v0.8.1 // indirect
53+ github.com/docker/go-units v0.5.0 // indirect
54+ github.com/fatih/structs v1.1.0 // indirect
55+ github.com/felixge/httpsnoop v1.1.0 // indirect
56+ github.com/fsnotify/fsnotify v1.9.0 // indirect
57+ github.com/go-logr/logr v1.4.4 // indirect
58+ github.com/go-logr/stdr v1.2.2 // indirect
59+ github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
60+ github.com/gofrs/flock v0.13.1 // indirect
61+ github.com/google/go-containerregistry v0.22.1 // indirect
62+ github.com/google/uuid v1.6.0 // indirect
63+ github.com/huandu/xstrings v1.5.0 // indirect
64+ github.com/inconshreveable/mousetrap v1.1.0 // indirect
65+ github.com/jdx/go-netrc v1.0.0 // indirect
66+ github.com/jedib0t/go-pretty/v6 v6.7.8 // indirect
67+ github.com/klauspost/compress v1.20.0 // indirect
68+ github.com/klauspost/pgzip v1.2.6 // indirect
69+ github.com/knadh/koanf/maps v0.1.2 // indirect
70+ github.com/knadh/koanf/parsers/yaml v1.1.0 // indirect
71+ github.com/knadh/koanf/providers/env v1.1.0 // indirect
72+ github.com/knadh/koanf/providers/file v1.2.1 // indirect
73+ github.com/knadh/koanf/providers/posflag v1.0.1 // indirect
74+ github.com/knadh/koanf/providers/structs v1.0.0 // indirect
75+ github.com/knadh/koanf/v2 v2.3.2 // indirect
76+ github.com/mattn/go-colorable v0.1.15 // indirect
77+ github.com/mattn/go-isatty v0.0.24 // indirect
78+ github.com/mattn/go-runewidth v0.0.19 // indirect
79+ github.com/mitchellh/copystructure v1.2.0 // indirect
80+ github.com/mitchellh/reflectwalk v1.0.2 // indirect
81+ github.com/moby/docker-image-spec v1.3.1 // indirect
82+ github.com/moby/moby/api v1.56.0 // indirect
83+ github.com/moby/moby/client v0.6.0 // indirect
84+ github.com/opencontainers/go-digest v1.0.0 // indirect
85+ github.com/opencontainers/image-spec v1.1.1 // indirect
86+ github.com/petermattis/goid v0.0.0-20260820044319-269ab09b5261 // indirect
87+ github.com/quic-go/qpack v0.6.0 // indirect
88+ github.com/quic-go/quic-go v0.62.0 // indirect
89+ github.com/rivo/uniseg v0.4.7 // indirect
90+ github.com/rs/cors v1.11.1 // indirect
91+ github.com/rs/zerolog v1.35.1 // indirect
92+ github.com/russross/blackfriday/v2 v2.1.0 // indirect
93+ github.com/segmentio/asm v1.2.1 // indirect
94+ github.com/segmentio/encoding v0.5.4 // indirect
95+ github.com/sirupsen/logrus v1.10.2 // indirect
96+ github.com/spf13/cobra v1.10.2 // indirect
97+ github.com/spf13/pflag v1.0.10 // indirect
98+ github.com/stretchr/objx v0.5.3 // indirect
99+ github.com/tetratelabs/wazero v1.12.0 // indirect
100+ github.com/tidwall/btree v1.8.1 // indirect
101+ github.com/vektra/mockery/v3 v3.8.0 // indirect
102+ github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
103+ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
104+ github.com/xeipuuv/gojsonschema v1.2.0 // indirect
105+ go.lsp.dev/jsonrpc2 v0.10.0 // indirect
106+ go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 // indirect
107+ go.lsp.dev/protocol v0.12.0 // indirect
108+ go.lsp.dev/uri v0.3.0 // indirect
109+ go.opentelemetry.io/auto/sdk v1.2.1 // indirect
110+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 // indirect
111+ go.opentelemetry.io/otel v1.46.0 // indirect
112+ go.opentelemetry.io/otel/metric v1.46.0 // indirect
113+ go.opentelemetry.io/otel/trace v1.46.0 // indirect
114+ go.uber.org/multierr v1.11.0 // indirect
115+ go.uber.org/zap v1.28.0 // indirect
116+ go.yaml.in/yaml/v3 v3.0.5 // indirect
117+ golang.org/x/crypto v0.57.0 // indirect
118+ golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa // indirect
9119 golang.org/x/mod v0.41.0 // indirect
120+ golang.org/x/net v0.59.0 // indirect
10121 golang.org/x/sync v0.23.0 // indirect
122+ golang.org/x/sys v0.48.0 // indirect
123+ golang.org/x/term v0.46.0 // indirect
124+ golang.org/x/text v0.42.0 // indirect
11125 golang.org/x/tools v0.51.0 // indirect
126+ google.golang.org/genproto/googleapis/api v0.0.0-20260904194346-d0f1323225a4 // indirect
127+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260904194346-d0f1323225a4 // indirect
128+ google.golang.org/protobuf v1.36.12 // indirect
129+ gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
12130 gopkg.in/yaml.v3 v3.0.1 // indirect
131+ mvdan.cc/xurls/v2 v2.6.0 // indirect
132+ pluginrpc.com/pluginrpc v0.5.0 // indirect
13133 )
@@ -2,12 +2,132 @@ module bnema.dev/ermite
2 2
3 go 1.27.13 go 1.27.1
4 4
5-tool github.com/bnema/hexcheck/cmd/hexcheck5+tool (
6+ github.com/bnema/hexcheck/cmd/hexcheck
7+ github.com/bufbuild/buf/cmd/buf
8+ github.com/vektra/mockery/v3
9+ google.golang.org/protobuf/cmd/protoc-gen-go
10+)
11+
12+require (
13+ github.com/bnema/zerowrap v1.4.1
14+ github.com/stretchr/testify v1.12.1
15+)
6 16
7 require (17 require (
18+ buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.12-20260722160903-4d94f3df3a7b.2 // indirect
19+ buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.12-20250109164928-1da0de137947.2 // indirect
20+ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260825204119-511051f7f437.2 // indirect
21+ buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260831211851-b4432e12a6e7.1 // indirect
22+ buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.12-20260831211851-b4432e12a6e7.2 // indirect
23+ buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.12-20241007202033-cf42259fcbfc.2 // indirect
24+ buf.build/go/app v0.2.1-0.20260824172350-b0e76892c61a // indirect
25+ buf.build/go/bufplugin v0.10.0 // indirect
26+ buf.build/go/bufprivateusage v0.1.0 // indirect
27+ buf.build/go/interrupt v1.1.0 // indirect
28+ buf.build/go/protovalidate v1.4.0 // indirect
29+ buf.build/go/protoyaml v0.7.0 // indirect
30+ buf.build/go/spdx v0.2.0 // indirect
31+ buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 // indirect
32+ cel.dev/cel-go v0.32.0 // indirect
33+ cel.dev/expr v0.25.3 // indirect
34+ connectrpc.com/connect v1.20.0 // indirect
35+ connectrpc.com/otelconnect v0.9.0 // indirect
36+ github.com/Microsoft/go-winio v0.6.2 // indirect
37+ github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
8 github.com/bnema/hexcheck v0.3.1 // indirect38 github.com/bnema/hexcheck v0.3.1 // indirect
39+ github.com/brunoga/deep v1.3.1 // indirect
40+ github.com/bufbuild/buf v1.73.0 // indirect
41+ github.com/bufbuild/protocompile v0.14.2-0.20260910151042-7436f7c76201 // indirect
42+ github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b // indirect
43+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
44+ github.com/cli/browser v1.3.0 // indirect
45+ github.com/clipperhouse/uax29/v2 v2.2.0 // indirect
46+ github.com/containerd/errdefs v1.0.0 // indirect
47+ github.com/containerd/errdefs/pkg v0.3.0 // indirect
48+ github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
49+ github.com/distribution/reference v0.6.0 // indirect
50+ github.com/docker/cli v29.8.0+incompatible // indirect
51+ github.com/docker/docker-credential-helpers v0.9.9 // indirect
52+ github.com/docker/go-connections v0.8.1 // indirect
53+ github.com/docker/go-units v0.5.0 // indirect
54+ github.com/fatih/structs v1.1.0 // indirect
55+ github.com/felixge/httpsnoop v1.1.0 // indirect
56+ github.com/fsnotify/fsnotify v1.9.0 // indirect
57+ github.com/go-logr/logr v1.4.4 // indirect
58+ github.com/go-logr/stdr v1.2.2 // indirect
59+ github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
60+ github.com/gofrs/flock v0.13.1 // indirect
61+ github.com/google/go-containerregistry v0.22.1 // indirect
62+ github.com/google/uuid v1.6.0 // indirect
63+ github.com/huandu/xstrings v1.5.0 // indirect
64+ github.com/inconshreveable/mousetrap v1.1.0 // indirect
65+ github.com/jdx/go-netrc v1.0.0 // indirect
66+ github.com/jedib0t/go-pretty/v6 v6.7.8 // indirect
67+ github.com/klauspost/compress v1.20.0 // indirect
68+ github.com/klauspost/pgzip v1.2.6 // indirect
69+ github.com/knadh/koanf/maps v0.1.2 // indirect
70+ github.com/knadh/koanf/parsers/yaml v1.1.0 // indirect
71+ github.com/knadh/koanf/providers/env v1.1.0 // indirect
72+ github.com/knadh/koanf/providers/file v1.2.1 // indirect
73+ github.com/knadh/koanf/providers/posflag v1.0.1 // indirect
74+ github.com/knadh/koanf/providers/structs v1.0.0 // indirect
75+ github.com/knadh/koanf/v2 v2.3.2 // indirect
76+ github.com/mattn/go-colorable v0.1.15 // indirect
77+ github.com/mattn/go-isatty v0.0.24 // indirect
78+ github.com/mattn/go-runewidth v0.0.19 // indirect
79+ github.com/mitchellh/copystructure v1.2.0 // indirect
80+ github.com/mitchellh/reflectwalk v1.0.2 // indirect
81+ github.com/moby/docker-image-spec v1.3.1 // indirect
82+ github.com/moby/moby/api v1.56.0 // indirect
83+ github.com/moby/moby/client v0.6.0 // indirect
84+ github.com/opencontainers/go-digest v1.0.0 // indirect
85+ github.com/opencontainers/image-spec v1.1.1 // indirect
86+ github.com/petermattis/goid v0.0.0-20260820044319-269ab09b5261 // indirect
87+ github.com/quic-go/qpack v0.6.0 // indirect
88+ github.com/quic-go/quic-go v0.62.0 // indirect
89+ github.com/rivo/uniseg v0.4.7 // indirect
90+ github.com/rs/cors v1.11.1 // indirect
91+ github.com/rs/zerolog v1.35.1 // indirect
92+ github.com/russross/blackfriday/v2 v2.1.0 // indirect
93+ github.com/segmentio/asm v1.2.1 // indirect
94+ github.com/segmentio/encoding v0.5.4 // indirect
95+ github.com/sirupsen/logrus v1.10.2 // indirect
96+ github.com/spf13/cobra v1.10.2 // indirect
97+ github.com/spf13/pflag v1.0.10 // indirect
98+ github.com/stretchr/objx v0.5.3 // indirect
99+ github.com/tetratelabs/wazero v1.12.0 // indirect
100+ github.com/tidwall/btree v1.8.1 // indirect
101+ github.com/vektra/mockery/v3 v3.8.0 // indirect
102+ github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
103+ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
104+ github.com/xeipuuv/gojsonschema v1.2.0 // indirect
105+ go.lsp.dev/jsonrpc2 v0.10.0 // indirect
106+ go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 // indirect
107+ go.lsp.dev/protocol v0.12.0 // indirect
108+ go.lsp.dev/uri v0.3.0 // indirect
109+ go.opentelemetry.io/auto/sdk v1.2.1 // indirect
110+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 // indirect
111+ go.opentelemetry.io/otel v1.46.0 // indirect
112+ go.opentelemetry.io/otel/metric v1.46.0 // indirect
113+ go.opentelemetry.io/otel/trace v1.46.0 // indirect
114+ go.uber.org/multierr v1.11.0 // indirect
115+ go.uber.org/zap v1.28.0 // indirect
116+ go.yaml.in/yaml/v3 v3.0.5 // indirect
117+ golang.org/x/crypto v0.57.0 // indirect
118+ golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa // indirect
9 golang.org/x/mod v0.41.0 // indirect119 golang.org/x/mod v0.41.0 // indirect
120+ golang.org/x/net v0.59.0 // indirect
10 golang.org/x/sync v0.23.0 // indirect121 golang.org/x/sync v0.23.0 // indirect
122+ golang.org/x/sys v0.48.0 // indirect
123+ golang.org/x/term v0.46.0 // indirect
124+ golang.org/x/text v0.42.0 // indirect
11 golang.org/x/tools v0.51.0 // indirect125 golang.org/x/tools v0.51.0 // indirect
126+ google.golang.org/genproto/googleapis/api v0.0.0-20260904194346-d0f1323225a4 // indirect
127+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260904194346-d0f1323225a4 // indirect
128+ google.golang.org/protobuf v1.36.12 // indirect
129+ gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
12 gopkg.in/yaml.v3 v3.0.1 // indirect130 gopkg.in/yaml.v3 v3.0.1 // indirect
131+ mvdan.cc/xurls/v2 v2.6.0 // indirect
132+ pluginrpc.com/pluginrpc v0.5.0 // indirect
13 )133 )
M go.sum +273 -3
@@ -1,14 +1,284 @@
1+buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.12-20260722160903-4d94f3df3a7b.2 h1:z5+rVknD0AvorY/QV9cb3ohUXw4E7HvxU4+2JUH6EHU=
2+buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.12-20260722160903-4d94f3df3a7b.2/go.mod h1:Owcuj2phVyvThVYCD74iSV8ki0dAXw/uxkdcdZScdCc=
3+buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.12-20250109164928-1da0de137947.2 h1:tE4A2RVukQOSd4K+6ndK+8s65FbjiBt2k5CiddXxCCo=
4+buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.12-20250109164928-1da0de137947.2/go.mod h1:Gjxz0o7qPHokNsmlX8D+/aKd29NRLRr9CCUkPeMAzJ0=
5+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260825204119-511051f7f437.2 h1:NbnlmV26O7oZ1iM5tsCI+GEx+3ZSdrhvnKQ/eWSrLiY=
6+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260825204119-511051f7f437.2/go.mod h1:TCt1lluMFnctISJXvkIQ4x3ABrPuUKCWKyjKdkJNBpw=
7+buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260831211851-b4432e12a6e7.1 h1:BpToyjv+oz0qldatN/ZFTL+vVtPVavFCY+g4rRu03bs=
8+buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260831211851-b4432e12a6e7.1/go.mod h1:hMqlU8iWXqCU7UOBs8PTDG/z7BFnhIknJZ4XMWcBx3E=
9+buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.12-20260831211851-b4432e12a6e7.2 h1:cik2XvKM1UV8HgLWD2vnBvV4GgT5NfpLJBb9UgLKzzg=
10+buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.12-20260831211851-b4432e12a6e7.2/go.mod h1:91H8i3iR9GoomNkM9X13RTFL8cVNAHnS44BdgAnbqz4=
11+buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.12-20241007202033-cf42259fcbfc.2 h1:9xw8g8Q6zHLC7CO/jtpl2UK0kQticxIG+mI6N86f2/M=
12+buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.12-20241007202033-cf42259fcbfc.2/go.mod h1:+0bw+k8FY5MU3tojFh33HeA5xMfGWjAUQpr+maW5Z3o=
13+buf.build/go/app v0.2.1-0.20260824172350-b0e76892c61a h1:m3hkeJOeLSq/1yTSMLyV5ipY6u3XrfS3gV8ZIqkUJJA=
14+buf.build/go/app v0.2.1-0.20260824172350-b0e76892c61a/go.mod h1:w19H+Lh2cAV/uL1FhcdDlyoxLTm8SkQAHW3CfmXZbFU=
15+buf.build/go/bufplugin v0.10.0 h1:vZBX0mq9as5UIBug8U+/DkGRaHNlM/HVOw59O8fvOIU=
16+buf.build/go/bufplugin v0.10.0/go.mod h1:ax7obVurKDH1I2nR4pFTS+TE6K3kZhTmwDCN2YgdV8I=
17+buf.build/go/bufprivateusage v0.1.0 h1:SzCoCcmzS3zyXHEXHeSQhGI7OTkgtljoknLzsUz9Gg4=
18+buf.build/go/bufprivateusage v0.1.0/go.mod h1:GlCCJ3VVF7EqqU0CoRmo1FzAwwaKymEWSr+ty69xU5w=
19+buf.build/go/interrupt v1.1.0 h1:olBuhgv9Sav4/9pkSLoxgiOsZDgM5VhRhvRpn3DL0lE=
20+buf.build/go/interrupt v1.1.0/go.mod h1:ql56nXPG1oHlvZa6efNC7SKAQ/tUjS6z0mhJl0gyeRM=
21+buf.build/go/protovalidate v1.4.0 h1:UjLrYbt5VX7+TMOs2+pG5FhZhIG1mSfK4EIopbb4LcM=
22+buf.build/go/protovalidate v1.4.0/go.mod h1:8vJfzNT6NIG2qm3uFsJDXMlRmG+bQJzbcIn1Aa0vPGs=
23+buf.build/go/protoyaml v0.7.0 h1:z4oVoFicbpPefhT7WAykxUdfp0yEQlhMQ2mCZOY5V38=
24+buf.build/go/protoyaml v0.7.0/go.mod h1:+a0cavd0uMvirb87xdu2ZMMmjlIQoiH/N2Ich5MGSQ0=
25+buf.build/go/spdx v0.2.0 h1:IItqM0/cMxvFJJumcBuP8NrsIzMs/UYjp/6WSpq8LTw=
26+buf.build/go/spdx v0.2.0/go.mod h1:bXdwQFem9Si3nsbNy8aJKGPoaPi5DKwdeEp5/ArZ6w8=
27+buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 h1:njYKSWoLiq2i5O7y2bPPU2Yzp7iAU0Wk9KJ2OoAhNiU=
28+buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5/go.mod h1:DQmodNT9EHX94WzUaWiZK+/4EaFa/xZTc1gzfCxZVXU=
29+cel.dev/cel-go v0.32.0 h1:irvpFKr5EuGPyxeME03ERh0rii1TX+BDAnB9eL3IvNk=
30+cel.dev/cel-go v0.32.0/go.mod h1:DnVip7tpJSsgZymwfT+m1tnEVy3ivAjSMXPx12YrMkU=
31+cel.dev/expr v0.25.3 h1:A2jO8jwOugrrovveCWfj0KEZOfqiLgAcwjpHPhzIGw0=
32+cel.dev/expr v0.25.3/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
33+connectrpc.com/connect v1.20.0 h1:6TNDAB+WeNd2uolWNlYczB5E0KNNaVMNUEx8JEUsPmQ=
34+connectrpc.com/connect v1.20.0/go.mod h1:A2ygJrukXwWy32vkCAAHNVguZrqZ+jeZ9rGRnGR4dN4=
35+connectrpc.com/grpcreflect v1.3.0 h1:Y4V+ACf8/vOb1XOc251Qun7jMB75gCUNw6llvB9csXc=
36+connectrpc.com/grpcreflect v1.3.0/go.mod h1:nfloOtCS8VUQOQ1+GTdFzVg2CJo4ZGaat8JIovCtDYs=
37+connectrpc.com/otelconnect v0.9.0 h1:NggB3pzRC3pukQWaYbRHJulxuXvmCKCKkQ9hbrHAWoA=
38+connectrpc.com/otelconnect v0.9.0/go.mod h1:AEkVLjCPXra+ObGFCOClcJkNjS7zPaQSqvO0lCyjfZc=
39+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
40+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
41+github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
42+github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
43+github.com/bmatcuk/doublestar/v4 v4.10.0 h1:zU9WiOla1YA122oLM6i4EXvGW62DvKZVxIe6TYWexEs=
44+github.com/bmatcuk/doublestar/v4 v4.10.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
145 github.com/bnema/hexcheck v0.3.1 h1:Apv7w0KmsfbOBOq/r1jPlENX3Z7ukAEPlAxvWMTTd3I=
246 github.com/bnema/hexcheck v0.3.1/go.mod h1:8KuFStFhn1qNKDBrUvxOB5VzSP/uuePrURqPhq2KVAk=
3-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
4-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
47+github.com/bnema/zerowrap v1.4.1 h1:v70w8LDU2+FU+EX/etY9DjVwOAWN0fUKShwZyZHnyLU=
48+github.com/bnema/zerowrap v1.4.1/go.mod h1:8M8Qz3uRpbszYkXqi0Dnr1TZ4lDrQY8/orGm30zwKKg=
49+github.com/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo0tgAW4=
50+github.com/brianvoe/gofakeit/v6 v6.28.0/go.mod h1:Xj58BMSnFqcn/fAQeSK+/PLtC5kSb7FJIq4JyGa8vEs=
51+github.com/brunoga/deep v1.3.1 h1:bSrL6FhAZa6JlVv4vsi7Hg8SLwroDb1kgDERRVipBCo=
52+github.com/brunoga/deep v1.3.1/go.mod h1:GDV6dnXqn80ezsLSZ5Wlv1PdKAWAO4L5PnKYtv2dgaI=
53+github.com/bufbuild/buf v1.73.0 h1:fDNKlxaf+PYi20dmVM7Yt3kOfXEhwrgKDLMNZFjztDs=
54+github.com/bufbuild/buf v1.73.0/go.mod h1:rfWpi8FmfTPW4CbLFIXZYAux2FWBiCMY6BUOlGqnR84=
55+github.com/bufbuild/protocompile v0.14.2-0.20260910151042-7436f7c76201 h1:jBaIQ1eixwqtjBKJk8gw+dKtmbkp3w8sLJtJ7kav1EE=
56+github.com/bufbuild/protocompile v0.14.2-0.20260910151042-7436f7c76201/go.mod h1:bX3ObJfML+aki7PJevkWLSlOfEZ8EnNsfCz0hiYkhiI=
57+github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b h1:b7wvo9ZhjLzCp7tGbOUMvgtYTnd33zGSAmMxcdxMnhQ=
58+github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ=
59+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
60+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
61+github.com/cli/browser v1.3.0 h1:LejqCrpWr+1pRqmEPDGnTZOjsMe7sehifLynZJuqJpo=
62+github.com/cli/browser v1.3.0/go.mod h1:HH8s+fOAxjhQoBUAsKuPCbqUuxZDhQ2/aD+SzsEfBTk=
63+github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY=
64+github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
65+github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
66+github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
67+github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
68+github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
69+github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
70+github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
71+github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
72+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
73+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
74+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
75+github.com/docker/cli v29.8.0+incompatible h1:ih0c2jq/nN7QfES8zIfwSzIhRScjs4ehER+kZ60aeSk=
76+github.com/docker/cli v29.8.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
77+github.com/docker/docker-credential-helpers v0.9.9 h1:BkydjIgZ46JnDbqyM2p2fc63KMw6y+KHL3Em/2AGJ7w=
78+github.com/docker/docker-credential-helpers v0.9.9/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c=
79+github.com/docker/go-connections v0.8.1 h1:JibmG5hULs5qXSr/cp/w3Pw5fZuStt4MOHMUExb29/M=
80+github.com/docker/go-connections v0.8.1/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q=
81+github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
82+github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
83+github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
84+github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
85+github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
86+github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
87+github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
88+github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
89+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
90+github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8=
91+github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
92+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
93+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
94+github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro=
95+github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
96+github.com/gofrs/flock v0.13.1 h1:jjREztyBeSKBZYAC+mgc1laB+xsgy4kYMf3FbKF2UBo=
97+github.com/gofrs/flock v0.13.1/go.mod h1:sf4BFiHwnvgxa25DlQoDqXQnwRMEOwqxRq37P6MzzmE=
98+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
99+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
100+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
101+github.com/google/go-containerregistry v0.22.1 h1:RZuuSYhTvlDvtsK+NkutoCZ//C0X2ebLK8X8l3ULs84=
102+github.com/google/go-containerregistry v0.22.1/go.mod h1:bJR35SK8XgisYmhg/FMQ/5RK0S/XrOAqLBV5/LR2XE0=
103+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
104+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
105+github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
106+github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
107+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
108+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
109+github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ=
110+github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8=
111+github.com/jedib0t/go-pretty/v6 v6.7.8 h1:BVYrDy5DPBA3Qn9ICT+PokP9cvCv1KaHv2i+Hc8sr5o=
112+github.com/jedib0t/go-pretty/v6 v6.7.8/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU=
113+github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88=
114+github.com/jhump/protoreflect/v2 v2.0.0-beta.2/go.mod h1:4tnOYkB/mq7QTyS3YKtVtNrJv4Psqout8HA1U+hZtgM=
115+github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA=
116+github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI=
117+github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
118+github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
119+github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo=
120+github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
121+github.com/knadh/koanf/parsers/yaml v1.1.0 h1:3ltfm9ljprAHt4jxgeYLlFPmUaunuCgu1yILuTXRdM4=
122+github.com/knadh/koanf/parsers/yaml v1.1.0/go.mod h1:HHmcHXUrp9cOPcuC+2wrr44GTUB0EC+PyfN3HZD9tFg=
123+github.com/knadh/koanf/providers/env v1.1.0 h1:U2VXPY0f+CsNDkvdsG8GcsnK4ah85WwWyJgef9oQMSc=
124+github.com/knadh/koanf/providers/env v1.1.0/go.mod h1:QhHHHZ87h9JxJAn2czdEl6pdkNnDh/JS1Vtsyt65hTY=
125+github.com/knadh/koanf/providers/file v1.2.1 h1:bEWbtQwYrA+W2DtdBrQWyXqJaJSG3KrP3AESOJYp9wM=
126+github.com/knadh/koanf/providers/file v1.2.1/go.mod h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA=
127+github.com/knadh/koanf/providers/posflag v1.0.1 h1:EnMxHSrPkYCFnKgBUl5KBgrjed8gVFrcXDzaW4l/C6Y=
128+github.com/knadh/koanf/providers/posflag v1.0.1/go.mod h1:3Wn3+YG3f4ljzRyCUgIwH7G0sZ1pMjCOsNBovrbKmAk=
129+github.com/knadh/koanf/providers/structs v1.0.0 h1:DznjB7NQykhqCar2LvNug3MuxEQsZ5KvfgMbio+23u4=
130+github.com/knadh/koanf/providers/structs v1.0.0/go.mod h1:kjo5TFtgpaZORlpoJqcbeLowM2cINodv8kX+oFAeQ1w=
131+github.com/knadh/koanf/v2 v2.3.2 h1:Ee6tuzQYFwcZXQpc2MiVeC6qHMandf5SMUJJNoFp/c4=
132+github.com/knadh/koanf/v2 v2.3.2/go.mod h1:gRb40VRAbd4iJMYYD5IxZ6hfuopFcXBpc9bbQpZwo28=
133+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
134+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
135+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
136+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
137+github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY=
138+github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
139+github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI=
140+github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A=
141+github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
142+github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
143+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
144+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
145+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
146+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
147+github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
148+github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
149+github.com/moby/moby/api v1.56.0 h1:GQzua3NA599ASSIICx0iFgiJeO9YkdDARvQsm23ZZuQ=
150+github.com/moby/moby/api v1.56.0/go.mod h1:sZ+THbVWkjOmBPPfbnzdD/G1LuIexWhqlSHHPTDQ1Uk=
151+github.com/moby/moby/client v0.6.0 h1:AJjEB21QPbXSXjDsZorFBoDZPhMrfbpaPLgSMAW9Bgs=
152+github.com/moby/moby/client v0.6.0/go.mod h1:OCo00wNRyA3m4lmJ228W3JbyCN4ZNNYjpOXiJydBdcQ=
153+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
154+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
155+github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
156+github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
157+github.com/petermattis/goid v0.0.0-20260820044319-269ab09b5261 h1:lcWAnrqr2nNfDiArwFNHCE4787Mw2tCdVSOXCru0/0E=
158+github.com/petermattis/goid v0.0.0-20260820044319-269ab09b5261/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
159+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
160+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
161+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
162+github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 h1:arwj11zP0yJIxIRiDn22E0H8PxfF7TsTrc2wIPFIsf4=
163+github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9/go.mod h1:SKZx6stCn03JN3BOWTwvVIO2ajMkb/zQdTceXYhKw/4=
164+github.com/quic-go/go-ossfuzz-seeds v0.1.0 h1:APacT+iIaNF6fd8AGEiN3bT/Jtkd2jz4v4TzM7MFjy0=
165+github.com/quic-go/go-ossfuzz-seeds v0.1.0/go.mod h1:3IOHRbJIc+L6YKMwfDtJAM9Vj9k0YY4muhuyUYk5tbk=
166+github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
167+github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
168+github.com/quic-go/quic-go v0.62.0 h1:ZHDjCk5OacATwGvs8PWE97CTvX7AqZiVoW7++ZOXTf8=
169+github.com/quic-go/quic-go v0.62.0/go.mod h1:RAro2j2yN9a9EiPACLHT9IB2NXCvGQmmo/alT0yYI0w=
170+github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
171+github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
172+github.com/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8=
173+github.com/rodaine/protogofakeit v0.1.1/go.mod h1:pXn/AstBYMaSfc1/RqH3N82pBuxtWgejz1AlYpY1mI0=
174+github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
175+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
176+github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
177+github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
178+github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI=
179+github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw=
180+github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
181+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
182+github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
183+github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
184+github.com/segmentio/encoding v0.5.4 h1:OW1VRern8Nw6ITAtwSZ7Idrl3MXCFwXHPgqESYfvNt0=
185+github.com/segmentio/encoding v0.5.4/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0=
186+github.com/sirupsen/logrus v1.10.2 h1:G2SED73/qrAu6YwbdxOD6peLkCBI3z7L+ykJFTXJBBo=
187+github.com/sirupsen/logrus v1.10.2/go.mod h1:SLEg8TqYulVKKfIGHldVp2K2aYz2DKSVBq4g/H5bR7Q=
188+github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
189+github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
190+github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
191+github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
192+github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
193+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
194+github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
195+github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
196+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
197+github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE=
198+github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg=
199+github.com/tetratelabs/wazero v1.12.0 h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU=
200+github.com/tetratelabs/wazero v1.12.0/go.mod h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0=
201+github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA=
202+github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A=
203+github.com/vektra/mockery/v3 v3.8.0 h1:Tklqcx844iV8GtYziqJXam1a8RdcKip4UErMa66Nxps=
204+github.com/vektra/mockery/v3 v3.8.0/go.mod h1:K+L72OoFVizA9eWtO4L+kU65oylgreiJEJ57Gu8g9Ew=
205+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
206+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
207+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
208+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
209+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
210+github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
211+github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
212+go.lsp.dev/jsonrpc2 v0.10.0 h1:Pr/YcXJoEOTMc/b6OTmcR1DPJ3mSWl/SWiU1Cct6VmI=
213+go.lsp.dev/jsonrpc2 v0.10.0/go.mod h1:fmEzIdXPi/rf6d4uFcayi8HpFP1nBF99ERP1htC72Ac=
214+go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 h1:hCzQgh6UcwbKgNSRurYWSqh8MufqRRPODRBblutn4TE=
215+go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2/go.mod h1:gtSHRuYfbCT0qnbLnovpie/WEmqyJ7T4n6VXiFMBtcw=
216+go.lsp.dev/protocol v0.12.0 h1:tNprUI9klQW5FAFVM4Sa+AbPFuVQByWhP1ttNUAjIWg=
217+go.lsp.dev/protocol v0.12.0/go.mod h1:Qb11/HgZQ72qQbeyPfJbu3hZBH23s1sr4st8czGeDMQ=
218+go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo=
219+go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I=
220+go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
221+go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
222+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 h1:3g7B90UzBltIDKq1/5mrTGxTnOFDV0ICOhLoxiZ8jlg=
223+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0/go.mod h1:Ef8SuTh59BT7+ofpDxN9z+yOlc4t2GjLmKDgYNJL/NU=
224+go.opentelemetry.io/otel v1.46.0 h1:FHt5/CDyVxi/8IM1CH7VE/rRgq3kLHa2mSTVMO8AWyc=
225+go.opentelemetry.io/otel v1.46.0/go.mod h1:Gj3SEScelsNC45tp4nSxRYlS+f5iez7W8XPMCt905kE=
226+go.opentelemetry.io/otel/metric v1.46.0 h1:yBnkXvgV7AXFILZc5K6IZe/CBFF3OS7BJ8ov6/lj0K8=
227+go.opentelemetry.io/otel/metric v1.46.0/go.mod h1:iPmdWqifKUdzziPkvvzIJXITl56fQx2mGM/DHLB3/2o=
228+go.opentelemetry.io/otel/sdk v1.46.0 h1:h5CNQQjEbuQXY/JfZtgt3i7HVFV3aHPO2OAwO2eTYPI=
229+go.opentelemetry.io/otel/sdk v1.46.0/go.mod h1:GAERFXFt5SYCEB+YiKUbMBeza6UaDH7GmGOZEfh2gSM=
230+go.opentelemetry.io/otel/sdk/metric v1.46.0 h1:0piZ26EG4RBfebb2jhDH6ERCYHoVWduc3kLgPCwSnSE=
231+go.opentelemetry.io/otel/sdk/metric v1.46.0/go.mod h1:I1PbKrdVc8Qu8HYVDNtqVIwLwjNrhsV/uFuxfwg8mO4=
232+go.opentelemetry.io/otel/trace v1.46.0 h1:OULy7ccdJnZtJ0UDYFOIGaCmiWzJ8Vi2G/Rsu60qs1c=
233+go.opentelemetry.io/otel/trace v1.46.0/go.mod h1:J7GAXweO77XSFkB/rmAqk9D6ihszhFjLU+d9WuUxDLI=
234+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
235+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
236+go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
237+go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
238+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
239+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
240+go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo=
241+go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q=
242+go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
243+go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw=
244+go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg=
245+golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M=
246+golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA=
247+golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa h1:QSyA8ishJCyT21kER9KwNt0b7BM3iRK4x9QXhjN5Fdk=
248+golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa/go.mod h1:zeBbvyFKDaLwa7CH/zI8KXt7gTl14SF7sO08Pl5jBCM=
5249 golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c=
6250 golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o=
251+golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues=
252+golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg=
7253 golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk=
8254 golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0=
255+golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo=
256+golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
257+golang.org/x/term v0.46.0 h1:3+OXuTbaKDgwk8jTi3aSLHRlmWqHEUDUtxnbFigO4YE=
258+golang.org/x/term v0.46.0/go.mod h1:+K02xbkittuwc0Am4abfA3Fc+XRGXkvBXNO88NCXPoc=
259+golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
260+golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
9261 golang.org/x/tools v0.51.0 h1:k4Xc/1Om9jwkBJBo4NVLMSARBoWtK10mx+W5BnXCeAI=
10262 golang.org/x/tools v0.51.0/go.mod h1:9eEncMayCV6zRMGhR5eZEC2iBx98qWcF1HZ9Z7wJOoA=
11-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
263+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
264+google.golang.org/genproto/googleapis/api v0.0.0-20260904194346-d0f1323225a4 h1:NCe/UiklGd/9xjT+ROBVhJ1kf6TRQaFedsR+z7u1gvo=
265+google.golang.org/genproto/googleapis/api v0.0.0-20260904194346-d0f1323225a4/go.mod h1:fJ2lYaWjqNknJyQBOCd0fA3HnEElJqGplH71a2txi+g=
266+google.golang.org/genproto/googleapis/rpc v0.0.0-20260904194346-d0f1323225a4 h1:5t+ZydAFj5kGVLrgCvLmpmCf9ylGRd64hpEronfRaws=
267+google.golang.org/genproto/googleapis/rpc v0.0.0-20260904194346-d0f1323225a4/go.mod h1:DjtHYE8FKJLivXcBEjGwndXfIC23G0VpXiXKqG179uA=
268+google.golang.org/protobuf v1.36.12 h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc=
269+google.golang.org/protobuf v1.36.12/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
12270 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
271+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
272+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
273+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
274+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
13275 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
14276 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
277+gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
278+gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
279+mvdan.cc/xurls/v2 v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
280+mvdan.cc/xurls/v2 v2.6.0/go.mod h1:bCvEZ1XvdA6wDnxY7jPPjEmigDtvtvPXAD/Exa9IMSk=
281+pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
282+pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
283+pluginrpc.com/pluginrpc v0.5.0 h1:tOQj2D35hOmvHyPu8e7ohW2/QvAnEtKscy2IJYWQ2yo=
284+pluginrpc.com/pluginrpc v0.5.0/go.mod h1:UNWZ941hcVAoOZUn8YZsMmOZBzbUjQa3XMns8RQLp9o=
@@ -1,14 +1,284 @@
1+buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.12-20260722160903-4d94f3df3a7b.2 h1:z5+rVknD0AvorY/QV9cb3ohUXw4E7HvxU4+2JUH6EHU=
2+buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.12-20260722160903-4d94f3df3a7b.2/go.mod h1:Owcuj2phVyvThVYCD74iSV8ki0dAXw/uxkdcdZScdCc=
3+buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.12-20250109164928-1da0de137947.2 h1:tE4A2RVukQOSd4K+6ndK+8s65FbjiBt2k5CiddXxCCo=
4+buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.12-20250109164928-1da0de137947.2/go.mod h1:Gjxz0o7qPHokNsmlX8D+/aKd29NRLRr9CCUkPeMAzJ0=
5+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260825204119-511051f7f437.2 h1:NbnlmV26O7oZ1iM5tsCI+GEx+3ZSdrhvnKQ/eWSrLiY=
6+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260825204119-511051f7f437.2/go.mod h1:TCt1lluMFnctISJXvkIQ4x3ABrPuUKCWKyjKdkJNBpw=
7+buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260831211851-b4432e12a6e7.1 h1:BpToyjv+oz0qldatN/ZFTL+vVtPVavFCY+g4rRu03bs=
8+buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260831211851-b4432e12a6e7.1/go.mod h1:hMqlU8iWXqCU7UOBs8PTDG/z7BFnhIknJZ4XMWcBx3E=
9+buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.12-20260831211851-b4432e12a6e7.2 h1:cik2XvKM1UV8HgLWD2vnBvV4GgT5NfpLJBb9UgLKzzg=
10+buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.12-20260831211851-b4432e12a6e7.2/go.mod h1:91H8i3iR9GoomNkM9X13RTFL8cVNAHnS44BdgAnbqz4=
11+buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.12-20241007202033-cf42259fcbfc.2 h1:9xw8g8Q6zHLC7CO/jtpl2UK0kQticxIG+mI6N86f2/M=
12+buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.12-20241007202033-cf42259fcbfc.2/go.mod h1:+0bw+k8FY5MU3tojFh33HeA5xMfGWjAUQpr+maW5Z3o=
13+buf.build/go/app v0.2.1-0.20260824172350-b0e76892c61a h1:m3hkeJOeLSq/1yTSMLyV5ipY6u3XrfS3gV8ZIqkUJJA=
14+buf.build/go/app v0.2.1-0.20260824172350-b0e76892c61a/go.mod h1:w19H+Lh2cAV/uL1FhcdDlyoxLTm8SkQAHW3CfmXZbFU=
15+buf.build/go/bufplugin v0.10.0 h1:vZBX0mq9as5UIBug8U+/DkGRaHNlM/HVOw59O8fvOIU=
16+buf.build/go/bufplugin v0.10.0/go.mod h1:ax7obVurKDH1I2nR4pFTS+TE6K3kZhTmwDCN2YgdV8I=
17+buf.build/go/bufprivateusage v0.1.0 h1:SzCoCcmzS3zyXHEXHeSQhGI7OTkgtljoknLzsUz9Gg4=
18+buf.build/go/bufprivateusage v0.1.0/go.mod h1:GlCCJ3VVF7EqqU0CoRmo1FzAwwaKymEWSr+ty69xU5w=
19+buf.build/go/interrupt v1.1.0 h1:olBuhgv9Sav4/9pkSLoxgiOsZDgM5VhRhvRpn3DL0lE=
20+buf.build/go/interrupt v1.1.0/go.mod h1:ql56nXPG1oHlvZa6efNC7SKAQ/tUjS6z0mhJl0gyeRM=
21+buf.build/go/protovalidate v1.4.0 h1:UjLrYbt5VX7+TMOs2+pG5FhZhIG1mSfK4EIopbb4LcM=
22+buf.build/go/protovalidate v1.4.0/go.mod h1:8vJfzNT6NIG2qm3uFsJDXMlRmG+bQJzbcIn1Aa0vPGs=
23+buf.build/go/protoyaml v0.7.0 h1:z4oVoFicbpPefhT7WAykxUdfp0yEQlhMQ2mCZOY5V38=
24+buf.build/go/protoyaml v0.7.0/go.mod h1:+a0cavd0uMvirb87xdu2ZMMmjlIQoiH/N2Ich5MGSQ0=
25+buf.build/go/spdx v0.2.0 h1:IItqM0/cMxvFJJumcBuP8NrsIzMs/UYjp/6WSpq8LTw=
26+buf.build/go/spdx v0.2.0/go.mod h1:bXdwQFem9Si3nsbNy8aJKGPoaPi5DKwdeEp5/ArZ6w8=
27+buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 h1:njYKSWoLiq2i5O7y2bPPU2Yzp7iAU0Wk9KJ2OoAhNiU=
28+buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5/go.mod h1:DQmodNT9EHX94WzUaWiZK+/4EaFa/xZTc1gzfCxZVXU=
29+cel.dev/cel-go v0.32.0 h1:irvpFKr5EuGPyxeME03ERh0rii1TX+BDAnB9eL3IvNk=
30+cel.dev/cel-go v0.32.0/go.mod h1:DnVip7tpJSsgZymwfT+m1tnEVy3ivAjSMXPx12YrMkU=
31+cel.dev/expr v0.25.3 h1:A2jO8jwOugrrovveCWfj0KEZOfqiLgAcwjpHPhzIGw0=
32+cel.dev/expr v0.25.3/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
33+connectrpc.com/connect v1.20.0 h1:6TNDAB+WeNd2uolWNlYczB5E0KNNaVMNUEx8JEUsPmQ=
34+connectrpc.com/connect v1.20.0/go.mod h1:A2ygJrukXwWy32vkCAAHNVguZrqZ+jeZ9rGRnGR4dN4=
35+connectrpc.com/grpcreflect v1.3.0 h1:Y4V+ACf8/vOb1XOc251Qun7jMB75gCUNw6llvB9csXc=
36+connectrpc.com/grpcreflect v1.3.0/go.mod h1:nfloOtCS8VUQOQ1+GTdFzVg2CJo4ZGaat8JIovCtDYs=
37+connectrpc.com/otelconnect v0.9.0 h1:NggB3pzRC3pukQWaYbRHJulxuXvmCKCKkQ9hbrHAWoA=
38+connectrpc.com/otelconnect v0.9.0/go.mod h1:AEkVLjCPXra+ObGFCOClcJkNjS7zPaQSqvO0lCyjfZc=
39+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
40+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
41+github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
42+github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
43+github.com/bmatcuk/doublestar/v4 v4.10.0 h1:zU9WiOla1YA122oLM6i4EXvGW62DvKZVxIe6TYWexEs=
44+github.com/bmatcuk/doublestar/v4 v4.10.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
1 github.com/bnema/hexcheck v0.3.1 h1:Apv7w0KmsfbOBOq/r1jPlENX3Z7ukAEPlAxvWMTTd3I=45 github.com/bnema/hexcheck v0.3.1 h1:Apv7w0KmsfbOBOq/r1jPlENX3Z7ukAEPlAxvWMTTd3I=
2 github.com/bnema/hexcheck v0.3.1/go.mod h1:8KuFStFhn1qNKDBrUvxOB5VzSP/uuePrURqPhq2KVAk=46 github.com/bnema/hexcheck v0.3.1/go.mod h1:8KuFStFhn1qNKDBrUvxOB5VzSP/uuePrURqPhq2KVAk=
3-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=47+github.com/bnema/zerowrap v1.4.1 h1:v70w8LDU2+FU+EX/etY9DjVwOAWN0fUKShwZyZHnyLU=
4-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=48+github.com/bnema/zerowrap v1.4.1/go.mod h1:8M8Qz3uRpbszYkXqi0Dnr1TZ4lDrQY8/orGm30zwKKg=
49+github.com/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo0tgAW4=
50+github.com/brianvoe/gofakeit/v6 v6.28.0/go.mod h1:Xj58BMSnFqcn/fAQeSK+/PLtC5kSb7FJIq4JyGa8vEs=
51+github.com/brunoga/deep v1.3.1 h1:bSrL6FhAZa6JlVv4vsi7Hg8SLwroDb1kgDERRVipBCo=
52+github.com/brunoga/deep v1.3.1/go.mod h1:GDV6dnXqn80ezsLSZ5Wlv1PdKAWAO4L5PnKYtv2dgaI=
53+github.com/bufbuild/buf v1.73.0 h1:fDNKlxaf+PYi20dmVM7Yt3kOfXEhwrgKDLMNZFjztDs=
54+github.com/bufbuild/buf v1.73.0/go.mod h1:rfWpi8FmfTPW4CbLFIXZYAux2FWBiCMY6BUOlGqnR84=
55+github.com/bufbuild/protocompile v0.14.2-0.20260910151042-7436f7c76201 h1:jBaIQ1eixwqtjBKJk8gw+dKtmbkp3w8sLJtJ7kav1EE=
56+github.com/bufbuild/protocompile v0.14.2-0.20260910151042-7436f7c76201/go.mod h1:bX3ObJfML+aki7PJevkWLSlOfEZ8EnNsfCz0hiYkhiI=
57+github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b h1:b7wvo9ZhjLzCp7tGbOUMvgtYTnd33zGSAmMxcdxMnhQ=
58+github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ=
59+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
60+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
61+github.com/cli/browser v1.3.0 h1:LejqCrpWr+1pRqmEPDGnTZOjsMe7sehifLynZJuqJpo=
62+github.com/cli/browser v1.3.0/go.mod h1:HH8s+fOAxjhQoBUAsKuPCbqUuxZDhQ2/aD+SzsEfBTk=
63+github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY=
64+github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
65+github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
66+github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
67+github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
68+github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
69+github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
70+github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
71+github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
72+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
73+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
74+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
75+github.com/docker/cli v29.8.0+incompatible h1:ih0c2jq/nN7QfES8zIfwSzIhRScjs4ehER+kZ60aeSk=
76+github.com/docker/cli v29.8.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
77+github.com/docker/docker-credential-helpers v0.9.9 h1:BkydjIgZ46JnDbqyM2p2fc63KMw6y+KHL3Em/2AGJ7w=
78+github.com/docker/docker-credential-helpers v0.9.9/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c=
79+github.com/docker/go-connections v0.8.1 h1:JibmG5hULs5qXSr/cp/w3Pw5fZuStt4MOHMUExb29/M=
80+github.com/docker/go-connections v0.8.1/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q=
81+github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
82+github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
83+github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
84+github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
85+github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
86+github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
87+github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
88+github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
89+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
90+github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8=
91+github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
92+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
93+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
94+github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro=
95+github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
96+github.com/gofrs/flock v0.13.1 h1:jjREztyBeSKBZYAC+mgc1laB+xsgy4kYMf3FbKF2UBo=
97+github.com/gofrs/flock v0.13.1/go.mod h1:sf4BFiHwnvgxa25DlQoDqXQnwRMEOwqxRq37P6MzzmE=
98+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
99+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
100+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
101+github.com/google/go-containerregistry v0.22.1 h1:RZuuSYhTvlDvtsK+NkutoCZ//C0X2ebLK8X8l3ULs84=
102+github.com/google/go-containerregistry v0.22.1/go.mod h1:bJR35SK8XgisYmhg/FMQ/5RK0S/XrOAqLBV5/LR2XE0=
103+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
104+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
105+github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
106+github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
107+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
108+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
109+github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ=
110+github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8=
111+github.com/jedib0t/go-pretty/v6 v6.7.8 h1:BVYrDy5DPBA3Qn9ICT+PokP9cvCv1KaHv2i+Hc8sr5o=
112+github.com/jedib0t/go-pretty/v6 v6.7.8/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU=
113+github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88=
114+github.com/jhump/protoreflect/v2 v2.0.0-beta.2/go.mod h1:4tnOYkB/mq7QTyS3YKtVtNrJv4Psqout8HA1U+hZtgM=
115+github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA=
116+github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI=
117+github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
118+github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
119+github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo=
120+github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
121+github.com/knadh/koanf/parsers/yaml v1.1.0 h1:3ltfm9ljprAHt4jxgeYLlFPmUaunuCgu1yILuTXRdM4=
122+github.com/knadh/koanf/parsers/yaml v1.1.0/go.mod h1:HHmcHXUrp9cOPcuC+2wrr44GTUB0EC+PyfN3HZD9tFg=
123+github.com/knadh/koanf/providers/env v1.1.0 h1:U2VXPY0f+CsNDkvdsG8GcsnK4ah85WwWyJgef9oQMSc=
124+github.com/knadh/koanf/providers/env v1.1.0/go.mod h1:QhHHHZ87h9JxJAn2czdEl6pdkNnDh/JS1Vtsyt65hTY=
125+github.com/knadh/koanf/providers/file v1.2.1 h1:bEWbtQwYrA+W2DtdBrQWyXqJaJSG3KrP3AESOJYp9wM=
126+github.com/knadh/koanf/providers/file v1.2.1/go.mod h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA=
127+github.com/knadh/koanf/providers/posflag v1.0.1 h1:EnMxHSrPkYCFnKgBUl5KBgrjed8gVFrcXDzaW4l/C6Y=
128+github.com/knadh/koanf/providers/posflag v1.0.1/go.mod h1:3Wn3+YG3f4ljzRyCUgIwH7G0sZ1pMjCOsNBovrbKmAk=
129+github.com/knadh/koanf/providers/structs v1.0.0 h1:DznjB7NQykhqCar2LvNug3MuxEQsZ5KvfgMbio+23u4=
130+github.com/knadh/koanf/providers/structs v1.0.0/go.mod h1:kjo5TFtgpaZORlpoJqcbeLowM2cINodv8kX+oFAeQ1w=
131+github.com/knadh/koanf/v2 v2.3.2 h1:Ee6tuzQYFwcZXQpc2MiVeC6qHMandf5SMUJJNoFp/c4=
132+github.com/knadh/koanf/v2 v2.3.2/go.mod h1:gRb40VRAbd4iJMYYD5IxZ6hfuopFcXBpc9bbQpZwo28=
133+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
134+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
135+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
136+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
137+github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY=
138+github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
139+github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI=
140+github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A=
141+github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
142+github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
143+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
144+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
145+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
146+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
147+github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
148+github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
149+github.com/moby/moby/api v1.56.0 h1:GQzua3NA599ASSIICx0iFgiJeO9YkdDARvQsm23ZZuQ=
150+github.com/moby/moby/api v1.56.0/go.mod h1:sZ+THbVWkjOmBPPfbnzdD/G1LuIexWhqlSHHPTDQ1Uk=
151+github.com/moby/moby/client v0.6.0 h1:AJjEB21QPbXSXjDsZorFBoDZPhMrfbpaPLgSMAW9Bgs=
152+github.com/moby/moby/client v0.6.0/go.mod h1:OCo00wNRyA3m4lmJ228W3JbyCN4ZNNYjpOXiJydBdcQ=
153+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
154+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
155+github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
156+github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
157+github.com/petermattis/goid v0.0.0-20260820044319-269ab09b5261 h1:lcWAnrqr2nNfDiArwFNHCE4787Mw2tCdVSOXCru0/0E=
158+github.com/petermattis/goid v0.0.0-20260820044319-269ab09b5261/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
159+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
160+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
161+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
162+github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 h1:arwj11zP0yJIxIRiDn22E0H8PxfF7TsTrc2wIPFIsf4=
163+github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9/go.mod h1:SKZx6stCn03JN3BOWTwvVIO2ajMkb/zQdTceXYhKw/4=
164+github.com/quic-go/go-ossfuzz-seeds v0.1.0 h1:APacT+iIaNF6fd8AGEiN3bT/Jtkd2jz4v4TzM7MFjy0=
165+github.com/quic-go/go-ossfuzz-seeds v0.1.0/go.mod h1:3IOHRbJIc+L6YKMwfDtJAM9Vj9k0YY4muhuyUYk5tbk=
166+github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
167+github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
168+github.com/quic-go/quic-go v0.62.0 h1:ZHDjCk5OacATwGvs8PWE97CTvX7AqZiVoW7++ZOXTf8=
169+github.com/quic-go/quic-go v0.62.0/go.mod h1:RAro2j2yN9a9EiPACLHT9IB2NXCvGQmmo/alT0yYI0w=
170+github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
171+github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
172+github.com/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8=
173+github.com/rodaine/protogofakeit v0.1.1/go.mod h1:pXn/AstBYMaSfc1/RqH3N82pBuxtWgejz1AlYpY1mI0=
174+github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
175+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
176+github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
177+github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
178+github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI=
179+github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw=
180+github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
181+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
182+github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
183+github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
184+github.com/segmentio/encoding v0.5.4 h1:OW1VRern8Nw6ITAtwSZ7Idrl3MXCFwXHPgqESYfvNt0=
185+github.com/segmentio/encoding v0.5.4/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0=
186+github.com/sirupsen/logrus v1.10.2 h1:G2SED73/qrAu6YwbdxOD6peLkCBI3z7L+ykJFTXJBBo=
187+github.com/sirupsen/logrus v1.10.2/go.mod h1:SLEg8TqYulVKKfIGHldVp2K2aYz2DKSVBq4g/H5bR7Q=
188+github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
189+github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
190+github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
191+github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
192+github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
193+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
194+github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
195+github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
196+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
197+github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE=
198+github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg=
199+github.com/tetratelabs/wazero v1.12.0 h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU=
200+github.com/tetratelabs/wazero v1.12.0/go.mod h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0=
201+github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA=
202+github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A=
203+github.com/vektra/mockery/v3 v3.8.0 h1:Tklqcx844iV8GtYziqJXam1a8RdcKip4UErMa66Nxps=
204+github.com/vektra/mockery/v3 v3.8.0/go.mod h1:K+L72OoFVizA9eWtO4L+kU65oylgreiJEJ57Gu8g9Ew=
205+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
206+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
207+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
208+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
209+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
210+github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
211+github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
212+go.lsp.dev/jsonrpc2 v0.10.0 h1:Pr/YcXJoEOTMc/b6OTmcR1DPJ3mSWl/SWiU1Cct6VmI=
213+go.lsp.dev/jsonrpc2 v0.10.0/go.mod h1:fmEzIdXPi/rf6d4uFcayi8HpFP1nBF99ERP1htC72Ac=
214+go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 h1:hCzQgh6UcwbKgNSRurYWSqh8MufqRRPODRBblutn4TE=
215+go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2/go.mod h1:gtSHRuYfbCT0qnbLnovpie/WEmqyJ7T4n6VXiFMBtcw=
216+go.lsp.dev/protocol v0.12.0 h1:tNprUI9klQW5FAFVM4Sa+AbPFuVQByWhP1ttNUAjIWg=
217+go.lsp.dev/protocol v0.12.0/go.mod h1:Qb11/HgZQ72qQbeyPfJbu3hZBH23s1sr4st8czGeDMQ=
218+go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo=
219+go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I=
220+go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
221+go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
222+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 h1:3g7B90UzBltIDKq1/5mrTGxTnOFDV0ICOhLoxiZ8jlg=
223+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0/go.mod h1:Ef8SuTh59BT7+ofpDxN9z+yOlc4t2GjLmKDgYNJL/NU=
224+go.opentelemetry.io/otel v1.46.0 h1:FHt5/CDyVxi/8IM1CH7VE/rRgq3kLHa2mSTVMO8AWyc=
225+go.opentelemetry.io/otel v1.46.0/go.mod h1:Gj3SEScelsNC45tp4nSxRYlS+f5iez7W8XPMCt905kE=
226+go.opentelemetry.io/otel/metric v1.46.0 h1:yBnkXvgV7AXFILZc5K6IZe/CBFF3OS7BJ8ov6/lj0K8=
227+go.opentelemetry.io/otel/metric v1.46.0/go.mod h1:iPmdWqifKUdzziPkvvzIJXITl56fQx2mGM/DHLB3/2o=
228+go.opentelemetry.io/otel/sdk v1.46.0 h1:h5CNQQjEbuQXY/JfZtgt3i7HVFV3aHPO2OAwO2eTYPI=
229+go.opentelemetry.io/otel/sdk v1.46.0/go.mod h1:GAERFXFt5SYCEB+YiKUbMBeza6UaDH7GmGOZEfh2gSM=
230+go.opentelemetry.io/otel/sdk/metric v1.46.0 h1:0piZ26EG4RBfebb2jhDH6ERCYHoVWduc3kLgPCwSnSE=
231+go.opentelemetry.io/otel/sdk/metric v1.46.0/go.mod h1:I1PbKrdVc8Qu8HYVDNtqVIwLwjNrhsV/uFuxfwg8mO4=
232+go.opentelemetry.io/otel/trace v1.46.0 h1:OULy7ccdJnZtJ0UDYFOIGaCmiWzJ8Vi2G/Rsu60qs1c=
233+go.opentelemetry.io/otel/trace v1.46.0/go.mod h1:J7GAXweO77XSFkB/rmAqk9D6ihszhFjLU+d9WuUxDLI=
234+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
235+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
236+go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
237+go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
238+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
239+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
240+go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo=
241+go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q=
242+go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
243+go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw=
244+go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg=
245+golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M=
246+golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA=
247+golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa h1:QSyA8ishJCyT21kER9KwNt0b7BM3iRK4x9QXhjN5Fdk=
248+golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa/go.mod h1:zeBbvyFKDaLwa7CH/zI8KXt7gTl14SF7sO08Pl5jBCM=
5 golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c=249 golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c=
6 golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o=250 golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o=
251+golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues=
252+golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg=
7 golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk=253 golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk=
8 golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0=254 golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0=
255+golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo=
256+golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
257+golang.org/x/term v0.46.0 h1:3+OXuTbaKDgwk8jTi3aSLHRlmWqHEUDUtxnbFigO4YE=
258+golang.org/x/term v0.46.0/go.mod h1:+K02xbkittuwc0Am4abfA3Fc+XRGXkvBXNO88NCXPoc=
259+golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
260+golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
9 golang.org/x/tools v0.51.0 h1:k4Xc/1Om9jwkBJBo4NVLMSARBoWtK10mx+W5BnXCeAI=261 golang.org/x/tools v0.51.0 h1:k4Xc/1Om9jwkBJBo4NVLMSARBoWtK10mx+W5BnXCeAI=
10 golang.org/x/tools v0.51.0/go.mod h1:9eEncMayCV6zRMGhR5eZEC2iBx98qWcF1HZ9Z7wJOoA=262 golang.org/x/tools v0.51.0/go.mod h1:9eEncMayCV6zRMGhR5eZEC2iBx98qWcF1HZ9Z7wJOoA=
11-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=263+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
264+google.golang.org/genproto/googleapis/api v0.0.0-20260904194346-d0f1323225a4 h1:NCe/UiklGd/9xjT+ROBVhJ1kf6TRQaFedsR+z7u1gvo=
265+google.golang.org/genproto/googleapis/api v0.0.0-20260904194346-d0f1323225a4/go.mod h1:fJ2lYaWjqNknJyQBOCd0fA3HnEElJqGplH71a2txi+g=
266+google.golang.org/genproto/googleapis/rpc v0.0.0-20260904194346-d0f1323225a4 h1:5t+ZydAFj5kGVLrgCvLmpmCf9ylGRd64hpEronfRaws=
267+google.golang.org/genproto/googleapis/rpc v0.0.0-20260904194346-d0f1323225a4/go.mod h1:DjtHYE8FKJLivXcBEjGwndXfIC23G0VpXiXKqG179uA=
268+google.golang.org/protobuf v1.36.12 h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc=
269+google.golang.org/protobuf v1.36.12/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
12 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=270 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
271+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
272+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
273+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
274+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
13 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=275 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
14 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=276 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
277+gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
278+gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
279+mvdan.cc/xurls/v2 v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
280+mvdan.cc/xurls/v2 v2.6.0/go.mod h1:bCvEZ1XvdA6wDnxY7jPPjEmigDtvtvPXAD/Exa9IMSk=
281+pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
282+pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
283+pluginrpc.com/pluginrpc v0.5.0 h1:tOQj2D35hOmvHyPu8e7ohW2/QvAnEtKscy2IJYWQ2yo=
284+pluginrpc.com/pluginrpc v0.5.0/go.mod h1:UNWZ941hcVAoOZUn8YZsMmOZBzbUjQa3XMns8RQLp9o=
A internal/ports/mocks/Clock.go +91 -0
@@ -0,0 +1,91 @@
1+// Code generated by mockery; DO NOT EDIT.
2+// github.com/vektra/mockery
3+// template: testify
4+
5+package mocks
6+
7+import (
8+ "time"
9+
10+ mock "github.com/stretchr/testify/mock"
11+)
12+
13+// NewClock creates a new instance of Clock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
14+// The first argument is typically a *testing.T value.
15+func NewClock(t interface {
16+ mock.TestingT
17+ Cleanup(func())
18+}) *Clock {
19+ if helper, ok := t.(interface{ Helper() }); ok {
20+ helper.Helper()
21+ }
22+
23+ mock := &Clock{}
24+ mock.Mock.Test(t)
25+
26+ t.Cleanup(func() {
27+ if helper, ok := t.(interface{ Helper() }); ok {
28+ helper.Helper()
29+ }
30+ mock.AssertExpectations(t)
31+ })
32+
33+ return mock
34+}
35+
36+// Clock is an autogenerated mock type for the Clock type
37+type Clock struct {
38+ mock.Mock
39+}
40+
41+type Clock_Expecter struct {
42+ mock *mock.Mock
43+}
44+
45+func (_m *Clock) EXPECT() *Clock_Expecter {
46+ return &Clock_Expecter{mock: &_m.Mock}
47+}
48+
49+// Now provides a mock function for the type Clock
50+func (_mock *Clock) Now() time.Time {
51+ ret := _mock.Called()
52+
53+ if len(ret) == 0 {
54+ panic("no return value specified for Now")
55+ }
56+
57+ var r0 time.Time
58+ if returnFunc, ok := ret.Get(0).(func() time.Time); ok {
59+ r0 = returnFunc()
60+ } else {
61+ r0 = ret.Get(0).(time.Time)
62+ }
63+ return r0
64+}
65+
66+// Clock_Now_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Now'
67+type Clock_Now_Call struct {
68+ *mock.Call
69+}
70+
71+// Now is a helper method to define mock.On call
72+func (_e *Clock_Expecter) Now() *Clock_Now_Call {
73+ return &Clock_Now_Call{Call: _e.mock.On("Now")}
74+}
75+
76+func (_c *Clock_Now_Call) Run(run func()) *Clock_Now_Call {
77+ _c.Call.Run(func(args mock.Arguments) {
78+ run()
79+ })
80+ return _c
81+}
82+
83+func (_c *Clock_Now_Call) Return(time1 time.Time) *Clock_Now_Call {
84+ _c.Call.Return(time1)
85+ return _c
86+}
87+
88+func (_c *Clock_Now_Call) RunAndReturn(run func() time.Time) *Clock_Now_Call {
89+ _c.Call.Return(run)
90+ return _c
91+}
@@ -0,0 +1,91 @@
1+// Code generated by mockery; DO NOT EDIT.
2+// github.com/vektra/mockery
3+// template: testify
4+
5+package mocks
6+
7+import (
8+ "time"
9+
10+ mock "github.com/stretchr/testify/mock"
11+)
12+
13+// NewClock creates a new instance of Clock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
14+// The first argument is typically a *testing.T value.
15+func NewClock(t interface {
16+ mock.TestingT
17+ Cleanup(func())
18+}) *Clock {
19+ if helper, ok := t.(interface{ Helper() }); ok {
20+ helper.Helper()
21+ }
22+
23+ mock := &Clock{}
24+ mock.Mock.Test(t)
25+
26+ t.Cleanup(func() {
27+ if helper, ok := t.(interface{ Helper() }); ok {
28+ helper.Helper()
29+ }
30+ mock.AssertExpectations(t)
31+ })
32+
33+ return mock
34+}
35+
36+// Clock is an autogenerated mock type for the Clock type
37+type Clock struct {
38+ mock.Mock
39+}
40+
41+type Clock_Expecter struct {
42+ mock *mock.Mock
43+}
44+
45+func (_m *Clock) EXPECT() *Clock_Expecter {
46+ return &Clock_Expecter{mock: &_m.Mock}
47+}
48+
49+// Now provides a mock function for the type Clock
50+func (_mock *Clock) Now() time.Time {
51+ ret := _mock.Called()
52+
53+ if len(ret) == 0 {
54+ panic("no return value specified for Now")
55+ }
56+
57+ var r0 time.Time
58+ if returnFunc, ok := ret.Get(0).(func() time.Time); ok {
59+ r0 = returnFunc()
60+ } else {
61+ r0 = ret.Get(0).(time.Time)
62+ }
63+ return r0
64+}
65+
66+// Clock_Now_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Now'
67+type Clock_Now_Call struct {
68+ *mock.Call
69+}
70+
71+// Now is a helper method to define mock.On call
72+func (_e *Clock_Expecter) Now() *Clock_Now_Call {
73+ return &Clock_Now_Call{Call: _e.mock.On("Now")}
74+}
75+
76+func (_c *Clock_Now_Call) Run(run func()) *Clock_Now_Call {
77+ _c.Call.Run(func(args mock.Arguments) {
78+ run()
79+ })
80+ return _c
81+}
82+
83+func (_c *Clock_Now_Call) Return(time1 time.Time) *Clock_Now_Call {
84+ _c.Call.Return(time1)
85+ return _c
86+}
87+
88+func (_c *Clock_Now_Call) RunAndReturn(run func() time.Time) *Clock_Now_Call {
89+ _c.Call.Return(run)
90+ return _c
91+}
A internal/ports/mocks/GitRepos.go +397 -0
@@ -0,0 +1,397 @@
1+// Code generated by mockery; DO NOT EDIT.
2+// github.com/vektra/mockery
3+// template: testify
4+
5+package mocks
6+
7+import (
8+ "context"
9+
10+ "bnema.dev/ermite/internal/domain"
11+ "bnema.dev/ermite/internal/ports"
12+ mock "github.com/stretchr/testify/mock"
13+)
14+
15+// NewGitRepos creates a new instance of GitRepos. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
16+// The first argument is typically a *testing.T value.
17+func NewGitRepos(t interface {
18+ mock.TestingT
19+ Cleanup(func())
20+}) *GitRepos {
21+ if helper, ok := t.(interface{ Helper() }); ok {
22+ helper.Helper()
23+ }
24+
25+ mock := &GitRepos{}
26+ mock.Mock.Test(t)
27+
28+ t.Cleanup(func() {
29+ if helper, ok := t.(interface{ Helper() }); ok {
30+ helper.Helper()
31+ }
32+ mock.AssertExpectations(t)
33+ })
34+
35+ return mock
36+}
37+
38+// GitRepos is an autogenerated mock type for the GitRepos type
39+type GitRepos struct {
40+ mock.Mock
41+}
42+
43+type GitRepos_Expecter struct {
44+ mock *mock.Mock
45+}
46+
47+func (_m *GitRepos) EXPECT() *GitRepos_Expecter {
48+ return &GitRepos_Expecter{mock: &_m.Mock}
49+}
50+
51+// Discard provides a mock function for the type GitRepos
52+func (_mock *GitRepos) Discard(ctx context.Context, id ports.StagedID) error {
53+ ret := _mock.Called(ctx, id)
54+
55+ if len(ret) == 0 {
56+ panic("no return value specified for Discard")
57+ }
58+
59+ var r0 error
60+ if returnFunc, ok := ret.Get(0).(func(context.Context, ports.StagedID) error); ok {
61+ r0 = returnFunc(ctx, id)
62+ } else {
63+ r0 = ret.Error(0)
64+ }
65+ return r0
66+}
67+
68+// GitRepos_Discard_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Discard'
69+type GitRepos_Discard_Call struct {
70+ *mock.Call
71+}
72+
73+// Discard is a helper method to define mock.On call
74+// - ctx context.Context
75+// - id ports.StagedID
76+func (_e *GitRepos_Expecter) Discard(ctx any, id any) *GitRepos_Discard_Call {
77+ return &GitRepos_Discard_Call{Call: _e.mock.On("Discard", ctx, id)}
78+}
79+
80+func (_c *GitRepos_Discard_Call) Run(run func(ctx context.Context, id ports.StagedID)) *GitRepos_Discard_Call {
81+ _c.Call.Run(func(args mock.Arguments) {
82+ var arg0 context.Context
83+ if args[0] != nil {
84+ arg0 = args[0].(context.Context)
85+ }
86+ var arg1 ports.StagedID
87+ if args[1] != nil {
88+ arg1 = args[1].(ports.StagedID)
89+ }
90+ run(
91+ arg0,
92+ arg1,
93+ )
94+ })
95+ return _c
96+}
97+
98+func (_c *GitRepos_Discard_Call) Return(err error) *GitRepos_Discard_Call {
99+ _c.Call.Return(err)
100+ return _c
101+}
102+
103+func (_c *GitRepos_Discard_Call) RunAndReturn(run func(ctx context.Context, id ports.StagedID) error) *GitRepos_Discard_Call {
104+ _c.Call.Return(run)
105+ return _c
106+}
107+
108+// List provides a mock function for the type GitRepos
109+func (_mock *GitRepos) List(ctx context.Context) (ports.RepoDirs, error) {
110+ ret := _mock.Called(ctx)
111+
112+ if len(ret) == 0 {
113+ panic("no return value specified for List")
114+ }
115+
116+ var r0 ports.RepoDirs
117+ var r1 error
118+ if returnFunc, ok := ret.Get(0).(func(context.Context) (ports.RepoDirs, error)); ok {
119+ return returnFunc(ctx)
120+ }
121+ if returnFunc, ok := ret.Get(0).(func(context.Context) ports.RepoDirs); ok {
122+ r0 = returnFunc(ctx)
123+ } else {
124+ r0 = ret.Get(0).(ports.RepoDirs)
125+ }
126+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
127+ r1 = returnFunc(ctx)
128+ } else {
129+ r1 = ret.Error(1)
130+ }
131+ return r0, r1
132+}
133+
134+// GitRepos_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
135+type GitRepos_List_Call struct {
136+ *mock.Call
137+}
138+
139+// List is a helper method to define mock.On call
140+// - ctx context.Context
141+func (_e *GitRepos_Expecter) List(ctx any) *GitRepos_List_Call {
142+ return &GitRepos_List_Call{Call: _e.mock.On("List", ctx)}
143+}
144+
145+func (_c *GitRepos_List_Call) Run(run func(ctx context.Context)) *GitRepos_List_Call {
146+ _c.Call.Run(func(args mock.Arguments) {
147+ var arg0 context.Context
148+ if args[0] != nil {
149+ arg0 = args[0].(context.Context)
150+ }
151+ run(
152+ arg0,
153+ )
154+ })
155+ return _c
156+}
157+
158+func (_c *GitRepos_List_Call) Return(repoDirs ports.RepoDirs, err error) *GitRepos_List_Call {
159+ _c.Call.Return(repoDirs, err)
160+ return _c
161+}
162+
163+func (_c *GitRepos_List_Call) RunAndReturn(run func(ctx context.Context) (ports.RepoDirs, error)) *GitRepos_List_Call {
164+ _c.Call.Return(run)
165+ return _c
166+}
167+
168+// Publish provides a mock function for the type GitRepos
169+func (_mock *GitRepos) Publish(ctx context.Context, id ports.StagedID, name domain.RepoName) error {
170+ ret := _mock.Called(ctx, id, name)
171+
172+ if len(ret) == 0 {
173+ panic("no return value specified for Publish")
174+ }
175+
176+ var r0 error
177+ if returnFunc, ok := ret.Get(0).(func(context.Context, ports.StagedID, domain.RepoName) error); ok {
178+ r0 = returnFunc(ctx, id, name)
179+ } else {
180+ r0 = ret.Error(0)
181+ }
182+ return r0
183+}
184+
185+// GitRepos_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish'
186+type GitRepos_Publish_Call struct {
187+ *mock.Call
188+}
189+
190+// Publish is a helper method to define mock.On call
191+// - ctx context.Context
192+// - id ports.StagedID
193+// - name domain.RepoName
194+func (_e *GitRepos_Expecter) Publish(ctx any, id any, name any) *GitRepos_Publish_Call {
195+ return &GitRepos_Publish_Call{Call: _e.mock.On("Publish", ctx, id, name)}
196+}
197+
198+func (_c *GitRepos_Publish_Call) Run(run func(ctx context.Context, id ports.StagedID, name domain.RepoName)) *GitRepos_Publish_Call {
199+ _c.Call.Run(func(args mock.Arguments) {
200+ var arg0 context.Context
201+ if args[0] != nil {
202+ arg0 = args[0].(context.Context)
203+ }
204+ var arg1 ports.StagedID
205+ if args[1] != nil {
206+ arg1 = args[1].(ports.StagedID)
207+ }
208+ var arg2 domain.RepoName
209+ if args[2] != nil {
210+ arg2 = args[2].(domain.RepoName)
211+ }
212+ run(
213+ arg0,
214+ arg1,
215+ arg2,
216+ )
217+ })
218+ return _c
219+}
220+
221+func (_c *GitRepos_Publish_Call) Return(err error) *GitRepos_Publish_Call {
222+ _c.Call.Return(err)
223+ return _c
224+}
225+
226+func (_c *GitRepos_Publish_Call) RunAndReturn(run func(ctx context.Context, id ports.StagedID, name domain.RepoName) error) *GitRepos_Publish_Call {
227+ _c.Call.Return(run)
228+ return _c
229+}
230+
231+// PurgeStaging provides a mock function for the type GitRepos
232+func (_mock *GitRepos) PurgeStaging(ctx context.Context) error {
233+ ret := _mock.Called(ctx)
234+
235+ if len(ret) == 0 {
236+ panic("no return value specified for PurgeStaging")
237+ }
238+
239+ var r0 error
240+ if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok {
241+ r0 = returnFunc(ctx)
242+ } else {
243+ r0 = ret.Error(0)
244+ }
245+ return r0
246+}
247+
248+// GitRepos_PurgeStaging_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PurgeStaging'
249+type GitRepos_PurgeStaging_Call struct {
250+ *mock.Call
251+}
252+
253+// PurgeStaging is a helper method to define mock.On call
254+// - ctx context.Context
255+func (_e *GitRepos_Expecter) PurgeStaging(ctx any) *GitRepos_PurgeStaging_Call {
256+ return &GitRepos_PurgeStaging_Call{Call: _e.mock.On("PurgeStaging", ctx)}
257+}
258+
259+func (_c *GitRepos_PurgeStaging_Call) Run(run func(ctx context.Context)) *GitRepos_PurgeStaging_Call {
260+ _c.Call.Run(func(args mock.Arguments) {
261+ var arg0 context.Context
262+ if args[0] != nil {
263+ arg0 = args[0].(context.Context)
264+ }
265+ run(
266+ arg0,
267+ )
268+ })
269+ return _c
270+}
271+
272+func (_c *GitRepos_PurgeStaging_Call) Return(err error) *GitRepos_PurgeStaging_Call {
273+ _c.Call.Return(err)
274+ return _c
275+}
276+
277+func (_c *GitRepos_PurgeStaging_Call) RunAndReturn(run func(ctx context.Context) error) *GitRepos_PurgeStaging_Call {
278+ _c.Call.Return(run)
279+ return _c
280+}
281+
282+// Stage provides a mock function for the type GitRepos
283+func (_mock *GitRepos) Stage(ctx context.Context) (ports.StagedID, error) {
284+ ret := _mock.Called(ctx)
285+
286+ if len(ret) == 0 {
287+ panic("no return value specified for Stage")
288+ }
289+
290+ var r0 ports.StagedID
291+ var r1 error
292+ if returnFunc, ok := ret.Get(0).(func(context.Context) (ports.StagedID, error)); ok {
293+ return returnFunc(ctx)
294+ }
295+ if returnFunc, ok := ret.Get(0).(func(context.Context) ports.StagedID); ok {
296+ r0 = returnFunc(ctx)
297+ } else {
298+ r0 = ret.Get(0).(ports.StagedID)
299+ }
300+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
301+ r1 = returnFunc(ctx)
302+ } else {
303+ r1 = ret.Error(1)
304+ }
305+ return r0, r1
306+}
307+
308+// GitRepos_Stage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Stage'
309+type GitRepos_Stage_Call struct {
310+ *mock.Call
311+}
312+
313+// Stage is a helper method to define mock.On call
314+// - ctx context.Context
315+func (_e *GitRepos_Expecter) Stage(ctx any) *GitRepos_Stage_Call {
316+ return &GitRepos_Stage_Call{Call: _e.mock.On("Stage", ctx)}
317+}
318+
319+func (_c *GitRepos_Stage_Call) Run(run func(ctx context.Context)) *GitRepos_Stage_Call {
320+ _c.Call.Run(func(args mock.Arguments) {
321+ var arg0 context.Context
322+ if args[0] != nil {
323+ arg0 = args[0].(context.Context)
324+ }
325+ run(
326+ arg0,
327+ )
328+ })
329+ return _c
330+}
331+
332+func (_c *GitRepos_Stage_Call) Return(stagedID ports.StagedID, err error) *GitRepos_Stage_Call {
333+ _c.Call.Return(stagedID, err)
334+ return _c
335+}
336+
337+func (_c *GitRepos_Stage_Call) RunAndReturn(run func(ctx context.Context) (ports.StagedID, error)) *GitRepos_Stage_Call {
338+ _c.Call.Return(run)
339+ return _c
340+}
341+
342+// Trash provides a mock function for the type GitRepos
343+func (_mock *GitRepos) Trash(ctx context.Context, name domain.RepoName) error {
344+ ret := _mock.Called(ctx, name)
345+
346+ if len(ret) == 0 {
347+ panic("no return value specified for Trash")
348+ }
349+
350+ var r0 error
351+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) error); ok {
352+ r0 = returnFunc(ctx, name)
353+ } else {
354+ r0 = ret.Error(0)
355+ }
356+ return r0
357+}
358+
359+// GitRepos_Trash_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Trash'
360+type GitRepos_Trash_Call struct {
361+ *mock.Call
362+}
363+
364+// Trash is a helper method to define mock.On call
365+// - ctx context.Context
366+// - name domain.RepoName
367+func (_e *GitRepos_Expecter) Trash(ctx any, name any) *GitRepos_Trash_Call {
368+ return &GitRepos_Trash_Call{Call: _e.mock.On("Trash", ctx, name)}
369+}
370+
371+func (_c *GitRepos_Trash_Call) Run(run func(ctx context.Context, name domain.RepoName)) *GitRepos_Trash_Call {
372+ _c.Call.Run(func(args mock.Arguments) {
373+ var arg0 context.Context
374+ if args[0] != nil {
375+ arg0 = args[0].(context.Context)
376+ }
377+ var arg1 domain.RepoName
378+ if args[1] != nil {
379+ arg1 = args[1].(domain.RepoName)
380+ }
381+ run(
382+ arg0,
383+ arg1,
384+ )
385+ })
386+ return _c
387+}
388+
389+func (_c *GitRepos_Trash_Call) Return(err error) *GitRepos_Trash_Call {
390+ _c.Call.Return(err)
391+ return _c
392+}
393+
394+func (_c *GitRepos_Trash_Call) RunAndReturn(run func(ctx context.Context, name domain.RepoName) error) *GitRepos_Trash_Call {
395+ _c.Call.Return(run)
396+ return _c
397+}
@@ -0,0 +1,397 @@
1+// Code generated by mockery; DO NOT EDIT.
2+// github.com/vektra/mockery
3+// template: testify
4+
5+package mocks
6+
7+import (
8+ "context"
9+
10+ "bnema.dev/ermite/internal/domain"
11+ "bnema.dev/ermite/internal/ports"
12+ mock "github.com/stretchr/testify/mock"
13+)
14+
15+// NewGitRepos creates a new instance of GitRepos. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
16+// The first argument is typically a *testing.T value.
17+func NewGitRepos(t interface {
18+ mock.TestingT
19+ Cleanup(func())
20+}) *GitRepos {
21+ if helper, ok := t.(interface{ Helper() }); ok {
22+ helper.Helper()
23+ }
24+
25+ mock := &GitRepos{}
26+ mock.Mock.Test(t)
27+
28+ t.Cleanup(func() {
29+ if helper, ok := t.(interface{ Helper() }); ok {
30+ helper.Helper()
31+ }
32+ mock.AssertExpectations(t)
33+ })
34+
35+ return mock
36+}
37+
38+// GitRepos is an autogenerated mock type for the GitRepos type
39+type GitRepos struct {
40+ mock.Mock
41+}
42+
43+type GitRepos_Expecter struct {
44+ mock *mock.Mock
45+}
46+
47+func (_m *GitRepos) EXPECT() *GitRepos_Expecter {
48+ return &GitRepos_Expecter{mock: &_m.Mock}
49+}
50+
51+// Discard provides a mock function for the type GitRepos
52+func (_mock *GitRepos) Discard(ctx context.Context, id ports.StagedID) error {
53+ ret := _mock.Called(ctx, id)
54+
55+ if len(ret) == 0 {
56+ panic("no return value specified for Discard")
57+ }
58+
59+ var r0 error
60+ if returnFunc, ok := ret.Get(0).(func(context.Context, ports.StagedID) error); ok {
61+ r0 = returnFunc(ctx, id)
62+ } else {
63+ r0 = ret.Error(0)
64+ }
65+ return r0
66+}
67+
68+// GitRepos_Discard_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Discard'
69+type GitRepos_Discard_Call struct {
70+ *mock.Call
71+}
72+
73+// Discard is a helper method to define mock.On call
74+// - ctx context.Context
75+// - id ports.StagedID
76+func (_e *GitRepos_Expecter) Discard(ctx any, id any) *GitRepos_Discard_Call {
77+ return &GitRepos_Discard_Call{Call: _e.mock.On("Discard", ctx, id)}
78+}
79+
80+func (_c *GitRepos_Discard_Call) Run(run func(ctx context.Context, id ports.StagedID)) *GitRepos_Discard_Call {
81+ _c.Call.Run(func(args mock.Arguments) {
82+ var arg0 context.Context
83+ if args[0] != nil {
84+ arg0 = args[0].(context.Context)
85+ }
86+ var arg1 ports.StagedID
87+ if args[1] != nil {
88+ arg1 = args[1].(ports.StagedID)
89+ }
90+ run(
91+ arg0,
92+ arg1,
93+ )
94+ })
95+ return _c
96+}
97+
98+func (_c *GitRepos_Discard_Call) Return(err error) *GitRepos_Discard_Call {
99+ _c.Call.Return(err)
100+ return _c
101+}
102+
103+func (_c *GitRepos_Discard_Call) RunAndReturn(run func(ctx context.Context, id ports.StagedID) error) *GitRepos_Discard_Call {
104+ _c.Call.Return(run)
105+ return _c
106+}
107+
108+// List provides a mock function for the type GitRepos
109+func (_mock *GitRepos) List(ctx context.Context) (ports.RepoDirs, error) {
110+ ret := _mock.Called(ctx)
111+
112+ if len(ret) == 0 {
113+ panic("no return value specified for List")
114+ }
115+
116+ var r0 ports.RepoDirs
117+ var r1 error
118+ if returnFunc, ok := ret.Get(0).(func(context.Context) (ports.RepoDirs, error)); ok {
119+ return returnFunc(ctx)
120+ }
121+ if returnFunc, ok := ret.Get(0).(func(context.Context) ports.RepoDirs); ok {
122+ r0 = returnFunc(ctx)
123+ } else {
124+ r0 = ret.Get(0).(ports.RepoDirs)
125+ }
126+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
127+ r1 = returnFunc(ctx)
128+ } else {
129+ r1 = ret.Error(1)
130+ }
131+ return r0, r1
132+}
133+
134+// GitRepos_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
135+type GitRepos_List_Call struct {
136+ *mock.Call
137+}
138+
139+// List is a helper method to define mock.On call
140+// - ctx context.Context
141+func (_e *GitRepos_Expecter) List(ctx any) *GitRepos_List_Call {
142+ return &GitRepos_List_Call{Call: _e.mock.On("List", ctx)}
143+}
144+
145+func (_c *GitRepos_List_Call) Run(run func(ctx context.Context)) *GitRepos_List_Call {
146+ _c.Call.Run(func(args mock.Arguments) {
147+ var arg0 context.Context
148+ if args[0] != nil {
149+ arg0 = args[0].(context.Context)
150+ }
151+ run(
152+ arg0,
153+ )
154+ })
155+ return _c
156+}
157+
158+func (_c *GitRepos_List_Call) Return(repoDirs ports.RepoDirs, err error) *GitRepos_List_Call {
159+ _c.Call.Return(repoDirs, err)
160+ return _c
161+}
162+
163+func (_c *GitRepos_List_Call) RunAndReturn(run func(ctx context.Context) (ports.RepoDirs, error)) *GitRepos_List_Call {
164+ _c.Call.Return(run)
165+ return _c
166+}
167+
168+// Publish provides a mock function for the type GitRepos
169+func (_mock *GitRepos) Publish(ctx context.Context, id ports.StagedID, name domain.RepoName) error {
170+ ret := _mock.Called(ctx, id, name)
171+
172+ if len(ret) == 0 {
173+ panic("no return value specified for Publish")
174+ }
175+
176+ var r0 error
177+ if returnFunc, ok := ret.Get(0).(func(context.Context, ports.StagedID, domain.RepoName) error); ok {
178+ r0 = returnFunc(ctx, id, name)
179+ } else {
180+ r0 = ret.Error(0)
181+ }
182+ return r0
183+}
184+
185+// GitRepos_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish'
186+type GitRepos_Publish_Call struct {
187+ *mock.Call
188+}
189+
190+// Publish is a helper method to define mock.On call
191+// - ctx context.Context
192+// - id ports.StagedID
193+// - name domain.RepoName
194+func (_e *GitRepos_Expecter) Publish(ctx any, id any, name any) *GitRepos_Publish_Call {
195+ return &GitRepos_Publish_Call{Call: _e.mock.On("Publish", ctx, id, name)}
196+}
197+
198+func (_c *GitRepos_Publish_Call) Run(run func(ctx context.Context, id ports.StagedID, name domain.RepoName)) *GitRepos_Publish_Call {
199+ _c.Call.Run(func(args mock.Arguments) {
200+ var arg0 context.Context
201+ if args[0] != nil {
202+ arg0 = args[0].(context.Context)
203+ }
204+ var arg1 ports.StagedID
205+ if args[1] != nil {
206+ arg1 = args[1].(ports.StagedID)
207+ }
208+ var arg2 domain.RepoName
209+ if args[2] != nil {
210+ arg2 = args[2].(domain.RepoName)
211+ }
212+ run(
213+ arg0,
214+ arg1,
215+ arg2,
216+ )
217+ })
218+ return _c
219+}
220+
221+func (_c *GitRepos_Publish_Call) Return(err error) *GitRepos_Publish_Call {
222+ _c.Call.Return(err)
223+ return _c
224+}
225+
226+func (_c *GitRepos_Publish_Call) RunAndReturn(run func(ctx context.Context, id ports.StagedID, name domain.RepoName) error) *GitRepos_Publish_Call {
227+ _c.Call.Return(run)
228+ return _c
229+}
230+
231+// PurgeStaging provides a mock function for the type GitRepos
232+func (_mock *GitRepos) PurgeStaging(ctx context.Context) error {
233+ ret := _mock.Called(ctx)
234+
235+ if len(ret) == 0 {
236+ panic("no return value specified for PurgeStaging")
237+ }
238+
239+ var r0 error
240+ if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok {
241+ r0 = returnFunc(ctx)
242+ } else {
243+ r0 = ret.Error(0)
244+ }
245+ return r0
246+}
247+
248+// GitRepos_PurgeStaging_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PurgeStaging'
249+type GitRepos_PurgeStaging_Call struct {
250+ *mock.Call
251+}
252+
253+// PurgeStaging is a helper method to define mock.On call
254+// - ctx context.Context
255+func (_e *GitRepos_Expecter) PurgeStaging(ctx any) *GitRepos_PurgeStaging_Call {
256+ return &GitRepos_PurgeStaging_Call{Call: _e.mock.On("PurgeStaging", ctx)}
257+}
258+
259+func (_c *GitRepos_PurgeStaging_Call) Run(run func(ctx context.Context)) *GitRepos_PurgeStaging_Call {
260+ _c.Call.Run(func(args mock.Arguments) {
261+ var arg0 context.Context
262+ if args[0] != nil {
263+ arg0 = args[0].(context.Context)
264+ }
265+ run(
266+ arg0,
267+ )
268+ })
269+ return _c
270+}
271+
272+func (_c *GitRepos_PurgeStaging_Call) Return(err error) *GitRepos_PurgeStaging_Call {
273+ _c.Call.Return(err)
274+ return _c
275+}
276+
277+func (_c *GitRepos_PurgeStaging_Call) RunAndReturn(run func(ctx context.Context) error) *GitRepos_PurgeStaging_Call {
278+ _c.Call.Return(run)
279+ return _c
280+}
281+
282+// Stage provides a mock function for the type GitRepos
283+func (_mock *GitRepos) Stage(ctx context.Context) (ports.StagedID, error) {
284+ ret := _mock.Called(ctx)
285+
286+ if len(ret) == 0 {
287+ panic("no return value specified for Stage")
288+ }
289+
290+ var r0 ports.StagedID
291+ var r1 error
292+ if returnFunc, ok := ret.Get(0).(func(context.Context) (ports.StagedID, error)); ok {
293+ return returnFunc(ctx)
294+ }
295+ if returnFunc, ok := ret.Get(0).(func(context.Context) ports.StagedID); ok {
296+ r0 = returnFunc(ctx)
297+ } else {
298+ r0 = ret.Get(0).(ports.StagedID)
299+ }
300+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
301+ r1 = returnFunc(ctx)
302+ } else {
303+ r1 = ret.Error(1)
304+ }
305+ return r0, r1
306+}
307+
308+// GitRepos_Stage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Stage'
309+type GitRepos_Stage_Call struct {
310+ *mock.Call
311+}
312+
313+// Stage is a helper method to define mock.On call
314+// - ctx context.Context
315+func (_e *GitRepos_Expecter) Stage(ctx any) *GitRepos_Stage_Call {
316+ return &GitRepos_Stage_Call{Call: _e.mock.On("Stage", ctx)}
317+}
318+
319+func (_c *GitRepos_Stage_Call) Run(run func(ctx context.Context)) *GitRepos_Stage_Call {
320+ _c.Call.Run(func(args mock.Arguments) {
321+ var arg0 context.Context
322+ if args[0] != nil {
323+ arg0 = args[0].(context.Context)
324+ }
325+ run(
326+ arg0,
327+ )
328+ })
329+ return _c
330+}
331+
332+func (_c *GitRepos_Stage_Call) Return(stagedID ports.StagedID, err error) *GitRepos_Stage_Call {
333+ _c.Call.Return(stagedID, err)
334+ return _c
335+}
336+
337+func (_c *GitRepos_Stage_Call) RunAndReturn(run func(ctx context.Context) (ports.StagedID, error)) *GitRepos_Stage_Call {
338+ _c.Call.Return(run)
339+ return _c
340+}
341+
342+// Trash provides a mock function for the type GitRepos
343+func (_mock *GitRepos) Trash(ctx context.Context, name domain.RepoName) error {
344+ ret := _mock.Called(ctx, name)
345+
346+ if len(ret) == 0 {
347+ panic("no return value specified for Trash")
348+ }
349+
350+ var r0 error
351+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) error); ok {
352+ r0 = returnFunc(ctx, name)
353+ } else {
354+ r0 = ret.Error(0)
355+ }
356+ return r0
357+}
358+
359+// GitRepos_Trash_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Trash'
360+type GitRepos_Trash_Call struct {
361+ *mock.Call
362+}
363+
364+// Trash is a helper method to define mock.On call
365+// - ctx context.Context
366+// - name domain.RepoName
367+func (_e *GitRepos_Expecter) Trash(ctx any, name any) *GitRepos_Trash_Call {
368+ return &GitRepos_Trash_Call{Call: _e.mock.On("Trash", ctx, name)}
369+}
370+
371+func (_c *GitRepos_Trash_Call) Run(run func(ctx context.Context, name domain.RepoName)) *GitRepos_Trash_Call {
372+ _c.Call.Run(func(args mock.Arguments) {
373+ var arg0 context.Context
374+ if args[0] != nil {
375+ arg0 = args[0].(context.Context)
376+ }
377+ var arg1 domain.RepoName
378+ if args[1] != nil {
379+ arg1 = args[1].(domain.RepoName)
380+ }
381+ run(
382+ arg0,
383+ arg1,
384+ )
385+ })
386+ return _c
387+}
388+
389+func (_c *GitRepos_Trash_Call) Return(err error) *GitRepos_Trash_Call {
390+ _c.Call.Return(err)
391+ return _c
392+}
393+
394+func (_c *GitRepos_Trash_Call) RunAndReturn(run func(ctx context.Context, name domain.RepoName) error) *GitRepos_Trash_Call {
395+ _c.Call.Return(run)
396+ return _c
397+}
A internal/ports/mocks/RepoMetaStore.go +347 -0
@@ -0,0 +1,347 @@
1+// Code generated by mockery; DO NOT EDIT.
2+// github.com/vektra/mockery
3+// template: testify
4+
5+package mocks
6+
7+import (
8+ "context"
9+
10+ "bnema.dev/ermite/internal/domain"
11+ mock "github.com/stretchr/testify/mock"
12+)
13+
14+// NewRepoMetaStore creates a new instance of RepoMetaStore. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
15+// The first argument is typically a *testing.T value.
16+func NewRepoMetaStore(t interface {
17+ mock.TestingT
18+ Cleanup(func())
19+}) *RepoMetaStore {
20+ if helper, ok := t.(interface{ Helper() }); ok {
21+ helper.Helper()
22+ }
23+
24+ mock := &RepoMetaStore{}
25+ mock.Mock.Test(t)
26+
27+ t.Cleanup(func() {
28+ if helper, ok := t.(interface{ Helper() }); ok {
29+ helper.Helper()
30+ }
31+ mock.AssertExpectations(t)
32+ })
33+
34+ return mock
35+}
36+
37+// RepoMetaStore is an autogenerated mock type for the RepoMetaStore type
38+type RepoMetaStore struct {
39+ mock.Mock
40+}
41+
42+type RepoMetaStore_Expecter struct {
43+ mock *mock.Mock
44+}
45+
46+func (_m *RepoMetaStore) EXPECT() *RepoMetaStore_Expecter {
47+ return &RepoMetaStore_Expecter{mock: &_m.Mock}
48+}
49+
50+// Create provides a mock function for the type RepoMetaStore
51+func (_mock *RepoMetaStore) Create(ctx context.Context, repo domain.Repo) error {
52+ ret := _mock.Called(ctx, repo)
53+
54+ if len(ret) == 0 {
55+ panic("no return value specified for Create")
56+ }
57+
58+ var r0 error
59+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.Repo) error); ok {
60+ r0 = returnFunc(ctx, repo)
61+ } else {
62+ r0 = ret.Error(0)
63+ }
64+ return r0
65+}
66+
67+// RepoMetaStore_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create'
68+type RepoMetaStore_Create_Call struct {
69+ *mock.Call
70+}
71+
72+// Create is a helper method to define mock.On call
73+// - ctx context.Context
74+// - repo domain.Repo
75+func (_e *RepoMetaStore_Expecter) Create(ctx any, repo any) *RepoMetaStore_Create_Call {
76+ return &RepoMetaStore_Create_Call{Call: _e.mock.On("Create", ctx, repo)}
77+}
78+
79+func (_c *RepoMetaStore_Create_Call) Run(run func(ctx context.Context, repo domain.Repo)) *RepoMetaStore_Create_Call {
80+ _c.Call.Run(func(args mock.Arguments) {
81+ var arg0 context.Context
82+ if args[0] != nil {
83+ arg0 = args[0].(context.Context)
84+ }
85+ var arg1 domain.Repo
86+ if args[1] != nil {
87+ arg1 = args[1].(domain.Repo)
88+ }
89+ run(
90+ arg0,
91+ arg1,
92+ )
93+ })
94+ return _c
95+}
96+
97+func (_c *RepoMetaStore_Create_Call) Return(err error) *RepoMetaStore_Create_Call {
98+ _c.Call.Return(err)
99+ return _c
100+}
101+
102+func (_c *RepoMetaStore_Create_Call) RunAndReturn(run func(ctx context.Context, repo domain.Repo) error) *RepoMetaStore_Create_Call {
103+ _c.Call.Return(run)
104+ return _c
105+}
106+
107+// Delete provides a mock function for the type RepoMetaStore
108+func (_mock *RepoMetaStore) Delete(ctx context.Context, name domain.RepoName) error {
109+ ret := _mock.Called(ctx, name)
110+
111+ if len(ret) == 0 {
112+ panic("no return value specified for Delete")
113+ }
114+
115+ var r0 error
116+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) error); ok {
117+ r0 = returnFunc(ctx, name)
118+ } else {
119+ r0 = ret.Error(0)
120+ }
121+ return r0
122+}
123+
124+// RepoMetaStore_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete'
125+type RepoMetaStore_Delete_Call struct {
126+ *mock.Call
127+}
128+
129+// Delete is a helper method to define mock.On call
130+// - ctx context.Context
131+// - name domain.RepoName
132+func (_e *RepoMetaStore_Expecter) Delete(ctx any, name any) *RepoMetaStore_Delete_Call {
133+ return &RepoMetaStore_Delete_Call{Call: _e.mock.On("Delete", ctx, name)}
134+}
135+
136+func (_c *RepoMetaStore_Delete_Call) Run(run func(ctx context.Context, name domain.RepoName)) *RepoMetaStore_Delete_Call {
137+ _c.Call.Run(func(args mock.Arguments) {
138+ var arg0 context.Context
139+ if args[0] != nil {
140+ arg0 = args[0].(context.Context)
141+ }
142+ var arg1 domain.RepoName
143+ if args[1] != nil {
144+ arg1 = args[1].(domain.RepoName)
145+ }
146+ run(
147+ arg0,
148+ arg1,
149+ )
150+ })
151+ return _c
152+}
153+
154+func (_c *RepoMetaStore_Delete_Call) Return(err error) *RepoMetaStore_Delete_Call {
155+ _c.Call.Return(err)
156+ return _c
157+}
158+
159+func (_c *RepoMetaStore_Delete_Call) RunAndReturn(run func(ctx context.Context, name domain.RepoName) error) *RepoMetaStore_Delete_Call {
160+ _c.Call.Return(run)
161+ return _c
162+}
163+
164+// Get provides a mock function for the type RepoMetaStore
165+func (_mock *RepoMetaStore) Get(ctx context.Context, name domain.RepoName) (domain.Repo, error) {
166+ ret := _mock.Called(ctx, name)
167+
168+ if len(ret) == 0 {
169+ panic("no return value specified for Get")
170+ }
171+
172+ var r0 domain.Repo
173+ var r1 error
174+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) (domain.Repo, error)); ok {
175+ return returnFunc(ctx, name)
176+ }
177+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) domain.Repo); ok {
178+ r0 = returnFunc(ctx, name)
179+ } else {
180+ r0 = ret.Get(0).(domain.Repo)
181+ }
182+ if returnFunc, ok := ret.Get(1).(func(context.Context, domain.RepoName) error); ok {
183+ r1 = returnFunc(ctx, name)
184+ } else {
185+ r1 = ret.Error(1)
186+ }
187+ return r0, r1
188+}
189+
190+// RepoMetaStore_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get'
191+type RepoMetaStore_Get_Call struct {
192+ *mock.Call
193+}
194+
195+// Get is a helper method to define mock.On call
196+// - ctx context.Context
197+// - name domain.RepoName
198+func (_e *RepoMetaStore_Expecter) Get(ctx any, name any) *RepoMetaStore_Get_Call {
199+ return &RepoMetaStore_Get_Call{Call: _e.mock.On("Get", ctx, name)}
200+}
201+
202+func (_c *RepoMetaStore_Get_Call) Run(run func(ctx context.Context, name domain.RepoName)) *RepoMetaStore_Get_Call {
203+ _c.Call.Run(func(args mock.Arguments) {
204+ var arg0 context.Context
205+ if args[0] != nil {
206+ arg0 = args[0].(context.Context)
207+ }
208+ var arg1 domain.RepoName
209+ if args[1] != nil {
210+ arg1 = args[1].(domain.RepoName)
211+ }
212+ run(
213+ arg0,
214+ arg1,
215+ )
216+ })
217+ return _c
218+}
219+
220+func (_c *RepoMetaStore_Get_Call) Return(repo domain.Repo, err error) *RepoMetaStore_Get_Call {
221+ _c.Call.Return(repo, err)
222+ return _c
223+}
224+
225+func (_c *RepoMetaStore_Get_Call) RunAndReturn(run func(ctx context.Context, name domain.RepoName) (domain.Repo, error)) *RepoMetaStore_Get_Call {
226+ _c.Call.Return(run)
227+ return _c
228+}
229+
230+// List provides a mock function for the type RepoMetaStore
231+func (_mock *RepoMetaStore) List(ctx context.Context) ([]domain.Repo, error) {
232+ ret := _mock.Called(ctx)
233+
234+ if len(ret) == 0 {
235+ panic("no return value specified for List")
236+ }
237+
238+ var r0 []domain.Repo
239+ var r1 error
240+ if returnFunc, ok := ret.Get(0).(func(context.Context) ([]domain.Repo, error)); ok {
241+ return returnFunc(ctx)
242+ }
243+ if returnFunc, ok := ret.Get(0).(func(context.Context) []domain.Repo); ok {
244+ r0 = returnFunc(ctx)
245+ } else {
246+ if ret.Get(0) != nil {
247+ r0 = ret.Get(0).([]domain.Repo)
248+ }
249+ }
250+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
251+ r1 = returnFunc(ctx)
252+ } else {
253+ r1 = ret.Error(1)
254+ }
255+ return r0, r1
256+}
257+
258+// RepoMetaStore_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
259+type RepoMetaStore_List_Call struct {
260+ *mock.Call
261+}
262+
263+// List is a helper method to define mock.On call
264+// - ctx context.Context
265+func (_e *RepoMetaStore_Expecter) List(ctx any) *RepoMetaStore_List_Call {
266+ return &RepoMetaStore_List_Call{Call: _e.mock.On("List", ctx)}
267+}
268+
269+func (_c *RepoMetaStore_List_Call) Run(run func(ctx context.Context)) *RepoMetaStore_List_Call {
270+ _c.Call.Run(func(args mock.Arguments) {
271+ var arg0 context.Context
272+ if args[0] != nil {
273+ arg0 = args[0].(context.Context)
274+ }
275+ run(
276+ arg0,
277+ )
278+ })
279+ return _c
280+}
281+
282+func (_c *RepoMetaStore_List_Call) Return(repos []domain.Repo, err error) *RepoMetaStore_List_Call {
283+ _c.Call.Return(repos, err)
284+ return _c
285+}
286+
287+func (_c *RepoMetaStore_List_Call) RunAndReturn(run func(ctx context.Context) ([]domain.Repo, error)) *RepoMetaStore_List_Call {
288+ _c.Call.Return(run)
289+ return _c
290+}
291+
292+// Update provides a mock function for the type RepoMetaStore
293+func (_mock *RepoMetaStore) Update(ctx context.Context, repo domain.Repo) error {
294+ ret := _mock.Called(ctx, repo)
295+
296+ if len(ret) == 0 {
297+ panic("no return value specified for Update")
298+ }
299+
300+ var r0 error
301+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.Repo) error); ok {
302+ r0 = returnFunc(ctx, repo)
303+ } else {
304+ r0 = ret.Error(0)
305+ }
306+ return r0
307+}
308+
309+// RepoMetaStore_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update'
310+type RepoMetaStore_Update_Call struct {
311+ *mock.Call
312+}
313+
314+// Update is a helper method to define mock.On call
315+// - ctx context.Context
316+// - repo domain.Repo
317+func (_e *RepoMetaStore_Expecter) Update(ctx any, repo any) *RepoMetaStore_Update_Call {
318+ return &RepoMetaStore_Update_Call{Call: _e.mock.On("Update", ctx, repo)}
319+}
320+
321+func (_c *RepoMetaStore_Update_Call) Run(run func(ctx context.Context, repo domain.Repo)) *RepoMetaStore_Update_Call {
322+ _c.Call.Run(func(args mock.Arguments) {
323+ var arg0 context.Context
324+ if args[0] != nil {
325+ arg0 = args[0].(context.Context)
326+ }
327+ var arg1 domain.Repo
328+ if args[1] != nil {
329+ arg1 = args[1].(domain.Repo)
330+ }
331+ run(
332+ arg0,
333+ arg1,
334+ )
335+ })
336+ return _c
337+}
338+
339+func (_c *RepoMetaStore_Update_Call) Return(err error) *RepoMetaStore_Update_Call {
340+ _c.Call.Return(err)
341+ return _c
342+}
343+
344+func (_c *RepoMetaStore_Update_Call) RunAndReturn(run func(ctx context.Context, repo domain.Repo) error) *RepoMetaStore_Update_Call {
345+ _c.Call.Return(run)
346+ return _c
347+}
@@ -0,0 +1,347 @@
1+// Code generated by mockery; DO NOT EDIT.
2+// github.com/vektra/mockery
3+// template: testify
4+
5+package mocks
6+
7+import (
8+ "context"
9+
10+ "bnema.dev/ermite/internal/domain"
11+ mock "github.com/stretchr/testify/mock"
12+)
13+
14+// NewRepoMetaStore creates a new instance of RepoMetaStore. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
15+// The first argument is typically a *testing.T value.
16+func NewRepoMetaStore(t interface {
17+ mock.TestingT
18+ Cleanup(func())
19+}) *RepoMetaStore {
20+ if helper, ok := t.(interface{ Helper() }); ok {
21+ helper.Helper()
22+ }
23+
24+ mock := &RepoMetaStore{}
25+ mock.Mock.Test(t)
26+
27+ t.Cleanup(func() {
28+ if helper, ok := t.(interface{ Helper() }); ok {
29+ helper.Helper()
30+ }
31+ mock.AssertExpectations(t)
32+ })
33+
34+ return mock
35+}
36+
37+// RepoMetaStore is an autogenerated mock type for the RepoMetaStore type
38+type RepoMetaStore struct {
39+ mock.Mock
40+}
41+
42+type RepoMetaStore_Expecter struct {
43+ mock *mock.Mock
44+}
45+
46+func (_m *RepoMetaStore) EXPECT() *RepoMetaStore_Expecter {
47+ return &RepoMetaStore_Expecter{mock: &_m.Mock}
48+}
49+
50+// Create provides a mock function for the type RepoMetaStore
51+func (_mock *RepoMetaStore) Create(ctx context.Context, repo domain.Repo) error {
52+ ret := _mock.Called(ctx, repo)
53+
54+ if len(ret) == 0 {
55+ panic("no return value specified for Create")
56+ }
57+
58+ var r0 error
59+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.Repo) error); ok {
60+ r0 = returnFunc(ctx, repo)
61+ } else {
62+ r0 = ret.Error(0)
63+ }
64+ return r0
65+}
66+
67+// RepoMetaStore_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create'
68+type RepoMetaStore_Create_Call struct {
69+ *mock.Call
70+}
71+
72+// Create is a helper method to define mock.On call
73+// - ctx context.Context
74+// - repo domain.Repo
75+func (_e *RepoMetaStore_Expecter) Create(ctx any, repo any) *RepoMetaStore_Create_Call {
76+ return &RepoMetaStore_Create_Call{Call: _e.mock.On("Create", ctx, repo)}
77+}
78+
79+func (_c *RepoMetaStore_Create_Call) Run(run func(ctx context.Context, repo domain.Repo)) *RepoMetaStore_Create_Call {
80+ _c.Call.Run(func(args mock.Arguments) {
81+ var arg0 context.Context
82+ if args[0] != nil {
83+ arg0 = args[0].(context.Context)
84+ }
85+ var arg1 domain.Repo
86+ if args[1] != nil {
87+ arg1 = args[1].(domain.Repo)
88+ }
89+ run(
90+ arg0,
91+ arg1,
92+ )
93+ })
94+ return _c
95+}
96+
97+func (_c *RepoMetaStore_Create_Call) Return(err error) *RepoMetaStore_Create_Call {
98+ _c.Call.Return(err)
99+ return _c
100+}
101+
102+func (_c *RepoMetaStore_Create_Call) RunAndReturn(run func(ctx context.Context, repo domain.Repo) error) *RepoMetaStore_Create_Call {
103+ _c.Call.Return(run)
104+ return _c
105+}
106+
107+// Delete provides a mock function for the type RepoMetaStore
108+func (_mock *RepoMetaStore) Delete(ctx context.Context, name domain.RepoName) error {
109+ ret := _mock.Called(ctx, name)
110+
111+ if len(ret) == 0 {
112+ panic("no return value specified for Delete")
113+ }
114+
115+ var r0 error
116+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) error); ok {
117+ r0 = returnFunc(ctx, name)
118+ } else {
119+ r0 = ret.Error(0)
120+ }
121+ return r0
122+}
123+
124+// RepoMetaStore_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete'
125+type RepoMetaStore_Delete_Call struct {
126+ *mock.Call
127+}
128+
129+// Delete is a helper method to define mock.On call
130+// - ctx context.Context
131+// - name domain.RepoName
132+func (_e *RepoMetaStore_Expecter) Delete(ctx any, name any) *RepoMetaStore_Delete_Call {
133+ return &RepoMetaStore_Delete_Call{Call: _e.mock.On("Delete", ctx, name)}
134+}
135+
136+func (_c *RepoMetaStore_Delete_Call) Run(run func(ctx context.Context, name domain.RepoName)) *RepoMetaStore_Delete_Call {
137+ _c.Call.Run(func(args mock.Arguments) {
138+ var arg0 context.Context
139+ if args[0] != nil {
140+ arg0 = args[0].(context.Context)
141+ }
142+ var arg1 domain.RepoName
143+ if args[1] != nil {
144+ arg1 = args[1].(domain.RepoName)
145+ }
146+ run(
147+ arg0,
148+ arg1,
149+ )
150+ })
151+ return _c
152+}
153+
154+func (_c *RepoMetaStore_Delete_Call) Return(err error) *RepoMetaStore_Delete_Call {
155+ _c.Call.Return(err)
156+ return _c
157+}
158+
159+func (_c *RepoMetaStore_Delete_Call) RunAndReturn(run func(ctx context.Context, name domain.RepoName) error) *RepoMetaStore_Delete_Call {
160+ _c.Call.Return(run)
161+ return _c
162+}
163+
164+// Get provides a mock function for the type RepoMetaStore
165+func (_mock *RepoMetaStore) Get(ctx context.Context, name domain.RepoName) (domain.Repo, error) {
166+ ret := _mock.Called(ctx, name)
167+
168+ if len(ret) == 0 {
169+ panic("no return value specified for Get")
170+ }
171+
172+ var r0 domain.Repo
173+ var r1 error
174+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) (domain.Repo, error)); ok {
175+ return returnFunc(ctx, name)
176+ }
177+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.RepoName) domain.Repo); ok {
178+ r0 = returnFunc(ctx, name)
179+ } else {
180+ r0 = ret.Get(0).(domain.Repo)
181+ }
182+ if returnFunc, ok := ret.Get(1).(func(context.Context, domain.RepoName) error); ok {
183+ r1 = returnFunc(ctx, name)
184+ } else {
185+ r1 = ret.Error(1)
186+ }
187+ return r0, r1
188+}
189+
190+// RepoMetaStore_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get'
191+type RepoMetaStore_Get_Call struct {
192+ *mock.Call
193+}
194+
195+// Get is a helper method to define mock.On call
196+// - ctx context.Context
197+// - name domain.RepoName
198+func (_e *RepoMetaStore_Expecter) Get(ctx any, name any) *RepoMetaStore_Get_Call {
199+ return &RepoMetaStore_Get_Call{Call: _e.mock.On("Get", ctx, name)}
200+}
201+
202+func (_c *RepoMetaStore_Get_Call) Run(run func(ctx context.Context, name domain.RepoName)) *RepoMetaStore_Get_Call {
203+ _c.Call.Run(func(args mock.Arguments) {
204+ var arg0 context.Context
205+ if args[0] != nil {
206+ arg0 = args[0].(context.Context)
207+ }
208+ var arg1 domain.RepoName
209+ if args[1] != nil {
210+ arg1 = args[1].(domain.RepoName)
211+ }
212+ run(
213+ arg0,
214+ arg1,
215+ )
216+ })
217+ return _c
218+}
219+
220+func (_c *RepoMetaStore_Get_Call) Return(repo domain.Repo, err error) *RepoMetaStore_Get_Call {
221+ _c.Call.Return(repo, err)
222+ return _c
223+}
224+
225+func (_c *RepoMetaStore_Get_Call) RunAndReturn(run func(ctx context.Context, name domain.RepoName) (domain.Repo, error)) *RepoMetaStore_Get_Call {
226+ _c.Call.Return(run)
227+ return _c
228+}
229+
230+// List provides a mock function for the type RepoMetaStore
231+func (_mock *RepoMetaStore) List(ctx context.Context) ([]domain.Repo, error) {
232+ ret := _mock.Called(ctx)
233+
234+ if len(ret) == 0 {
235+ panic("no return value specified for List")
236+ }
237+
238+ var r0 []domain.Repo
239+ var r1 error
240+ if returnFunc, ok := ret.Get(0).(func(context.Context) ([]domain.Repo, error)); ok {
241+ return returnFunc(ctx)
242+ }
243+ if returnFunc, ok := ret.Get(0).(func(context.Context) []domain.Repo); ok {
244+ r0 = returnFunc(ctx)
245+ } else {
246+ if ret.Get(0) != nil {
247+ r0 = ret.Get(0).([]domain.Repo)
248+ }
249+ }
250+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
251+ r1 = returnFunc(ctx)
252+ } else {
253+ r1 = ret.Error(1)
254+ }
255+ return r0, r1
256+}
257+
258+// RepoMetaStore_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
259+type RepoMetaStore_List_Call struct {
260+ *mock.Call
261+}
262+
263+// List is a helper method to define mock.On call
264+// - ctx context.Context
265+func (_e *RepoMetaStore_Expecter) List(ctx any) *RepoMetaStore_List_Call {
266+ return &RepoMetaStore_List_Call{Call: _e.mock.On("List", ctx)}
267+}
268+
269+func (_c *RepoMetaStore_List_Call) Run(run func(ctx context.Context)) *RepoMetaStore_List_Call {
270+ _c.Call.Run(func(args mock.Arguments) {
271+ var arg0 context.Context
272+ if args[0] != nil {
273+ arg0 = args[0].(context.Context)
274+ }
275+ run(
276+ arg0,
277+ )
278+ })
279+ return _c
280+}
281+
282+func (_c *RepoMetaStore_List_Call) Return(repos []domain.Repo, err error) *RepoMetaStore_List_Call {
283+ _c.Call.Return(repos, err)
284+ return _c
285+}
286+
287+func (_c *RepoMetaStore_List_Call) RunAndReturn(run func(ctx context.Context) ([]domain.Repo, error)) *RepoMetaStore_List_Call {
288+ _c.Call.Return(run)
289+ return _c
290+}
291+
292+// Update provides a mock function for the type RepoMetaStore
293+func (_mock *RepoMetaStore) Update(ctx context.Context, repo domain.Repo) error {
294+ ret := _mock.Called(ctx, repo)
295+
296+ if len(ret) == 0 {
297+ panic("no return value specified for Update")
298+ }
299+
300+ var r0 error
301+ if returnFunc, ok := ret.Get(0).(func(context.Context, domain.Repo) error); ok {
302+ r0 = returnFunc(ctx, repo)
303+ } else {
304+ r0 = ret.Error(0)
305+ }
306+ return r0
307+}
308+
309+// RepoMetaStore_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update'
310+type RepoMetaStore_Update_Call struct {
311+ *mock.Call
312+}
313+
314+// Update is a helper method to define mock.On call
315+// - ctx context.Context
316+// - repo domain.Repo
317+func (_e *RepoMetaStore_Expecter) Update(ctx any, repo any) *RepoMetaStore_Update_Call {
318+ return &RepoMetaStore_Update_Call{Call: _e.mock.On("Update", ctx, repo)}
319+}
320+
321+func (_c *RepoMetaStore_Update_Call) Run(run func(ctx context.Context, repo domain.Repo)) *RepoMetaStore_Update_Call {
322+ _c.Call.Run(func(args mock.Arguments) {
323+ var arg0 context.Context
324+ if args[0] != nil {
325+ arg0 = args[0].(context.Context)
326+ }
327+ var arg1 domain.Repo
328+ if args[1] != nil {
329+ arg1 = args[1].(domain.Repo)
330+ }
331+ run(
332+ arg0,
333+ arg1,
334+ )
335+ })
336+ return _c
337+}
338+
339+func (_c *RepoMetaStore_Update_Call) Return(err error) *RepoMetaStore_Update_Call {
340+ _c.Call.Return(err)
341+ return _c
342+}
343+
344+func (_c *RepoMetaStore_Update_Call) RunAndReturn(run func(ctx context.Context, repo domain.Repo) error) *RepoMetaStore_Update_Call {
345+ _c.Call.Return(run)
346+ return _c
347+}
A internal/ports/ports.go +66 -0
@@ -0,0 +1,66 @@
1+// SPDX-License-Identifier: AGPL-3.0-or-later
2+
3+// Package ports declares the interfaces the use cases need from the outside
4+// world. Adapters implement them; cmd wires them.
5+package ports
6+
7+import (
8+ "context"
9+ "time"
10+
11+ "bnema.dev/ermite/internal/domain"
12+)
13+
14+//go:generate go tool mockery
15+
16+// RepoMetaStore keeps repository metadata. It is the source of truth for
17+// everything ermite owns about a repository except its Git data.
18+type RepoMetaStore interface {
19+ // Create stores repo. It returns domain.ErrAlreadyExists if a repository
20+ // with that name exists, including when a concurrent Create wins.
21+ Create(ctx context.Context, repo domain.Repo) error
22+ // Get returns the repository, or domain.ErrNotFound.
23+ Get(ctx context.Context, name domain.RepoName) (domain.Repo, error)
24+ // List returns every repository ordered by name.
25+ List(ctx context.Context) ([]domain.Repo, error)
26+ // Update replaces the stored repository, or returns domain.ErrNotFound.
27+ Update(ctx context.Context, repo domain.Repo) error
28+ // Delete removes the repository. Deleting a missing one is not an error.
29+ Delete(ctx context.Context, name domain.RepoName) error
30+}
31+
32+// StagedID identifies a repository being created. It is opaque to callers.
33+type StagedID string
34+
35+// RepoDirs is the result of listing the repository directories.
36+type RepoDirs struct {
37+ // Names are the directories that hold a valid repository name.
38+ Names []domain.RepoName
39+ // Invalid are the entries that cannot be a repository directory.
40+ Invalid []string
41+}
42+
43+// GitRepos manages bare repository directories.
44+type GitRepos interface {
45+ // Stage creates an empty bare repository outside the public directory
46+ // and returns its identifier.
47+ Stage(ctx context.Context) (StagedID, error)
48+ // Publish moves a staged repository to its final place under name. It
49+ // returns domain.ErrAlreadyExists if a directory for name exists; the
50+ // staged repository is left in place for Discard.
51+ Publish(ctx context.Context, id StagedID, name domain.RepoName) error
52+ // Discard removes a staged repository. A missing one is not an error.
53+ Discard(ctx context.Context, id StagedID) error
54+ // PurgeStaging removes every staged repository left by a previous run.
55+ PurgeStaging(ctx context.Context) error
56+ // List returns the repository directories.
57+ List(ctx context.Context) (RepoDirs, error)
58+ // Trash moves the repository directory to the trash, where it can be
59+ // recovered by hand. It returns domain.ErrNotFound if there is none.
60+ Trash(ctx context.Context, name domain.RepoName) error
61+}
62+
63+// Clock tells the time.
64+type Clock interface {
65+ Now() time.Time
66+}
@@ -0,0 +1,66 @@
1+// SPDX-License-Identifier: AGPL-3.0-or-later
2+
3+// Package ports declares the interfaces the use cases need from the outside
4+// world. Adapters implement them; cmd wires them.
5+package ports
6+
7+import (
8+ "context"
9+ "time"
10+
11+ "bnema.dev/ermite/internal/domain"
12+)
13+
14+//go:generate go tool mockery
15+
16+// RepoMetaStore keeps repository metadata. It is the source of truth for
17+// everything ermite owns about a repository except its Git data.
18+type RepoMetaStore interface {
19+ // Create stores repo. It returns domain.ErrAlreadyExists if a repository
20+ // with that name exists, including when a concurrent Create wins.
21+ Create(ctx context.Context, repo domain.Repo) error
22+ // Get returns the repository, or domain.ErrNotFound.
23+ Get(ctx context.Context, name domain.RepoName) (domain.Repo, error)
24+ // List returns every repository ordered by name.
25+ List(ctx context.Context) ([]domain.Repo, error)
26+ // Update replaces the stored repository, or returns domain.ErrNotFound.
27+ Update(ctx context.Context, repo domain.Repo) error
28+ // Delete removes the repository. Deleting a missing one is not an error.
29+ Delete(ctx context.Context, name domain.RepoName) error
30+}
31+
32+// StagedID identifies a repository being created. It is opaque to callers.
33+type StagedID string
34+
35+// RepoDirs is the result of listing the repository directories.
36+type RepoDirs struct {
37+ // Names are the directories that hold a valid repository name.
38+ Names []domain.RepoName
39+ // Invalid are the entries that cannot be a repository directory.
40+ Invalid []string
41+}
42+
43+// GitRepos manages bare repository directories.
44+type GitRepos interface {
45+ // Stage creates an empty bare repository outside the public directory
46+ // and returns its identifier.
47+ Stage(ctx context.Context) (StagedID, error)
48+ // Publish moves a staged repository to its final place under name. It
49+ // returns domain.ErrAlreadyExists if a directory for name exists; the
50+ // staged repository is left in place for Discard.
51+ Publish(ctx context.Context, id StagedID, name domain.RepoName) error
52+ // Discard removes a staged repository. A missing one is not an error.
53+ Discard(ctx context.Context, id StagedID) error
54+ // PurgeStaging removes every staged repository left by a previous run.
55+ PurgeStaging(ctx context.Context) error
56+ // List returns the repository directories.
57+ List(ctx context.Context) (RepoDirs, error)
58+ // Trash moves the repository directory to the trash, where it can be
59+ // recovered by hand. It returns domain.ErrNotFound if there is none.
60+ Trash(ctx context.Context, name domain.RepoName) error
61+}
62+
63+// Clock tells the time.
64+type Clock interface {
65+ Now() time.Time
66+}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 42

↑↓ moveenter openesc close