diff --git a/Dockerfile b/Dockerfile index a21f9c8..5f2b5b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,14 +4,14 @@ FROM alpine:3.19 AS dagger # TODO: pull the binary from registry.dagger.io/cli:v0.9.8 (or similar) when # https://github.com/dagger/dagger/issues/6887 is resolved -ARG DAGGER_VERSION=v0.9.8 +ARG DAGGER_VERSION=v0.11.6 ADD https://github.com/dagger/dagger/releases/download/${DAGGER_VERSION}/dagger_${DAGGER_VERSION}_linux_amd64.tar.gz /tmp RUN tar zxf /tmp/dagger_${DAGGER_VERSION}_linux_amd64.tar.gz -C /tmp RUN mv /tmp/dagger /bin/dagger FROM golang:1.22-alpine -ARG DAGGER_VERSION=v0.9.8 +ARG DAGGER_VERSION=v0.11.6 WORKDIR /src RUN apk add --no-cache git wget bash jq diff --git a/arguments/docker.go b/arguments/docker.go index 54f8b12..e0aa93e 100644 --- a/arguments/docker.go +++ b/arguments/docker.go @@ -53,6 +53,11 @@ var ( Usage: "Overrides the organization of the images", Value: "grafana", } + ProDockerRepoFlag = &cli.StringFlag{ + Name: "pro-repo", + Usage: "Overrides the docker repository of the built images", + Value: "grafana-pro", + } ProTagFormatFlag = &cli.StringFlag{ Name: "pro-tag-format", Usage: "Provide a go template for formatting the docker tag(s) for Grafana Pro images", @@ -70,5 +75,6 @@ var ( // The docker registry for Grafana Pro is often different than the one for Grafana & Enterprise ProDockerRegistry = pipeline.NewStringFlagArgument(ProDockerRegistryFlag) ProDockerOrg = pipeline.NewStringFlagArgument(ProDockerOrgFlag) + ProDockerRepo = pipeline.NewStringFlagArgument(ProDockerRepoFlag) ProTagFormat = pipeline.NewStringFlagArgument(ProTagFormatFlag) ) diff --git a/arguments/golang.go b/arguments/golang.go index 3d458c3..055752c 100644 --- a/arguments/golang.go +++ b/arguments/golang.go @@ -6,7 +6,7 @@ import ( ) const ( - DefaultGoVersion = "1.22.3" + DefaultGoVersion = "1.22.4" DefaultViceroyVersion = "v0.4.0" ) diff --git a/arguments/grafana.go b/arguments/grafana.go index fa36ad0..8eb4f76 100644 --- a/arguments/grafana.go +++ b/arguments/grafana.go @@ -59,9 +59,9 @@ type GrafanaDirectoryOpts struct { PatchesRef string } -func (o *GrafanaDirectoryOpts) githubToken(ctx context.Context) (string, error) { +func githubToken(ctx context.Context, token string) (string, error) { // Since GrafanaDir was not provided, we must clone it. - ght := o.GitHubToken + ght := token // If GitHubToken was not set from flag if ght != "" { @@ -79,7 +79,7 @@ func (o *GrafanaDirectoryOpts) githubToken(ctx context.Context) (string, error) return token, nil } -func GrafanaDirectoryOptsFromFlags(ctx context.Context, c cliutil.CLIContext) (*GrafanaDirectoryOpts, error) { +func GrafanaDirectoryOptsFromFlags(c cliutil.CLIContext) *GrafanaDirectoryOpts { return &GrafanaDirectoryOpts{ GrafanaRepo: c.String("grafana-repo"), EnterpriseRepo: c.String("enterprise-repo"), @@ -91,7 +91,7 @@ func GrafanaDirectoryOptsFromFlags(ctx context.Context, c cliutil.CLIContext) (* PatchesRepo: c.String("patches-repo"), PatchesPath: c.String("patches-path"), PatchesRef: c.String("patches-ref"), - }, nil + } } func cloneOrMount(ctx context.Context, client *dagger.Client, localPath, repo, ref string, ght string) (*dagger.Directory, error) { @@ -156,12 +156,9 @@ func applyPatches(ctx context.Context, client *dagger.Client, src *dagger.Direct } func grafanaDirectory(ctx context.Context, opts *pipeline.ArgumentOpts) (any, error) { - o, err := GrafanaDirectoryOptsFromFlags(ctx, opts.CLIContext) - if err != nil { - return nil, err - } + o := GrafanaDirectoryOptsFromFlags(opts.CLIContext) - ght, err := o.githubToken(ctx) + ght, err := githubToken(ctx, o.GitHubToken) if err != nil { log.Println("No github token found:", err) } @@ -202,17 +199,14 @@ func grafanaDirectory(ctx context.Context, opts *pipeline.ArgumentOpts) (any, er func enterpriseDirectory(ctx context.Context, opts *pipeline.ArgumentOpts) (any, error) { // Get the Grafana directory... - o, err := GrafanaDirectoryOptsFromFlags(ctx, opts.CLIContext) - if err != nil { - return nil, err - } + o := GrafanaDirectoryOptsFromFlags(opts.CLIContext) grafanaDir, err := grafanaDirectory(ctx, opts) if err != nil { return nil, fmt.Errorf("error initializing grafana directory: %w", err) } - ght, err := o.githubToken(ctx) + ght, err := githubToken(ctx, o.GitHubToken) if err != nil { return nil, nil } diff --git a/arguments/pro.go b/arguments/pro.go index 8dc53e3..4b2827b 100644 --- a/arguments/pro.go +++ b/arguments/pro.go @@ -2,13 +2,31 @@ package arguments import ( "context" + "fmt" + "github.com/grafana/grafana-build/cliutil" "github.com/grafana/grafana-build/pipeline" "github.com/urfave/cli/v2" ) var ProDirectoryFlags = []cli.Flag{ - &cli.StringFlag{}, + &cli.StringFlag{ + Name: "hosted-grafana-dir", + Usage: "Local clone of HG to use, instead of git cloning", + Required: false, + }, + &cli.StringFlag{ + Name: "hosted-grafana-repo", + Usage: "https `.git` repository to use for hosted-grafana", + Required: false, + Value: "https://github.com/grafana/hosted-grafana.git", + }, + &cli.StringFlag{ + Name: "hosted-grafana-ref", + Usage: "git ref to checkout", + Required: false, + Value: "main", + }, } // GrafanaDirectory will provide the valueFunc that initializes and returns a *dagger.Directory that has Grafana in it. @@ -20,6 +38,33 @@ var ProDirectory = pipeline.Argument{ ValueFunc: proDirectory, } +type ProDirectoryOpts struct { + GitHubToken string + HGDir string + HGRepo string + HGRef string +} + +func ProDirectoryOptsFromFlags(c cliutil.CLIContext) *ProDirectoryOpts { + return &ProDirectoryOpts{ + GitHubToken: c.String("github-token"), + HGDir: c.String("hosted-grafana-dir"), + HGRepo: c.String("hosted-grafana-repo"), + HGRef: c.String("hosted-grafana-ref"), + } +} + func proDirectory(ctx context.Context, opts *pipeline.ArgumentOpts) (any, error) { - return nil, nil + o := ProDirectoryOptsFromFlags(opts.CLIContext) + ght, err := githubToken(ctx, o.GitHubToken) + if err != nil { + return nil, fmt.Errorf("could not get GitHub token: %w", err) + } + + src, err := cloneOrMount(ctx, opts.Client, o.HGDir, o.HGRepo, o.HGRef, ght) + if err != nil { + return nil, err + } + + return src, nil } diff --git a/artifacts/package_docker.go b/artifacts/package_docker.go index 1b81ca7..ec11f1b 100644 --- a/artifacts/package_docker.go +++ b/artifacts/package_docker.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log/slog" + "strings" "dagger.io/dagger" "github.com/grafana/grafana-build/arguments" @@ -18,6 +19,7 @@ var ( DockerArguments = arguments.Join( TargzArguments, []pipeline.Argument{ + arguments.ProDirectory, arguments.DockerRegistry, arguments.DockerOrg, arguments.AlpineImage, @@ -28,6 +30,7 @@ var ( arguments.ProDockerRegistry, arguments.ProDockerOrg, + arguments.ProDockerRepo, arguments.ProTagFormat, }, ) @@ -59,6 +62,15 @@ type Docker struct { BaseImage string TagFormat string + // ProRegistry is the docker registry when using the `pro` name. (e.g. hub.docker.io) + ProRegistry string + // ProOrg is the docker org when using the `pro` name. (e.g. grafana) + ProOrg string + // ProOrg is the docker repo when using the `pro` name. (e.g. grafana-pro) + ProRepo string + // ProTagFormat is the docker tag format when using the `pro` name. (e.g. {{ .version }}-{{ .os }}-{{ .arch }}) + ProTagFormat string + Tarball *pipeline.Artifact // Building the Pro image requires a Debian package instead of a tar.gz @@ -89,16 +101,11 @@ func (d *Docker) proBuilder(ctx context.Context, opts *pipeline.ArtifactContaine return nil, fmt.Errorf("error getting deb from state: %w", err) } - src, err := opts.State.Directory(ctx, arguments.ProDirectory) - if err != nil { - return nil, err - } - socket := opts.Client.Host().UnixSocket("/var/run/docker.sock") return opts.Client.Container().From("docker"). WithUnixSocket("/var/run/docker.sock", socket). - WithMountedDirectory("/src", src). + WithMountedDirectory("/src", d.ProDir). WithMountedFile("/src/grafana.deb", deb). WithWorkdir("/src"), nil } @@ -117,7 +124,7 @@ func (d *Docker) Builder(ctx context.Context, opts *pipeline.ArtifactContainerOp } func (d *Docker) buildPro(ctx context.Context, builder *dagger.Container, opts *pipeline.ArtifactContainerOpts) (*dagger.File, error) { - tags, err := docker.Tags(d.ProOrg, d.ProRegistry, d.ProRepo, d.ProTagFormat, packages.NameOpts{ + tags, err := docker.Tags(d.ProOrg, d.ProRegistry, []string{d.ProRepo}, d.ProTagFormat, packages.NameOpts{ Name: d.Name, Version: d.Version, BuildID: d.BuildID, @@ -130,18 +137,21 @@ func (d *Docker) buildPro(ctx context.Context, builder *dagger.Container, opts * builder = builder. WithExec([]string{"docker", "build", "--platform=linux/amd64", ".", "-f", "./cmd/hgrun/Dockerfile", "-t", "hrun:latest"}) + builder = docker.Build(opts.Client, builder, &docker.BuildOpts{ Dockerfile: "./docker/hosted-grafana-all/Dockerfile", Tags: tags, Platform: dagger.Platform("linux/amd64"), BuildArgs: []string{ - "RELEASE_TYPE=%s", - "GRAFANA_VERSION=%s", + "RELEASE_TYPE=prerelease", + // I think because deb files use a ~ as a version delimiter of some kind, so the hg docker image uses that instead of a - + fmt.Sprintf("GRAFANA_VERSION=%s", strings.Replace(d.Version, "-", "~", 1)), "HGRUN_IMAGE=hgrun:latest", }, }) - return nil, nil + // Save the resulting docker image to the local filesystem + return builder.WithExec([]string{"docker", "save", tags[0], "-o", "pro.tar"}).File("pro.tar"), nil } func (d *Docker) BuildFile(ctx context.Context, builder *dagger.Container, opts *pipeline.ArtifactContainerOpts) (*dagger.File, error) { @@ -170,6 +180,7 @@ func (d *Docker) BuildFile(ctx context.Context, builder *dagger.Container, opts "JS_SRC=tgz-builder", fmt.Sprintf("BASE_IMAGE=%s", d.BaseImage), }, + Dockerfile: "./docker/hosted-grafana-all/Dockerfile", } b := docker.Build(opts.Client, builder, buildOpts) @@ -182,7 +193,7 @@ func (d *Docker) BuildDir(ctx context.Context, builder *dagger.Container, opts * } func (d *Docker) publishPro(ctx context.Context, opts *pipeline.ArtifactContainerOpts) (*dagger.Container, error) { - return nil, nil + panic("not implemented") } func (d *Docker) Publisher(ctx context.Context, opts *pipeline.ArtifactContainerOpts) (*dagger.Container, error) { @@ -220,6 +231,11 @@ func (d *Docker) VerifyFile(ctx context.Context, client *dagger.Client, file *da if _, arch := backend.OSAndArch(d.Distro); arch == "riscv64" { return nil } + + if d.Pro { + return nil + } + return docker.Verify(ctx, client, file, d.Src, d.YarnCache, d.Distro) } @@ -228,10 +244,11 @@ func (d *Docker) VerifyDirectory(ctx context.Context, client *dagger.Client, dir } func NewDockerFromString(ctx context.Context, log *slog.Logger, artifact string, state pipeline.StateHandler) (*pipeline.Artifact, error) { - tarball, err := NewTarballFromString(ctx, log, artifact, state) - if err != nil { - return nil, err - } + var ( + pro bool + tarball *pipeline.Artifact + deb *pipeline.Artifact + ) options, err := pipeline.ParseFlags(artifact, DockerFlags) if err != nil { @@ -243,6 +260,26 @@ func NewDockerFromString(ctx context.Context, log *slog.Logger, artifact string, return nil, err } + if p.Name == packages.PackagePro { + pro = true + } + + // The Pro docker image depends on the deb while everything else depends on the targz + if pro { + artifact, err := NewDebFromString(ctx, log, artifact, state) + if err != nil { + return nil, err + } + deb = artifact + } else { + artifact, err := NewTarballFromString(ctx, log, artifact, state) + if err != nil { + return nil, err + } + + tarball = artifact + } + ubuntu, err := options.Bool(flags.Ubuntu) if err != nil { return nil, err @@ -288,6 +325,22 @@ func NewDockerFromString(ctx context.Context, log *slog.Logger, artifact string, if err != nil { return nil, err } + proRegistry, err := state.String(ctx, arguments.ProDockerRegistry) + if err != nil { + return nil, err + } + proOrg, err := state.String(ctx, arguments.ProDockerOrg) + if err != nil { + return nil, err + } + proRepo, err := state.String(ctx, arguments.ProDockerRepo) + if err != nil { + return nil, err + } + proTagFormat, err := state.String(ctx, arguments.ProTagFormat) + if err != nil { + return nil, err + } base := alpineImage if ubuntu { @@ -300,12 +353,9 @@ func NewDockerFromString(ctx context.Context, log *slog.Logger, artifact string, } var ( - pro bool proDir *dagger.Directory ) - - if p.Name == packages.PackagePro { - pro = true + if pro { dir, err := state.Directory(ctx, arguments.ProDirectory) if err != nil { return nil, err @@ -337,6 +387,7 @@ func NewDockerFromString(ctx context.Context, log *slog.Logger, artifact string, Pro: pro, ProDir: proDir, Tarball: tarball, + Deb: deb, Ubuntu: ubuntu, BaseImage: base, @@ -345,6 +396,11 @@ func NewDockerFromString(ctx context.Context, log *slog.Logger, artifact string, Repositories: repos, TagFormat: format, + ProRegistry: proRegistry, + ProOrg: proOrg, + ProRepo: proRepo, + ProTagFormat: proTagFormat, + Src: src, YarnCache: yarnCache, }, diff --git a/docker/build.go b/docker/build.go index 898d5dd..5117bbf 100644 --- a/docker/build.go +++ b/docker/build.go @@ -40,8 +40,12 @@ func Build(d *dagger.Client, builder *dagger.Container, opts *BuildOpts) *dagger if p := opts.Platform; p != "" { args = append(args, fmt.Sprintf("--platform=%s", string(p))) } + dockerfile := opts.Dockerfile + if dockerfile == "" { + dockerfile = "Dockerfile" + } - args = append(args, ".") + args = append(args, ".", "-f", dockerfile) for _, v := range opts.BuildArgs { args = append(args, fmt.Sprintf("--build-arg=%s", v)) diff --git a/go.mod b/go.mod index 496900a..1ccd461 100644 --- a/go.mod +++ b/go.mod @@ -3,44 +3,46 @@ module github.com/grafana/grafana-build go 1.21 require ( - dagger.io/dagger v0.11.0 + dagger.io/dagger v0.11.6 github.com/Masterminds/semver v1.5.0 github.com/quasilyte/go-ruleguard/dsl v0.3.22 github.com/stretchr/testify v1.9.0 github.com/urfave/cli/v2 v2.27.1 - go.opentelemetry.io/otel v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 - go.opentelemetry.io/otel/sdk v1.25.0 - go.opentelemetry.io/otel/trace v1.25.0 - golang.org/x/sync v0.6.0 + go.opentelemetry.io/otel v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 + go.opentelemetry.io/otel/sdk v1.26.0 + go.opentelemetry.io/otel/trace v1.26.0 + golang.org/x/sync v0.7.0 ) require ( - github.com/99designs/gqlgen v0.17.31 // indirect - github.com/Khan/genqlient v0.6.0 // indirect + github.com/99designs/gqlgen v0.17.44 // indirect + github.com/Khan/genqlient v0.7.0 // indirect github.com/adrg/xdg v0.4.0 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/vektah/gqlparser/v2 v2.5.6 // indirect + github.com/sosodev/duration v1.2.0 // indirect + github.com/vektah/gqlparser/v2 v2.5.11 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect - go.opentelemetry.io/otel/metric v1.25.0 // indirect - go.opentelemetry.io/proto/otlp v1.1.0 // indirect + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/proto/otlp v1.2.0 // indirect golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/net v0.23.0 // indirect - golang.org/x/sys v0.18.0 // indirect + golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect - google.golang.org/grpc v1.63.0 // indirect + google.golang.org/grpc v1.63.2 // indirect google.golang.org/protobuf v1.33.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 6676e3a..af98b31 100644 --- a/go.sum +++ b/go.sum @@ -1,17 +1,15 @@ -dagger.io/dagger v0.11.0 h1:7McBEIWVt1L2cuhuTDIA4m6ZpEXbZlnNwhVBO/VnVyY= -dagger.io/dagger v0.11.0/go.mod h1:eJZr2HyDP+2bNrV2Z0RSKjH6X/gMIA52gk48NINAoEo= -github.com/99designs/gqlgen v0.17.31 h1:VncSQ82VxieHkea8tz11p7h/zSbvHSxSDZfywqWt158= -github.com/99designs/gqlgen v0.17.31/go.mod h1:i4rEatMrzzu6RXaHydq1nmEPZkb3bKQsnxNRHS4DQB4= -github.com/Khan/genqlient v0.6.0 h1:Bwb1170ekuNIVIwTJEqvO8y7RxBxXu639VJOkKSrwAk= -github.com/Khan/genqlient v0.6.0/go.mod h1:rvChwWVTqXhiapdhLDV4bp9tz/Xvtewwkon4DpWWCRM= +dagger.io/dagger v0.11.6 h1:aGmMpPETphE091FQ4U4LRxYLxbvLZd5Icm/V1Vv8IOQ= +dagger.io/dagger v0.11.6/go.mod h1:7JewnFDOKZdJNQbQsPvjemONAn6v3ihuTL1bxBSQG8g= +github.com/99designs/gqlgen v0.17.44 h1:OS2wLk/67Y+vXM75XHbwRnNYJcbuJd4OBL76RX3NQQA= +github.com/99designs/gqlgen v0.17.44/go.mod h1:UTCu3xpK2mLI5qcMNw+HKDiEL77it/1XtAjisC4sLwM= +github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= +github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= -github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= @@ -19,7 +17,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -27,13 +24,12 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -48,44 +44,45 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/sosodev/duration v1.2.0 h1:pqK/FLSjsAADWY74SyWDCjOcd5l7H8GSnnOGEB9A1Us= +github.com/sosodev/duration v1.2.0/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho= github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq8cRU= -github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME= +github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8= +github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= -go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8= -go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= -go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= -go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo= -go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw= -go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= -go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= -go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= -go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= +go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94= +go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= @@ -94,16 +91,13 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1: google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8= -google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=