From 232c9f9f913f6dd50f2d523b2a725a88d4eaccf2 Mon Sep 17 00:00:00 2001 From: drypa Date: Sun, 6 Oct 2024 20:57:58 +0300 Subject: [PATCH 01/11] server descriptor test --- pkg/api/tests/refapp_test.go | 4 ++ pkg/api/tests/refapp_yandex.go | 45 +++++++++++++++++++ .../refapp-yc-cloud-function/server.yaml | 23 ++++++++++ pkg/clouds/yandex/cloud_function.go | 42 +++++++++++++++++ pkg/clouds/yandex/init.go | 18 ++++++++ pkg/clouds/yandex/yandex.go | 31 +++++++++++++ 6 files changed, 163 insertions(+) create mode 100644 pkg/api/tests/refapp_yandex.go create mode 100644 pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/server.yaml create mode 100644 pkg/clouds/yandex/cloud_function.go create mode 100644 pkg/clouds/yandex/init.go create mode 100644 pkg/clouds/yandex/yandex.go diff --git a/pkg/api/tests/refapp_test.go b/pkg/api/tests/refapp_test.go index 038eb8e0..195e8d05 100644 --- a/pkg/api/tests/refapp_test.go +++ b/pkg/api/tests/refapp_test.go @@ -37,6 +37,10 @@ func TestReadServerDescriptor(t *testing.T) { path: "testdata/stacks/refapp-gke-autopilot/server.yaml", want: RefappGkeAutopilotServerDescriptor, }, + { + path: "testdata/stacks/refapp-yc-cloud-function/server.yaml", + want: RefappYandexCloudFunctionServerDescriptor, + }, } for _, tt := range tests { t.Run(tt.path, func(t *testing.T) { diff --git a/pkg/api/tests/refapp_yandex.go b/pkg/api/tests/refapp_yandex.go new file mode 100644 index 00000000..613ed850 --- /dev/null +++ b/pkg/api/tests/refapp_yandex.go @@ -0,0 +1,45 @@ +package tests + +import ( + "github.com/simple-container-com/api/pkg/api" + "github.com/simple-container-com/api/pkg/clouds/yandex" +) + +var RefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ + SchemaVersion: api.ServerSchemaVersion, + Provisioner: api.ProvisionerDescriptor{ + Inherit: api.Inherit{Inherit: "common"}, + }, + Secrets: api.SecretsConfigDescriptor{ + Inherit: api.Inherit{Inherit: "common"}, + }, + CiCd: api.CiCdDescriptor{ + Inherit: api.Inherit{Inherit: "common"}, + }, + Templates: map[string]api.StackDescriptor{ + "func-per-app": { + Type: yandex.TemplateTypeYandexCloudFunction, + Config: api.Config{Config: &yandex.TemplateConfig{ + AccountConfig: yandex.AccountConfig{ + Account: "${auth:yandex.projectId}", + Credentials: api.Credentials{ + Credentials: "${auth:yandex}", + }, + }, + }}, + }, + }, + Resources: api.PerStackResourcesDescriptor{ + Registrar: api.RegistrarDescriptor{ + Inherit: api.Inherit{Inherit: "common"}, + }, + Resources: map[string]api.PerEnvResourcesDescriptor{ + "staging": { + Template: "func-per-app", + }, + "prod": { + Template: "func-per-app", + }, + }, + }, +} diff --git a/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/server.yaml b/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/server.yaml new file mode 100644 index 00000000..c1a7dfb7 --- /dev/null +++ b/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/server.yaml @@ -0,0 +1,23 @@ +schemaVersion: 1.0 +provisioner: + inherit: common +secrets: + inherit: common +cicd: + inherit: common +templates: + func-per-app: + type: yc-cloud-function + config: + credentials: "${auth:yandex}" + account: "${auth:yandex.projectId}" +resources: + registrar: + inherit: common + resources: + staging: + template: func-per-app + resources: &resources + prod: + template: func-per-app + resources: *resources \ No newline at end of file diff --git a/pkg/clouds/yandex/cloud_function.go b/pkg/clouds/yandex/cloud_function.go new file mode 100644 index 00000000..68f6d33b --- /dev/null +++ b/pkg/clouds/yandex/cloud_function.go @@ -0,0 +1,42 @@ +package yandex + +import ( + "github.com/pkg/errors" + "github.com/simple-container-com/api/pkg/api" +) + +const ( + TemplateTypeYandexCloudFunction = "yc-cloud-function" +) + +type CloudFunctionInput struct { + AccountConfig `json:",inline" yaml:",inline"` + StackConfig api.StackConfigSingleImage `json:"stackConfig" yaml:"stackConfig"` +} + +func ToCloudFunctionConfig(tpl any, stackCfg *api.StackConfigSingleImage) (any, error) { + templateCfg, ok := tpl.(*TemplateConfig) + if !ok { + return nil, errors.Errorf("template config is not of type yc.TemplateConfig") + } + + if templateCfg == nil { + return nil, errors.Errorf("template config is nil") + } + + accountConfig := &AccountConfig{} + err := api.ConvertAuth(&templateCfg.AccountConfig, accountConfig) + if err != nil { + return nil, errors.Wrapf(err, "failed to convert yc account config") + } + if stackCfg == nil { + return nil, errors.Errorf("stack config cannot be nil") + } + + res := &CloudFunctionInput{ + AccountConfig: *accountConfig, + StackConfig: *stackCfg, + } + + return res, nil +} diff --git a/pkg/clouds/yandex/init.go b/pkg/clouds/yandex/init.go new file mode 100644 index 00000000..b4b473b9 --- /dev/null +++ b/pkg/clouds/yandex/init.go @@ -0,0 +1,18 @@ +package yandex + +import ( + "github.com/simple-container-com/api/pkg/api" +) + +const ProviderType = "yandex-cloud" + +func init() { + api.RegisterProviderConfig(api.ConfigRegisterMap{ + TemplateTypeYandexCloudFunction: ReadTemplateConfig, + }) + + api.RegisterCloudSingleImageConverter(api.CloudSingleImageConfigRegister{ + TemplateTypeYandexCloudFunction: ToCloudFunctionConfig, + }) + +} diff --git a/pkg/clouds/yandex/yandex.go b/pkg/clouds/yandex/yandex.go new file mode 100644 index 00000000..e577cb8c --- /dev/null +++ b/pkg/clouds/yandex/yandex.go @@ -0,0 +1,31 @@ +package yandex + +import ( + "github.com/samber/lo" + "github.com/simple-container-com/api/pkg/api" +) + +type TemplateConfig struct { + AccountConfig `json:",inline" yaml:",inline"` +} + +type AccountConfig struct { + Account string `json:"account" yaml:"account"` + api.Credentials `json:",inline" yaml:",inline"` +} + +func (r *AccountConfig) ProviderType() string { + return ProviderType +} + +func (r *AccountConfig) CredentialsValue() string { + return lo.If(r.Credentials.Credentials == "", api.AuthToString(r)).Else(r.Credentials.Credentials) +} + +func (r *AccountConfig) ProjectIdValue() string { + return r.Account +} + +func ReadTemplateConfig(config *api.Config) (api.Config, error) { + return api.ConvertConfig(config, &TemplateConfig{}) +} From 2945e1b3b9c6eabaf604d53d80e07cccf616e70f Mon Sep 17 00:00:00 2001 From: drypa Date: Sun, 6 Oct 2024 21:28:04 +0300 Subject: [PATCH 02/11] client descriptor test --- pkg/api/tests/refapp_test.go | 4 +++ pkg/api/tests/refapp_yandex.go | 36 +++++++++++++++++++ .../refapp-yc-cloud-function/client.yaml | 19 ++++++++++ 3 files changed, 59 insertions(+) create mode 100644 pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml diff --git a/pkg/api/tests/refapp_test.go b/pkg/api/tests/refapp_test.go index 195e8d05..9a94395d 100644 --- a/pkg/api/tests/refapp_test.go +++ b/pkg/api/tests/refapp_test.go @@ -105,6 +105,10 @@ func TestReadClientDescriptor(t *testing.T) { path: "testdata/stacks/refapp-gke-autopilot/client.yaml", want: RefappGkeAutopilotClientDescriptor, }, + { + path: "testdata/stacks/refapp-yc-cloud-function/client.yaml", + want: RefappYandexCloudFunctionClientDescriptor, + }, } for _, tt := range tests { t.Run(tt.path, func(t *testing.T) { diff --git a/pkg/api/tests/refapp_yandex.go b/pkg/api/tests/refapp_yandex.go index 613ed850..31197621 100644 --- a/pkg/api/tests/refapp_yandex.go +++ b/pkg/api/tests/refapp_yandex.go @@ -43,3 +43,39 @@ var RefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ }, }, } + +var RefappYandexCloudFunctionClientDescriptor = &api.ClientDescriptor{ + SchemaVersion: api.ClientSchemaVersion, + Stacks: map[string]api.StackClientDescriptor{ + "staging": { + Type: api.ClientTypeSingleImage, + ParentStack: "refapp-aws-lambda", + Config: api.Config{ + Config: &api.StackConfigSingleImage{ + Domain: "staging.sc-refapp.org", + Image: &api.ContainerImage{ + Dockerfile: "Dockerfile", + }, + Env: map[string]string{ + "ENV": "staging", + }, + }, + }, + }, + "prod": { + Type: api.ClientTypeSingleImage, + ParentStack: "refapp-aws-lambda", + Config: api.Config{ + Config: &api.StackConfigSingleImage{ + Domain: "prod.sc-refapp.org", + Image: &api.ContainerImage{ + Dockerfile: "Dockerfile", + }, + Env: map[string]string{ + "ENV": "prod", + }, + }, + }, + }, + }, +} diff --git a/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml b/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml new file mode 100644 index 00000000..8ae0c451 --- /dev/null +++ b/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml @@ -0,0 +1,19 @@ +# Generated by sc CLI when initially setting up +schemaVersion: 1.0 +stacks: + staging: &staging + type: single-image + parent: refapp-aws-lambda + config: &config + domain: staging.sc-refapp.org + image: + dockerfile: Dockerfile + env: + ENV: staging + prod: + <<: *staging + config: + <<: *config + domain: prod.sc-refapp.org + env: + ENV: prod From 073ce343350f2f6ce571bbb95ffa8684b8d96133 Mon Sep 17 00:00:00 2001 From: drypa Date: Mon, 24 Feb 2025 13:07:38 +0300 Subject: [PATCH 03/11] some changes --- go.mod | 1 + go.sum | 32 +++++ pkg/api/tests/refapp_test.go | 4 +- pkg/api/tests/refapp_yandex.go | 48 ++++++- .../refapp-yandex-cloud-function/client.yaml | 19 +++ .../server.yaml | 2 +- pkg/clouds/pulumi/init.go | 1 + pkg/clouds/pulumi/yandex/authorized_key.go | 21 +++ pkg/clouds/pulumi/yandex/cloud_function.go | 128 ++++++++++++++++++ pkg/clouds/pulumi/yandex/init.go | 13 ++ pkg/clouds/pulumi/yandex/provider.go | 42 ++++++ pkg/clouds/yandex/cloud_function.go | 14 +- pkg/clouds/yandex/yandex.go | 4 +- pkg/provisioner/common_test.go | 24 ++++ pkg/provisioner/init.go | 1 + .../stacks/refapp-yandex-cloud-function | 1 + 16 files changed, 338 insertions(+), 17 deletions(-) create mode 100644 pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml rename pkg/api/tests/testdata/stacks/{refapp-yc-cloud-function => refapp-yandex-cloud-function}/server.yaml (92%) create mode 100644 pkg/clouds/pulumi/yandex/authorized_key.go create mode 100755 pkg/clouds/pulumi/yandex/cloud_function.go create mode 100755 pkg/clouds/pulumi/yandex/init.go create mode 100755 pkg/clouds/pulumi/yandex/provider.go create mode 120000 pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function diff --git a/go.mod b/go.mod index c939959d..fb707381 100644 --- a/go.mod +++ b/go.mod @@ -339,6 +339,7 @@ require ( github.com/prometheus/procfs v0.7.3 // indirect github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect github.com/pulumi/esc v0.10.0 // indirect + github.com/pulumi/pulumi-yandex/sdk v0.13.0 // indirect github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 // indirect github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect diff --git a/go.sum b/go.sum index f7fc418e..803146d2 100644 --- a/go.sum +++ b/go.sum @@ -322,6 +322,7 @@ github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+U github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/cheggaaa/pb v1.0.18/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= github.com/chigopher/pathlib v0.19.1 h1:RoLlUJc0CqBGwq239cilyhxPNLXTK+HXoASGyGznx5A= @@ -351,6 +352,7 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/compose-spec/compose-go v1.20.2 h1:u/yfZHn4EaHGdidrZycWpxXgFffjYULlTbRfJ51ykjQ= github.com/compose-spec/compose-go v1.20.2/go.mod h1:+MdqXV4RA7wdFsahh/Kb8U0pAJqkg7mr4PM9tFKU8RM= github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= @@ -512,6 +514,7 @@ github.com/disgoorg/snowflake/v2 v2.0.1 h1:CuUxGLwggUxEswZOmZ+mZ5i0xSumQdXW9tXW7 github.com/disgoorg/snowflake/v2 v2.0.1/go.mod h1:SPU9c2CNn5DSyb86QcKtdZgix9osEtKrHLW4rMhfLCs= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8= github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= @@ -712,6 +715,7 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= @@ -829,6 +833,7 @@ github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAx github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -1068,12 +1073,14 @@ github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwM github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -1175,6 +1182,7 @@ github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3L github.com/nunnatsa/ginkgolinter v0.16.2 h1:8iLqHIZvN4fTLDC0Ke9tbSZVcyVHoBs0HIbnVSxfHJk= github.com/nunnatsa/ginkgolinter v0.16.2/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -1230,6 +1238,7 @@ github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqi github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1264,6 +1273,7 @@ github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1345,8 +1355,11 @@ github.com/pulumi/pulumi-mongodbatlas/sdk/v3 v3.17.1 h1:CKmg41Ro3U4+ZE6/dPb/mvh8 github.com/pulumi/pulumi-mongodbatlas/sdk/v3 v3.17.1/go.mod h1:N7i//nAsVHOoFUJzCB9z/JUrYgz4X+H65faWrRJh0eQ= github.com/pulumi/pulumi-random/sdk/v4 v4.16.0 h1:H6gGA1hnprPB7SWC11giI93tVRxuSxeAteIuqtr6GHk= github.com/pulumi/pulumi-random/sdk/v4 v4.16.0/go.mod h1:poNUvMquwCDb7AqxqBBWcZEn6ADhoDPml2j43wZtzkU= +github.com/pulumi/pulumi-yandex/sdk v0.13.0 h1:mbVliVVCeboy6z8DBP4pAwef3emonA9OOV1qdy5hLzA= +github.com/pulumi/pulumi-yandex/sdk v0.13.0/go.mod h1:AMtNw3EQuTiPdxCgjbUmN0jFo4iXEdPdf5EdY1rP6YU= github.com/pulumi/pulumi/pkg/v3 v3.143.0 h1:diAlaNVZSRc59ePqbMuvuf/AwecpZyjhh1pGvmLEUwg= github.com/pulumi/pulumi/pkg/v3 v3.143.0/go.mod h1:XzjN1uQI2HWXYolT2L4RIXzvLEnWTSOzFgFFIUfFEa8= +github.com/pulumi/pulumi/sdk/v3 v3.23.2/go.mod h1:WHOQB00iuHZyXhwrymxpKXhpOahSguJIpRjVokmM11w= github.com/pulumi/pulumi/sdk/v3 v3.143.0 h1:z1m8Fc6l723eU2J/bP7UHE5t6WbBu4iIDAl1WaalQk4= github.com/pulumi/pulumi/sdk/v3 v3.143.0/go.mod h1:OFpZabILGxrFqzcABFpMCksrHGVp4ymRM2BkKjlazDY= github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 h1:+Wl/0aFp0hpuHM3H//KMft64WQ1yX9LdJY64Qm/gFCo= @@ -1367,6 +1380,7 @@ github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= @@ -1381,6 +1395,7 @@ github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9f github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= @@ -1412,6 +1427,7 @@ github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oH github.com/segmentio/textio v1.2.0 h1:Ug4IkV3kh72juJbG8azoSBlgebIbUUxVNrfFcKHfTSQ= github.com/segmentio/textio v1.2.0/go.mod h1:+Rb7v0YVODP+tK5F7FD9TCkV7gOYx9IgLHWiqtvY8ag= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= @@ -1451,6 +1467,7 @@ github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v0.0.0-20150508191742-4d07383ffe94/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= @@ -1517,6 +1534,7 @@ github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpR github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= github.com/tetafro/godot v1.4.17 h1:pGzu+Ye7ZUEFx7LHU0dAKmCOXWsPjl7qA6iMGndsjPs= github.com/tetafro/godot v1.4.17/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= +github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theupdateframework/notary v0.6.2-0.20200604104540-c312d8211cfb h1:9RQTi3qwx6InSHu4Cg4Q/LjoW0rnFyGdwKeLLbx5Wj0= @@ -1532,8 +1550,11 @@ github.com/tomarrell/wrapcheck/v2 v2.9.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYc github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -1633,6 +1654,7 @@ go.starlark.net v0.0.0-20231101134539-556fd59b42f6 h1:+eC0F/k4aBLC4szgOcjd7bDTEn go.starlark.net v0.0.0-20231101134539-556fd59b42f6/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= @@ -1664,6 +1686,7 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1762,6 +1785,7 @@ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -1855,6 +1879,7 @@ golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1896,6 +1921,7 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1990,6 +2016,7 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2015,6 +2042,7 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -2103,6 +2131,7 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2164,6 +2193,7 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= @@ -2253,6 +2283,7 @@ mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U= mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= pgregory.net/rapid v0.6.1 h1:4eyrDxyht86tT4Ztm+kvlyNBLIk071gR+ZQdhphc9dQ= pgregory.net/rapid v0.6.1/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -2265,3 +2296,4 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/pkg/api/tests/refapp_test.go b/pkg/api/tests/refapp_test.go index 9eb1e72a..03004857 100644 --- a/pkg/api/tests/refapp_test.go +++ b/pkg/api/tests/refapp_test.go @@ -43,7 +43,7 @@ func TestReadServerDescriptor(t *testing.T) { want: RefappKubernetesServerDescriptor, }, { - path: "testdata/stacks/refapp-yc-cloud-function/server.yaml", + path: "testdata/stacks/refapp-yandex-cloud-function/server.yaml", want: RefappYandexCloudFunctionServerDescriptor, }, } @@ -111,7 +111,7 @@ func TestReadClientDescriptor(t *testing.T) { want: RefappGkeAutopilotClientDescriptor, }, { - path: "testdata/stacks/refapp-yc-cloud-function/client.yaml", + path: "testdata/stacks/refapp-yandex-cloud-function/client.yaml", want: RefappYandexCloudFunctionClientDescriptor, }, } diff --git a/pkg/api/tests/refapp_yandex.go b/pkg/api/tests/refapp_yandex.go index 31197621..53e903b6 100644 --- a/pkg/api/tests/refapp_yandex.go +++ b/pkg/api/tests/refapp_yandex.go @@ -21,7 +21,7 @@ var RefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ Type: yandex.TemplateTypeYandexCloudFunction, Config: api.Config{Config: &yandex.TemplateConfig{ AccountConfig: yandex.AccountConfig{ - Account: "${auth:yandex.projectId}", + CloudId: "${auth:yandex.projectId}", Credentials: api.Credentials{ Credentials: "${auth:yandex}", }, @@ -49,7 +49,7 @@ var RefappYandexCloudFunctionClientDescriptor = &api.ClientDescriptor{ Stacks: map[string]api.StackClientDescriptor{ "staging": { Type: api.ClientTypeSingleImage, - ParentStack: "refapp-aws-lambda", + ParentStack: "refapp-yandex-cloud-function", Config: api.Config{ Config: &api.StackConfigSingleImage{ Domain: "staging.sc-refapp.org", @@ -64,7 +64,7 @@ var RefappYandexCloudFunctionClientDescriptor = &api.ClientDescriptor{ }, "prod": { Type: api.ClientTypeSingleImage, - ParentStack: "refapp-aws-lambda", + ParentStack: "refapp-yandex-cloud-function", Config: api.Config{ Config: &api.StackConfigSingleImage{ Domain: "prod.sc-refapp.org", @@ -79,3 +79,45 @@ var RefappYandexCloudFunctionClientDescriptor = &api.ClientDescriptor{ }, }, } + +var resolvedYandexAccountConfig = yandex.AccountConfig{ + CloudId: "000", + Credentials: api.Credentials{ + Credentials: `{"account":"123","accessKey":"\u003cyandex-access-key\u003e","secretAccessKey":"\u003cyandex-secret-key\u003e","credentials":""}`, + }, +} + +var ResolvedRefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ + SchemaVersion: api.ServerSchemaVersion, + Provisioner: ResolvedCommonServerDescriptor.Provisioner, + Secrets: ResolvedCommonServerDescriptor.Secrets, + CiCd: ResolvedCommonServerDescriptor.CiCd, + Templates: map[string]api.StackDescriptor{ + "func-per-app": { + Type: yandex.TemplateTypeYandexCloudFunction, + Config: api.Config{Config: &yandex.TemplateConfig{ + AccountConfig: resolvedYandexAccountConfig, + }}, + }, + }, + Variables: map[string]api.VariableDescriptor{}, + Resources: api.PerStackResourcesDescriptor{ + Registrar: ResolvedCommonServerDescriptor.Resources.Registrar, + Resources: map[string]api.PerEnvResourcesDescriptor{ + "staging": { + Template: "func-per-app", + Resources: map[string]api.ResourceDescriptor{}, + }, + "prod": { + Template: "func-per-app", + Resources: map[string]api.ResourceDescriptor{}, + }, + }, + }, +} + +func ResolvedRefappYandexCloudFunctionClientDescriptor() *api.ClientDescriptor { + res := RefappClientDescriptor.Copy() + + return &res +} diff --git a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml new file mode 100644 index 00000000..e61e63e9 --- /dev/null +++ b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml @@ -0,0 +1,19 @@ +# Generated by sc CLI when initially setting up +schemaVersion: 1.0 +stacks: + staging: &staging + type: single-image + parent: yandex-server + config: &config + domain: staging.sc-refapp.org + image: + dockerfile: Dockerfile + env: + ENV: staging + prod: + <<: *staging + config: + <<: *config + domain: prod.sc-refapp.org + env: + ENV: prod diff --git a/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/server.yaml b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml similarity index 92% rename from pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/server.yaml rename to pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml index c1a7dfb7..2f766618 100644 --- a/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/server.yaml +++ b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml @@ -7,7 +7,7 @@ cicd: inherit: common templates: func-per-app: - type: yc-cloud-function + type: yandex-cloud-function config: credentials: "${auth:yandex}" account: "${auth:yandex.projectId}" diff --git a/pkg/clouds/pulumi/init.go b/pkg/clouds/pulumi/init.go index 0f66cafe..0caf1f5f 100644 --- a/pkg/clouds/pulumi/init.go +++ b/pkg/clouds/pulumi/init.go @@ -16,6 +16,7 @@ import ( _ "github.com/simple-container-com/api/pkg/clouds/pulumi/cloudflare" _ "github.com/simple-container-com/api/pkg/clouds/pulumi/gcp" _ "github.com/simple-container-com/api/pkg/clouds/pulumi/mongodb" + _ "github.com/simple-container-com/api/pkg/clouds/pulumi/yandex" ) func init() { diff --git a/pkg/clouds/pulumi/yandex/authorized_key.go b/pkg/clouds/pulumi/yandex/authorized_key.go new file mode 100644 index 00000000..ec7f8a7e --- /dev/null +++ b/pkg/clouds/pulumi/yandex/authorized_key.go @@ -0,0 +1,21 @@ +package yandex + +import ( + "encoding/json" + "time" +) + +type AuthorizedKey struct { + Id string `json:"id"` + ServiceAccountId string `json:"service_account_id"` + CreatedAt time.Time `json:"created_at"` + KeyAlgorithm string `json:"key_algorithm"` + PublicKey string `json:"public_key"` + PrivateKey string `json:"private_key"` +} + +func FromString(auth string) (AuthorizedKey, error) { + result := &AuthorizedKey{} + err := json.Unmarshal([]byte(auth), result) + return *result, err +} diff --git a/pkg/clouds/pulumi/yandex/cloud_function.go b/pkg/clouds/pulumi/yandex/cloud_function.go new file mode 100755 index 00000000..fd42ebd0 --- /dev/null +++ b/pkg/clouds/pulumi/yandex/cloud_function.go @@ -0,0 +1,128 @@ +package yandex + +import ( + "fmt" + "github.com/pkg/errors" + pDocker "github.com/pulumi/pulumi-docker/sdk/v4/go/docker" + pYandex "github.com/pulumi/pulumi-yandex/sdk/go/yandex" + sdk "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/samber/lo" + "github.com/simple-container-com/api/pkg/api" + pApi "github.com/simple-container-com/api/pkg/clouds/pulumi/api" + "github.com/simple-container-com/api/pkg/clouds/pulumi/docker" + "github.com/simple-container-com/api/pkg/clouds/yandex" + "path/filepath" +) + +type CloudFunctionOutput struct { + sdk.Output +} + +func CloudFunction(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, params pApi.ProvisionParams) (*api.ResourceOutput, error) { + if input.Descriptor.Type != yandex.TemplateTypeYandexCloudFunction { + return nil, errors.Errorf("unsupported template type %q", input.Descriptor.Type) + } + if input.StackParams == nil { + return nil, errors.Errorf("missing deploy params for %q in stack %q", input.Descriptor.Type, stack.Name) + } + + deployParams := *input.StackParams + + folderName := fmt.Sprintf("%s-%s2", input.StackParams.StackName, input.StackParams.Environment) + folder, err := pYandex.NewResourcemanagerFolder(ctx, folderName, &pYandex.ResourcemanagerFolderArgs{Name: sdk.String(folderName)}, sdk.Provider(params.Provider)) + if err != nil { + return nil, errors.Errorf("unable to create folder: %v", err) + } + + ref := &CloudFunctionOutput{} + output := &api.ResourceOutput{Ref: ref} + + crInput, ok := input.Descriptor.Config.Config.(*yandex.CloudFunctionInput) + if !ok { + return output, errors.Errorf("failed to convert yandex-cloud config for %q in stack %q in %q", input.Descriptor.Type, stack.Name, deployParams.Environment) + } + + // Create a Yandex Cloud Container Repository + repoName := containerRegistryName(input.StackParams.StackName, input.StackParams.Environment) + + registry, err := pYandex.NewContainerRegistry(ctx, repoName, &pYandex.ContainerRegistryArgs{ + Name: sdk.String(repoName), + FolderId: folder.ID(), + }, sdk.Provider(params.Provider)) + if err != nil { + return nil, errors.Errorf("unable to create container registry: %v", err) + } + + stackConfig := crInput.StackConfig + + authorizedKey, err := FromString(crInput.CredentialsValue()) + if err != nil { + return nil, errors.Wrapf(err, "invalid credentials value %q", crInput.CredentialsValue()) //TODO: secret logging should be removed + } + + serviceAccountId := sdk.String(authorizedKey.ServiceAccountId) + _, err = pYandex.NewIamServiceAccountKey(ctx, "iam-key", &pYandex.IamServiceAccountKeyArgs{ServiceAccountId: serviceAccountId, Description: sdk.String("pulumi created IAM")}, sdk.Provider(params.Provider)) + if err != nil { + return nil, errors.Errorf("unable to create IAM service account key: %v", err) + } + + dockerfile := stackConfig.Image.Dockerfile + if !filepath.IsAbs(dockerfile) { + dockerfile = filepath.Join(input.StackParams.StacksDir, input.StackParams.StackName, stackConfig.Image.Dockerfile) + } + + repoUrlOutput := registry.ID().ApplyT(func(id string) string { + repoUrl := fmt.Sprintf("cr.yandex/%s", id) + return repoUrl + }).(sdk.StringOutput) + + dockerImage := docker.Image{ + Name: stack.Name, + Dockerfile: dockerfile, + Args: lo.FromPtr(stackConfig.Image.Build).Args, + Context: stackConfig.Image.Context, + Version: lo.If(deployParams.Version != "", deployParams.Version).Else("latest"), + RepositoryUrlWithImage: true, // since repository is individual for each image + ProviderOptions: nil, + RepositoryUrl: repoUrlOutput, + Registry: pDocker.RegistryArgs{ + Server: repoUrlOutput, + Username: sdk.String("iam"), + Password: sdk.String(""), //TODO: get IAM token + }, + Platform: nil, // sdk.String(lo.If(params.Platform != nil, lo.FromPtr(image.Platform)).Else(string(api.ImagePlatformLinuxAmd64))), + } + // Build a Docker image + _, err = docker.BuildAndPushImage(ctx, stack, params, deployParams, dockerImage) + if err != nil { + return nil, errors.Errorf("unable to build and push image: %v", err) + } + + imageNameOutput := registry.ID().ApplyT(func(id string) string { + repoUrl := fmt.Sprintf("cr.yandex/%s:%s", id, dockerImage.Version) + return repoUrl + }).(sdk.StringOutput) + + timeout := lo.If(stackConfig.Timeout != nil, lo.FromPtr(stackConfig.Timeout)).Else(10) + strTimeout := fmt.Sprintf("%ds", timeout) + _, err = pYandex.NewServerlessContainer(ctx, "serverless-container", &pYandex.ServerlessContainerArgs{ + ExecutionTimeout: sdk.StringPtrFromPtr(&strTimeout), + FolderId: folder.ID(), + Image: &pYandex.ServerlessContainerImageArgs{ + Url: imageNameOutput, + }, + Memory: sdk.Int(lo.If(stackConfig.MaxMemory == nil, 128).Else(lo.FromPtr(stackConfig.MaxMemory))), + Name: sdk.String("serverless-container"), + ServiceAccountId: serviceAccountId, + }, sdk.Provider(params.Provider)) + + if err != nil { + return nil, errors.Errorf("unable to create serverless container: %v", err) + } + + return output, nil +} + +func containerRegistryName(stackName string, imageName string) string { + return fmt.Sprintf("%s-%s", stackName, imageName) +} diff --git a/pkg/clouds/pulumi/yandex/init.go b/pkg/clouds/pulumi/yandex/init.go new file mode 100755 index 00000000..25c2ebae --- /dev/null +++ b/pkg/clouds/pulumi/yandex/init.go @@ -0,0 +1,13 @@ +package yandex + +import ( + "github.com/simple-container-com/api/pkg/clouds/pulumi/api" + "github.com/simple-container-com/api/pkg/clouds/yandex" +) + +func init() { + api.RegisterResources(map[string]api.ProvisionFunc{ + yandex.TemplateTypeYandexCloudFunction: CloudFunction, + }) + api.RegisterProvider(yandex.ProviderType, Provider) +} diff --git a/pkg/clouds/pulumi/yandex/provider.go b/pkg/clouds/pulumi/yandex/provider.go new file mode 100755 index 00000000..f27f74ed --- /dev/null +++ b/pkg/clouds/pulumi/yandex/provider.go @@ -0,0 +1,42 @@ +package yandex + +import ( + "context" + "github.com/pkg/errors" + pYandex "github.com/pulumi/pulumi-yandex/sdk/go/yandex" + sdk "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/simple-container-com/api/pkg/api" + "github.com/simple-container-com/api/pkg/api/logger" + pApi "github.com/simple-container-com/api/pkg/clouds/pulumi/api" +) + +func InitStateStore(ctx context.Context, stateStoreCfg api.StateStorageConfig, log logger.Logger) error { + _, ok := stateStoreCfg.(api.AuthConfig) + if !ok { + return errors.Errorf("failed to convert yandex state storage config to api.AuthConfig") + } + if !stateStoreCfg.IsProvisionEnabled() { + return nil + } + + return nil +} + +func Provider(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, params pApi.ProvisionParams) (*api.ResourceOutput, error) { + pcfg, ok := input.Descriptor.Config.Config.(api.AuthConfig) + if !ok { + return nil, errors.Errorf("failed to cast config to api.AuthConfig") + } + + creds := pcfg.CredentialsValue() + projectId := pcfg.ProjectIdValue() + + provider, err := pYandex.NewProvider(ctx, input.ToResName(input.Descriptor.Name), &pYandex.ProviderArgs{ + ServiceAccountKeyFile: sdk.String(creds), + CloudId: sdk.String(projectId), + }) + return &api.ResourceOutput{ + Ref: provider, + }, err + +} diff --git a/pkg/clouds/yandex/cloud_function.go b/pkg/clouds/yandex/cloud_function.go index 68f6d33b..778be5ad 100644 --- a/pkg/clouds/yandex/cloud_function.go +++ b/pkg/clouds/yandex/cloud_function.go @@ -6,7 +6,7 @@ import ( ) const ( - TemplateTypeYandexCloudFunction = "yc-cloud-function" + TemplateTypeYandexCloudFunction = "yandex-cloud-function" ) type CloudFunctionInput struct { @@ -17,20 +17,16 @@ type CloudFunctionInput struct { func ToCloudFunctionConfig(tpl any, stackCfg *api.StackConfigSingleImage) (any, error) { templateCfg, ok := tpl.(*TemplateConfig) if !ok { - return nil, errors.Errorf("template config is not of type yc.TemplateConfig") + return nil, errors.Errorf("template config is not of type yandex.TemplateConfig") } if templateCfg == nil { return nil, errors.Errorf("template config is nil") } - accountConfig := &AccountConfig{} - err := api.ConvertAuth(&templateCfg.AccountConfig, accountConfig) - if err != nil { - return nil, errors.Wrapf(err, "failed to convert yc account config") - } - if stackCfg == nil { - return nil, errors.Errorf("stack config cannot be nil") + accountConfig := &AccountConfig{ + CloudId: templateCfg.AccountConfig.CloudId, + Credentials: templateCfg.AccountConfig.Credentials, } res := &CloudFunctionInput{ diff --git a/pkg/clouds/yandex/yandex.go b/pkg/clouds/yandex/yandex.go index e577cb8c..e97b48c7 100644 --- a/pkg/clouds/yandex/yandex.go +++ b/pkg/clouds/yandex/yandex.go @@ -10,7 +10,7 @@ type TemplateConfig struct { } type AccountConfig struct { - Account string `json:"account" yaml:"account"` + CloudId string `json:"cloudId" yaml:"cloudId"` api.Credentials `json:",inline" yaml:",inline"` } @@ -23,7 +23,7 @@ func (r *AccountConfig) CredentialsValue() string { } func (r *AccountConfig) ProjectIdValue() string { - return r.Account + return r.CloudId } func ReadTemplateConfig(config *api.Config) (api.Config, error) { diff --git a/pkg/provisioner/common_test.go b/pkg/provisioner/common_test.go index 1f4ce2f6..76dc55f7 100644 --- a/pkg/provisioner/common_test.go +++ b/pkg/provisioner/common_test.go @@ -178,6 +178,30 @@ func Test_Provision(t *testing.T) { }, }, }, + { + name: "happy path yandex cloud function", + params: api.ProvisionParams{ + StacksDir: "stacks", + Stacks: []string{ + "common", + "refapp-yandex-cloud-function", + }, + }, + expectStacks: map[string]api.Stack{ + "common": { + Name: "common", + Secrets: *tests.CommonSecretsDescriptor, + Server: *tests.ResolvedCommonServerDescriptor, + Client: api.ClientDescriptor{Stacks: map[string]api.StackClientDescriptor{}}, + }, + "refapp-yandex-cloud-function": { + Name: "func-per-app", + Secrets: *tests.CommonSecretsDescriptor, + Server: *tests.ResolvedRefappYandexCloudFunctionServerDescriptor, + Client: *tests.ResolvedRefappYandexCloudFunctionClientDescriptor(), + }, + }, + }, { name: "pulumi error", params: api.ProvisionParams{ diff --git a/pkg/provisioner/init.go b/pkg/provisioner/init.go index 41e0e02f..698d3b1e 100644 --- a/pkg/provisioner/init.go +++ b/pkg/provisioner/init.go @@ -6,4 +6,5 @@ import ( _ "github.com/simple-container-com/api/pkg/clouds/github" _ "github.com/simple-container-com/api/pkg/clouds/mongodb" _ "github.com/simple-container-com/api/pkg/clouds/pulumi" + _ "github.com/simple-container-com/api/pkg/clouds/yandex" ) diff --git a/pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function b/pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function new file mode 120000 index 00000000..1b079462 --- /dev/null +++ b/pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function @@ -0,0 +1 @@ +../../../api/tests/testdata/stacks/refapp-yandex-cloud-function/ \ No newline at end of file From 6a8509cfc1eb0bd3bc776f239a5099a7cd7ec270 Mon Sep 17 00:00:00 2001 From: Ilia Sadykov Date: Mon, 24 Feb 2025 15:12:30 +0300 Subject: [PATCH 04/11] fix tests --- go.mod | 2 +- go.sum | 9 ++++++--- pkg/api/tests/refapp.go | 10 ++++++++++ pkg/api/tests/refapp_yandex.go | 11 +++++++++-- .../tests/testdata/stacks/common/secrets.yaml | 5 +++++ .../refapp-yandex-cloud-function/client.yaml | 2 +- .../refapp-yandex-cloud-function/server.yaml | 2 +- .../refapp-yc-cloud-function/client.yaml | 19 ------------------- pkg/clouds/pulumi/yandex/cloud_function.go | 12 +++++++----- pkg/clouds/pulumi/yandex/provider.go | 4 +++- pkg/clouds/yandex/cloud_function.go | 1 + pkg/clouds/yandex/init.go | 2 +- pkg/clouds/yandex/yandex.go | 9 +++++++++ 13 files changed, 54 insertions(+), 34 deletions(-) delete mode 100644 pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml diff --git a/go.mod b/go.mod index faf3cf4b..3687d089 100644 --- a/go.mod +++ b/go.mod @@ -34,6 +34,7 @@ require ( github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.18.1 github.com/pulumi/pulumi-mongodbatlas/sdk/v3 v3.26.0 github.com/pulumi/pulumi-random/sdk/v4 v4.17.0 + github.com/pulumi/pulumi-yandex/sdk v0.13.0 github.com/pulumi/pulumi/pkg/v3 v3.143.0 github.com/pulumi/pulumi/sdk/v3 v3.145.0 github.com/samber/lo v1.38.1 @@ -353,7 +354,6 @@ require ( github.com/prometheus/procfs v0.7.3 // indirect github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect github.com/pulumi/esc v0.10.0 // indirect - github.com/pulumi/pulumi-yandex/sdk v0.13.0 // indirect github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 // indirect github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect diff --git a/go.sum b/go.sum index 144fbd8a..79e96467 100644 --- a/go.sum +++ b/go.sum @@ -1110,8 +1110,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= @@ -1119,7 +1117,6 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -1402,6 +1399,7 @@ github.com/pulumi/pulumi-yandex/sdk v0.13.0 h1:mbVliVVCeboy6z8DBP4pAwef3emonA9OO github.com/pulumi/pulumi-yandex/sdk v0.13.0/go.mod h1:AMtNw3EQuTiPdxCgjbUmN0jFo4iXEdPdf5EdY1rP6YU= github.com/pulumi/pulumi/pkg/v3 v3.143.0 h1:diAlaNVZSRc59ePqbMuvuf/AwecpZyjhh1pGvmLEUwg= github.com/pulumi/pulumi/pkg/v3 v3.143.0/go.mod h1:XzjN1uQI2HWXYolT2L4RIXzvLEnWTSOzFgFFIUfFEa8= +github.com/pulumi/pulumi/sdk/v3 v3.23.2/go.mod h1:WHOQB00iuHZyXhwrymxpKXhpOahSguJIpRjVokmM11w= github.com/pulumi/pulumi/sdk/v3 v3.145.0 h1:r5iOgz67RElFXJt4GVVY2SBGh5sR24mL9NOcKBiBi/k= github.com/pulumi/pulumi/sdk/v3 v3.145.0/go.mod h1:5pZySnw3RiQKddx8orThjEFmWsXkGAY3ktKOxZj2Ym4= github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 h1:+Wl/0aFp0hpuHM3H//KMft64WQ1yX9LdJY64Qm/gFCo= @@ -1424,6 +1422,7 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= @@ -1516,6 +1515,7 @@ github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= github.com/spf13/cast v0.0.0-20150508191742-4d07383ffe94/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= @@ -1711,6 +1711,7 @@ go.starlark.net v0.0.0-20231101134539-556fd59b42f6 h1:+eC0F/k4aBLC4szgOcjd7bDTEn go.starlark.net v0.0.0-20231101134539-556fd59b42f6/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= @@ -1974,6 +1975,7 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2063,6 +2065,7 @@ golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDq golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= diff --git a/pkg/api/tests/refapp.go b/pkg/api/tests/refapp.go index 086291e0..24b1df2e 100644 --- a/pkg/api/tests/refapp.go +++ b/pkg/api/tests/refapp.go @@ -11,6 +11,7 @@ import ( "github.com/simple-container-com/api/pkg/clouds/k8s" "github.com/simple-container-com/api/pkg/clouds/mongodb" "github.com/simple-container-com/api/pkg/clouds/pulumi" + "github.com/simple-container-com/api/pkg/clouds/yandex" ) var CommonGcpCredentials = gcloud.Credentials{ @@ -461,6 +462,15 @@ var CommonSecretsDescriptor = &api.SecretsDescriptor{ Kubeconfig: "", }}, }, + "yandex": { + Type: yandex.AuthTypeYandex, + Config: api.Config{Config: &yandex.AccountConfig{ + CloudId: "000", + Credentials: api.Credentials{ + Credentials: "", + }, + }}, + }, }, Values: map[string]string{ "CLOUDFLARE_API_TOKEN": "", diff --git a/pkg/api/tests/refapp_yandex.go b/pkg/api/tests/refapp_yandex.go index 53e903b6..e531e5ab 100644 --- a/pkg/api/tests/refapp_yandex.go +++ b/pkg/api/tests/refapp_yandex.go @@ -83,7 +83,7 @@ var RefappYandexCloudFunctionClientDescriptor = &api.ClientDescriptor{ var resolvedYandexAccountConfig = yandex.AccountConfig{ CloudId: "000", Credentials: api.Credentials{ - Credentials: `{"account":"123","accessKey":"\u003cyandex-access-key\u003e","secretAccessKey":"\u003cyandex-secret-key\u003e","credentials":""}`, + Credentials: ``, }, } @@ -117,7 +117,14 @@ var ResolvedRefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ } func ResolvedRefappYandexCloudFunctionClientDescriptor() *api.ClientDescriptor { - res := RefappClientDescriptor.Copy() + res := RefappYandexCloudFunctionClientDescriptor.Copy() + for name := range res.Stacks { + stackCfg := res.Stacks[name] + singleImage := stackCfg.Config.Config.(*api.StackConfigSingleImage) + singleImage.Uses = []string{} + singleImage.Secrets = map[string]string{} + res.Stacks[name] = stackCfg + } return &res } diff --git a/pkg/api/tests/testdata/stacks/common/secrets.yaml b/pkg/api/tests/testdata/stacks/common/secrets.yaml index cb779e35..07dd1c36 100644 --- a/pkg/api/tests/testdata/stacks/common/secrets.yaml +++ b/pkg/api/tests/testdata/stacks/common/secrets.yaml @@ -21,6 +21,11 @@ auth: type: kubernetes config: kubeconfig: + yandex: + type: yandex + config: + cloudId: '000' + credentials: values: CLOUDFLARE_API_TOKEN: GITHUB_TOKEN: diff --git a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml index e61e63e9..c25432a2 100644 --- a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml +++ b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml @@ -3,7 +3,7 @@ schemaVersion: 1.0 stacks: staging: &staging type: single-image - parent: yandex-server + parent: refapp-yandex-cloud-function config: &config domain: staging.sc-refapp.org image: diff --git a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml index 2f766618..429085e6 100644 --- a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml +++ b/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml @@ -10,7 +10,7 @@ templates: type: yandex-cloud-function config: credentials: "${auth:yandex}" - account: "${auth:yandex.projectId}" + cloudId: "${auth:yandex.projectId}" resources: registrar: inherit: common diff --git a/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml b/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml deleted file mode 100644 index 8ae0c451..00000000 --- a/pkg/api/tests/testdata/stacks/refapp-yc-cloud-function/client.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by sc CLI when initially setting up -schemaVersion: 1.0 -stacks: - staging: &staging - type: single-image - parent: refapp-aws-lambda - config: &config - domain: staging.sc-refapp.org - image: - dockerfile: Dockerfile - env: - ENV: staging - prod: - <<: *staging - config: - <<: *config - domain: prod.sc-refapp.org - env: - ENV: prod diff --git a/pkg/clouds/pulumi/yandex/cloud_function.go b/pkg/clouds/pulumi/yandex/cloud_function.go index fd42ebd0..fab9cf09 100755 --- a/pkg/clouds/pulumi/yandex/cloud_function.go +++ b/pkg/clouds/pulumi/yandex/cloud_function.go @@ -2,16 +2,19 @@ package yandex import ( "fmt" + "path/filepath" + "github.com/pkg/errors" + "github.com/samber/lo" + pDocker "github.com/pulumi/pulumi-docker/sdk/v4/go/docker" pYandex "github.com/pulumi/pulumi-yandex/sdk/go/yandex" sdk "github.com/pulumi/pulumi/sdk/v3/go/pulumi" - "github.com/samber/lo" + "github.com/simple-container-com/api/pkg/api" pApi "github.com/simple-container-com/api/pkg/clouds/pulumi/api" "github.com/simple-container-com/api/pkg/clouds/pulumi/docker" "github.com/simple-container-com/api/pkg/clouds/yandex" - "path/filepath" ) type CloudFunctionOutput struct { @@ -57,7 +60,7 @@ func CloudFunction(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, p authorizedKey, err := FromString(crInput.CredentialsValue()) if err != nil { - return nil, errors.Wrapf(err, "invalid credentials value %q", crInput.CredentialsValue()) //TODO: secret logging should be removed + return nil, errors.Wrapf(err, "invalid credentials value %q", crInput.CredentialsValue()) // TODO: secret logging should be removed } serviceAccountId := sdk.String(authorizedKey.ServiceAccountId) @@ -88,7 +91,7 @@ func CloudFunction(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, p Registry: pDocker.RegistryArgs{ Server: repoUrlOutput, Username: sdk.String("iam"), - Password: sdk.String(""), //TODO: get IAM token + Password: sdk.String(""), // TODO: get IAM token }, Platform: nil, // sdk.String(lo.If(params.Platform != nil, lo.FromPtr(image.Platform)).Else(string(api.ImagePlatformLinuxAmd64))), } @@ -115,7 +118,6 @@ func CloudFunction(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, p Name: sdk.String("serverless-container"), ServiceAccountId: serviceAccountId, }, sdk.Provider(params.Provider)) - if err != nil { return nil, errors.Errorf("unable to create serverless container: %v", err) } diff --git a/pkg/clouds/pulumi/yandex/provider.go b/pkg/clouds/pulumi/yandex/provider.go index f27f74ed..16541b5a 100755 --- a/pkg/clouds/pulumi/yandex/provider.go +++ b/pkg/clouds/pulumi/yandex/provider.go @@ -2,9 +2,12 @@ package yandex import ( "context" + "github.com/pkg/errors" + pYandex "github.com/pulumi/pulumi-yandex/sdk/go/yandex" sdk "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/simple-container-com/api/pkg/api" "github.com/simple-container-com/api/pkg/api/logger" pApi "github.com/simple-container-com/api/pkg/clouds/pulumi/api" @@ -38,5 +41,4 @@ func Provider(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, params return &api.ResourceOutput{ Ref: provider, }, err - } diff --git a/pkg/clouds/yandex/cloud_function.go b/pkg/clouds/yandex/cloud_function.go index 778be5ad..86af00e9 100644 --- a/pkg/clouds/yandex/cloud_function.go +++ b/pkg/clouds/yandex/cloud_function.go @@ -2,6 +2,7 @@ package yandex import ( "github.com/pkg/errors" + "github.com/simple-container-com/api/pkg/api" ) diff --git a/pkg/clouds/yandex/init.go b/pkg/clouds/yandex/init.go index b4b473b9..3f43ceb0 100644 --- a/pkg/clouds/yandex/init.go +++ b/pkg/clouds/yandex/init.go @@ -9,10 +9,10 @@ const ProviderType = "yandex-cloud" func init() { api.RegisterProviderConfig(api.ConfigRegisterMap{ TemplateTypeYandexCloudFunction: ReadTemplateConfig, + AuthTypeYandex: ReadYandexAuthConfig, }) api.RegisterCloudSingleImageConverter(api.CloudSingleImageConfigRegister{ TemplateTypeYandexCloudFunction: ToCloudFunctionConfig, }) - } diff --git a/pkg/clouds/yandex/yandex.go b/pkg/clouds/yandex/yandex.go index e97b48c7..877635f2 100644 --- a/pkg/clouds/yandex/yandex.go +++ b/pkg/clouds/yandex/yandex.go @@ -2,9 +2,14 @@ package yandex import ( "github.com/samber/lo" + "github.com/simple-container-com/api/pkg/api" ) +const ( + AuthTypeYandex = "yandex" +) + type TemplateConfig struct { AccountConfig `json:",inline" yaml:",inline"` } @@ -29,3 +34,7 @@ func (r *AccountConfig) ProjectIdValue() string { func ReadTemplateConfig(config *api.Config) (api.Config, error) { return api.ConvertConfig(config, &TemplateConfig{}) } + +func ReadYandexAuthConfig(config *api.Config) (api.Config, error) { + return api.ConvertConfig(config, &AccountConfig{}) +} From 406d5639b9a998f391050c7aa3b5a99038f1a6d6 Mon Sep 17 00:00:00 2001 From: Ilia Sadykov Date: Tue, 25 Feb 2025 15:50:08 +0300 Subject: [PATCH 05/11] rename yandex-cloud-function to yandex-serverless-container --- pkg/api/tests/refapp_test.go | 8 ++++---- pkg/api/tests/refapp_yandex.go | 18 +++++++++--------- .../client.yaml | 2 +- .../server.yaml | 2 +- pkg/clouds/pulumi/cancel.go | 15 +++++++++++---- pkg/clouds/pulumi/yandex/init.go | 2 +- ...oud_function.go => serverless_container.go} | 12 ++++++------ pkg/clouds/yandex/init.go | 6 +++--- ...oud_function.go => serverless_container.go} | 8 ++++---- pkg/provisioner/common_test.go | 8 ++++---- .../stacks/refapp-yandex-cloud-function | 1 - .../stacks/refapp-yandex-serverless-container | 1 + 12 files changed, 45 insertions(+), 38 deletions(-) rename pkg/api/tests/testdata/stacks/{refapp-yandex-cloud-function => refapp-yandex-serverless-container}/client.yaml (88%) rename pkg/api/tests/testdata/stacks/{refapp-yandex-cloud-function => refapp-yandex-serverless-container}/server.yaml (91%) rename pkg/clouds/pulumi/yandex/{cloud_function.go => serverless_container.go} (90%) rename pkg/clouds/yandex/{cloud_function.go => serverless_container.go} (74%) delete mode 120000 pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function create mode 120000 pkg/provisioner/testdata/stacks/refapp-yandex-serverless-container diff --git a/pkg/api/tests/refapp_test.go b/pkg/api/tests/refapp_test.go index 03004857..48086cec 100644 --- a/pkg/api/tests/refapp_test.go +++ b/pkg/api/tests/refapp_test.go @@ -43,8 +43,8 @@ func TestReadServerDescriptor(t *testing.T) { want: RefappKubernetesServerDescriptor, }, { - path: "testdata/stacks/refapp-yandex-cloud-function/server.yaml", - want: RefappYandexCloudFunctionServerDescriptor, + path: "testdata/stacks/refapp-yandex-serverless-container/server.yaml", + want: RefappYandexServerlessContainerServerDescriptor, }, } for _, tt := range tests { @@ -111,8 +111,8 @@ func TestReadClientDescriptor(t *testing.T) { want: RefappGkeAutopilotClientDescriptor, }, { - path: "testdata/stacks/refapp-yandex-cloud-function/client.yaml", - want: RefappYandexCloudFunctionClientDescriptor, + path: "testdata/stacks/refapp-yandex-serverless-container/client.yaml", + want: RefappYandexServerlessContainerClientDescriptor, }, } for _, tt := range tests { diff --git a/pkg/api/tests/refapp_yandex.go b/pkg/api/tests/refapp_yandex.go index e531e5ab..8afc18d8 100644 --- a/pkg/api/tests/refapp_yandex.go +++ b/pkg/api/tests/refapp_yandex.go @@ -5,7 +5,7 @@ import ( "github.com/simple-container-com/api/pkg/clouds/yandex" ) -var RefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ +var RefappYandexServerlessContainerServerDescriptor = &api.ServerDescriptor{ SchemaVersion: api.ServerSchemaVersion, Provisioner: api.ProvisionerDescriptor{ Inherit: api.Inherit{Inherit: "common"}, @@ -18,7 +18,7 @@ var RefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ }, Templates: map[string]api.StackDescriptor{ "func-per-app": { - Type: yandex.TemplateTypeYandexCloudFunction, + Type: yandex.TemplateTypeYandexServerlessContainer, Config: api.Config{Config: &yandex.TemplateConfig{ AccountConfig: yandex.AccountConfig{ CloudId: "${auth:yandex.projectId}", @@ -44,12 +44,12 @@ var RefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ }, } -var RefappYandexCloudFunctionClientDescriptor = &api.ClientDescriptor{ +var RefappYandexServerlessContainerClientDescriptor = &api.ClientDescriptor{ SchemaVersion: api.ClientSchemaVersion, Stacks: map[string]api.StackClientDescriptor{ "staging": { Type: api.ClientTypeSingleImage, - ParentStack: "refapp-yandex-cloud-function", + ParentStack: "refapp-yandex-serverless-container", Config: api.Config{ Config: &api.StackConfigSingleImage{ Domain: "staging.sc-refapp.org", @@ -64,7 +64,7 @@ var RefappYandexCloudFunctionClientDescriptor = &api.ClientDescriptor{ }, "prod": { Type: api.ClientTypeSingleImage, - ParentStack: "refapp-yandex-cloud-function", + ParentStack: "refapp-yandex-serverless-container", Config: api.Config{ Config: &api.StackConfigSingleImage{ Domain: "prod.sc-refapp.org", @@ -87,14 +87,14 @@ var resolvedYandexAccountConfig = yandex.AccountConfig{ }, } -var ResolvedRefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ +var ResolvedRefappYandexServerlessContainerServerDescriptor = &api.ServerDescriptor{ SchemaVersion: api.ServerSchemaVersion, Provisioner: ResolvedCommonServerDescriptor.Provisioner, Secrets: ResolvedCommonServerDescriptor.Secrets, CiCd: ResolvedCommonServerDescriptor.CiCd, Templates: map[string]api.StackDescriptor{ "func-per-app": { - Type: yandex.TemplateTypeYandexCloudFunction, + Type: yandex.TemplateTypeYandexServerlessContainer, Config: api.Config{Config: &yandex.TemplateConfig{ AccountConfig: resolvedYandexAccountConfig, }}, @@ -116,8 +116,8 @@ var ResolvedRefappYandexCloudFunctionServerDescriptor = &api.ServerDescriptor{ }, } -func ResolvedRefappYandexCloudFunctionClientDescriptor() *api.ClientDescriptor { - res := RefappYandexCloudFunctionClientDescriptor.Copy() +func ResolvedRefappYandexServerlessContainerClientDescriptor() *api.ClientDescriptor { + res := RefappYandexServerlessContainerClientDescriptor.Copy() for name := range res.Stacks { stackCfg := res.Stacks[name] singleImage := stackCfg.Config.Config.(*api.StackConfigSingleImage) diff --git a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml b/pkg/api/tests/testdata/stacks/refapp-yandex-serverless-container/client.yaml similarity index 88% rename from pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml rename to pkg/api/tests/testdata/stacks/refapp-yandex-serverless-container/client.yaml index c25432a2..7d642020 100644 --- a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/client.yaml +++ b/pkg/api/tests/testdata/stacks/refapp-yandex-serverless-container/client.yaml @@ -3,7 +3,7 @@ schemaVersion: 1.0 stacks: staging: &staging type: single-image - parent: refapp-yandex-cloud-function + parent: refapp-yandex-serverless-container config: &config domain: staging.sc-refapp.org image: diff --git a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml b/pkg/api/tests/testdata/stacks/refapp-yandex-serverless-container/server.yaml similarity index 91% rename from pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml rename to pkg/api/tests/testdata/stacks/refapp-yandex-serverless-container/server.yaml index 429085e6..4b630adf 100644 --- a/pkg/api/tests/testdata/stacks/refapp-yandex-cloud-function/server.yaml +++ b/pkg/api/tests/testdata/stacks/refapp-yandex-serverless-container/server.yaml @@ -7,7 +7,7 @@ cicd: inherit: common templates: func-per-app: - type: yandex-cloud-function + type: yandex-serverless-container config: credentials: "${auth:yandex}" cloudId: "${auth:yandex.projectId}" diff --git a/pkg/clouds/pulumi/cancel.go b/pkg/clouds/pulumi/cancel.go index 243b5fd2..8ccdab2e 100644 --- a/pkg/clouds/pulumi/cancel.go +++ b/pkg/clouds/pulumi/cancel.go @@ -4,6 +4,7 @@ import ( "context" "github.com/pulumi/pulumi/sdk/v3/go/auto" + sdk "github.com/pulumi/pulumi/sdk/v3/go/pulumi" "github.com/simple-container-com/api/pkg/api" "github.com/simple-container-com/api/pkg/api/logger/color" @@ -17,15 +18,21 @@ func (p *pulumi) CancelStack(ctx context.Context, cfg *api.ConfigFile, stack api if err != nil { return err } - return p.cancelStack(ctx, cfg) + return p.cancelStack(ctx, cfg, stack, params) } -func (p *pulumi) cancelStack(ctx context.Context, cfg *api.ConfigFile) error { +func (p *pulumi) cancelStack(ctx context.Context, cfg *api.ConfigFile, stack api.Stack, params api.StackParams) error { s, err := p.validateStateAndGetStack(ctx) if err != nil { return err } - stackSource, err := p.prepareStackForOperations(ctx, s.Ref(), cfg, nil) + var program func(ctx *sdk.Context) error + if params.Environment != "" && params.StackName != "" { + program = p.deployStackProgram(stack, params, stack.Name, s.Ref().FullyQualifiedName().String()) + } else { + program = p.provisionProgram(stack, cfg) + } + stackSource, err := p.prepareStackForOperations(ctx, s.Ref(), cfg, program) if err != nil { return err } @@ -38,7 +45,7 @@ func (p *pulumi) cancelStack(ctx context.Context, cfg *api.ConfigFile) error { if p.secretsStackRef != nil { defer p.withPulumiPassphrase(ctx)() - ssSource, err := auto.UpsertStackInlineSource(ctx, p.secretsStackRef.FullyQualifiedName().String(), cfg.ProjectName, nil) + ssSource, err := auto.UpsertStackInlineSource(ctx, p.secretsStackRef.FullyQualifiedName().String(), cfg.ProjectName, p.provisionProgram(stack, cfg)) if err != nil { return err } diff --git a/pkg/clouds/pulumi/yandex/init.go b/pkg/clouds/pulumi/yandex/init.go index 25c2ebae..191fb5e8 100755 --- a/pkg/clouds/pulumi/yandex/init.go +++ b/pkg/clouds/pulumi/yandex/init.go @@ -7,7 +7,7 @@ import ( func init() { api.RegisterResources(map[string]api.ProvisionFunc{ - yandex.TemplateTypeYandexCloudFunction: CloudFunction, + yandex.TemplateTypeYandexServerlessContainer: ServerlessContainer, }) api.RegisterProvider(yandex.ProviderType, Provider) } diff --git a/pkg/clouds/pulumi/yandex/cloud_function.go b/pkg/clouds/pulumi/yandex/serverless_container.go similarity index 90% rename from pkg/clouds/pulumi/yandex/cloud_function.go rename to pkg/clouds/pulumi/yandex/serverless_container.go index fab9cf09..6d29a35a 100755 --- a/pkg/clouds/pulumi/yandex/cloud_function.go +++ b/pkg/clouds/pulumi/yandex/serverless_container.go @@ -17,12 +17,12 @@ import ( "github.com/simple-container-com/api/pkg/clouds/yandex" ) -type CloudFunctionOutput struct { +type ServerlessContainerOutput struct { sdk.Output } -func CloudFunction(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, params pApi.ProvisionParams) (*api.ResourceOutput, error) { - if input.Descriptor.Type != yandex.TemplateTypeYandexCloudFunction { +func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, params pApi.ProvisionParams) (*api.ResourceOutput, error) { + if input.Descriptor.Type != yandex.TemplateTypeYandexServerlessContainer { return nil, errors.Errorf("unsupported template type %q", input.Descriptor.Type) } if input.StackParams == nil { @@ -31,16 +31,16 @@ func CloudFunction(ctx *sdk.Context, stack api.Stack, input api.ResourceInput, p deployParams := *input.StackParams - folderName := fmt.Sprintf("%s-%s2", input.StackParams.StackName, input.StackParams.Environment) + folderName := fmt.Sprintf("%s-%s", input.StackParams.StackName, input.StackParams.Environment) folder, err := pYandex.NewResourcemanagerFolder(ctx, folderName, &pYandex.ResourcemanagerFolderArgs{Name: sdk.String(folderName)}, sdk.Provider(params.Provider)) if err != nil { return nil, errors.Errorf("unable to create folder: %v", err) } - ref := &CloudFunctionOutput{} + ref := &ServerlessContainerOutput{} output := &api.ResourceOutput{Ref: ref} - crInput, ok := input.Descriptor.Config.Config.(*yandex.CloudFunctionInput) + crInput, ok := input.Descriptor.Config.Config.(*yandex.ServerlessContainerInput) if !ok { return output, errors.Errorf("failed to convert yandex-cloud config for %q in stack %q in %q", input.Descriptor.Type, stack.Name, deployParams.Environment) } diff --git a/pkg/clouds/yandex/init.go b/pkg/clouds/yandex/init.go index 3f43ceb0..0396175d 100644 --- a/pkg/clouds/yandex/init.go +++ b/pkg/clouds/yandex/init.go @@ -8,11 +8,11 @@ const ProviderType = "yandex-cloud" func init() { api.RegisterProviderConfig(api.ConfigRegisterMap{ - TemplateTypeYandexCloudFunction: ReadTemplateConfig, - AuthTypeYandex: ReadYandexAuthConfig, + TemplateTypeYandexServerlessContainer: ReadTemplateConfig, + AuthTypeYandex: ReadYandexAuthConfig, }) api.RegisterCloudSingleImageConverter(api.CloudSingleImageConfigRegister{ - TemplateTypeYandexCloudFunction: ToCloudFunctionConfig, + TemplateTypeYandexServerlessContainer: ToServerlessContainerConfig, }) } diff --git a/pkg/clouds/yandex/cloud_function.go b/pkg/clouds/yandex/serverless_container.go similarity index 74% rename from pkg/clouds/yandex/cloud_function.go rename to pkg/clouds/yandex/serverless_container.go index 86af00e9..1444bb05 100644 --- a/pkg/clouds/yandex/cloud_function.go +++ b/pkg/clouds/yandex/serverless_container.go @@ -7,15 +7,15 @@ import ( ) const ( - TemplateTypeYandexCloudFunction = "yandex-cloud-function" + TemplateTypeYandexServerlessContainer = "yandex-serverless-container" ) -type CloudFunctionInput struct { +type ServerlessContainerInput struct { AccountConfig `json:",inline" yaml:",inline"` StackConfig api.StackConfigSingleImage `json:"stackConfig" yaml:"stackConfig"` } -func ToCloudFunctionConfig(tpl any, stackCfg *api.StackConfigSingleImage) (any, error) { +func ToServerlessContainerConfig(tpl any, stackCfg *api.StackConfigSingleImage) (any, error) { templateCfg, ok := tpl.(*TemplateConfig) if !ok { return nil, errors.Errorf("template config is not of type yandex.TemplateConfig") @@ -30,7 +30,7 @@ func ToCloudFunctionConfig(tpl any, stackCfg *api.StackConfigSingleImage) (any, Credentials: templateCfg.AccountConfig.Credentials, } - res := &CloudFunctionInput{ + res := &ServerlessContainerInput{ AccountConfig: *accountConfig, StackConfig: *stackCfg, } diff --git a/pkg/provisioner/common_test.go b/pkg/provisioner/common_test.go index 76dc55f7..03bbab6b 100644 --- a/pkg/provisioner/common_test.go +++ b/pkg/provisioner/common_test.go @@ -184,7 +184,7 @@ func Test_Provision(t *testing.T) { StacksDir: "stacks", Stacks: []string{ "common", - "refapp-yandex-cloud-function", + "refapp-yandex-serverless-container", }, }, expectStacks: map[string]api.Stack{ @@ -194,11 +194,11 @@ func Test_Provision(t *testing.T) { Server: *tests.ResolvedCommonServerDescriptor, Client: api.ClientDescriptor{Stacks: map[string]api.StackClientDescriptor{}}, }, - "refapp-yandex-cloud-function": { + "refapp-yandex-serverless-container": { Name: "func-per-app", Secrets: *tests.CommonSecretsDescriptor, - Server: *tests.ResolvedRefappYandexCloudFunctionServerDescriptor, - Client: *tests.ResolvedRefappYandexCloudFunctionClientDescriptor(), + Server: *tests.ResolvedRefappYandexServerlessContainerServerDescriptor, + Client: *tests.ResolvedRefappYandexServerlessContainerClientDescriptor(), }, }, }, diff --git a/pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function b/pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function deleted file mode 120000 index 1b079462..00000000 --- a/pkg/provisioner/testdata/stacks/refapp-yandex-cloud-function +++ /dev/null @@ -1 +0,0 @@ -../../../api/tests/testdata/stacks/refapp-yandex-cloud-function/ \ No newline at end of file diff --git a/pkg/provisioner/testdata/stacks/refapp-yandex-serverless-container b/pkg/provisioner/testdata/stacks/refapp-yandex-serverless-container new file mode 120000 index 00000000..3a097681 --- /dev/null +++ b/pkg/provisioner/testdata/stacks/refapp-yandex-serverless-container @@ -0,0 +1 @@ +../../../api/tests/testdata/stacks/refapp-yandex-serverless-container/ \ No newline at end of file From a2760fa32c7c1d81a5e9d2e4df71695a5bdbb2d4 Mon Sep 17 00:00:00 2001 From: Ilia Sadykov Date: Wed, 26 Feb 2025 17:12:05 +0300 Subject: [PATCH 06/11] minor fixes --- pkg/clouds/pulumi/yandex/serverless_container.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/clouds/pulumi/yandex/serverless_container.go b/pkg/clouds/pulumi/yandex/serverless_container.go index 6d29a35a..fdc8b743 100755 --- a/pkg/clouds/pulumi/yandex/serverless_container.go +++ b/pkg/clouds/pulumi/yandex/serverless_container.go @@ -64,11 +64,11 @@ func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceIn } serviceAccountId := sdk.String(authorizedKey.ServiceAccountId) - _, err = pYandex.NewIamServiceAccountKey(ctx, "iam-key", &pYandex.IamServiceAccountKeyArgs{ServiceAccountId: serviceAccountId, Description: sdk.String("pulumi created IAM")}, sdk.Provider(params.Provider)) + serviceAccountKeyName := fmt.Sprintf("%s-iam-key", repoName) + saKey, err := pYandex.NewIamServiceAccountKey(ctx, serviceAccountKeyName, &pYandex.IamServiceAccountKeyArgs{ServiceAccountId: serviceAccountId, Description: sdk.String("pulumi created IAM")}, sdk.Provider(params.Provider)) if err != nil { return nil, errors.Errorf("unable to create IAM service account key: %v", err) } - dockerfile := stackConfig.Image.Dockerfile if !filepath.IsAbs(dockerfile) { dockerfile = filepath.Join(input.StackParams.StacksDir, input.StackParams.StackName, stackConfig.Image.Dockerfile) @@ -91,9 +91,8 @@ func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceIn Registry: pDocker.RegistryArgs{ Server: repoUrlOutput, Username: sdk.String("iam"), - Password: sdk.String(""), // TODO: get IAM token + Password: saKey.PrivateKey, // TODO: get IAM token https://yandex.cloud/en/docs/iam/operations/iam-token/create-for-sa#go_1 }, - Platform: nil, // sdk.String(lo.If(params.Platform != nil, lo.FromPtr(image.Platform)).Else(string(api.ImagePlatformLinuxAmd64))), } // Build a Docker image _, err = docker.BuildAndPushImage(ctx, stack, params, deployParams, dockerImage) @@ -108,14 +107,15 @@ func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceIn timeout := lo.If(stackConfig.Timeout != nil, lo.FromPtr(stackConfig.Timeout)).Else(10) strTimeout := fmt.Sprintf("%ds", timeout) - _, err = pYandex.NewServerlessContainer(ctx, "serverless-container", &pYandex.ServerlessContainerArgs{ + serverlessContainerName := fmt.Sprintf("%s-serverless-container", folderName) + _, err = pYandex.NewServerlessContainer(ctx, serverlessContainerName, &pYandex.ServerlessContainerArgs{ ExecutionTimeout: sdk.StringPtrFromPtr(&strTimeout), FolderId: folder.ID(), Image: &pYandex.ServerlessContainerImageArgs{ Url: imageNameOutput, }, Memory: sdk.Int(lo.If(stackConfig.MaxMemory == nil, 128).Else(lo.FromPtr(stackConfig.MaxMemory))), - Name: sdk.String("serverless-container"), + Name: sdk.String(serverlessContainerName), ServiceAccountId: serviceAccountId, }, sdk.Provider(params.Provider)) if err != nil { From 1b2b5de7665978005a47865d374b7431e572ac98 Mon Sep 17 00:00:00 2001 From: Ilia Sadykov Date: Wed, 26 Feb 2025 19:13:29 +0300 Subject: [PATCH 07/11] Change runner branch --- .github/workflows/branch.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/branch.yaml b/.github/workflows/branch.yaml index 9695e359..77df57c5 100644 --- a/.github/workflows/branch.yaml +++ b/.github/workflows/branch.yaml @@ -11,7 +11,7 @@ permissions: jobs: build: name: Build simple-container in branch - runs-on: self-hosted + runs-on: blacksmith-8vcpu-ubuntu-2204 outputs: cicd-bot-telegram-token: ${{ steps.prepare-secrets.outputs.cicd-bot-telegram-token }} cicd-bot-telegram-chat-id: ${{ steps.prepare-secrets.outputs.cicd-bot-telegram-chat-id }} @@ -42,7 +42,7 @@ jobs: finalize: name: Finalize build in branch - runs-on: self-hosted + runs-on: blacksmith-2vcpu-ubuntu-2204 if: ${{ always() }} permissions: contents: write From d1537dfb6b547acc883feb05f119b93d36d15acd Mon Sep 17 00:00:00 2001 From: drypa Date: Sun, 2 Mar 2025 16:02:07 +0300 Subject: [PATCH 08/11] IAM token request implemented --- go.mod | 2 +- pkg/clouds/pulumi/yandex/authorized_key.go | 83 ++++++++++++++++++- .../pulumi/yandex/serverless_container.go | 18 ++-- 3 files changed, 91 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 3687d089..8e15fcfd 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/go-delve/delve v1.24.0 github.com/go-git/go-billy/v5 v5.5.0 github.com/go-git/go-git/v5 v5.12.0 + github.com/golang-jwt/jwt/v5 v5.2.1 github.com/golangci/golangci-lint v1.64.5 github.com/mitchellh/go-homedir v1.1.0 github.com/onsi/gomega v1.36.2 @@ -215,7 +216,6 @@ require ( github.com/gofrs/flock v0.12.1 // indirect github.com/gofrs/uuid v4.2.0+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/golang/glog v1.2.3 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect diff --git a/pkg/clouds/pulumi/yandex/authorized_key.go b/pkg/clouds/pulumi/yandex/authorized_key.go index ec7f8a7e..a6502ce5 100644 --- a/pkg/clouds/pulumi/yandex/authorized_key.go +++ b/pkg/clouds/pulumi/yandex/authorized_key.go @@ -1,7 +1,14 @@ package yandex import ( + "crypto/rsa" "encoding/json" + "fmt" + "github.com/golang-jwt/jwt/v5" + "github.com/pkg/errors" + "io" + "net/http" + "strings" "time" ) @@ -12,10 +19,82 @@ type AuthorizedKey struct { KeyAlgorithm string `json:"key_algorithm"` PublicKey string `json:"public_key"` PrivateKey string `json:"private_key"` + asString string `json:"-"` } -func FromString(auth string) (AuthorizedKey, error) { +func NewAuthorizedKey(auth string) (*AuthorizedKey, error) { result := &AuthorizedKey{} err := json.Unmarshal([]byte(auth), result) - return *result, err + if err != nil { + return nil, errors.Wrap(err, "unmarshal") + } + result.asString = auth + return result, err +} + +type keyFileStruct struct { + PrivateKey string `json:"private_key"` +} + +func (a *AuthorizedKey) GetIAMToken() (string, error) { + signed, err := signedToken(a.asString, a.ServiceAccountId, a.Id) + if err != nil { + return "", errors.Wrapf(err, "failed to create token to sign") + } + resp, err := http.Post( + "https://iam.api.cloud.yandex.net/iam/v1/tokens", + "application/json", + strings.NewReader(fmt.Sprintf(`{"jwt":"%s"}`, signed)), + ) + if err != nil { + return "", errors.Wrapf(err, "unable to sign JWT token") + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(resp.Body) + return "", errors.Errorf("unable to sign JWT token, received status code: %d, body: %s", resp.StatusCode, body) + } + var data struct { + IAMToken string `json:"iamToken"` + } + err = json.NewDecoder(resp.Body).Decode(&data) + if err != nil { + return "", errors.Wrapf(err, "unable to decode JWT token") + } + return data.IAMToken, nil +} + +func signedToken(authorizedKey string, serviceAccountID string, publicKeyIdentifier string) (string, error) { + claims := jwt.RegisteredClaims{ + Issuer: serviceAccountID, + ExpiresAt: jwt.NewNumericDate(time.Now().UTC().Add(1 * time.Hour)), + IssuedAt: jwt.NewNumericDate(time.Now().UTC()), + NotBefore: jwt.NewNumericDate(time.Now().UTC()), + Audience: []string{"https://iam.api.cloud.yandex.net/iam/v1/tokens"}, + } + token := jwt.NewWithClaims(jwt.SigningMethodPS256, claims) + token.Header["kid"] = publicKeyIdentifier + + privateKey, err := loadPrivateKey(authorizedKey) + if err != nil { + return "", errors.Wrapf(err, "Failed to load private key") + } + signed, err := token.SignedString(privateKey) + if err != nil { + return "", errors.Wrapf(err, "Failed to sign token") + } + return signed, nil +} + +func loadPrivateKey(authorizedKey string) (*rsa.PrivateKey, error) { + var keyData keyFileStruct + if err := json.Unmarshal([]byte(authorizedKey), &keyData); err != nil { + return nil, errors.Wrapf(err, "unable to decode JWT token") + } + + rsaPrivateKey, err := jwt.ParseRSAPrivateKeyFromPEM([]byte(keyData.PrivateKey)) + if err != nil { + return nil, errors.Wrapf(err, "unable to parse jwt token private key") + } + return rsaPrivateKey, err } diff --git a/pkg/clouds/pulumi/yandex/serverless_container.go b/pkg/clouds/pulumi/yandex/serverless_container.go index fdc8b743..2b386cff 100755 --- a/pkg/clouds/pulumi/yandex/serverless_container.go +++ b/pkg/clouds/pulumi/yandex/serverless_container.go @@ -2,10 +2,9 @@ package yandex import ( "fmt" - "path/filepath" - "github.com/pkg/errors" "github.com/samber/lo" + "path/filepath" pDocker "github.com/pulumi/pulumi-docker/sdk/v4/go/docker" pYandex "github.com/pulumi/pulumi-yandex/sdk/go/yandex" @@ -58,22 +57,23 @@ func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceIn stackConfig := crInput.StackConfig - authorizedKey, err := FromString(crInput.CredentialsValue()) + authorizedKey, err := NewAuthorizedKey(crInput.CredentialsValue()) if err != nil { return nil, errors.Wrapf(err, "invalid credentials value %q", crInput.CredentialsValue()) // TODO: secret logging should be removed } serviceAccountId := sdk.String(authorizedKey.ServiceAccountId) - serviceAccountKeyName := fmt.Sprintf("%s-iam-key", repoName) - saKey, err := pYandex.NewIamServiceAccountKey(ctx, serviceAccountKeyName, &pYandex.IamServiceAccountKeyArgs{ServiceAccountId: serviceAccountId, Description: sdk.String("pulumi created IAM")}, sdk.Provider(params.Provider)) - if err != nil { - return nil, errors.Errorf("unable to create IAM service account key: %v", err) - } + dockerfile := stackConfig.Image.Dockerfile if !filepath.IsAbs(dockerfile) { dockerfile = filepath.Join(input.StackParams.StacksDir, input.StackParams.StackName, stackConfig.Image.Dockerfile) } + iamToken, err := authorizedKey.GetIAMToken() + if err != nil { + return nil, errors.Errorf("unable to get IAM token: %v", err) + } + repoUrlOutput := registry.ID().ApplyT(func(id string) string { repoUrl := fmt.Sprintf("cr.yandex/%s", id) return repoUrl @@ -91,7 +91,7 @@ func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceIn Registry: pDocker.RegistryArgs{ Server: repoUrlOutput, Username: sdk.String("iam"), - Password: saKey.PrivateKey, // TODO: get IAM token https://yandex.cloud/en/docs/iam/operations/iam-token/create-for-sa#go_1 + Password: sdk.String(iamToken), }, } // Build a Docker image From fd9432705b64db4f75ec33e77eb03707b205c4e7 Mon Sep 17 00:00:00 2001 From: drypa Date: Sun, 2 Mar 2025 19:10:06 +0300 Subject: [PATCH 09/11] cleanup --- go.mod | 2 +- go.sum | 4 ++-- pkg/clouds/pulumi/yandex/authorized_key.go | 5 +++-- pkg/clouds/pulumi/yandex/serverless_container.go | 3 ++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 8e15fcfd..cee82785 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/spf13/afero v1.12.0 github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.10.0 - github.com/vektra/mockery/v2 v2.52.2 + github.com/vektra/mockery/v2 v2.52.4 go.uber.org/atomic v1.11.0 golang.org/x/crypto v0.33.0 golang.org/x/oauth2 v0.25.0 diff --git a/go.sum b/go.sum index 79e96467..7956b0d6 100644 --- a/go.sum +++ b/go.sum @@ -1623,8 +1623,8 @@ github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQ github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= -github.com/vektra/mockery/v2 v2.52.2 h1:8QfPKUIrq8P3Cs7G79Iu4Byd5wdhGCE0quIS27x7rQo= -github.com/vektra/mockery/v2 v2.52.2/go.mod h1:zGDY/f6bip0Yh13GQ5j7xa43fuEoYBa4ICHEaihisHw= +github.com/vektra/mockery/v2 v2.52.4 h1:r8gwPPKXHrqkv+7EX6g9ACAbI8RyPvg4ADDik9N4RJA= +github.com/vektra/mockery/v2 v2.52.4/go.mod h1:zGDY/f6bip0Yh13GQ5j7xa43fuEoYBa4ICHEaihisHw= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= diff --git a/pkg/clouds/pulumi/yandex/authorized_key.go b/pkg/clouds/pulumi/yandex/authorized_key.go index a6502ce5..f2111128 100644 --- a/pkg/clouds/pulumi/yandex/authorized_key.go +++ b/pkg/clouds/pulumi/yandex/authorized_key.go @@ -4,12 +4,13 @@ import ( "crypto/rsa" "encoding/json" "fmt" - "github.com/golang-jwt/jwt/v5" - "github.com/pkg/errors" "io" "net/http" "strings" "time" + + "github.com/golang-jwt/jwt/v5" + "github.com/pkg/errors" ) type AuthorizedKey struct { diff --git a/pkg/clouds/pulumi/yandex/serverless_container.go b/pkg/clouds/pulumi/yandex/serverless_container.go index 2b386cff..9eab5f72 100755 --- a/pkg/clouds/pulumi/yandex/serverless_container.go +++ b/pkg/clouds/pulumi/yandex/serverless_container.go @@ -2,9 +2,10 @@ package yandex import ( "fmt" + "path/filepath" + "github.com/pkg/errors" "github.com/samber/lo" - "path/filepath" pDocker "github.com/pulumi/pulumi-docker/sdk/v4/go/docker" pYandex "github.com/pulumi/pulumi-yandex/sdk/go/yandex" From 656de04e2d7d1700e5d7ac00becd934bb0705c9f Mon Sep 17 00:00:00 2001 From: drypa Date: Wed, 5 Mar 2025 12:42:57 +0300 Subject: [PATCH 10/11] serverless container create step is associated with image build --- pkg/clouds/pulumi/yandex/serverless_container.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/pkg/clouds/pulumi/yandex/serverless_container.go b/pkg/clouds/pulumi/yandex/serverless_container.go index 9eab5f72..9e43d4ac 100755 --- a/pkg/clouds/pulumi/yandex/serverless_container.go +++ b/pkg/clouds/pulumi/yandex/serverless_container.go @@ -96,16 +96,11 @@ func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceIn }, } // Build a Docker image - _, err = docker.BuildAndPushImage(ctx, stack, params, deployParams, dockerImage) + imageOut, err := docker.BuildAndPushImage(ctx, stack, params, deployParams, dockerImage) if err != nil { return nil, errors.Errorf("unable to build and push image: %v", err) } - imageNameOutput := registry.ID().ApplyT(func(id string) string { - repoUrl := fmt.Sprintf("cr.yandex/%s:%s", id, dockerImage.Version) - return repoUrl - }).(sdk.StringOutput) - timeout := lo.If(stackConfig.Timeout != nil, lo.FromPtr(stackConfig.Timeout)).Else(10) strTimeout := fmt.Sprintf("%ds", timeout) serverlessContainerName := fmt.Sprintf("%s-serverless-container", folderName) @@ -113,7 +108,7 @@ func ServerlessContainer(ctx *sdk.Context, stack api.Stack, input api.ResourceIn ExecutionTimeout: sdk.StringPtrFromPtr(&strTimeout), FolderId: folder.ID(), Image: &pYandex.ServerlessContainerImageArgs{ - Url: imageNameOutput, + Url: imageOut.Image.ImageName, }, Memory: sdk.Int(lo.If(stackConfig.MaxMemory == nil, 128).Else(lo.FromPtr(stackConfig.MaxMemory))), Name: sdk.String(serverlessContainerName), From ccb3f777545d9ee9e626a697a95a94b64add663e Mon Sep 17 00:00:00 2001 From: drypa Date: Tue, 11 Nov 2025 21:23:36 +0300 Subject: [PATCH 11/11] conflicts fix --- go.mod | 3 +- go.sum | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 60e1fe1c..f2e48270 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/go-delve/delve v1.25.2 github.com/go-git/go-billy/v5 v5.6.1 github.com/go-git/go-git/v5 v5.13.1 - github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/golang-jwt/jwt/v5 v5.2.2 github.com/golangci/golangci-lint v1.64.8 github.com/google/uuid v1.6.0 github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef @@ -211,7 +211,6 @@ require ( github.com/gofrs/flock v0.12.1 // indirect github.com/gofrs/uuid v4.2.0+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect github.com/golang/glog v1.2.4 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect diff --git a/go.sum b/go.sum index 92549433..dd439def 100644 --- a/go.sum +++ b/go.sum @@ -125,11 +125,13 @@ github.com/MShekow/directory-checksum v1.4.9 h1:olzWbrq9ylwfi7afuoivzHM8AV2z2KOa github.com/MShekow/directory-checksum v1.4.9/go.mod h1:LhNeWmPftlKTlc3TNurdihPK/whw9j76VnLaTRu2SkU= github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4= github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo= github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= @@ -138,6 +140,7 @@ github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmH github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU= @@ -157,6 +160,7 @@ github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQ github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/alingse/nilnesserr v0.1.2 h1:Yf8Iwm3z2hUUrP4muWfW83DF4nE3r1xZ26fGWUKCZlo= github.com/alingse/nilnesserr v0.1.2/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/anthonycorbacho/slack-webhook v1.0.1 h1:rOJ4/8ydWKJhdgIdlnX6lode6a3crAT58yGlVyFo9Q0= @@ -165,6 +169,7 @@ github.com/antonmedv/expr v1.12.6 h1:qtgMHOFissxhePwokx0xB9eqS6PUy0SbhDRPD67PInA github.com/antonmedv/expr v1.12.6/go.mod h1:FPC8iWArxls7axbVLsW+kpg1mz29A1b2M6jt+hZfDkU= github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY= @@ -256,6 +261,7 @@ github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4r github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -270,6 +276,7 @@ github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZ github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= +github.com/cheggaaa/pb v1.0.18/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= github.com/chigopher/pathlib v0.19.1 h1:RoLlUJc0CqBGwq239cilyhxPNLXTK+HXoASGyGznx5A= @@ -289,17 +296,26 @@ github.com/cloudflare/cloudflare-go v0.104.0/go.mod h1:pfUQ4PIG4ISI0/Mmc21Bp86Un github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/compose-spec/compose-go v1.20.2 h1:u/yfZHn4EaHGdidrZycWpxXgFffjYULlTbRfJ51ykjQ= github.com/compose-spec/compose-go v1.20.2/go.mod h1:+MdqXV4RA7wdFsahh/Kb8U0pAJqkg7mr4PM9tFKU8RM= github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro= github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosiner/argv v0.1.0 h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg= github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.20 h1:VIPb/a2s17qNeQgDnkfZC35RScx+blkKF8GV68n80J4= github.com/creack/pty v1.1.20/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -320,8 +336,10 @@ github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42 github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY= github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d h1:hUWoLdw5kvo2xCsqlsIBMvWUc1QCSsCYD2J2+Fg6YoU= github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d/go.mod h1:C7Es+DLenIpPc9J6IYw4jrK0h7S9bKj4DNl8+KxGEXU= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/disgoorg/disgo v0.18.5 h1:T4X9ARKJFwCon4xkw4Dg+SjGpFo7usQ7QCCX2+snGXQ= github.com/disgoorg/disgo v0.18.5/go.mod h1:gkl6DBdbKUvmOOJayWPSvS52KPN/8uJGJ2f13gCEB1o= github.com/disgoorg/json v1.1.0 h1:7xigHvomlVA9PQw9bMGO02PHGJJPqvX5AnwlYg/Tnys= @@ -347,6 +365,7 @@ github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ= github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -372,15 +391,20 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA= github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghostiam/protogetter v0.3.9 h1:j+zlLLWzqLay22Cz/aYwTHKQ88GE2DQ6GkWSYFOI4lQ= github.com/ghostiam/protogetter v0.3.9/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-critic/go-critic v0.12.0 h1:iLosHZuye812wnkEz1Xu3aBwn5ocCPfc9yqmFG9pa6w= @@ -464,6 +488,7 @@ github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -472,6 +497,7 @@ github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -579,6 +605,7 @@ github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5 github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= @@ -592,6 +619,10 @@ github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.5.0 h1:Dq4wT1DdTwTGCQQv3rl3IvD5Ld0E6HiY+3Zh0sUGqw8= github.com/gostaticanalysis/testutil v0.5.0/go.mod h1:OLQSbuM6zw2EvCcXTz1lVq5unyoNft372msDY0nY5Hs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0 h1:bM6ZAFZmc/wPFaRDi0d5L7hGEZEx/2u+Tmr2evNHDiI= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= @@ -605,6 +636,7 @@ github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB1 github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix/v2 v2.1.0 h1:CUW5RYIcysz+D3B+l1mDeXrQ7fUvGGCwJfdASSzbrfo= github.com/hashicorp/go-immutable-radix/v2 v2.1.0/go.mod h1:hgdqLXA4f6NIjRVisM1TJ9aOJVNRqKZj+xDGF6m7PBw= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= @@ -650,12 +682,14 @@ github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd h1:anPrsicrIi2ColgWTVPk+ github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd/go.mod h1:3LVOLeyx9XVvwPgrt2be44XgSqndprz1G18rSk8KD84= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/iwdgo/sigintwindows v0.2.2 h1:P6oWzpvV7MrEAmhUgs+zmarrWkyL77ycZz4v7+1gYAE= github.com/iwdgo/sigintwindows v0.2.2/go.mod h1:70wPb8oz8OnxPvsj2QMUjgIVhb8hMu5TUgX8KfFl7QY= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk= github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= @@ -668,6 +702,7 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -685,10 +720,12 @@ github.com/karamaru-alpha/copyloopvar v1.2.1 h1:wmZaZYIjnJ0b5UoKDjUHrikcV0zuPyyx github.com/karamaru-alpha/copyloopvar v1.2.1/go.mod h1:nFmMlFNlClC2BPvNaHMdkirmTJxVCY0lhxBtlfOypMM= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs= github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.9.0 h1:9xt1zI9EBfcYBvdU1nVrzMzzUPUtPKs9bVSIM3TAb3M= @@ -700,9 +737,11 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 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/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= 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= @@ -732,6 +771,7 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk= github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04= @@ -757,6 +797,7 @@ github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2J github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= @@ -778,6 +819,7 @@ github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= @@ -817,8 +859,10 @@ github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nunnatsa/ginkgolinter v0.19.1 h1:mjwbOlDQxZi9Cal+KfbEJTCz327OLNfwNvoZ70NJ+c4= github.com/nunnatsa/ginkgolinter v0.19.1/go.mod h1:jkQ3naZDmxaZMXPWaS9rblH+i+GWXQCaS/JFIWcOH2s= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= @@ -844,6 +888,8 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw= @@ -884,6 +930,7 @@ github.com/polyfloyd/go-errorlint v1.7.1/go.mod h1:aXjNb1x2TNhoLsk26iv1yl7a+zTnX github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= @@ -896,6 +943,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= @@ -903,11 +952,13 @@ github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+ github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= github.com/pulumi/esc v0.14.3 h1:Zli+9LiSDT/W+Fsfr8tITxCo+5wn969tLrE4KLv44G8= @@ -957,6 +1008,7 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= @@ -964,6 +1016,7 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.3.5 h1:cShyguSwUEeC0jS7ylOiG/idnd1TpJ1LfHGpV3oJmPU= @@ -999,11 +1052,15 @@ github.com/segmentio/asm v1.1.3 h1:WM03sfUOENvvKexOLp+pCqgb/WDjsi7EK8gIsICtzhc= github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= github.com/segmentio/encoding v0.3.5 h1:UZEiaZ55nlXGDL92scoVuw00RmiRCazIEmvPSbSvt8Y= github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -1015,6 +1072,7 @@ github.com/sivchari/tenv v1.12.1 h1:+E0QzjktdnExv/wwsnnyk4oqZBUfuh89YMQT1cyuvSY= github.com/sivchari/tenv v1.12.1/go.mod h1:1LjSOUCc25snIr5n3DtGGrENhX3LuWefcplwVGC24mw= github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sonatard/noctx v0.1.0 h1:JjqOc2WN16ISWAjAk8M5ej0RfExEXtkEyExl2hLW+OM= github.com/sonatard/noctx v0.1.0/go.mod h1:0RvBxqY8D4j9cTTTWE8ylt2vqj2EPI8fHmrxHdsaZ2c= github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= @@ -1023,26 +1081,35 @@ github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9yS github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0= github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.20.0 h1:zrxIyR3RQIOsarIrgL8+sAvALXul9jeEPa06Y0Ph6vY= github.com/spf13/viper v1.20.0/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stbenjam/no-sprintf-host-port v0.2.0 h1:i8pxvGrt1+4G0czLr/WnmyH7zbZ8Bg8etvARQ1rpyl4= github.com/stbenjam/no-sprintf-host-port v0.2.0/go.mod h1:eL0bQ9PasS0hsyTyfTjjG+E80QIyPnBVQbYZyv20Jfk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -1077,17 +1144,21 @@ github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 h1:y4mJRFlM6fUyP github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460= github.com/timonwong/loggercheck v0.10.1 h1:uVZYClxQFpw55eh+PIoqM7uAOHMrhVcDoWDery9R8Lg= github.com/timonwong/loggercheck v0.10.1/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/langchaingo v0.1.13 h1:rcpMWBIi2y3B90XxfE4Ao8dhCQPVDMaNPnN5cGB1CaA= github.com/tmc/langchaingo v0.1.13/go.mod h1:vpQ5NOIhpzxDfTZK9B6tf2GM/MoaHewPWM5KXXGh7hg= github.com/tomarrell/wrapcheck/v2 v2.10.0 h1:SzRCryzy4IrAH7bVGG4cK40tNUhmVmMDuJujy4XwYDg= github.com/tomarrell/wrapcheck/v2 v2.10.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLkI= github.com/ultraware/funlen v0.2.0/go.mod h1:ZE0q4TsJ8T1SQcjmkhN/w+MceuatI6pBFSxxyteHIJA= github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSWoFa+g= @@ -1102,6 +1173,7 @@ github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQ github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/vektra/mockery/v2 v2.53.5 h1:iktAY68pNiMvLoHxKqlSNSv/1py0QF/17UGrrAMYDI8= github.com/vektra/mockery/v2 v2.53.5/go.mod h1:hIFFb3CvzPdDJJiU7J4zLRblUMv7OuezWsHPmswriwo= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= @@ -1112,6 +1184,8 @@ github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17 github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs= @@ -1137,6 +1211,7 @@ go-simpler.org/musttag v0.13.0 h1:Q/YAW0AHvaoaIbsPj3bvEI5/QFP7w696IMUpnKXQfCE= go-simpler.org/musttag v0.13.0/go.mod h1:FTzIGeK6OkKlUDVpj0iQUXZLUO1Js9+mvykDQy9C5yM= go-simpler.org/sloglint v0.9.0 h1:/40NQtjRx9txvsB/RN022KsUJU+zaaSb/9q9BSefSrE= go-simpler.org/sloglint v0.9.0/go.mod h1:G/OrAF6uxj48sHahCzrbarVMptL2kjWTaUeC8+fOGww= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1172,14 +1247,18 @@ go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9f go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc= go.starlark.net v0.0.0-20231101134539-556fd59b42f6 h1:+eC0F/k4aBLC4szgOcjd7bDTEnpxADJyWJE0yowgM3E= go.starlark.net v0.0.0-20231101134539-556fd59b42f6/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= gocloud.dev v0.37.0 h1:XF1rN6R0qZI/9DYjN16Uy0durAmSlf58DHOcb28GPro= @@ -1189,10 +1268,13 @@ gocloud.dev/secrets/hashivault v0.37.0/go.mod h1:4ClUWjBfP8wLdGts56acjHz3mWLuATM golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -1254,12 +1336,14 @@ golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1331,8 +1415,10 @@ golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1344,11 +1430,13 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1372,6 +1460,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1430,6 +1519,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1443,6 +1533,7 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1470,6 +1561,7 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -1552,6 +1644,7 @@ google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1564,6 +1657,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -1597,11 +1691,17 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 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/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=