Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .moon/toolchains.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ node:
syncVersionManagerConfig: 'nvm'

go:
version: '1.26.2'
version: '1.26.3'
77 changes: 59 additions & 18 deletions cmd/imgcli/script_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ const (
testEnvIncusOSCDNURL = "IMGCLI_TEST_INCUSOS_CDN_URL"
testEnvFixtureInjector = "IMGCLI_TEST_FIXTURE_INJECTOR"

testImgsrvToken = "testtok.imgcli-script"
testVersion = "2026.05.06"
testVersion = "2026.05.06"

fixtureSourcePath = "/202604261712/x86_64/IncusOS_202604261712.img.gz"
fixtureSourceBody = "fixture IncusOS source image bytes\n"
Expand Down Expand Up @@ -79,7 +78,7 @@ func setupScript(env *testscript.Env) error {
}
tb.Helper()

imgsrvEnv := imgsrvtest.Start(tb, imgsrvtest.WithCASPromotion(), imgsrvtest.WithAPIToken(testImgsrvToken))
imgsrvEnv := imgsrvtest.Start(tb, imgsrvtest.WithCASPromotion(), imgsrvtest.WithAPIToken())
cdnServer := newFixtureCDNServer(tb)

env.Values[testscriptEnvKey{}] = imgsrvEnv
Expand All @@ -88,7 +87,7 @@ func setupScript(env *testscript.Env) error {
env.Setenv("IMGCLI_CACHE_DIR", filepath.Join(env.WorkDir, "cache"))
env.Setenv("IMGCLI_CACHE_MAX_SIZE", "0")
env.Setenv("IMGSRV_URL", imgsrvEnv.BaseURL())
env.Setenv("IMGSRV_TOKEN", testImgsrvToken)
env.Setenv("IMGSRV_TOKEN", imgsrvEnv.ClientOptions().BearerToken)
env.Setenv("PUBLISH_VERSION", testVersion)
env.Setenv(testEnvIncusOSCDNURL, cdnServer.URL)
env.Setenv(testEnvFixtureInjector, "1")
Expand Down Expand Up @@ -156,7 +155,7 @@ func verifyPublish(ts *testscript.TestScript, neg bool, args []string) {

result := readPublishResult(ts, args[0])
assertPublishResult(ts, result, args[1], args[2], args[3])
verifyPublishedArtifact(ts, args[1], args[2], args[3], result.Artifacts[0].ServerArtifactID)
verifyPublishedArtifacts(ts, args[1], args[2], args[3], result.Artifacts)
}

func readPublishResult(ts *testscript.TestScript, path string) publish.ReleaseResult {
Expand Down Expand Up @@ -187,23 +186,41 @@ func assertPublishResult(
if !containsString(result.Aliases, alias) {
ts.Fatalf("publish result aliases = %v, want %q", result.Aliases, alias)
}
if len(result.Artifacts) != 1 {
ts.Fatalf("publish result artifacts length = %d, want 1", len(result.Artifacts))
if len(result.Artifacts) != 2 {
ts.Fatalf("publish result artifacts length = %d, want 2", len(result.Artifacts))
}

artifact := result.Artifacts[0]
if artifact.OperatingSystem != "incusos" || artifact.Architecture != "x86_64" ||
artifact.Format != imgsrv.ArtifactFormatRawGZ {
ts.Fatalf("publish result artifact = %+v, want incusos x86_64 raw.gz", artifact)
for _, wantVariant := range []string{"default", "secureboot"} {
artifact, ok := publishedArtifactByVariant(result.Artifacts, wantVariant)
if !ok {
ts.Fatalf("publish result artifacts missing variant %q: %+v", wantVariant, result.Artifacts)
}
if artifact.OperatingSystem != "incusos" || artifact.Architecture != "x86_64" ||
artifact.Format != imgsrv.ArtifactFormatRawGZ {
ts.Fatalf("publish result artifact = %+v, want incusos x86_64 raw.gz", artifact)
}
}
}

func verifyPublishedArtifact(
func publishedArtifactByVariant(
artifacts []publish.PublishedReleaseArtifact,
variant string,
) (publish.PublishedReleaseArtifact, bool) {
for _, artifact := range artifacts {
if artifact.Variant == variant {
return artifact, true
}
}

return publish.PublishedReleaseArtifact{}, false
}

func verifyPublishedArtifacts(
ts *testscript.TestScript,
image string,
publishedVersion string,
alias string,
artifactID string,
publishedArtifacts []publish.PublishedReleaseArtifact,
) {
env, ok := ts.Value(testscriptEnvKey{}).(*imgsrvtest.Env)
if !ok || env == nil {
Expand All @@ -222,13 +239,37 @@ func verifyPublishedArtifact(
if err != nil {
ts.Fatalf("resolve manifest: %v", err)
}
if len(manifest.Artifacts) != 1 {
ts.Fatalf("manifest artifacts length = %d, want 1", len(manifest.Artifacts))
if len(manifest.Artifacts) != len(publishedArtifacts) {
ts.Fatalf("manifest artifacts length = %d, want %d", len(manifest.Artifacts), len(publishedArtifacts))
}
artifact := manifest.Artifacts[0].Artifact
if artifact.ID.String() != artifactID {
ts.Fatalf("manifest artifact ID = %q, want %q", artifact.ID.String(), artifactID)

publishedByVariant := map[string]publish.PublishedReleaseArtifact{}
for _, artifact := range publishedArtifacts {
publishedByVariant[artifact.Variant] = artifact
}

for _, manifestArtifact := range manifest.Artifacts {
artifact := manifestArtifact.Artifact
published, ok := publishedByVariant[artifact.Variant]
if !ok {
ts.Fatalf("manifest artifact variant %q was not in publish result", artifact.Variant)
}
if artifact.ID.String() != published.ServerArtifactID {
ts.Fatalf("manifest artifact ID = %q, want %q", artifact.ID.String(), published.ServerArtifactID)
}
verifyArtifactDownload(ts, client, image, publishedVersion, published.ServerArtifactID)
}
}

func verifyArtifactDownload(
ts *testscript.TestScript,
client *imgsrv.Client,
image string,
publishedVersion string,
artifactID string,
) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

download, err := client.Catalog().OpenArtifactDownload(
ctx,
Expand Down
10 changes: 10 additions & 0 deletions cmd/imgcli/testdata/script/publish.txtar
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ stdout '"aliases":\["latest"\]'
stdout '"operatingSystem":"incusos"'
stdout '"architecture":"x86_64"'
stdout '"format":"raw.gz"'
stdout '"variant":"default"'
stdout '"variant":"secureboot"'
! stderr .
exists out/script-image-default-amd64.raw.gz
exists out/script-image-secureboot-amd64.raw.gz
cp stdout publish.json
verify-publish publish.json script-image 2026.05.06 latest

Expand All @@ -27,4 +30,11 @@ incusos: {
format: "raw.gz"
}
}
variants: secureboot: {
source: version: "202604261712"
artifact: {
architecture: "amd64"
format: "raw.gz"
}
}
}
22 changes: 20 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/meigma/imgcli

go 1.26.1
go 1.26.3

require (
charm.land/log/v2 v2.0.0
Expand All @@ -9,7 +9,7 @@ require (
github.com/gofrs/flock v0.13.0
github.com/lxc/incus-os/incus-osd v0.0.0-20260505023852-d32ba1f13f6f
github.com/meigma/imgcli/schemas v0.0.0-20260505154605-5bbbe47a1e06
github.com/meigma/imgsrv v0.0.0-20260507005312-4a67655d031d
github.com/meigma/imgsrv v0.1.1-0.20260514031114-285280443f6b
github.com/rogpeppe/go-internal v1.14.1
github.com/spf13/cobra v1.10.2
github.com/spf13/pflag v1.0.10
Expand All @@ -19,13 +19,15 @@ require (
)

require (
cel.dev/expr v0.25.1 // indirect
charm.land/lipgloss/v2 v2.0.1 // indirect
cuelabs.dev/go/oci/ociregistry v0.0.0-20251212221603-3adeb8663819 // indirect
dario.cat/mergo v1.0.2 // indirect
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
github.com/FuturFusion/migration-manager v0.6.9 // indirect
github.com/FuturFusion/operations-center v0.5.8 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
Expand All @@ -43,6 +45,7 @@ require (
github.com/containerd/platforms v1.0.0-rc.4 // indirect
github.com/cpuguy83/dockercfg v0.3.2 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect
github.com/distribution/reference v0.6.0 // indirect
github.com/docker/go-connections v0.7.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
Expand All @@ -58,6 +61,8 @@ require (
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
github.com/goccy/go-json v0.10.6 // indirect
github.com/google/cel-go v0.28.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
Expand All @@ -67,11 +72,20 @@ require (
github.com/klauspost/compress v1.18.6 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/klauspost/crc32 v1.3.0 // indirect
github.com/lestrrat-go/blackmagic v1.0.4 // indirect
github.com/lestrrat-go/dsig v1.2.1 // indirect
github.com/lestrrat-go/dsig-secp256k1 v1.0.0 // indirect
github.com/lestrrat-go/httpcc v1.0.1 // indirect
github.com/lestrrat-go/httprc/v3 v3.0.5 // indirect
github.com/lestrrat-go/jwx/v3 v3.1.1 // indirect
github.com/lestrrat-go/option/v2 v2.0.0 // indirect
github.com/lucasb-eyer/go-colorful v1.4.0 // indirect
github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e // indirect
github.com/lxc/incus/v7 v7.0.0 // indirect
github.com/magiconair/properties v1.8.10 // indirect
github.com/mattn/go-runewidth v0.0.23 // indirect
github.com/meigma/authkit v0.3.0 // indirect
github.com/meigma/go-simplestreams v0.1.0 // indirect
github.com/mfridman/interpolate v0.0.2 // indirect
github.com/minio/crc64nvme v1.1.1 // indirect
github.com/minio/md5-simd v1.1.2 // indirect
Expand Down Expand Up @@ -105,6 +119,7 @@ require (
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rs/xid v1.6.0 // indirect
github.com/sagikazarmark/locafero v0.12.0 // indirect
github.com/segmentio/asm v1.2.1 // indirect
github.com/sethvargo/go-retry v0.3.0 // indirect
github.com/shirou/gopsutil/v4 v4.26.4 // indirect
github.com/sirupsen/logrus v1.9.4 // indirect
Expand All @@ -117,6 +132,7 @@ require (
github.com/tinylib/msgp v1.6.1 // indirect
github.com/tklauser/go-sysconf v0.3.16 // indirect
github.com/tklauser/numcpus v0.11.0 // indirect
github.com/valyala/fastjson v1.6.10 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
github.com/zeebo/xxh3 v1.1.0 // indirect
Expand All @@ -141,6 +157,8 @@ require (
golang.org/x/sys v0.43.0 // indirect
golang.org/x/text v0.36.0 // indirect
golang.org/x/tools v0.44.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260223185530-2f722ef697dc // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect
google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
23 changes: 21 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
charm.land/lipgloss/v2 v2.0.1 h1:6Xzrn49+Py1Um5q/wZG1gWgER2+7dUyZ9XMEufqPSys=
charm.land/lipgloss/v2 v2.0.1/go.mod h1:KjPle2Qd3YmvP1KL5OMHiHysGcNwq6u83MUjYkFvEkM=
charm.land/log/v2 v2.0.0 h1:SY3Cey7ipx86/MBXQHwsguOT6X1exT94mmJRdzTNs+s=
Expand All @@ -18,6 +19,7 @@ github.com/FuturFusion/operations-center v0.5.8 h1:Wf5B3ULMzSqju1u7wVgZbyJWHGd/Q
github.com/FuturFusion/operations-center v0.5.8/go.mod h1:jmh2YszsUl3Mi5pyZnzndZZykImGJEUgtK+dzAiFFos=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
Expand Down Expand Up @@ -58,6 +60,7 @@ github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfv
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c=
Expand Down Expand Up @@ -94,8 +97,10 @@ github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7
github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro=
github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU=
github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw=
github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0=
github.com/google/cel-go v0.28.0 h1:KjSWstCpz/MN5t4a8gnGJNIYUsJRpdi/r97xWDphIQc=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
Expand Down Expand Up @@ -123,6 +128,13 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lestrrat-go/blackmagic v1.0.4 h1:IwQibdnf8l2KoO+qC3uT4OaTWsW7tuRQXy9TRN9QanA=
github.com/lestrrat-go/dsig v1.2.1 h1:MwxzZhE4+4fguHi+uDALKVlC3Cn+O1QU1Q/F8D7hVIc=
github.com/lestrrat-go/dsig-secp256k1 v1.0.0 h1:JpDe4Aybfl0soBvoVwjqDbp+9S1Y2OM7gcrVVMFPOzY=
github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE=
github.com/lestrrat-go/httprc/v3 v3.0.5 h1:S+Mb4L2I+bM6JGTibLmxExhyTOqnXjqx+zi9MoXw/TM=
github.com/lestrrat-go/jwx/v3 v3.1.1 h1:yd9AdPmZ4INnQ7k42IrzXYpnEG803+SrQ6hdMvzHJzw=
github.com/lestrrat-go/option/v2 v2.0.0 h1:XxrcaJESE1fokHy3FpaQ/cXW8ZsIdWcdFzzLOcID3Ss=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4=
Expand All @@ -141,10 +153,12 @@ github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3Ry
github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
github.com/mdelapenya/tlscert v0.2.0 h1:7H81W6Z/4weDvZBNOfQte5GpIMo0lGYEeWbkGp5LJHI=
github.com/mdelapenya/tlscert v0.2.0/go.mod h1:O4njj3ELLnJjGdkN7M/vIVCpZ+Cf0L6muqOG4tLSl8o=
github.com/meigma/authkit v0.3.0 h1:oyfzV+l6B1gDHfCx4zg97L0Km92GKVQ3hwKsjLrIHZU=
github.com/meigma/go-simplestreams v0.1.0 h1:yHKFUyRK4rPWO1Z5wDMAWymeRXAFFSiWQTsVUK73j90=
github.com/meigma/imgcli/schemas v0.0.0-20260505154605-5bbbe47a1e06 h1:v/8R2UInUH6gsz099SZQwPapXkFRh+Q5p3fSplImoTw=
github.com/meigma/imgcli/schemas v0.0.0-20260505154605-5bbbe47a1e06/go.mod h1:vgdSiTx7yikg0x4QmozD0dh4AYM90ZVALn0k45amZuQ=
github.com/meigma/imgsrv v0.0.0-20260507005312-4a67655d031d h1:YDvuNrpeEj810COQoVUaY3puq3vCC0IKSC9WuLJvy58=
github.com/meigma/imgsrv v0.0.0-20260507005312-4a67655d031d/go.mod h1:aRf/9hRpxhb53jgUmZdo7XVOqQkEn2FEzVqmGEZtx3I=
github.com/meigma/imgsrv v0.1.1-0.20260514031114-285280443f6b h1:gX5XmW2NRM3hTIPeLF8XcQyfrHot8KOiOz0HXdX3ej8=
github.com/meigma/imgsrv v0.1.1-0.20260514031114-285280443f6b/go.mod h1:aRLYyMvkliIpkrgivTsT9BS2npsG7S+csYvZK5+sFz8=
github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg=
github.com/minio/crc64nvme v1.1.1 h1:8dwx/Pz49suywbO+auHCBpCtlW1OfpcLN7wYgVR6wAI=
Expand Down Expand Up @@ -219,6 +233,7 @@ github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4=
github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI=
github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE=
github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas=
github.com/shirou/gopsutil/v4 v4.26.4 h1:B4SXVbcwTyrocPHEmWBC4uCYr4Xcu3MK1TXqbprAOWY=
Expand All @@ -241,6 +256,7 @@ github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
Expand All @@ -255,6 +271,7 @@ github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYI
github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI=
github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw=
github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ=
github.com/valyala/fastjson v1.6.10 h1:/yjJg8jaVQdYR3arGxPE2X5z89xrlhS0eGXdv+ADTh4=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
Expand Down Expand Up @@ -317,6 +334,8 @@ golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
google.golang.org/genproto/googleapis/api v0.0.0-20260223185530-2f722ef697dc h1:ULD+ToGXUIU6Pkzr1ARxdyvwfHbelw+agoFDRbLg4TU=
google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
2 changes: 1 addition & 1 deletion go.work
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
go 1.26.1
go 1.26.3

use (
.
Expand Down
Loading