From 3a70a28ede505fc800790c46373c40b2736707ff Mon Sep 17 00:00:00 2001 From: "denis.bilenko" Date: Wed, 14 Oct 2026 13:19:43 +0000 Subject: [PATCH 1/4] Bump Go to 1.27.2 Bump go directive to 1.27.0 and toolchain to go1.27.2 in all modules and golangci-lint to v2.14.0 (first release with go1.27 support). Co-authored-by: Isaac --- .golangci.yaml | 24 +- .nextchanges/dependency-updates/go-1.27.md | 1 + .../apply_source_linked_deployment_preset.go | 2 +- .../paths/job_libraries_paths_visitor_test.go | 24 +- .../mutator/paths/job_paths_visitor_test.go | 56 ++- .../resourcemutator/apply_target_mode_test.go | 2 +- ...re_dashboards_serialized_dashboard_test.go | 4 +- ...igure_genie_space_serialized_space_test.go | 4 +- .../validate_target_mode_test.go | 2 +- .../mutator/validate_job_run_triggers_test.go | 6 +- .../resources/external_location_test.go | 4 +- .../config/resources/postgres_branch_test.go | 9 +- bundle/config/resources/volume_test.go | 17 +- bundle/config/root_test.go | 6 +- .../validate/job_task_cluster_spec_test.go | 4 +- bundle/config/workspace.go | 2 +- bundle/direct/bundle_plan_test.go | 2 +- bundle/direct/dresources/all_test.go | 355 +++++++----------- bundle/direct/dresources/app_test.go | 20 +- bundle/direct/dresources/cluster.go | 78 ++-- bundle/direct/dresources/dashboard.go | 78 ++-- bundle/direct/dresources/dashboard_test.go | 17 +- bundle/direct/dresources/job_run.go | 42 +-- bundle/direct/dresources/job_run_test.go | 2 +- bundle/direct/dresources/model.go | 24 +- bundle/direct/dresources/permissions_test.go | 3 +- bundle/direct/dresources/secret_scope.go | 24 +- bundle/direct/dresources/sql_warehouse.go | 34 +- .../dresources/state_compaction_test.go | 17 +- .../direct/dresources/vector_search_index.go | 18 +- bundle/direct/dstate/state.go | 12 +- bundle/direct/dstate/state_test.go | 6 +- bundle/phases/telemetry.go | 2 +- bundle/phases/telemetry_test.go | 6 +- bundle/run/app_test.go | 4 +- bundle/run/job_args_test.go | 32 +- bundle/run/job_options_test.go | 14 +- bundle/run/job_test.go | 18 +- bundle/trampoline/trampoline_test.go | 14 +- cmd/air/runconfig.go | 6 +- cmd/api/api_test.go | 2 +- cmd/pipelines/history_test.go | 8 +- cmd/pipelines/run_test.go | 4 +- experimental/ssh/internal/fuse/process.go | 6 +- .../ssh/internal/server/descendants.go | 6 +- go.mod | 16 +- libs/auth/introspect.go | 3 - libs/auth/storage/memory_test.go | 11 +- libs/dockercredentials/profile_test.go | 4 +- libs/dyn/convert/from_typed_test.go | 8 +- libs/dyn/jsonloader/json_test.go | 2 +- libs/filer/dbfs_client.go | 2 +- libs/filer/workspace_files_cache.go | 4 +- libs/filer/workspace_files_cache_test.go | 16 +- .../workspace_files_extensions_client_test.go | 16 +- libs/flags/json_flag_test.go | 2 +- libs/gorules/rule_os_chdir.go | 10 - libs/gorules/rule_reflect_typefor.go | 9 - libs/jsonschema/schema_test.go | 8 +- libs/jsonschema/utils_test.go | 8 +- libs/localenv/pipeline_test.go | 10 +- libs/localenv/workspace_test.go | 2 +- libs/structs/structaccess/get_test.go | 80 ++-- libs/structs/structaccess/set_test.go | 28 +- libs/structs/structdiff/diff_test.go | 4 +- libs/structs/structpath/path.go | 2 +- libs/structs/structwalk/walk_test.go | 28 +- libs/template/config.go | 6 +- libs/template/config_test.go | 16 +- libs/template/resolver.go | 2 +- libs/template/template.go | 20 +- libs/testserver/dashboards.go | 10 +- libs/testserver/postgres.go | 6 +- libs/testserver/vector_search_indexes.go | 22 +- tools/go.mod | 126 +++---- tools/go.sum | 264 ++++++------- tools/task/go.mod | 4 +- 77 files changed, 773 insertions(+), 997 deletions(-) create mode 100644 .nextchanges/dependency-updates/go-1.27.md delete mode 100644 libs/gorules/rule_os_chdir.go delete mode 100644 libs/gorules/rule_reflect_typefor.go diff --git a/.golangci.yaml b/.golangci.yaml index 739bcd5342d..5f70ca86430 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -7,7 +7,6 @@ linters: - gocritic - govet - ineffassign - - intrange - mirror - perfsprint - revive @@ -15,7 +14,7 @@ linters: - testifylint - unconvert - unused - - exhaustruct + - exhaustruct_v5 - exhaustive - copyloopvar - forbidigo @@ -101,6 +100,17 @@ linters: - pattern: 'errors\.As\b' msg: 'Use errors.AsType[T](err) for type-safe error unwrapping (Go 1.26+).' analyze-types: true + recvcheck: + # recvcheck v0.3 switched its built-in exclusions from Marshal* to + # Unmarshal*. Value-receiver MarshalJSON paired with pointer-receiver + # UnmarshalJSON is the idiomatic pattern, so keep excluding both. + exclusions: + - "*.MarshalText" + - "*.MarshalJSON" + - "*.MarshalYAML" + - "*.MarshalXML" + - "*.MarshalBinary" + - "*.GobEncode" copyloopvar: check-alias: true errcheck: @@ -120,11 +130,8 @@ linters: - "**/internal/testutil/**" - "**/libs/testdiff/**" - "**/libs/python/pythontest/**" - - name: context-keys-type - name: error-return - name: errorf - - name: range-val-in-closure - - name: waitgroup-by-value - name: unconditional-recursion - name: use-waitgroup-go gocritic: @@ -170,10 +177,10 @@ linters: rules: - path-except: bundle/direct/dresources|bundle/config/mutator/load_dbalert_files.go linters: - - exhaustruct + - exhaustruct_v5 - path: bundle/direct/dresources/.*_test.go linters: - - exhaustruct + - exhaustruct_v5 - text: "Use env\\.Get" path: "_test\\.go$" linters: @@ -195,6 +202,7 @@ formatters: replacement: any gofumpt: module-path: github.com/databricks/cli - extra-rules: true + extra: + group-params: true exclusions: generated: lax diff --git a/.nextchanges/dependency-updates/go-1.27.md b/.nextchanges/dependency-updates/go-1.27.md new file mode 100644 index 00000000000..74e6c1bb1e5 --- /dev/null +++ b/.nextchanges/dependency-updates/go-1.27.md @@ -0,0 +1 @@ +* Bump Go to 1.27.2. Release binaries built with Go 1.27 require macOS 13 Ventura or later. diff --git a/bundle/config/mutator/apply_source_linked_deployment_preset.go b/bundle/config/mutator/apply_source_linked_deployment_preset.go index 638f3034140..695edabc68a 100644 --- a/bundle/config/mutator/apply_source_linked_deployment_preset.go +++ b/bundle/config/mutator/apply_source_linked_deployment_preset.go @@ -31,7 +31,7 @@ func (m *applySourceLinkedDeploymentPreset) Apply(ctx context.Context, b *bundle isDatabricksWorkspace := dbr.RunsOnRuntime(ctx) && strings.HasPrefix(b.SyncRootPath, "/Workspace/") target := b.Config.Bundle.Target - if config.IsExplicitlyEnabled((b.Config.Presets.SourceLinkedDeployment)) { + if config.IsExplicitlyEnabled(b.Config.Presets.SourceLinkedDeployment) { if !isDatabricksWorkspace { path := structpath.NewPath(nil, "targets", target, "presets", "source_linked_deployment") diags = diags.Append( diff --git a/bundle/config/mutator/paths/job_libraries_paths_visitor_test.go b/bundle/config/mutator/paths/job_libraries_paths_visitor_test.go index b35087e579d..07b3c6d6641 100644 --- a/bundle/config/mutator/paths/job_libraries_paths_visitor_test.go +++ b/bundle/config/mutator/paths/job_libraries_paths_visitor_test.go @@ -51,16 +51,14 @@ func TestVisitJobLibrariesPaths(t *testing.T) { } job0 := &resources.Job{ - JobSettings: jobs.JobSettings{ - Tasks: []jobs.Task{ - task0, - task1, - task2, - task3, - task4, - task5, - task6, - }, + Tasks: []jobs.Task{ + task0, + task1, + task2, + task3, + task4, + task5, + task6, }, } @@ -91,10 +89,8 @@ func TestVisitJobLibrariesPaths_environments(t *testing.T) { }, } job0 := &resources.Job{ - JobSettings: jobs.JobSettings{ - Environments: []jobs.JobEnvironment{ - environment0, - }, + Environments: []jobs.JobEnvironment{ + environment0, }, } diff --git a/bundle/config/mutator/paths/job_paths_visitor_test.go b/bundle/config/mutator/paths/job_paths_visitor_test.go index e27cdc185eb..b9fe29d154e 100644 --- a/bundle/config/mutator/paths/job_paths_visitor_test.go +++ b/bundle/config/mutator/paths/job_paths_visitor_test.go @@ -63,18 +63,16 @@ func TestVisitJobPaths(t *testing.T) { } job0 := &resources.Job{ - JobSettings: jobs.JobSettings{ - Tasks: []jobs.Task{ - task0, - task1, - task2, - task3, - task4, - task5, - task6, - task7, - task8, - }, + Tasks: []jobs.Task{ + task0, + task1, + task2, + task3, + task4, + task5, + task6, + task7, + task8, }, } @@ -110,12 +108,10 @@ func TestVisitJobPaths_environments(t *testing.T) { }, } job0 := &resources.Job{ - JobSettings: jobs.JobSettings{ - Environments: []jobs.JobEnvironment{ - environment0, - {Spec: &compute.Environment{ProjectEnvironment: "../pyproject.toml"}}, - {Spec: &compute.Environment{ProjectEnvironment: "/Workspace/shared/pyproject.toml"}}, - }, + Environments: []jobs.JobEnvironment{ + environment0, + {Spec: &compute.Environment{ProjectEnvironment: "../pyproject.toml"}}, + {Spec: &compute.Environment{ProjectEnvironment: "/Workspace/shared/pyproject.toml"}}, }, } @@ -138,15 +134,13 @@ func TestVisitJobPaths_environments(t *testing.T) { func TestVisitJobPaths_environmentVariables(t *testing.T) { job0 := &resources.Job{ - JobSettings: jobs.JobSettings{ - EnvironmentVariables: []jobs.JobEnvironmentVariables{ - { - EnvironmentVariablesKey: "default", - Spec: &jobs.JobEnvironmentVariablesSpec{ - Files: []string{ - "./a.env", - "./b.env", - }, + EnvironmentVariables: []jobs.JobEnvironmentVariables{ + { + EnvironmentVariablesKey: "default", + Spec: &jobs.JobEnvironmentVariablesSpec{ + Files: []string{ + "./a.env", + "./b.env", }, }, }, @@ -190,11 +184,9 @@ func TestVisitJobPaths_foreach(t *testing.T) { }, } job0 := &resources.Job{ - JobSettings: jobs.JobSettings{ - Tasks: []jobs.Task{ - task0, - task1, - }, + Tasks: []jobs.Task{ + task0, + task1, }, } diff --git a/bundle/config/mutator/resourcemutator/apply_target_mode_test.go b/bundle/config/mutator/resourcemutator/apply_target_mode_test.go index 92867f9c61b..b43c1f18e8c 100644 --- a/bundle/config/mutator/resourcemutator/apply_target_mode_test.go +++ b/bundle/config/mutator/resourcemutator/apply_target_mode_test.go @@ -96,7 +96,7 @@ func mockBundle(mode config.Mode) *bundle.Bundle { "job_run1": {RunNow: jobs.RunNow{JobId: 1234}}, }, Pipelines: map[string]*resources.Pipeline{ - "pipeline1": {CreatePipeline: pipelines.CreatePipeline{Name: "pipeline1", Continuous: true}}, + "pipeline1": {CreatePipeline: pipelines.CreatePipeline{Name: "pipeline1", Continuous: true}}, //nolint:staticcheck // SA1019: pipeline continuous is deprecated in the SDK but remains a supported bundle config field }, Experiments: map[string]*resources.MlflowExperiment{ "experiment1": {CreateExperiment: ml.CreateExperiment{Name: "/Users/lennart.kats@databricks.com/experiment1"}}, diff --git a/bundle/config/mutator/resourcemutator/configure_dashboards_serialized_dashboard_test.go b/bundle/config/mutator/resourcemutator/configure_dashboards_serialized_dashboard_test.go index b4437874b8c..792cecde9bf 100644 --- a/bundle/config/mutator/resourcemutator/configure_dashboards_serialized_dashboard_test.go +++ b/bundle/config/mutator/resourcemutator/configure_dashboards_serialized_dashboard_test.go @@ -93,8 +93,8 @@ func TestConfigureDashboardSerializedDashboard(t *testing.T) { } dash := &resources.Dashboard{ - DashboardConfig: resources.DashboardConfig{DisplayName: "My Dashboard"}, - FilePath: tt.filePath, + DisplayName: "My Dashboard", + FilePath: tt.filePath, } if tt.setSerialized { dash.SerializedDashboard = tt.serializedDashboard diff --git a/bundle/config/mutator/resourcemutator/configure_genie_space_serialized_space_test.go b/bundle/config/mutator/resourcemutator/configure_genie_space_serialized_space_test.go index d651bd2c2f8..fb9eab68b0d 100644 --- a/bundle/config/mutator/resourcemutator/configure_genie_space_serialized_space_test.go +++ b/bundle/config/mutator/resourcemutator/configure_genie_space_serialized_space_test.go @@ -95,8 +95,8 @@ func TestConfigureGenieSpaceSerializedSpace(t *testing.T) { } gs := &resources.GenieSpace{ - GenieSpaceConfig: resources.GenieSpaceConfig{Title: "My Genie Space"}, - FilePath: tt.filePath, + Title: "My Genie Space", + FilePath: tt.filePath, } if tt.setSerialized { gs.SerializedSpace = tt.serializedSpace diff --git a/bundle/config/mutator/resourcemutator/validate_target_mode_test.go b/bundle/config/mutator/resourcemutator/validate_target_mode_test.go index b5a3525e125..ce361de2d80 100644 --- a/bundle/config/mutator/resourcemutator/validate_target_mode_test.go +++ b/bundle/config/mutator/resourcemutator/validate_target_mode_test.go @@ -21,7 +21,7 @@ func TestValidateProductionPipelines(t *testing.T) { Pipelines: map[string]*resources.Pipeline{ "pipeline": { CreatePipeline: pipelines.CreatePipeline{ - Development: true, + Development: true, //nolint:staticcheck // SA1019: pipeline development is deprecated in the SDK but remains a supported bundle config field }, }, }, diff --git a/bundle/config/mutator/validate_job_run_triggers_test.go b/bundle/config/mutator/validate_job_run_triggers_test.go index cb5d13e8f2f..3ec1e90b844 100644 --- a/bundle/config/mutator/validate_job_run_triggers_test.go +++ b/bundle/config/mutator/validate_job_run_triggers_test.go @@ -104,9 +104,9 @@ func TestValidateJobRunTriggers(t *testing.T) { JobRuns: map[string]*resources.JobRun{ "my_run": { Lifecycle: &resources.JobRunLifecycle{ - Lifecycle: resources.Lifecycle{PreventDestroy: tt.preventDestroy}, - Triggers: tt.triggers, - TriggersState: nil, + PreventDestroy: tt.preventDestroy, + Triggers: tt.triggers, + TriggersState: nil, }, }, }, diff --git a/bundle/config/resources/external_location_test.go b/bundle/config/resources/external_location_test.go index 01b792e048b..af1b78e8d64 100644 --- a/bundle/config/resources/external_location_test.go +++ b/bundle/config/resources/external_location_test.go @@ -55,9 +55,7 @@ func TestExternalLocationResourceDescription(t *testing.T) { func TestExternalLocationGetName(t *testing.T) { el := &ExternalLocation{ - CreateExternalLocation: catalog.CreateExternalLocation{ - Name: "my_location", - }, + Name: "my_location", } assert.Equal(t, "my_location", el.GetName()) diff --git a/bundle/config/resources/postgres_branch_test.go b/bundle/config/resources/postgres_branch_test.go index 03f87de8ac6..a9c846c38de 100644 --- a/bundle/config/resources/postgres_branch_test.go +++ b/bundle/config/resources/postgres_branch_test.go @@ -30,10 +30,11 @@ func TestPostgresBranchConfigMarshalHonorsForceSendFields(t *testing.T) { // produce the same bytes. A pointer-only marshaler would send them down two // different code paths. func TestPostgresBranchMarshalValueAndPointerAgree(t *testing.T) { - b := PostgresBranch{} - b.ID = "the-id" - b.BranchId = "b1" - b.Parent = "projects/p1" + b := PostgresBranch{ + ID: "the-id", + BranchId: "b1", + Parent: "projects/p1", + } byValue, err := json.Marshal(b) require.NoError(t, err) diff --git a/bundle/config/resources/volume_test.go b/bundle/config/resources/volume_test.go index e75deb040fd..065d8cb287d 100644 --- a/bundle/config/resources/volume_test.go +++ b/bundle/config/resources/volume_test.go @@ -5,29 +5,24 @@ import ( "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/databricks-sdk-go/experimental/mocks" - "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) func TestComputeVolumePath(t *testing.T) { v := &Volume{ - CreateVolumeRequestContent: catalog.CreateVolumeRequestContent{ - CatalogName: "main", - SchemaName: "myschema", - Name: "myvol", - }, + CatalogName: "main", + SchemaName: "myschema", + Name: "myvol", } require.Equal(t, "/Volumes/main/myschema/myvol", v.ComputeVolumePath()) } func TestComputeVolumePath_PureReferenceEmbedded(t *testing.T) { v := &Volume{ - CreateVolumeRequestContent: catalog.CreateVolumeRequestContent{ - CatalogName: "main", - SchemaName: "${resources.schemas.my.name}", - Name: "myvol", - }, + CatalogName: "main", + SchemaName: "${resources.schemas.my.name}", + Name: "myvol", } // A pure reference is embedded verbatim so it can be resolved later (plan/deploy). require.Equal(t, "/Volumes/main/${resources.schemas.my.name}/myvol", v.ComputeVolumePath()) diff --git a/bundle/config/root_test.go b/bundle/config/root_test.go index 42fae49d98c..f735c44405e 100644 --- a/bundle/config/root_test.go +++ b/bundle/config/root_test.go @@ -47,8 +47,8 @@ func TestInitializeVariables(t *testing.T) { err := root.InitializeVariables([]string{"foo=123", "bar=456"}) assert.NoError(t, err) - assert.Equal(t, "123", (root.Variables["foo"].Value)) - assert.Equal(t, "456", (root.Variables["bar"].Value)) + assert.Equal(t, "123", root.Variables["foo"].Value) + assert.Equal(t, "456", root.Variables["bar"].Value) } func TestInitializeVariablesWithAnEqualSignInValue(t *testing.T) { @@ -62,7 +62,7 @@ func TestInitializeVariablesWithAnEqualSignInValue(t *testing.T) { err := root.InitializeVariables([]string{"foo=123=567"}) assert.NoError(t, err) - assert.Equal(t, "123=567", (root.Variables["foo"].Value)) + assert.Equal(t, "123=567", root.Variables["foo"].Value) } func TestInitializeVariablesInvalidFormat(t *testing.T) { diff --git a/bundle/config/validate/job_task_cluster_spec_test.go b/bundle/config/validate/job_task_cluster_spec_test.go index 3ba2e841a65..6f7d31ee944 100644 --- a/bundle/config/validate/job_task_cluster_spec_test.go +++ b/bundle/config/validate/job_task_cluster_spec_test.go @@ -167,9 +167,7 @@ Specify one of the following fields: job_cluster_key, environment_key, existing_ for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { job := &resources.Job{ - JobSettings: jobs.JobSettings{ - Tasks: []jobs.Task{tc.task}, - }, + Tasks: []jobs.Task{tc.task}, } b := createBundle(map[string]*resources.Job{"job1": job}) diff --git a/bundle/config/workspace.go b/bundle/config/workspace.go index 4f8e021fe63..46234b14d9d 100644 --- a/bundle/config/workspace.go +++ b/bundle/config/workspace.go @@ -136,7 +136,7 @@ func (w *Workspace) Config(ctx context.Context) *config.Config { AzureClientID: w.AzureClientID, AzureTenantID: w.AzureTenantID, AzureEnvironment: w.AzureEnvironment, - AzureLoginAppID: w.AzureLoginAppID, + AzureLoginAppID: w.AzureLoginAppID, //nolint:staticcheck // SA1019: still accepted in bundle config; forwarded until the SDK drops the field // Unified host AccountID: w.AccountID, diff --git a/bundle/direct/bundle_plan_test.go b/bundle/direct/bundle_plan_test.go index 025ef91df6e..2d051dc21b9 100644 --- a/bundle/direct/bundle_plan_test.go +++ b/bundle/direct/bundle_plan_test.go @@ -786,7 +786,7 @@ func TestLadderBackendDefaultBeforeRemoteAddition(t *testing.T) { adapter, err := dresources.NewAdapter(dresources.SupportedResources["clusters"], "clusters", nil) require.NoError(t, err) - newState := &dresources.ClusterState{ClusterSpec: compute.ClusterSpec{PolicyId: "p1"}} + newState := &dresources.ClusterState{PolicyId: "p1"} changes := deployplan.Changes{ // config-absent (Old==New==nil), present in remote: matches both rules. "enable_elastic_disk": &deployplan.ChangeDesc{Remote: true}, diff --git a/bundle/direct/dresources/all_test.go b/bundle/direct/dresources/all_test.go index a0ef21b6f6d..f00037e48dc 100644 --- a/bundle/direct/dresources/all_test.go +++ b/bundle/direct/dresources/all_test.go @@ -23,7 +23,6 @@ import ( "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/databricks-sdk-go/service/apps" "github.com/databricks/databricks-sdk-go/service/catalog" - "github.com/databricks/databricks-sdk-go/service/compute" "github.com/databricks/databricks-sdk-go/service/dashboards" "github.com/databricks/databricks-sdk-go/service/database" "github.com/databricks/databricks-sdk-go/service/jobs" @@ -40,133 +39,103 @@ import ( var testConfig map[string]any = map[string]any{ "apps": &resources.App{ - App: apps.App{ - Name: "myapp", - }, + Name: "myapp", }, "catalogs": &resources.Catalog{ - CreateCatalog: catalog.CreateCatalog{ - Name: "mycatalog", - Comment: "Test catalog", - }, + Name: "mycatalog", + Comment: "Test catalog", // Note: EnablePredictiveOptimization and IsolationMode cannot be set during creation, // only during updates. They are not included in the test config. }, "external_locations": &resources.ExternalLocation{ - CreateExternalLocation: catalog.CreateExternalLocation{ - Name: "myexternallocation", - Url: "s3://mybucket/mypath", - CredentialName: "mycredential", - Comment: "Test external location", - }, + Name: "myexternallocation", + Url: "s3://mybucket/mypath", + CredentialName: "mycredential", + Comment: "Test external location", }, "schemas": &resources.Schema{ - CreateSchema: catalog.CreateSchema{ - CatalogName: "main", - Name: "myschema", - Comment: "Test schema", - }, + CatalogName: "main", + Name: "myschema", + Comment: "Test schema", }, "volumes": &resources.Volume{ - CreateVolumeRequestContent: catalog.CreateVolumeRequestContent{ - CatalogName: "main", - SchemaName: "myschema", - Name: "myvolume", - Comment: "Test volume", - }, + CatalogName: "main", + SchemaName: "myschema", + Name: "myvolume", + Comment: "Test volume", }, "database_instances": &resources.DatabaseInstance{ - DatabaseInstance: database.DatabaseInstance{ - Name: "mydbinstance", - }, + Name: "mydbinstance", }, "instance_pools": &resources.InstancePool{ - CreateInstancePool: compute.CreateInstancePool{ - InstancePoolName: "my-instance-pool", - NodeTypeId: "i3.xlarge", - }, + InstancePoolName: "my-instance-pool", + NodeTypeId: "i3.xlarge", }, "synced_database_tables": &resources.SyncedDatabaseTable{ - SyncedDatabaseTable: database.SyncedDatabaseTable{ - Name: "main.myschema.my_synced_table", - }, + Name: "main.myschema.my_synced_table", }, "model_services": &resources.ModelService{ - ModelServiceConfig: resources.ModelServiceConfig{ - Parent: "schemas/main.default", - ModelServiceId: "my_model_service", - Comment: "Test model service", - }, + Parent: "schemas/main.default", + ModelServiceId: "my_model_service", + Comment: "Test model service", }, "mcp_services": &resources.McpService{ - McpServiceConfig: resources.McpServiceConfig{ - Parent: "schemas/main.default", - McpServiceId: "my_mcp_service", - Comment: "Test mcp service", - }, + Parent: "schemas/main.default", + McpServiceId: "my_mcp_service", + Comment: "Test mcp service", }, "model_provider_services": &resources.ModelProviderService{ - ModelProviderServiceConfig: resources.ModelProviderServiceConfig{ - Parent: "schemas/main.default", - ModelProviderServiceId: "my_model_provider_service", - Comment: "Test model provider service", - }, + Parent: "schemas/main.default", + ModelProviderServiceId: "my_model_provider_service", + Comment: "Test model provider service", }, "registered_models": &resources.RegisteredModel{ - CreateRegisteredModelRequest: catalog.CreateRegisteredModelRequest{ - Name: "my_registered_model", - Comment: "Test registered model", - CatalogName: "main", - SchemaName: "default", - StorageLocation: "s3://my-bucket/my-path", - }, + Name: "my_registered_model", + Comment: "Test registered model", + CatalogName: "main", + SchemaName: "default", + StorageLocation: "s3://my-bucket/my-path", }, "experiments": &resources.MlflowExperiment{ - CreateExperiment: ml.CreateExperiment{ - Name: "my-experiment", - Tags: []ml.ExperimentTag{ - { - Key: "my-tag", - Value: "my-value", - }, + Name: "my-experiment", + Tags: []ml.ExperimentTag{ + { + Key: "my-tag", + Value: "my-value", }, - ArtifactLocation: "s3://my-bucket/my-experiment", }, + ArtifactLocation: "s3://my-bucket/my-experiment", }, "models": &resources.MlflowModel{ - CreateModelRequest: ml.CreateModelRequest{ - Name: "my_mlflow_model", - Description: "my_mlflow_model_description", - Tags: []ml.ModelTag{ - { - Key: "k1", - Value: "v1", - }, + Name: "my_mlflow_model", + Description: "my_mlflow_model_description", + Tags: []ml.ModelTag{ + { + Key: "k1", + Value: "v1", }, }, }, "secrets": &resources.Secret{ - Secret: catalog.Secret{ - CatalogName: "main", - SchemaName: "default", - Name: "my_secret", - Value: "my_secret_value", - Comment: "Test secret", - }, + CatalogName: "main", + SchemaName: "default", + Name: "my_secret", + Value: "my_secret_value", + Comment: "Test secret", }, "secret_scopes": &resources.SecretScope{ @@ -185,44 +154,42 @@ var testConfig map[string]any = map[string]any{ }, "model_serving_endpoints": &resources.ModelServingEndpoint{ - CreateServingEndpoint: serving.CreateServingEndpoint{ + Name: "my-endpoint", + Config: &serving.EndpointCoreConfigInput{ Name: "my-endpoint", - Config: &serving.EndpointCoreConfigInput{ - Name: "my-endpoint", - //nolint:staticcheck // SA1019: deprecated AutoCaptureConfigInput kept for bundle config compatibility - AutoCaptureConfig: &serving.AutoCaptureConfigInput{ - CatalogName: "main", - SchemaName: "myschema", - TableNamePrefix: "my_table", - Enabled: true, - ForceSendFields: nil, + //nolint:staticcheck // SA1019: deprecated AutoCaptureConfigInput kept for bundle config compatibility + AutoCaptureConfig: &serving.AutoCaptureConfigInput{ + CatalogName: "main", + SchemaName: "myschema", + TableNamePrefix: "my_table", + Enabled: true, + ForceSendFields: nil, + }, + ServedModels: nil, + ServedEntities: []serving.ServedEntityInput{ + { + EntityName: "entity-name", + EntityVersion: "1", + WorkloadSize: "Small", + ScaleToZeroEnabled: true, + WorkloadType: serving.ServingModelWorkloadTypeCpu, + EnvironmentVars: map[string]string{"key": "value"}, + InstanceProfileArn: "arn:aws:iam::123456789012:instance-profile/my-instance-profile", + MaxProvisionedConcurrency: 10, + MaxProvisionedThroughput: 100, + MinProvisionedConcurrency: 1, + MinProvisionedThroughput: 10, + Name: "entity-name", + ProvisionedModelUnits: 100, + ExternalModel: nil, + ForceSendFields: nil, }, - ServedModels: nil, - ServedEntities: []serving.ServedEntityInput{ + }, + TrafficConfig: &serving.TrafficConfig{ + Routes: []serving.Route{ { - EntityName: "entity-name", - EntityVersion: "1", - WorkloadSize: "Small", - ScaleToZeroEnabled: true, - WorkloadType: serving.ServingModelWorkloadTypeCpu, - EnvironmentVars: map[string]string{"key": "value"}, - InstanceProfileArn: "arn:aws:iam::123456789012:instance-profile/my-instance-profile", - MaxProvisionedConcurrency: 10, - MaxProvisionedThroughput: 100, - MinProvisionedConcurrency: 1, - MinProvisionedThroughput: 10, - Name: "entity-name", - ProvisionedModelUnits: 100, - ExternalModel: nil, - ForceSendFields: nil, - }, - }, - TrafficConfig: &serving.TrafficConfig{ - Routes: []serving.Route{ - { - ServedModelName: "model-name-1", - TrafficPercentage: 100, - }, + ServedModelName: "model-name-1", + TrafficPercentage: 100, }, }, }, @@ -230,96 +197,76 @@ var testConfig map[string]any = map[string]any{ }, "postgres_projects": &resources.PostgresProject{ - PostgresProjectConfig: resources.PostgresProjectConfig{ - ProjectId: "test-project", - ProjectSpec: postgres.ProjectSpec{ - DisplayName: "Test Project", - PgVersion: 16, - }, - }, + ProjectId: "test-project", + DisplayName: "Test Project", + PgVersion: 16, }, "postgres_catalogs": &resources.PostgresCatalog{ - PostgresCatalogConfig: resources.PostgresCatalogConfig{ - CatalogId: "test_catalog", - }, + CatalogId: "test_catalog", }, "postgres_synced_tables": &resources.PostgresSyncedTable{ - PostgresSyncedTableConfig: resources.PostgresSyncedTableConfig{ - SyncedTableId: "main.public.trips_synced", - }, + SyncedTableId: "main.public.trips_synced", }, "alerts": &resources.Alert{ - AlertV2: sql.AlertV2{ - DisplayName: "my-alert", - QueryText: "SELECT 1", - WarehouseId: "test-warehouse-id", - Schedule: sql.CronSchedule{ - QuartzCronSchedule: "0 0 12 * * ?", - TimezoneId: "UTC", + DisplayName: "my-alert", + QueryText: "SELECT 1", + WarehouseId: "test-warehouse-id", + Schedule: sql.CronSchedule{ + QuartzCronSchedule: "0 0 12 * * ?", + TimezoneId: "UTC", + }, + Evaluation: sql.AlertV2Evaluation{ + ComparisonOperator: sql.ComparisonOperatorGreaterThan, + Source: sql.AlertV2OperandColumn{ + Name: "column1", }, - Evaluation: sql.AlertV2Evaluation{ - ComparisonOperator: sql.ComparisonOperatorGreaterThan, - Source: sql.AlertV2OperandColumn{ - Name: "column1", - }, - Threshold: &sql.AlertV2Operand{ - Column: &sql.AlertV2OperandColumn{ - Name: "column2", - }, + Threshold: &sql.AlertV2Operand{ + Column: &sql.AlertV2OperandColumn{ + Name: "column2", }, }, }, }, "quality_monitors": &resources.QualityMonitor{ - TableName: "main.myschema.mytable", - CreateMonitor: catalog.CreateMonitor{ - AssetsDir: "/Workspace/Users/user@example.com/assets", - OutputSchemaName: "main.myschema", - }, + TableName: "main.myschema.mytable", + AssetsDir: "/Workspace/Users/user@example.com/assets", + OutputSchemaName: "main.myschema", }, "dashboards": &resources.Dashboard{ - DashboardConfig: resources.DashboardConfig{ - DisplayName: "my-dashboard", - ParentPath: "/Workspace/Users/user@example.com", - WarehouseId: "test-warehouse-id", - SerializedDashboard: `{"pages":[{"name":"page1","displayName":"Page 1","pageType":"PAGE_TYPE_CANVAS"}]}`, - - DatasetCatalog: "main", - DatasetSchema: "myschema", - }, + DisplayName: "my-dashboard", + ParentPath: "/Workspace/Users/user@example.com", + WarehouseId: "test-warehouse-id", + SerializedDashboard: `{"pages":[{"name":"page1","displayName":"Page 1","pageType":"PAGE_TYPE_CANVAS"}]}`, + + DatasetCatalog: "main", + DatasetSchema: "myschema", }, "genie_spaces": &resources.GenieSpace{ - GenieSpaceConfig: resources.GenieSpaceConfig{ - Title: "my-genie-space", - WarehouseId: "test-warehouse-id", - ParentPath: "/Workspace/Users/user@example.com", - SerializedSpace: "{}", - }, + Title: "my-genie-space", + WarehouseId: "test-warehouse-id", + ParentPath: "/Workspace/Users/user@example.com", + SerializedSpace: "{}", }, "vector_search_endpoints": &resources.VectorSearchEndpoint{ - CreateEndpoint: vectorsearch.CreateEndpoint{ - Name: "my-endpoint", - EndpointType: vectorsearch.EndpointTypeStandard, - }, + Name: "my-endpoint", + EndpointType: vectorsearch.EndpointTypeStandard, }, "vector_search_indexes": &resources.VectorSearchIndex{ - CreateVectorIndexRequest: vectorsearch.CreateVectorIndexRequest{ - Name: "main.default.my_index", - EndpointName: "my-index-endpoint", - PrimaryKey: "id", - IndexType: vectorsearch.VectorIndexTypeDeltaSync, - DeltaSyncIndexSpec: &vectorsearch.DeltaSyncVectorIndexSpecRequest{ - SourceTable: "main.default.source_table", - PipelineType: vectorsearch.PipelineTypeTriggered, - }, + Name: "main.default.my_index", + EndpointName: "my-index-endpoint", + PrimaryKey: "id", + IndexType: vectorsearch.VectorIndexTypeDeltaSync, + DeltaSyncIndexSpec: &vectorsearch.DeltaSyncVectorIndexSpecRequest{ + SourceTable: "main.default.source_table", + PipelineType: vectorsearch.PipelineTypeTriggered, }, Grants: []catalog.PrivilegeAssignment{{ Principal: "user@example.com", @@ -346,10 +293,8 @@ var testDeps = map[string]prepareWorkspace{ }) return &resources.DatabaseCatalog{ - DatabaseCatalog: database.DatabaseCatalog{ - Name: "mydbcatalog", - DatabaseInstanceName: "mydbinstance1", - }, + Name: "mydbcatalog", + DatabaseInstanceName: "mydbinstance1", }, err }, @@ -383,9 +328,7 @@ var testDeps = map[string]prepareWorkspace{ } return &resources.JobRun{ - RunNow: jobs.RunNow{ - JobId: resp.JobId, - }, + JobId: resp.JobId, }, nil }, @@ -840,11 +783,9 @@ var testDeps = map[string]prepareWorkspace{ } return &resources.PostgresBranch{ - PostgresBranchConfig: resources.PostgresBranchConfig{ - Parent: "projects/test-project-for-branch", - BranchId: "test-branch", - BranchSpec: postgres.BranchSpec{}, - }, + Parent: "projects/test-project-for-branch", + BranchId: "test-branch", + BranchSpec: postgres.BranchSpec{}, }, nil }, @@ -865,9 +806,7 @@ var testDeps = map[string]prepareWorkspace{ } return &resources.PostgresSnapshotSchedule{ - PostgresSnapshotScheduleConfig: resources.PostgresSnapshotScheduleConfig{ - Branch: "projects/test-project-for-snapshot-schedule/branches/production", - }, + Branch: "projects/test-project-for-snapshot-schedule/branches/production", }, nil }, @@ -897,13 +836,9 @@ var testDeps = map[string]prepareWorkspace{ } return &resources.PostgresEndpoint{ - PostgresEndpointConfig: resources.PostgresEndpointConfig{ - Parent: "projects/test-project-for-endpoint/branches/test-branch-for-endpoint", - EndpointId: "test-endpoint", - EndpointSpec: postgres.EndpointSpec{ - EndpointType: postgres.EndpointTypeEndpointTypeReadWrite, - }, - }, + Parent: "projects/test-project-for-endpoint/branches/test-branch-for-endpoint", + EndpointId: "test-endpoint", + EndpointType: postgres.EndpointTypeEndpointTypeReadWrite, }, nil }, @@ -933,14 +868,10 @@ var testDeps = map[string]prepareWorkspace{ } return &resources.PostgresDatabase{ - PostgresDatabaseConfig: resources.PostgresDatabaseConfig{ - Parent: "projects/test-project-for-database/branches/test-branch-for-database", - DatabaseId: "test-database", - DatabaseDatabaseSpec: postgres.DatabaseDatabaseSpec{ - PostgresDatabase: "app_db", - Role: "projects/test-project-for-database/branches/test-branch-for-database/roles/owner", - }, - }, + Parent: "projects/test-project-for-database/branches/test-branch-for-database", + DatabaseId: "test-database", + PostgresDatabase: "app_db", + Role: "projects/test-project-for-database/branches/test-branch-for-database/roles/owner", }, nil }, @@ -970,13 +901,9 @@ var testDeps = map[string]prepareWorkspace{ } return &resources.PostgresRole{ - PostgresRoleConfig: resources.PostgresRoleConfig{ - Parent: "projects/test-project-for-role/branches/test-branch-for-role", - RoleId: "test-role", - RoleRoleSpec: postgres.RoleRoleSpec{ - PostgresRole: "test_role", - }, - }, + Parent: "projects/test-project-for-role/branches/test-branch-for-role", + RoleId: "test-role", + PostgresRole: "test_role", }, nil }, } diff --git a/bundle/direct/dresources/app_test.go b/bundle/direct/dresources/app_test.go index d831837e66c..a32dbdeb0ed 100644 --- a/bundle/direct/dresources/app_test.go +++ b/bundle/direct/dresources/app_test.go @@ -61,7 +61,7 @@ func TestAppDoCreate_RetriesWhenAppIsDeleting(t *testing.T) { r := (&ResourceApp{}).New(client) ctx := t.Context() - name, _, err := r.DoCreate(ctx, &AppState{App: apps.App{Name: "test-app"}}) + name, _, err := r.DoCreate(ctx, &AppState{Name: "test-app"}) require.NoError(t, err) assert.Equal(t, "test-app", name) @@ -117,7 +117,7 @@ func TestAppDoCreate_RetriesWhenGetReturnsNotFound(t *testing.T) { r := (&ResourceApp{}).New(client) ctx := t.Context() - name, _, err := r.DoCreate(ctx, &AppState{App: apps.App{Name: "test-app"}}) + name, _, err := r.DoCreate(ctx, &AppState{Name: "test-app"}) require.NoError(t, err) assert.Equal(t, "test-app", name) @@ -179,15 +179,13 @@ func TestAppDoUpdate_UpdateMaskHasAllFields(t *testing.T) { // "source_code_path": "" was sent in the UpdateApp body, causing a 400. func TestAppRequestBody_StripsSourceCodePathFromForceSendFields(t *testing.T) { config := &AppState{ - App: apps.App{ - Name: "my-app", - SourceCodePath: "/Workspace/Users/me/app", - // Simulate ForceSendFields as populated by marshal.Unmarshal when the - // plan entry is deserialized from JSON (ToStructVar calls json.Unmarshal, - // which calls apps.App.UnmarshalJSON -> marshal.Unmarshal, which adds - // every basic-type field present in the JSON to ForceSendFields). - ForceSendFields: []string{"Name", "SourceCodePath"}, - }, + Name: "my-app", + SourceCodePath: "/Workspace/Users/me/app", + // Simulate ForceSendFields as populated by marshal.Unmarshal when the + // plan entry is deserialized from JSON (ToStructVar calls json.Unmarshal, + // which calls apps.App.UnmarshalJSON -> marshal.Unmarshal, which adds + // every basic-type field present in the JSON to ForceSendFields). + ForceSendFields: []string{"Name", "SourceCodePath"}, } body := appRequestBody(config) diff --git a/bundle/direct/dresources/cluster.go b/bundle/direct/dresources/cluster.go index 7f1eb26dffc..82167080c4d 100644 --- a/bundle/direct/dresources/cluster.go +++ b/bundle/direct/dresources/cluster.go @@ -106,46 +106,44 @@ func (r *ResourceCluster) PrepareState(input *resources.Cluster) *ClusterState { // Started is derived from cluster state so the planner can detect start/stop changes. func (r *ResourceCluster) RemapState(input *ClusterRemote) *ClusterState { spec := &ClusterState{ - ClusterSpec: compute.ClusterSpec{ - ApplyPolicyDefaultValues: input.ApplyPolicyDefaultValues, - Autoscale: input.Autoscale, - AutoterminationMinutes: input.AutoterminationMinutes, - AwsAttributes: input.AwsAttributes, - AzureAttributes: input.AzureAttributes, - ClusterLogConf: input.ClusterLogConf, - ClusterName: input.ClusterName, - CustomTags: input.CustomTags, - DataSecurityMode: input.DataSecurityMode, - DependencyMode: input.DependencyMode, - DockerImage: input.DockerImage, - DriverInstancePoolId: input.DriverInstancePoolId, - DriverNodeTypeId: input.DriverNodeTypeId, - DriverNodeTypeFlexibility: input.DriverNodeTypeFlexibility, - EnableElasticDisk: input.EnableElasticDisk, - EnableLocalDiskEncryption: input.EnableLocalDiskEncryption, - GcpAttributes: input.GcpAttributes, - InitScripts: input.InitScripts, - InstancePoolId: input.InstancePoolId, - IsSingleNode: input.IsSingleNode, - Kind: input.Kind, - NodeTypeId: input.NodeTypeId, - NumWorkers: input.NumWorkers, - PolicyId: input.PolicyId, - RemoteDiskThroughput: input.RemoteDiskThroughput, - RuntimeEngine: input.RuntimeEngine, - SingleUserName: input.SingleUserName, - SparkConf: input.SparkConf, - SparkEnvVars: input.SparkEnvVars, - SparkVersion: input.SparkVersion, - SshPublicKeys: input.SshPublicKeys, - TotalInitialRemoteDiskSize: input.TotalInitialRemoteDiskSize, - UseMlRuntime: input.UseMlRuntime, - WorkloadType: input.WorkloadType, - WorkerNodeTypeFlexibility: input.WorkerNodeTypeFlexibility, - ForceSendFields: utils.FilterFields[compute.ClusterSpec](input.ForceSendFields), - }, - Lifecycle: input.Lifecycle, - Libraries: input.Libraries, + ApplyPolicyDefaultValues: input.ApplyPolicyDefaultValues, + Autoscale: input.Autoscale, + AutoterminationMinutes: input.AutoterminationMinutes, + AwsAttributes: input.AwsAttributes, + AzureAttributes: input.AzureAttributes, + ClusterLogConf: input.ClusterLogConf, + ClusterName: input.ClusterName, + CustomTags: input.CustomTags, + DataSecurityMode: input.DataSecurityMode, + DependencyMode: input.DependencyMode, + DockerImage: input.DockerImage, + DriverInstancePoolId: input.DriverInstancePoolId, + DriverNodeTypeId: input.DriverNodeTypeId, + DriverNodeTypeFlexibility: input.DriverNodeTypeFlexibility, + EnableElasticDisk: input.EnableElasticDisk, + EnableLocalDiskEncryption: input.EnableLocalDiskEncryption, + GcpAttributes: input.GcpAttributes, + InitScripts: input.InitScripts, + InstancePoolId: input.InstancePoolId, + IsSingleNode: input.IsSingleNode, + Kind: input.Kind, + NodeTypeId: input.NodeTypeId, + NumWorkers: input.NumWorkers, + PolicyId: input.PolicyId, + RemoteDiskThroughput: input.RemoteDiskThroughput, + RuntimeEngine: input.RuntimeEngine, + SingleUserName: input.SingleUserName, + SparkConf: input.SparkConf, + SparkEnvVars: input.SparkEnvVars, + SparkVersion: input.SparkVersion, + SshPublicKeys: input.SshPublicKeys, + TotalInitialRemoteDiskSize: input.TotalInitialRemoteDiskSize, + UseMlRuntime: input.UseMlRuntime, + WorkloadType: input.WorkloadType, + WorkerNodeTypeFlexibility: input.WorkerNodeTypeFlexibility, + ForceSendFields: utils.FilterFields[compute.ClusterSpec](input.ForceSendFields), + Lifecycle: input.Lifecycle, + Libraries: input.Libraries, } return spec } diff --git a/bundle/direct/dresources/dashboard.go b/bundle/direct/dresources/dashboard.go index 1d37649540d..c47fed477fc 100644 --- a/bundle/direct/dresources/dashboard.go +++ b/bundle/direct/dresources/dashboard.go @@ -130,27 +130,25 @@ func (r *ResourceDashboard) DoRead(ctx context.Context, id string) (*DashboardSt } return &DashboardState{ - DashboardConfig: resources.DashboardConfig{ - DisplayName: dashboard.DisplayName, - Etag: dashboard.Etag, - WarehouseId: dashboard.WarehouseId, - SerializedDashboard: dashboard.SerializedDashboard, - ParentPath: ensureWorkspacePrefix(dashboard.ParentPath), - // diffs are detected via etags, which will change if dataset_catalog/dataset_schema is updated. - DatasetCatalog: "", - DatasetSchema: "", - - // Output only fields. - CreateTime: dashboard.CreateTime, - DashboardId: dashboard.DashboardId, - LifecycleState: dashboard.LifecycleState, - Path: dashboard.Path, - UpdateTime: dashboard.UpdateTime, - ForceSendFields: forceSendFields, - - EmbedCredentials: embedCredentials, - }, - Published: published, + DisplayName: dashboard.DisplayName, + Etag: dashboard.Etag, + WarehouseId: dashboard.WarehouseId, + SerializedDashboard: dashboard.SerializedDashboard, + ParentPath: ensureWorkspacePrefix(dashboard.ParentPath), + // diffs are detected via etags, which will change if dataset_catalog/dataset_schema is updated. + DatasetCatalog: "", + DatasetSchema: "", + + // Output only fields. + CreateTime: dashboard.CreateTime, + DashboardId: dashboard.DashboardId, + LifecycleState: dashboard.LifecycleState, + Path: dashboard.Path, + UpdateTime: dashboard.UpdateTime, + ForceSendFields: forceSendFields, + + EmbedCredentials: embedCredentials, + Published: published, }, nil } @@ -233,26 +231,24 @@ func responseToState(createOrUpdateResp *dashboards.Dashboard, publishResp *dash } return &DashboardState{ - DashboardConfig: resources.DashboardConfig{ - DisplayName: createOrUpdateResp.DisplayName, - Etag: createOrUpdateResp.Etag, - WarehouseId: createOrUpdateResp.WarehouseId, - SerializedDashboard: serializedDashboard, - ParentPath: ensureWorkspacePrefix(createOrUpdateResp.ParentPath), - DatasetCatalog: "", - DatasetSchema: "", - - // Output only fields - CreateTime: createOrUpdateResp.CreateTime, - DashboardId: createOrUpdateResp.DashboardId, - LifecycleState: createOrUpdateResp.LifecycleState, - Path: createOrUpdateResp.Path, - UpdateTime: createOrUpdateResp.UpdateTime, - ForceSendFields: forceSendFields, - - EmbedCredentials: embedCredentials, - }, - Published: published, + DisplayName: createOrUpdateResp.DisplayName, + Etag: createOrUpdateResp.Etag, + WarehouseId: createOrUpdateResp.WarehouseId, + SerializedDashboard: serializedDashboard, + ParentPath: ensureWorkspacePrefix(createOrUpdateResp.ParentPath), + DatasetCatalog: "", + DatasetSchema: "", + + // Output only fields + CreateTime: createOrUpdateResp.CreateTime, + DashboardId: createOrUpdateResp.DashboardId, + LifecycleState: createOrUpdateResp.LifecycleState, + Path: createOrUpdateResp.Path, + UpdateTime: createOrUpdateResp.UpdateTime, + ForceSendFields: forceSendFields, + + EmbedCredentials: embedCredentials, + Published: published, } } diff --git a/bundle/direct/dresources/dashboard_test.go b/bundle/direct/dresources/dashboard_test.go index 6334ed3ae0f..ad93899234d 100644 --- a/bundle/direct/dresources/dashboard_test.go +++ b/bundle/direct/dresources/dashboard_test.go @@ -6,7 +6,6 @@ import ( "strings" "testing" - "github.com/databricks/cli/bundle/config/resources" "github.com/databricks/cli/libs/structs/structpath" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -14,11 +13,9 @@ import ( func TestDashboardState_JSONSerialization_PublishedField(t *testing.T) { state := &DashboardState{ - DashboardConfig: resources.DashboardConfig{ - DisplayName: "test-dashboard", - WarehouseId: "warehouse123", - }, - Published: true, + DisplayName: "test-dashboard", + WarehouseId: "warehouse123", + Published: true, } data, err := json.Marshal(state) @@ -31,11 +28,9 @@ func TestDashboardCompactState(t *testing.T) { requireLargeEnoughToHash(t, largeDashboard) state := &DashboardState{ - DashboardConfig: resources.DashboardConfig{ - DisplayName: "test-dashboard", - Etag: "etag-123", - SerializedDashboard: largeDashboard, - }, + DisplayName: "test-dashboard", + Etag: "etag-123", + SerializedDashboard: largeDashboard, } out, err := CompactState(GetResourceConfig("dashboards"), state) diff --git a/bundle/direct/dresources/job_run.go b/bundle/direct/dresources/job_run.go index 36031ec612e..ae38dcacdbc 100644 --- a/bundle/direct/dresources/job_run.go +++ b/bundle/direct/dresources/job_run.go @@ -122,28 +122,26 @@ func makeJobRunRemote(run *jobs.Run) *JobRunRemote { } } return &JobRunRemote{ - RunNow: jobs.RunNow{ - JobId: run.JobId, - JobParameters: jobParameters, - DbtCommands: overriding.DbtCommands, - JarParams: overriding.JarParams, - NotebookParams: overriding.NotebookParams, - PipelineParams: overriding.PipelineParams, - PythonNamedParams: overriding.PythonNamedParams, - PythonParams: overriding.PythonParams, - SparkSubmitParams: overriding.SparkSubmitParams, - SqlParams: overriding.SqlParams, - // Request-only fields GetRun never reports; listed so exhaustruct - // flags any new SDK field. - IdempotencyToken: "", - Only: nil, - PerformanceTarget: "", - Queue: nil, - ForceSendFields: nil, - }, - ResultState: run.State.ResultState, - RunId: run.RunId, - RunName: run.RunName, + JobId: run.JobId, + JobParameters: jobParameters, + DbtCommands: overriding.DbtCommands, + JarParams: overriding.JarParams, + NotebookParams: overriding.NotebookParams, + PipelineParams: overriding.PipelineParams, + PythonNamedParams: overriding.PythonNamedParams, + PythonParams: overriding.PythonParams, + SparkSubmitParams: overriding.SparkSubmitParams, + SqlParams: overriding.SqlParams, + // Request-only fields GetRun never reports; listed so exhaustruct + // flags any new SDK field. + IdempotencyToken: "", + Only: nil, + PerformanceTarget: "", + Queue: nil, + ForceSendFields: nil, + ResultState: run.State.ResultState, + RunId: run.RunId, + RunName: run.RunName, // Rebuilt, not copied: the SDK records explicitly-sent fields in // ForceSendFields, which makes zero values workspace-dependent. State: &jobs.RunState{ diff --git a/bundle/direct/dresources/job_run_test.go b/bundle/direct/dresources/job_run_test.go index 5da8feb39e0..5dc964c360f 100644 --- a/bundle/direct/dresources/job_run_test.go +++ b/bundle/direct/dresources/job_run_test.go @@ -368,7 +368,7 @@ func TestJobRunCreateSendsAFreshIdempotencyToken(t *testing.T) { return jobs.RunNowResponse{RunId: int64(123 + len(tokens))} }) r := (&ResourceJobRun{}).New(jobRunClientFor(t, server)) - config := &JobRunState{RunNow: jobs.RunNow{JobId: 456}} + config := &JobRunState{JobId: 456} for range 2 { _, _, err := r.DoCreate(t.Context(), config) diff --git a/bundle/direct/dresources/model.go b/bundle/direct/dresources/model.go index ad8a9cca5a3..83a4f8832aa 100644 --- a/bundle/direct/dresources/model.go +++ b/bundle/direct/dresources/model.go @@ -103,19 +103,17 @@ func (r *ResourceMlflowModel) DoUpdate(ctx context.Context, id string, config *m // response so references against the post-update remote state resolve to // real values until the next plan's DoRead. return &MlflowModelRemote{ - ModelDatabricks: ml.ModelDatabricks{ - CreationTimestamp: response.RegisteredModel.CreationTimestamp, - Description: response.RegisteredModel.Description, - Id: "", - LastUpdatedTimestamp: response.RegisteredModel.LastUpdatedTimestamp, - LatestVersions: response.RegisteredModel.LatestVersions, - Name: response.RegisteredModel.Name, - PermissionLevel: "", - Tags: response.RegisteredModel.Tags, - UserId: response.RegisteredModel.UserId, - ForceSendFields: utils.FilterFields[ml.ModelDatabricks](response.RegisteredModel.ForceSendFields, "Id", "PermissionLevel"), - }, - ModelId: modelId, + CreationTimestamp: response.RegisteredModel.CreationTimestamp, + Description: response.RegisteredModel.Description, + Id: "", + LastUpdatedTimestamp: response.RegisteredModel.LastUpdatedTimestamp, + LatestVersions: response.RegisteredModel.LatestVersions, + Name: response.RegisteredModel.Name, + PermissionLevel: "", + Tags: response.RegisteredModel.Tags, + UserId: response.RegisteredModel.UserId, + ForceSendFields: utils.FilterFields[ml.ModelDatabricks](response.RegisteredModel.ForceSendFields, "Id", "PermissionLevel"), + ModelId: modelId, }, nil } diff --git a/bundle/direct/dresources/permissions_test.go b/bundle/direct/dresources/permissions_test.go index 20ef61b75f0..e6b63d37436 100644 --- a/bundle/direct/dresources/permissions_test.go +++ b/bundle/direct/dresources/permissions_test.go @@ -4,7 +4,6 @@ import ( "testing" "github.com/databricks/cli/bundle/config/resources" - "github.com/databricks/databricks-sdk-go/service/catalog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -58,7 +57,7 @@ func TestPrepareInputConfigPassthrough(t *testing.T) { adapter, err := NewAdapter(SupportedResources["schemas"], "schemas", nil) require.NoError(t, err) - input := &resources.Schema{CreateSchema: catalog.CreateSchema{Name: "myschema"}} + input := &resources.Schema{Name: "myschema"} sv, err := adapter.PrepareInputConfig(input, "resources.schemas.foo") require.NoError(t, err) diff --git a/bundle/direct/dresources/secret_scope.go b/bundle/direct/dresources/secret_scope.go index 6c326f0e36f..7ad0b0d469a 100644 --- a/bundle/direct/dresources/secret_scope.go +++ b/bundle/direct/dresources/secret_scope.go @@ -51,25 +51,21 @@ func (*ResourceSecretScope) New(client *databricks.WorkspaceClient) *ResourceSec func (*ResourceSecretScope) PrepareState(input *resources.SecretScope) *SecretScopeConfig { return &SecretScopeConfig{ - CreateScope: workspace.CreateScope{ - Scope: input.Name, - ScopeBackendType: input.BackendType, - BackendAzureKeyvault: input.KeyvaultMetadata, - InitialManagePrincipal: "", - ForceSendFields: nil, - }, + Scope: input.Name, + ScopeBackendType: input.BackendType, + BackendAzureKeyvault: input.KeyvaultMetadata, + InitialManagePrincipal: "", + ForceSendFields: nil, } } func (*ResourceSecretScope) RemapState(remote *SecretScopeRemote) *SecretScopeConfig { return &SecretScopeConfig{ - CreateScope: workspace.CreateScope{ - Scope: remote.Scope, - ScopeBackendType: remote.ScopeBackendType, - BackendAzureKeyvault: remote.BackendAzureKeyvault, - InitialManagePrincipal: "", - ForceSendFields: utils.FilterFields[workspace.CreateScope](remote.ForceSendFields), - }, + Scope: remote.Scope, + ScopeBackendType: remote.ScopeBackendType, + BackendAzureKeyvault: remote.BackendAzureKeyvault, + InitialManagePrincipal: "", + ForceSendFields: utils.FilterFields[workspace.CreateScope](remote.ForceSendFields), } } diff --git a/bundle/direct/dresources/sql_warehouse.go b/bundle/direct/dresources/sql_warehouse.go index 0cb0a614055..7d4578dd6f2 100644 --- a/bundle/direct/dresources/sql_warehouse.go +++ b/bundle/direct/dresources/sql_warehouse.go @@ -72,24 +72,22 @@ func (*ResourceSqlWarehouse) PrepareState(input *resources.SqlWarehouse) *SqlWar // Started is derived from warehouse state so the planner can detect start/stop changes. func (*ResourceSqlWarehouse) RemapState(warehouse *SqlWarehouseRemote) *SqlWarehouseState { return &SqlWarehouseState{ - CreateWarehouseRequest: sql.CreateWarehouseRequest{ - AutoStopMins: warehouse.AutoStopMins, - Channel: warehouse.Channel, - ClusterSize: warehouse.ClusterSize, - CreatorName: warehouse.CreatorName, - EnablePhoton: warehouse.EnablePhoton, - EnableServerlessCompute: warehouse.EnableServerlessCompute, - InstanceProfileArn: warehouse.InstanceProfileArn, - MaxNumClusters: warehouse.MaxNumClusters, - MinNumClusters: warehouse.MinNumClusters, - Name: warehouse.Name, - SpotInstancePolicy: warehouse.SpotInstancePolicy, - StatementTimeout: warehouse.StatementTimeout, - Tags: warehouse.Tags, - WarehouseType: sql.CreateWarehouseRequestWarehouseType(warehouse.WarehouseType), - ForceSendFields: utils.FilterFields[sql.CreateWarehouseRequest](warehouse.ForceSendFields), - }, - Lifecycle: warehouse.Lifecycle, + AutoStopMins: warehouse.AutoStopMins, + Channel: warehouse.Channel, + ClusterSize: warehouse.ClusterSize, + CreatorName: warehouse.CreatorName, + EnablePhoton: warehouse.EnablePhoton, + EnableServerlessCompute: warehouse.EnableServerlessCompute, + InstanceProfileArn: warehouse.InstanceProfileArn, + MaxNumClusters: warehouse.MaxNumClusters, + MinNumClusters: warehouse.MinNumClusters, + Name: warehouse.Name, + SpotInstancePolicy: warehouse.SpotInstancePolicy, + StatementTimeout: warehouse.StatementTimeout, + Tags: warehouse.Tags, + WarehouseType: sql.CreateWarehouseRequestWarehouseType(warehouse.WarehouseType), + ForceSendFields: utils.FilterFields[sql.CreateWarehouseRequest](warehouse.ForceSendFields), + Lifecycle: warehouse.Lifecycle, } } diff --git a/bundle/direct/dresources/state_compaction_test.go b/bundle/direct/dresources/state_compaction_test.go index 9bfdcc92479..c39598d4601 100644 --- a/bundle/direct/dresources/state_compaction_test.go +++ b/bundle/direct/dresources/state_compaction_test.go @@ -5,7 +5,6 @@ import ( "strings" "testing" - "github.com/databricks/cli/bundle/config/resources" "github.com/databricks/cli/libs/structs/structaccess" "github.com/databricks/cli/libs/structs/structpath" "github.com/stretchr/testify/assert" @@ -64,7 +63,7 @@ func TestHashedFieldsAreValid(t *testing.T) { // hashed_fields path rather than mutating memory shared with the deploy value. func TestCompactStateRejectsNestedField(t *testing.T) { cfg := &ResourceLifecycleConfig{HashedFields: []string{"foo.bar"}} - state := &DashboardState{DashboardConfig: resources.DashboardConfig{SerializedDashboard: `{"a":1}`}} + state := &DashboardState{SerializedDashboard: `{"a":1}`} _, err := CompactState(cfg, state) require.ErrorContains(t, err, "must be a top-level field") @@ -74,9 +73,9 @@ func TestCompactStateRejectsNestedField(t *testing.T) { // value is not a string. hashed_fields values are serialized to a string before the deploy // engine runs, so a non-string here is a broken invariant, not a user error. func TestCompactStateRejectsNonStringField(t *testing.T) { - state := &DashboardState{DashboardConfig: resources.DashboardConfig{ + state := &DashboardState{ SerializedDashboard: map[string]any{"pages": []any{}}, - }} + } assert.Panics(t, func() { _, _ = CompactState(GetResourceConfig("dashboards"), state) @@ -86,7 +85,7 @@ func TestCompactStateRejectsNonStringField(t *testing.T) { // TestCompactStateSkipsNilField verifies an unset hashed_fields value passes through // untouched, since there is nothing to hash. func TestCompactStateSkipsNilField(t *testing.T) { - state := &DashboardState{DashboardConfig: resources.DashboardConfig{SerializedDashboard: nil}} + state := &DashboardState{SerializedDashboard: nil} out, err := CompactState(GetResourceConfig("dashboards"), state) require.NoError(t, err) @@ -97,7 +96,7 @@ func TestCompactStateSkipsNilField(t *testing.T) { // type with no hashed_fields declaration and for a nil config, returning the same // value untouched. func TestCompactStateNoDeclaredFields(t *testing.T) { - state := &DashboardState{DashboardConfig: resources.DashboardConfig{SerializedDashboard: `{"a":1}`}} + state := &DashboardState{SerializedDashboard: `{"a":1}`} out, err := CompactState(GetResourceConfig("jobs"), state) require.NoError(t, err) @@ -115,8 +114,8 @@ func TestCompactStateNoDeclaredFields(t *testing.T) { func TestCompactStateMigratesLegacyFullContent(t *testing.T) { requireLargeEnoughToHash(t, largeDashboard) - legacy := &DashboardState{DashboardConfig: resources.DashboardConfig{SerializedDashboard: largeDashboard}} - config := &DashboardState{DashboardConfig: resources.DashboardConfig{SerializedDashboard: largeDashboard}} + legacy := &DashboardState{SerializedDashboard: largeDashboard} + config := &DashboardState{SerializedDashboard: largeDashboard} cfg := GetResourceConfig("dashboards") compactedLegacy, err := CompactState(cfg, legacy) @@ -242,7 +241,7 @@ func TestStateHashing(t *testing.T) { // CompactState delegates to hashStateValue, so a dashboard's serialized_dashboard // compacts to the same value. - state := &DashboardState{DashboardConfig: resources.DashboardConfig{SerializedDashboard: tc.content}} + state := &DashboardState{SerializedDashboard: tc.content} out, err := CompactState(GetResourceConfig("dashboards"), state) require.NoError(t, err) assert.Equal(t, tc.want, out.(*DashboardState).SerializedDashboard) diff --git a/bundle/direct/dresources/vector_search_index.go b/bundle/direct/dresources/vector_search_index.go index 57aa9d2611b..857e3fc44db 100644 --- a/bundle/direct/dresources/vector_search_index.go +++ b/bundle/direct/dresources/vector_search_index.go @@ -83,16 +83,14 @@ func (*ResourceVectorSearchIndex) PrepareState(input *resources.VectorSearchInde func (*ResourceVectorSearchIndex) RemapState(remote *VectorSearchIndexRemote) *VectorSearchIndexState { state := &VectorSearchIndexState{ - CreateVectorIndexRequest: vectorsearch.CreateVectorIndexRequest{ - DeltaSyncIndexSpec: nil, // need to remap below - DirectAccessIndexSpec: remote.DirectAccessIndexSpec, - IndexSubtype: remote.IndexSubtype, - Name: remote.Name, - EndpointName: remote.EndpointName, - IndexType: remote.IndexType, - PrimaryKey: remote.PrimaryKey, - }, - EndpointUuid: remote.EndpointUuid, + DeltaSyncIndexSpec: nil, // need to remap below + DirectAccessIndexSpec: remote.DirectAccessIndexSpec, + IndexSubtype: remote.IndexSubtype, + Name: remote.Name, + EndpointName: remote.EndpointName, + IndexType: remote.IndexType, + PrimaryKey: remote.PrimaryKey, + EndpointUuid: remote.EndpointUuid, } if remote.DeltaSyncIndexSpec != nil { state.DeltaSyncIndexSpec = &vectorsearch.DeltaSyncVectorIndexSpecRequest{ diff --git a/bundle/direct/dstate/state.go b/bundle/direct/dstate/state.go index a0be3d80629..c0e7c4bfd89 100644 --- a/bundle/direct/dstate/state.go +++ b/bundle/direct/dstate/state.go @@ -277,13 +277,11 @@ func (db *DeploymentState) RecordFailure(resourceKey, resourceID string, cause e func NewDatabase(lineage string, serial int) Database { return Database{ - Header: Header{ - StateVersion: currentStateVersion, - CLIVersion: build.GetInfo().Version, - Lineage: lineage, - Serial: serial, - }, - State: make(map[string]ResourceEntry), + StateVersion: currentStateVersion, + CLIVersion: build.GetInfo().Version, + Lineage: lineage, + Serial: serial, + State: make(map[string]ResourceEntry), } } diff --git a/bundle/direct/dstate/state_test.go b/bundle/direct/dstate/state_test.go index c8d78d150d6..6eb3d877fff 100644 --- a/bundle/direct/dstate/state_test.go +++ b/bundle/direct/dstate/state_test.go @@ -183,15 +183,15 @@ func TestHeaderOnlyWALRecoveryDoesNotAdvanceSerial(t *testing.T) { } func TestEmptyFeatureStateAcceptedWithoutFlippingVersion(t *testing.T) { - empty := &Database{Header: Header{StateVersion: 3}} + empty := &Database{StateVersion: 3} require.NoError(t, migrateState(empty)) assert.Equal(t, 3, empty.StateVersion, "v3 + no features keeps its on-disk version, not flipped to v2") // Version 3 states with unknown features must still be refused. - withFeature := &Database{Header: Header{ + withFeature := &Database{ StateVersion: 3, Features: map[string]struct{}{"future_feature": {}}, - }} + } err := migrateState(withFeature) require.Error(t, err) assert.Contains(t, err.Error(), "requires features this CLI does not support") diff --git a/bundle/phases/telemetry.go b/bundle/phases/telemetry.go index 0806e13ae66..99464f3ef24 100644 --- a/bundle/phases/telemetry.go +++ b/bundle/phases/telemetry.go @@ -365,7 +365,7 @@ func LogDeployTelemetry(ctx context.Context, b *bundle.Bundle, errMsg string) { DeploymentId: b.Metrics.DeploymentId.String(), ErrorMessage: errMsg, - ResourceCount: resourcesCount, + ResourceCount: resourcesCount, //nolint:staticcheck // SA1019: populated alongside ResourcesMetadata during the transition ResourceJobCount: int64(len(b.Config.Resources.Jobs)), ResourcePipelineCount: int64(len(b.Config.Resources.Pipelines)), ResourceModelCount: int64(len(b.Config.Resources.Models)), diff --git a/bundle/phases/telemetry_test.go b/bundle/phases/telemetry_test.go index 0cea4df5794..d6badfaa792 100644 --- a/bundle/phases/telemetry_test.go +++ b/bundle/phases/telemetry_test.go @@ -113,17 +113,17 @@ func aiRuntimeJob(extraTask bool) *resources.Job { if extraTask { tasks = append(tasks, jobs.Task{TaskKey: "prep"}) } - return &resources.Job{JobSettings: jobs.JobSettings{Tasks: tasks}} + return &resources.Job{Tasks: tasks} } func TestAiRuntimeTaskMetrics(t *testing.T) { scheduledJob := aiRuntimeJob(false) scheduledJob.Schedule = &jobs.CronSchedule{QuartzCronExpression: "0 0 * * * ?"} - forEachJob := &resources.Job{JobSettings: jobs.JobSettings{Tasks: []jobs.Task{{ + forEachJob := &resources.Job{Tasks: []jobs.Task{{ TaskKey: "fanout", ForEachTask: &jobs.ForEachTask{Task: jobs.Task{AiRuntimeTask: &jobs.AiRuntimeTask{Experiment: "exp"}}}, - }}}} + }}} tests := []struct { name string diff --git a/bundle/run/app_test.go b/bundle/run/app_test.go index d43e8a92b16..76946938ebb 100644 --- a/bundle/run/app_test.go +++ b/bundle/run/app_test.go @@ -274,9 +274,7 @@ func TestStopApp(t *testing.T) { func TestBuildAppDeploymentWithValueFrom(t *testing.T) { app := &resources.App{ - App: apps.App{ - SourceCodePath: "/path/to/app", - }, + SourceCodePath: "/path/to/app", Config: &resources.AppConfig{ Command: []string{"python", "app.py"}, Env: []resources.AppEnvVar{ diff --git a/bundle/run/job_args_test.go b/bundle/run/job_args_test.go index 41a3c29e23e..ad7433dbb7a 100644 --- a/bundle/run/job_args_test.go +++ b/bundle/run/job_args_test.go @@ -11,16 +11,14 @@ import ( func TestJobParameterArgs(t *testing.T) { a := jobParameterArgs{ &resources.Job{ - JobSettings: jobs.JobSettings{ - Parameters: []jobs.JobParameterDefinition{ - { - Name: "foo", - Default: "value", - }, - { - Name: "bar", - Default: "value", - }, + Parameters: []jobs.JobParameterDefinition{ + { + Name: "foo", + Default: "value", + }, + { + Name: "bar", + Default: "value", }, }, }, @@ -70,14 +68,12 @@ func TestJobParameterArgs(t *testing.T) { func TestJobTaskNotebookParamArgs(t *testing.T) { a := jobTaskNotebookParamArgs{ &resources.Job{ - JobSettings: jobs.JobSettings{ - Tasks: []jobs.Task{ - { - NotebookTask: &jobs.NotebookTask{ - BaseParameters: map[string]string{ - "foo": "value", - "bar": "value", - }, + Tasks: []jobs.Task{ + { + NotebookTask: &jobs.NotebookTask{ + BaseParameters: map[string]string{ + "foo": "value", + "bar": "value", }, }, }, diff --git a/bundle/run/job_options_test.go b/bundle/run/job_options_test.go index f5ae401d1be..e54fdba7e32 100644 --- a/bundle/run/job_options_test.go +++ b/bundle/run/job_options_test.go @@ -188,12 +188,10 @@ func TestJobOptionsSqlParamsMultiple(t *testing.T) { func TestJobOptionsValidateIfJobHasJobParameters(t *testing.T) { job := &resources.Job{ - JobSettings: jobs.JobSettings{ - Parameters: []jobs.JobParameterDefinition{ - { - Name: "param", - Default: "value", - }, + Parameters: []jobs.JobParameterDefinition{ + { + Name: "param", + Default: "value", }, }, } @@ -219,9 +217,7 @@ func TestJobOptionsValidateIfJobHasJobParameters(t *testing.T) { func TestJobOptionsValidateIfJobHasNoJobParameters(t *testing.T) { job := &resources.Job{ - JobSettings: jobs.JobSettings{ - Parameters: []jobs.JobParameterDefinition{}, - }, + Parameters: []jobs.JobParameterDefinition{}, } { diff --git a/bundle/run/job_test.go b/bundle/run/job_test.go index f1ef38b4be8..0343b09e728 100644 --- a/bundle/run/job_test.go +++ b/bundle/run/job_test.go @@ -17,13 +17,11 @@ import ( func TestConvertPythonParams(t *testing.T) { job := &resources.Job{ - JobSettings: jobs.JobSettings{ - Tasks: []jobs.Task{ - {PythonWheelTask: &jobs.PythonWheelTask{ - PackageName: "my_test_code", - EntryPoint: "run", - }}, - }, + Tasks: []jobs.Task{ + {PythonWheelTask: &jobs.PythonWheelTask{ + PackageName: "my_test_code", + EntryPoint: "run", + }}, }, } b := &bundle.Bundle{ @@ -242,10 +240,8 @@ func TestJobRunnerRunNoWaitGetRunFails(t *testing.T) { func TestJobRunnerRestartForContinuousUnpausedJobs(t *testing.T) { job := &resources.Job{ ID: "123", - JobSettings: jobs.JobSettings{ - Continuous: &jobs.Continuous{ - PauseStatus: jobs.PauseStatusUnpaused, - }, + Continuous: &jobs.Continuous{ + PauseStatus: jobs.PauseStatusUnpaused, }, } b := &bundle.Bundle{ diff --git a/bundle/trampoline/trampoline_test.go b/bundle/trampoline/trampoline_test.go index 08a55c5a0f1..d4e46795619 100644 --- a/bundle/trampoline/trampoline_test.go +++ b/bundle/trampoline/trampoline_test.go @@ -104,14 +104,12 @@ func TestGenerateTrampolineWithCollidingKeys(t *testing.T) { newJob := func(taskKey string) *resources.Job { return &resources.Job{ - JobSettings: jobs.JobSettings{ - Tasks: []jobs.Task{ - { - TaskKey: taskKey, - PythonWheelTask: &jobs.PythonWheelTask{ - PackageName: "test", - EntryPoint: "run", - }, + Tasks: []jobs.Task{ + { + TaskKey: taskKey, + PythonWheelTask: &jobs.PythonWheelTask{ + PackageName: "test", + EntryPoint: "run", }, }, }, diff --git a/cmd/air/runconfig.go b/cmd/air/runconfig.go index 53846400a68..62bc411292b 100644 --- a/cmd/air/runconfig.go +++ b/cmd/air/runconfig.go @@ -712,11 +712,11 @@ func configLeafName(path string) string { // cutLast splits s around the final instance of sep. func cutLast(s, sep string) (before, after string, found bool) { - i := strings.LastIndex(s, sep) - if i < 0 { + before, after, ok := strings.CutLast(s, sep) + if !ok { return s, "", false } - return s[:i], s[i+len(sep):], true + return before, after, true } // unknownConfigFieldError reports an unresolvable segment, naming the valid diff --git a/cmd/api/api_test.go b/cmd/api/api_test.go index 3fe132b8e23..d12eb64f8c8 100644 --- a/cmd/api/api_test.go +++ b/cmd/api/api_test.go @@ -289,7 +289,7 @@ func TestBuildRequestBody(t *testing.T) { var p flags.JsonFlag require.NoError(t, p.Set(`{"a": 1,}`)) _, err := buildRequestBody(method, &p) - assert.ErrorContains(t, err, "error decoding JSON at (inline):1:9") + assert.ErrorContains(t, err, "error decoding JSON at (inline):1:8") }) } } diff --git a/cmd/pipelines/history_test.go b/cmd/pipelines/history_test.go index e2c4f948bdd..a125d74d0d9 100644 --- a/cmd/pipelines/history_test.go +++ b/cmd/pipelines/history_test.go @@ -273,17 +273,17 @@ func TestFilterUpdates(t *testing.T) { t.Run(tt.name, func(t *testing.T) { result, err := filterUpdates(tt.updates, tt.startTime, tt.endTime) if err != nil { - t.Errorf("filterUpdates(updates, %d, %d) returned error: %v", tt.startTime, tt.endTime, err) + t.Errorf("filterUpdates() returned error: %v", err) } if len(result) != tt.expectedCount { - t.Errorf("filterUpdates(updates, %d, %d) returned %d updates, want %d", tt.startTime, tt.endTime, len(result), tt.expectedCount) + t.Errorf("filterUpdates() returned %d updates, want %d", len(result), tt.expectedCount) } if tt.expectedCount > 0 { if result[0].CreationTime != tt.expectedFirst { - t.Errorf("filterUpdates(updates, %d, %d) first update = %d, want %d", tt.startTime, tt.endTime, result[0].CreationTime, tt.expectedFirst) + t.Errorf("filterUpdates() first update = %d, want %d", result[0].CreationTime, tt.expectedFirst) } if result[len(result)-1].CreationTime != tt.expectedLast { - t.Errorf("filterUpdates(updates, %d, %d) last update = %d, want %d", tt.startTime, tt.endTime, result[len(result)-1].CreationTime, tt.expectedLast) + t.Errorf("filterUpdates() last update = %d, want %d", result[len(result)-1].CreationTime, tt.expectedLast) } } }) diff --git a/cmd/pipelines/run_test.go b/cmd/pipelines/run_test.go index 38fc84b3fb2..9937cb83d0d 100644 --- a/cmd/pipelines/run_test.go +++ b/cmd/pipelines/run_test.go @@ -30,8 +30,8 @@ func TestDisplayPipelineUpdate(t *testing.T) { Id: "pipeline-789", Serverless: true, Channel: "CURRENT", - Continuous: true, - Development: true, + Continuous: true, //nolint:staticcheck // SA1019: pipeline continuous is deprecated in the SDK but remains a supported bundle config field + Development: true, //nolint:staticcheck // SA1019: pipeline development is deprecated in the SDK but remains a supported bundle config field Catalog: "test_catalog", Schema: "test_schema", }, diff --git a/experimental/ssh/internal/fuse/process.go b/experimental/ssh/internal/fuse/process.go index cf15d3900ca..a78dd9b59a7 100644 --- a/experimental/ssh/internal/fuse/process.go +++ b/experimental/ssh/internal/fuse/process.go @@ -44,11 +44,11 @@ func parseRegistration(pid int, namespace, stat string) (Registration, error) { // Field 2 can contain spaces and parentheses. Count field 22 from the last ')'. // https://man7.org/linux/man-pages/man5/proc_pid_stat.5.html - end := strings.LastIndex(stat, ")") - if end < 0 { + _, after, ok := strings.CutLast(stat, ")") + if !ok { return Registration{}, errors.New("missing process name in process stat") } - fields := strings.Fields(stat[end+1:]) + fields := strings.Fields(after) const startTimeIndex = 19 if len(fields) <= startTimeIndex { return Registration{}, errors.New("missing start time in process stat") diff --git a/experimental/ssh/internal/server/descendants.go b/experimental/ssh/internal/server/descendants.go index 89163f56465..e23b8c499ee 100644 --- a/experimental/ssh/internal/server/descendants.go +++ b/experimental/ssh/internal/server/descendants.go @@ -24,12 +24,12 @@ type procStat struct { func parseProcStat(content string) (procStat, error) { // Anchor on the last ')' instead of splitting from the left: the second field is the // executable name, and it can contain both spaces and parentheses. - comm := strings.LastIndex(content, ")") - if comm < 0 { + _, after, ok := strings.CutLast(content, ")") + if !ok { return procStat{}, fmt.Errorf("no comm field in %q", content) } // state, ppid and pgrp are the three fields that follow comm. - fields := strings.Fields(content[comm+1:]) + fields := strings.Fields(after) if len(fields) < 3 { return procStat{}, fmt.Errorf("expected state, ppid and pgrp after comm in %q", content) } diff --git a/go.mod b/go.mod index e4c2ec6a129..d6385c07216 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/databricks/cli -go 1.26.0 +go 1.27.0 -toolchain go1.26.9 +toolchain go1.27.2 require ( dario.cat/mergo v1.0.2 // BSD-3-Clause @@ -14,6 +14,10 @@ require ( github.com/charmbracelet/lipgloss v1.1.0 // MIT github.com/charmbracelet/x/ansi v0.11.8 // MIT github.com/databricks/databricks-sdk-go v0.188.0 // Apache-2.0 + github.com/databricks/sdk-go/auth v0.0.1-dev.8 // Apache-2.0 + github.com/databricks/sdk-go/core v0.0.1-dev.8 // Apache-2.0 + github.com/databricks/sdk-go/files v0.0.1-dev.10 // Apache-2.0 + github.com/databricks/sdk-go/options v0.0.1-dev.9 // Apache-2.0 github.com/google/jsonschema-go v0.4.3 // MIT github.com/google/uuid v1.6.0 // BSD-3-Clause github.com/gorilla/websocket v1.5.3 // BSD-2-Clause @@ -43,14 +47,6 @@ require ( gopkg.in/ini.v1 v1.67.3 // Apache-2.0 ) -require github.com/databricks/sdk-go/core v0.0.1-dev.8 // Apache-2.0 - -require ( - github.com/databricks/sdk-go/auth v0.0.1-dev.8 // Apache-2.0 - github.com/databricks/sdk-go/files v0.0.1-dev.10 // Apache-2.0 - github.com/databricks/sdk-go/options v0.0.1-dev.9 // Apache-2.0 -) - require ( cloud.google.com/go/auth v0.18.2 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect diff --git a/libs/auth/introspect.go b/libs/auth/introspect.go index 65588010143..f6adb417dba 100644 --- a/libs/auth/introspect.go +++ b/libs/auth/introspect.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "fmt" - "io" "net/http" "strconv" "strings" @@ -49,8 +48,6 @@ func IntrospectToken(ctx context.Context, host, accessToken string, httpClient * defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - // Drain the body so the underlying TCP connection can be reused. - _, _ = io.Copy(io.Discard, resp.Body) return nil, fmt.Errorf("introspection endpoint returned status %d", resp.StatusCode) } diff --git a/libs/auth/storage/memory_test.go b/libs/auth/storage/memory_test.go index f7c0815a946..abccf029248 100644 --- a/libs/auth/storage/memory_test.go +++ b/libs/auth/storage/memory_test.go @@ -82,22 +82,19 @@ func TestMemoryStore_ConcurrentPutAndLookup(t *testing.T) { const goroutines = 20 const iterations = 100 var wg sync.WaitGroup - wg.Add(goroutines * 2) for i := range goroutines { prefix := fmt.Sprintf("writer-%d", i) - go func() { - defer wg.Done() + wg.Go(func() { for j := range iterations { key := fmt.Sprintf("%s-%d", prefix, j) _ = s.Put(key, Entry{Token: &oauth2.Token{AccessToken: key}}) } - }() - go func() { - defer wg.Done() + }) + wg.Go(func() { for j := range iterations { _, _ = s.Lookup(fmt.Sprintf("%s-%d", prefix, j)) } - }() + }) } wg.Wait() } diff --git a/libs/dockercredentials/profile_test.go b/libs/dockercredentials/profile_test.go index da30efeac65..8f426124d8d 100644 --- a/libs/dockercredentials/profile_test.go +++ b/libs/dockercredentials/profile_test.go @@ -22,7 +22,7 @@ type invalidRefreshTokenError struct { error } -func (e *invalidRefreshTokenError) As(target any) bool { +func (e invalidRefreshTokenError) As(target any) bool { invalidRefreshToken, ok := target.(**u2m.InvalidRefreshTokenError) if !ok { return false @@ -236,7 +236,7 @@ func TestProfileForRegistry(t *testing.T) { } func TestRewriteProfileErrorPreservesInvalidRefreshTokenCause(t *testing.T) { - cause := &invalidRefreshTokenError{error: errors.New("raw token refresh error")} + cause := invalidRefreshTokenError{error: errors.New("raw token refresh error")} err := dockercredentials.RewriteProfileError(t.Context(), workspaceProfile("workspace"), fmt.Errorf("refresh token: %w", cause)) assert.EqualError(t, err, `A new access token could not be retrieved because the refresh token is invalid. To reauthenticate, run the following command: diff --git a/libs/dyn/convert/from_typed_test.go b/libs/dyn/convert/from_typed_test.go index be43b20256b..3420c46cbd7 100644 --- a/libs/dyn/convert/from_typed_test.go +++ b/libs/dyn/convert/from_typed_test.go @@ -910,11 +910,9 @@ func TestFromTypedForceSendFieldsEmbedded(t *testing.T) { } src := Outer{ - Inner: Inner{ - Field: nil, - ForceSendFields: []string{"Field"}, - }, - Other: "value", + Field: nil, + ForceSendFields: []string{"Field"}, + Other: "value", } nv, err := FromTyped(src, dyn.NilValue) diff --git a/libs/dyn/jsonloader/json_test.go b/libs/dyn/jsonloader/json_test.go index 1de43c933f1..e274de559ce 100644 --- a/libs/dyn/jsonloader/json_test.go +++ b/libs/dyn/jsonloader/json_test.go @@ -79,7 +79,7 @@ const malformedArray = ` func TestJsonLoaderMalformedArray(t *testing.T) { _, err := LoadJSON([]byte(malformedArray), "path/to/file.json") - assert.ErrorContains(t, err, "error decoding JSON at path/to/file.json:6:28: invalid character ']' looking for beginning of value") + assert.ErrorContains(t, err, "error decoding JSON at path/to/file.json:6:27: invalid character ',' looking for beginning of value") } const eofData = ` diff --git a/libs/filer/dbfs_client.go b/libs/filer/dbfs_client.go index ce9286ea8d9..f5d6c5993e4 100644 --- a/libs/filer/dbfs_client.go +++ b/libs/filer/dbfs_client.go @@ -269,7 +269,7 @@ func (w *DbfsClient) ReadDir(ctx context.Context, name string) ([]fs.DirEntry, e info := make([]fs.DirEntry, len(res.Files)) for i, v := range res.Files { - info[i] = dbfsDirEntry{dbfsFileInfo: dbfsFileInfo{fi: v}} + info[i] = dbfsDirEntry{fi: v} } // Sort by name for parity with os.ReadDir. diff --git a/libs/filer/workspace_files_cache.go b/libs/filer/workspace_files_cache.go index 701a77b9911..3f7175f0486 100644 --- a/libs/filer/workspace_files_cache.go +++ b/libs/filer/workspace_files_cache.go @@ -100,7 +100,7 @@ type readDirEntry struct { // Create a new readDirEntry. func newReadDirEntry(name string) *readDirEntry { - return &readDirEntry{cacheEntry: cacheEntry{done: make(chan struct{}), name: name}} + return &readDirEntry{done: make(chan struct{}), name: name} } // Execute the operation and signal completion. @@ -140,7 +140,7 @@ type statEntry struct { // Create a new stat entry. func newStatEntry(name string) *statEntry { - return &statEntry{cacheEntry: cacheEntry{done: make(chan struct{}), name: name}} + return &statEntry{done: make(chan struct{}), name: name} } // Execute the operation and signal completion. diff --git a/libs/filer/workspace_files_cache_test.go b/libs/filer/workspace_files_cache_test.go index dffa9ff3849..38d028ac8ba 100644 --- a/libs/filer/workspace_files_cache_test.go +++ b/libs/filer/workspace_files_cache_test.go @@ -133,9 +133,7 @@ func TestWorkspaceFilesCache_ReadDirCacheIsolation(t *testing.T) { // Modify the entry to check that mutations are not reflected in the cache. entries[0] = wsfsDirEntry{ wsfsFileInfo{ - ObjectInfo: workspace.ObjectInfo{ - Path: "tainted", - }, + Path: "tainted", }, } @@ -258,18 +256,14 @@ func TestWorkspaceFilesCache_ReadDirTriggersReadahead(t *testing.T) { "a": { wsfsDirEntry{ wsfsFileInfo{ - ObjectInfo: workspace.ObjectInfo{ - Path: "b1", - ObjectType: workspace.ObjectTypeDirectory, - }, + Path: "b1", + ObjectType: workspace.ObjectTypeDirectory, }, }, wsfsDirEntry{ wsfsFileInfo{ - ObjectInfo: workspace.ObjectInfo{ - Path: "b2", - ObjectType: workspace.ObjectTypeDirectory, - }, + Path: "b2", + ObjectType: workspace.ObjectTypeDirectory, }, }, }, diff --git a/libs/filer/workspace_files_extensions_client_test.go b/libs/filer/workspace_files_extensions_client_test.go index 438ac21ec47..6d7c37a9ada 100644 --- a/libs/filer/workspace_files_extensions_client_test.go +++ b/libs/filer/workspace_files_extensions_client_test.go @@ -162,11 +162,9 @@ func TestFilerWorkspaceFilesExtensionsErrorsOnDupName(t *testing.T) { // Mock bespoke API calls to /api/2.0/workspace/get-status, that are // used to figure out the right file extension for the notebook. statNotebook := wsfsFileInfo{ - ObjectInfo: workspace.ObjectInfo{ - Path: tc.notebookPath, - Language: tc.language, - ObjectType: workspace.ObjectTypeNotebook, - }, + Path: tc.notebookPath, + Language: tc.language, + ObjectType: workspace.ObjectTypeNotebook, ReposExportFormat: tc.notebookExportFormat, } @@ -249,11 +247,9 @@ func TestFilerWorkspaceFilesExtensionsReadDirWithUnmappedLanguage(t *testing.T) // Mock the get-status call used to figure out the notebook's file extension. statNotebook := wsfsFileInfo{ - ObjectInfo: workspace.ObjectInfo{ - Path: "/dir/foo", - Language: tc.language, - ObjectType: workspace.ObjectTypeNotebook, - }, + Path: "/dir/foo", + Language: tc.language, + ObjectType: workspace.ObjectTypeNotebook, ReposExportFormat: tc.notebookExportFormat, } diff --git a/libs/flags/json_flag_test.go b/libs/flags/json_flag_test.go index 4e4e099dbb1..675e1014922 100644 --- a/libs/flags/json_flag_test.go +++ b/libs/flags/json_flag_test.go @@ -23,7 +23,7 @@ func TestJsonFlagValidate(t *testing.T) { var invalid JsonFlag require.NoError(t, invalid.Set(`{"a": 1,}`)) - assert.EqualError(t, invalid.Validate(), "error decoding JSON at (inline):1:9: invalid character '}' looking for beginning of object key string") + assert.EqualError(t, invalid.Validate(), "error decoding JSON at (inline):1:8: invalid character ',' looking for beginning of value") } func TestJsonFlagEmpty(t *testing.T) { diff --git a/libs/gorules/rule_os_chdir.go b/libs/gorules/rule_os_chdir.go deleted file mode 100644 index ac28445ee2e..00000000000 --- a/libs/gorules/rule_os_chdir.go +++ /dev/null @@ -1,10 +0,0 @@ -package gorules - -import "github.com/quasilyte/go-ruleguard/dsl" - -// NoOsChdir forbids os.Chdir in test files. Use t.Chdir() instead. -func NoOsChdir(m dsl.Matcher) { - m.Match(`os.Chdir($*_)`). - Where(m.File().Name.Matches(`_test\.go$`)). - Report(`Use t.Chdir() instead of os.Chdir() in tests`) -} diff --git a/libs/gorules/rule_reflect_typefor.go b/libs/gorules/rule_reflect_typefor.go deleted file mode 100644 index 4a5993d87b5..00000000000 --- a/libs/gorules/rule_reflect_typefor.go +++ /dev/null @@ -1,9 +0,0 @@ -package gorules - -import "github.com/quasilyte/go-ruleguard/dsl" - -// UseReflectTypeFor detects reflect.TypeOf((*T)(nil)).Elem() and suggests reflect.TypeFor[T]() instead. -func UseReflectTypeFor(m dsl.Matcher) { - m.Match(`reflect.TypeOf(($x)(nil)).Elem()`). - Report(`Use reflect.TypeFor instead of reflect.TypeOf((*T)(nil)).Elem()`) -} diff --git a/libs/jsonschema/schema_test.go b/libs/jsonschema/schema_test.go index eea6739743b..55646869441 100644 --- a/libs/jsonschema/schema_test.go +++ b/libs/jsonschema/schema_test.go @@ -221,9 +221,7 @@ func TestSchemaValidatePatternEnum(t *testing.T) { func TestValidateSchemaMinimumCliVersionWithInvalidSemver(t *testing.T) { s := &Schema{ - Extension: Extension{ - MinDatabricksCliVersion: "1.0.5", - }, + MinDatabricksCliVersion: "1.0.5", } err := s.validateSchemaMinimumCliVersion("v2.0.1")() assert.ErrorContains(t, err, "invalid minimum CLI version \"1.0.5\" specified. Please specify the version in the format v0.0.0") @@ -235,9 +233,7 @@ func TestValidateSchemaMinimumCliVersionWithInvalidSemver(t *testing.T) { func TestValidateSchemaMinimumCliVersion(t *testing.T) { s := &Schema{ - Extension: Extension{ - MinDatabricksCliVersion: "v1.0.5", - }, + MinDatabricksCliVersion: "v1.0.5", } err := s.validateSchemaMinimumCliVersion("v2.0.1")() assert.NoError(t, err) diff --git a/libs/jsonschema/utils_test.go b/libs/jsonschema/utils_test.go index beb126e3905..9c2496a7ae8 100644 --- a/libs/jsonschema/utils_test.go +++ b/libs/jsonschema/utils_test.go @@ -151,11 +151,9 @@ func TestValidatePropertyPatternMatch(t *testing.T) { // Expect custom error message on match fail err = validatePatternMatch("bar", "axyze", &Schema{ - Type: "string", - Pattern: "(a*.d)", - Extension: Extension{ - PatternMatchFailureMessage: "my custom msg", - }, + Type: "string", + Pattern: "(a*.d)", + PatternMatchFailureMessage: "my custom msg", }) assert.EqualError(t, err, "invalid value for bar: \"axyze\". my custom msg") diff --git a/libs/localenv/pipeline_test.go b/libs/localenv/pipeline_test.go index d08a3696069..1627a76e8bc 100644 --- a/libs/localenv/pipeline_test.go +++ b/libs/localenv/pipeline_test.go @@ -157,7 +157,7 @@ func TestPipelineProvisionsWithSelectedPython(t *testing.T) { dir := writeProject(t) srv := newTestServer(t) defer srv.Close() - pm := &recordingPM{fakePM: fakePM{py: "3.12", dbc: "17.2.0"}} + pm := &recordingPM{py: "3.12", dbc: "17.2.0"} p := &Pipeline{ Mode: ModeDefault, ProjectDir: dir, ConstraintBaseURL: srv.URL, CacheDir: t.TempDir(), @@ -178,7 +178,7 @@ func TestPipelineRetainsFallbackResolutionWhenProvisioningFails(t *testing.T) { srv := newTestServer(t) defer srv.Close() pm := &recordingPM{ - fakePM: fakePM{py: "3.12", dbc: "17.2.0"}, + py: "3.12", dbc: "17.2.0", provisionErr: errors.New("sync failed"), } p := &Pipeline{ @@ -354,7 +354,7 @@ func TestPipelineReportsCancellationNotProvisionFailure(t *testing.T) { defer srv.Close() ctx, cancel := context.WithCancel(t.Context()) - pm := cancelPM{fakePM: fakePM{py: "3.12", dbc: "17.2.0"}, entered: make(chan struct{})} + pm := cancelPM{py: "3.12", dbc: "17.2.0", entered: make(chan struct{})} p := &Pipeline{ Mode: ModeDefault, Check: false, ProjectDir: dir, ConstraintBaseURL: srv.URL, CacheDir: t.TempDir(), @@ -547,7 +547,7 @@ constraint-dependencies = ["pip<24"] })) defer srv.Close() - pm := &recordingPM{fakePM: fakePM{py: "3.12", dbc: "17.2.0"}} + pm := &recordingPM{py: "3.12", dbc: "17.2.0"} p := &Pipeline{ Mode: ModeDefault, ProjectDir: dir, ConstraintBaseURL: srv.URL, CacheDir: t.TempDir(), @@ -1475,7 +1475,7 @@ func (f *venvRecordingPM) Validate(ctx context.Context, projectDir, venv string) func TestPipelinePassesProjectVenvToPackageManager(t *testing.T) { dir := writeProject(t) - pm := &venvRecordingPM{fakePM: fakePM{py: "3.12", dbc: "17.2.0"}} + pm := &venvRecordingPM{py: "3.12", dbc: "17.2.0"} p := newServerlessTestPipeline(t, dir) p.PM = pm diff --git a/libs/localenv/workspace_test.go b/libs/localenv/workspace_test.go index 84a96608960..93550f22de4 100644 --- a/libs/localenv/workspace_test.go +++ b/libs/localenv/workspace_test.go @@ -379,7 +379,7 @@ func TestPipelineCancelDuringDiscoveryWritesNothing(t *testing.T) { ctx, cancel := context.WithCancel(t.Context()) defer cancel() - p.PM = cancelDiscoveryPM{fakePM: fakePM{py: "3.12", dbc: "17.2.0", root: root}, cancel: cancel} + p.PM = cancelDiscoveryPM{py: "3.12", dbc: "17.2.0", root: root, cancel: cancel} before, err := os.ReadFile(filepath.Join(member, pyprojectFile)) require.NoError(t, err) diff --git a/libs/structs/structaccess/get_test.go b/libs/structs/structaccess/get_test.go index 7ae556c8ae6..2d7ae4d46b1 100644 --- a/libs/structs/structaccess/get_test.go +++ b/libs/structs/structaccess/get_test.go @@ -414,7 +414,7 @@ func TestGet_Embedded_ValueAnonymousResolved(t *testing.T) { type host struct { embedded } - in := host{embedded: embedded{Hidden: "x"}} + in := host{Hidden: "x"} require.NoError(t, ValidateByString(reflect.TypeFor[host](), "hidden")) testGet(t, in, "hidden", "x") } @@ -453,7 +453,7 @@ func TestGet_BundleTag_SkipsPromoted(t *testing.T) { embedded } // Promoted readonly field should be invisible - _, err := GetByString(host{embedded: embedded{Hidden: "x"}}, "hidden") + _, err := GetByString(host{Hidden: "x"}, "hidden") require.EqualError(t, err, "hidden: field \"hidden\" not found in structaccess.host") require.EqualError(t, ValidateByString(reflect.TypeFor[host](), "hidden"), "hidden: field \"hidden\" not found in structaccess.host") } @@ -474,13 +474,11 @@ func TestGet_EmbeddedStructForceSendFields(t *testing.T) { objWithOuterFSF := Outer{ OuterFieldOmit: "", OuterFieldNoOmit: "", - Inner: Inner{ - InnerFieldOmit: "", - InnerFieldNoOmit: "", - // Presence of "OuterFieldOmit" does not have any effect - // on OuterFieldOmit because it's in the wrong struct - ForceSendFields: []string{"OuterFieldOmit"}, - }, + InnerFieldOmit: "", + InnerFieldNoOmit: "", + // Presence of "OuterFieldOmit" does not have any effect + // on OuterFieldOmit because it's in the wrong struct + ForceSendFields: []string{"OuterFieldOmit"}, } testGet(t, objWithOuterFSF, "outer_field_omit", nil) @@ -491,11 +489,9 @@ func TestGet_EmbeddedStructForceSendFields(t *testing.T) { objWithInnerFSF := Outer{ OuterFieldOmit: "", OuterFieldNoOmit: "", - Inner: Inner{ - InnerFieldOmit: "", - InnerFieldNoOmit: "", - ForceSendFields: []string{"InnerFieldOmit"}, - }, + InnerFieldOmit: "", + InnerFieldNoOmit: "", + ForceSendFields: []string{"InnerFieldOmit"}, } testGet(t, objWithInnerFSF, "outer_field_omit", nil) @@ -532,10 +528,8 @@ func TestGet_MultipleEmbeddedStructsForceSendFields(t *testing.T) { FirstFieldNoOmit: "", ForceSendFields: []string{"FirstFieldOmit"}, }, - Second: Second{ - SecondFieldOmit: "", - SecondFieldNoOmit: "", - }, + SecondFieldOmit: "", + SecondFieldNoOmit: "", } testGet(t, objWithFirstFSF, "outer_field_omit", nil) @@ -548,10 +542,8 @@ func TestGet_MultipleEmbeddedStructsForceSendFields(t *testing.T) { objWithSecondFSF := Outer{ OuterFieldOmit: "", OuterFieldNoOmit: "", - First: First{ - FirstFieldOmit: "", - FirstFieldNoOmit: "", - }, + FirstFieldOmit: "", + FirstFieldNoOmit: "", Second: Second{ SecondFieldOmit: "", SecondFieldNoOmit: "", @@ -588,17 +580,13 @@ func TestGet_MixedForceSendFields(t *testing.T) { } objWithOuterFSF := Outer{ - OuterFieldOmit: "", - OuterFieldNoOmit: "", - ForceSendFields: []string{"OuterFieldOmit"}, - First: First{ - FirstFieldOmit: "", - FirstFieldNoOmit: "", - }, - Second: Second{ - SecondFieldOmit: "", - SecondFieldNoOmit: "", - }, + OuterFieldOmit: "", + OuterFieldNoOmit: "", + ForceSendFields: []string{"OuterFieldOmit"}, + FirstFieldOmit: "", + FirstFieldNoOmit: "", + SecondFieldOmit: "", + SecondFieldNoOmit: "", } testGet(t, objWithOuterFSF, "outer_field_omit", "") @@ -611,10 +599,8 @@ func TestGet_MixedForceSendFields(t *testing.T) { objWithSecondFSF := Outer{ OuterFieldOmit: "", OuterFieldNoOmit: "", - First: First{ - FirstFieldOmit: "", - FirstFieldNoOmit: "", - }, + FirstFieldOmit: "", + FirstFieldNoOmit: "", Second: Second{ SecondFieldOmit: "", SecondFieldNoOmit: "", @@ -648,13 +634,9 @@ func TestGet_FieldByNameBugRegressionTest(t *testing.T) { } objWithNameValue := Job{ - BaseResource: BaseResource{ - ID: "resource_id", - }, - JobSettings: JobSettings{ - Name: "test-job", - ForceSendFields: []string{"Name"}, - }, + ID: "resource_id", + Name: "test-job", + ForceSendFields: []string{"Name"}, PermissionsOmit: []string{"read", "write"}, PermissionsNoOmit: []string{"read", "write"}, } @@ -665,13 +647,9 @@ func TestGet_FieldByNameBugRegressionTest(t *testing.T) { testGet(t, objWithNameValue, "permissions_no_omit", []string{"read", "write"}) objWithEmptyFields := Job{ - BaseResource: BaseResource{ - ID: "", - }, - JobSettings: JobSettings{ - Name: "", - ForceSendFields: []string{"Name"}, - }, + ID: "", + Name: "", + ForceSendFields: []string{"Name"}, PermissionsOmit: []string{}, PermissionsNoOmit: []string{}, } diff --git a/libs/structs/structaccess/set_test.go b/libs/structs/structaccess/set_test.go index 0d55b9881f8..e1829b8cf3c 100644 --- a/libs/structs/structaccess/set_test.go +++ b/libs/structs/structaccess/set_test.go @@ -597,11 +597,9 @@ func TestSet_EmbeddedStructForceSendFields(t *testing.T) { obj := Outer{ OuterFieldOmit: "outer_value", OuterFieldNoOmit: "outer_no_omit", - Inner: Inner{ - InnerFieldOmit: "inner_value", - InnerFieldNoOmit: "inner_no_omit", - ForceSendFields: []string{"OuterFieldOmit", "InnerFieldOmit"}, - }, + InnerFieldOmit: "inner_value", + InnerFieldNoOmit: "inner_no_omit", + ForceSendFields: []string{"OuterFieldOmit", "InnerFieldOmit"}, } // Set nil value for outer field - roundtrip nil -> nil @@ -632,11 +630,9 @@ func TestSet_EmbeddedStructForceSendFields(t *testing.T) { obj := Outer{ OuterFieldOmit: "outer_value", OuterFieldNoOmit: "outer_no_omit", - Inner: Inner{ - InnerFieldOmit: "inner_value", - InnerFieldNoOmit: "inner_no_omit", - ForceSendFields: []string{}, - }, + InnerFieldOmit: "inner_value", + InnerFieldNoOmit: "inner_no_omit", + ForceSendFields: []string{}, } // Set empty string for outer field, but get nil back (omitempty, no ForceSendFields) @@ -689,10 +685,8 @@ func TestSet_MixedForceSendFields(t *testing.T) { OuterFieldOmit: "outer_value", OuterFieldNoOmit: "outer_no_omit", ForceSendFields: []string{"OuterFieldOmit", "FirstFieldOmit"}, - First: First{ - FirstFieldOmit: "first_value", - FirstFieldNoOmit: "first_no_omit", - }, + FirstFieldOmit: "first_value", + FirstFieldNoOmit: "first_no_omit", Second: Second{ SecondFieldOmit: "second_value", SecondFieldNoOmit: "second_no_omit", @@ -744,10 +738,8 @@ func TestSet_MixedForceSendFields(t *testing.T) { OuterFieldOmit: "outer_value", OuterFieldNoOmit: "outer_no_omit", ForceSendFields: []string{}, - First: First{ - FirstFieldOmit: "first_value", - FirstFieldNoOmit: "first_no_omit", - }, + FirstFieldOmit: "first_value", + FirstFieldNoOmit: "first_no_omit", Second: Second{ SecondFieldOmit: "second_value", SecondFieldNoOmit: "second_no_omit", diff --git a/libs/structs/structdiff/diff_test.go b/libs/structs/structdiff/diff_test.go index dd1cf4bb5ad..15f90f076f6 100644 --- a/libs/structs/structdiff/diff_test.go +++ b/libs/structs/structdiff/diff_test.go @@ -939,8 +939,8 @@ type diffTaggedEmbed struct { } func TestDiffTaggedEmbedIsReportedUnderItsName(t *testing.T) { - before := &diffTaggedEmbed{DiffEmbedLeaf: DiffEmbedLeaf{Value: "before"}, Own: "o"} - after := &diffTaggedEmbed{DiffEmbedLeaf: DiffEmbedLeaf{Value: "after"}, Own: "o"} + before := &diffTaggedEmbed{Value: "before", Own: "o"} + after := &diffTaggedEmbed{Value: "after", Own: "o"} blob, err := json.Marshal(after) require.NoError(t, err) diff --git a/libs/structs/structpath/path.go b/libs/structs/structpath/path.go index 266d9ade1d2..adf2be51331 100644 --- a/libs/structs/structpath/path.go +++ b/libs/structs/structpath/path.go @@ -910,7 +910,7 @@ func nodeMatchesPattern(concrete *PathNode, pattern *PatternNode) bool { if pattern.DotStar() || pattern.BracketStar() { return true } - patternKey, patternIsBracket := ((*PathNode)(pattern)).BracketString() + patternKey, patternIsBracket := (*PathNode)(pattern).BracketString() concreteKey, concreteIsBracket := concrete.BracketString() if patternIsBracket && concreteIsBracket && strings.Contains(patternKey, "*") { return matchDotSeparatedGlob(patternKey, concreteKey) diff --git a/libs/structs/structwalk/walk_test.go b/libs/structs/structwalk/walk_test.go index eb71a02046a..e8a3bf7c09c 100644 --- a/libs/structs/structwalk/walk_test.go +++ b/libs/structs/structwalk/walk_test.go @@ -146,11 +146,9 @@ func TestEmbeddedStruct(t *testing.T) { } parent := Parent{ - Embedded: Embedded{ - EmbeddedField: "embedded_value", - EmbeddedInt: 42, - }, - ParentField: "parent_value", + EmbeddedField: "embedded_value", + EmbeddedInt: 42, + ParentField: "parent_value", } result := flatten(t, parent) @@ -179,12 +177,8 @@ func TestNestedEmbeddedStructs(t *testing.T) { } obj := Level3{ - Level2: Level2{ - Level1: Level1{ - Field1: "one", - }, - Field2: "two", - }, + Field1: "one", + Field2: "two", Field3: "three", } @@ -266,11 +260,9 @@ func TestEmbeddedStructWithJSONTagDash(t *testing.T) { } parent := Parent{ - Embedded: Embedded{ - SkipField: "should_not_appear", - IncludeField: "should_appear", - }, - ParentField: "parent", + SkipField: "should_not_appear", + IncludeField: "should_appear", + ParentField: "parent", } assert.Equal(t, map[string]any{ @@ -299,7 +291,7 @@ type walkOptionOnlyEmbed struct { } func TestWalkTaggedEmbedIsANamedField(t *testing.T) { - value := &walkTaggedEmbed{WalkEmbedLeaf: WalkEmbedLeaf{Value: "v"}, Own: "o"} + value := &walkTaggedEmbed{Value: "v", Own: "o"} blob, err := json.Marshal(value) require.NoError(t, err) @@ -309,7 +301,7 @@ func TestWalkTaggedEmbedIsANamedField(t *testing.T) { } func TestWalkOptionOnlyEmbedIsStillFlattened(t *testing.T) { - value := &walkOptionOnlyEmbed{WalkEmbedLeaf: WalkEmbedLeaf{Value: "v"}, Own: "o"} + value := &walkOptionOnlyEmbed{Value: "v", Own: "o"} blob, err := json.Marshal(value) require.NoError(t, err) diff --git a/libs/template/config.go b/libs/template/config.go index 9183b6d09fe..dd91d1a3c18 100644 --- a/libs/template/config.go +++ b/libs/template/config.go @@ -217,9 +217,9 @@ func (c *config) promptOnce(property *jsonschema.Schema, name, defaultVal, descr // RunSelect's Label is single-line, so render any preceding lines // of the description separately. label := description - if i := strings.LastIndex(description, "\n"); i != -1 { - cmdio.LogString(c.ctx, description[:i]) - label = description[i+1:] + if before, after, ok := strings.CutLast(description, "\n"); ok { + cmdio.LogString(c.ctx, before) + label = after } idx, err := cmdio.RunSelect(c.ctx, cmdio.SelectOptions{ Label: label, diff --git a/libs/template/config_test.go b/libs/template/config_test.go index f141b6f17f6..ae91b95054a 100644 --- a/libs/template/config_test.go +++ b/libs/template/config_test.go @@ -213,33 +213,25 @@ func TestTemplateValidateSchema(t *testing.T) { func TestTemplateValidateSchemaVersion(t *testing.T) { version := latestSchemaVersion schema := jsonschema.Schema{ - Extension: jsonschema.Extension{ - Version: &version, - }, + Version: &version, } assert.NoError(t, validateSchema(&schema)) version = latestSchemaVersion + 1 schema = jsonschema.Schema{ - Extension: jsonschema.Extension{ - Version: &version, - }, + Version: &version, } assert.EqualError(t, validateSchema(&schema), fmt.Sprintf("template schema version %d is not supported by this version of the CLI. Please upgrade your CLI to the latest version", version)) version = 5000 schema = jsonschema.Schema{ - Extension: jsonschema.Extension{ - Version: &version, - }, + Version: &version, } assert.EqualError(t, validateSchema(&schema), "template schema version 5000 is not supported by this version of the CLI. Please upgrade your CLI to the latest version") version = 0 schema = jsonschema.Schema{ - Extension: jsonschema.Extension{ - Version: &version, - }, + Version: &version, } assert.NoError(t, validateSchema(&schema)) } diff --git a/libs/template/resolver.go b/libs/template/resolver.go index 191b47d42fd..d653551ab65 100644 --- a/libs/template/resolver.go +++ b/libs/template/resolver.go @@ -132,7 +132,7 @@ func customWriter(templatePathOrUrl, templateDir string, isGit bool) Writer { if dir := filepath.ToSlash(filepath.Clean(templateDir)); dir != "." { name += "/" + dir } - return &writerWithFullTelemetry{defaultWriter: defaultWriter{name: TemplateName(name)}} + return &writerWithFullTelemetry{name: TemplateName(name)} } return &defaultWriter{name: Custom} } diff --git a/libs/template/template.go b/libs/template/template.go index cb2e1a8e3a2..a23ea16695e 100644 --- a/libs/template/template.go +++ b/libs/template/template.go @@ -45,67 +45,67 @@ var databricksTemplates = []Template{ name: DefaultPython, description: "The default Python template for Notebooks and Lakeflow", Reader: &builtinReader{name: string(DefaultPython)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: DefaultPython}}, + Writer: &writerWithFullTelemetry{name: DefaultPython}, }, { name: DefaultSql, description: "The default SQL template for .sql files that run with Databricks SQL", Reader: &builtinReader{name: string(DefaultSql)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: DefaultSql}}, + Writer: &writerWithFullTelemetry{name: DefaultSql}, }, { name: DefaultMinimal, description: "The minimal template, for advanced users", aliases: []string{"empty"}, Reader: &builtinReader{name: string(DefaultMinimal)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: DefaultMinimal}}, + Writer: &writerWithFullTelemetry{name: DefaultMinimal}, }, { name: DefaultScala, description: "The default Scala template for JAR jobs", Reader: &builtinReader{name: string(DefaultScala)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: DefaultScala}}, + Writer: &writerWithFullTelemetry{name: DefaultScala}, }, { name: LakeflowPipelines, hidden: true, description: "The default template for Lakeflow Spark Declarative Pipelines", Reader: &builtinReader{name: string(LakeflowPipelines)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: LakeflowPipelines}}, + Writer: &writerWithFullTelemetry{name: LakeflowPipelines}, }, { name: LakeflowIntegrations, hidden: true, description: "The template for Lakeflow integrations", Reader: &builtinReader{name: string(LakeflowIntegrations)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: LakeflowIntegrations}}, + Writer: &writerWithFullTelemetry{name: LakeflowIntegrations}, }, { name: CLIPipelines, hidden: true, description: "The default template for CLI pipelines", Reader: &builtinReader{name: string(LakeflowPipelines)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: CLIPipelines}}, + Writer: &writerWithFullTelemetry{name: CLIPipelines}, }, { name: DbtSql, description: "The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks)", Reader: &builtinReader{name: string(DbtSql)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: DbtSql}}, + Writer: &writerWithFullTelemetry{name: DbtSql}, }, { name: MlopsStacks, description: "The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)", aliases: []string{"mlops-stack"}, Reader: &gitReader{gitUrl: "https://github.com/databricks/mlops-stacks", cloneFunc: git.Clone}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: MlopsStacks}}, + Writer: &writerWithFullTelemetry{name: MlopsStacks}, }, { name: Pydabs, hidden: false, description: "A variant of the 'default-python' template that defines resources in Python instead of YAML", Reader: &builtinReader{name: string(Pydabs)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: Pydabs}}, + Writer: &writerWithFullTelemetry{name: Pydabs}, }, } diff --git a/libs/testserver/dashboards.go b/libs/testserver/dashboards.go index 84b8527212a..098f790a229 100644 --- a/libs/testserver/dashboards.go +++ b/libs/testserver/dashboards.go @@ -300,12 +300,10 @@ func (s *FakeWorkspace) DashboardTrash(req Request) Response { // The dashboard is marked as trashed and moved to the trash. s.Dashboards.Put(dashboardId, &fakeDashboard{ - Dashboard: dashboards.Dashboard{ - Etag: dashboard.Etag, - DashboardId: dashboardId, - LifecycleState: dashboards.LifecycleStateTrashed, - ParentPath: path.Join("/Users", s.CurrentUser().UserName, "Trash"), - }, + Etag: dashboard.Etag, + DashboardId: dashboardId, + LifecycleState: dashboards.LifecycleStateTrashed, + ParentPath: path.Join("/Users", s.CurrentUser().UserName, "Trash"), }) // The published dashboard is deleted. diff --git a/libs/testserver/postgres.go b/libs/testserver/postgres.go index 113f419bd0b..2f59389aeb1 100644 --- a/libs/testserver/postgres.go +++ b/libs/testserver/postgres.go @@ -893,11 +893,11 @@ func maskCovers(mask, path string) bool { // parentPath returns path with its last segment removed, or "" when it has only one. func parentPath(path string) string { - i := strings.LastIndex(path, ".") - if i < 0 { + before, _, ok := strings.CutLast(path, ".") + if !ok { return "" } - return path[:i] + return before } // missingMaskedField returns the first update_mask path the API would reject diff --git a/libs/testserver/vector_search_indexes.go b/libs/testserver/vector_search_indexes.go index 497943a82dc..3e437c4d444 100644 --- a/libs/testserver/vector_search_indexes.go +++ b/libs/testserver/vector_search_indexes.go @@ -97,18 +97,16 @@ func (s *FakeWorkspace) VectorSearchIndexCreate(req Request) Response { } index := fakeVectorSearchIndex{ - VectorIndex: vectorsearch.VectorIndex{ - Creator: s.CurrentUser().UserName, - EndpointName: createReq.EndpointName, - IndexType: createReq.IndexType, - IndexSubtype: indexSubtype, - Name: createReq.Name, - PrimaryKey: createReq.PrimaryKey, - DeltaSyncIndexSpec: remapDeltaSyncSpec(createReq.DeltaSyncIndexSpec), - DirectAccessIndexSpec: createReq.DirectAccessIndexSpec, - Status: &vectorsearch.VectorIndexStatus{ - Ready: true, - }, + Creator: s.CurrentUser().UserName, + EndpointName: createReq.EndpointName, + IndexType: createReq.IndexType, + IndexSubtype: indexSubtype, + Name: createReq.Name, + PrimaryKey: createReq.PrimaryKey, + DeltaSyncIndexSpec: remapDeltaSyncSpec(createReq.DeltaSyncIndexSpec), + DirectAccessIndexSpec: createReq.DirectAccessIndexSpec, + Status: &vectorsearch.VectorIndexStatus{ + Ready: true, }, EndpointUuid: endpoint.Id, } diff --git a/tools/go.mod b/tools/go.mod index 651e3b8ba37..6ce39555ab3 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -1,39 +1,39 @@ module github.com/databricks/cli/tools -go 1.26.0 +go 1.27.0 -toolchain go1.26.9 - -require github.com/stretchr/testify v1.12.1 +toolchain go1.27.2 require ( + github.com/stretchr/testify v1.12.1 golang.org/x/mod v0.41.0 gopkg.in/yaml.v3 v3.0.1 ) require ( - 4d63.com/gocheckcompilerdirectives v1.3.0 // indirect + 4d63.com/gocheckcompilerdirectives v1.4.0 // indirect 4d63.com/gochecknoglobals v0.2.2 // indirect - charm.land/lipgloss/v2 v2.0.3 // indirect - codeberg.org/chavacava/garif v0.2.0 // indirect + charm.land/lipgloss/v2 v2.0.6 // indirect + codeberg.org/chavacava/garif v0.2.1 // indirect codeberg.org/polyfloyd/go-errorlint v1.9.0 // indirect dev.gaijin.team/go/exhaustruct/v4 v4.0.0 // indirect - dev.gaijin.team/go/golib v0.6.0 // indirect - github.com/4meepo/tagalign v1.4.3 // indirect - github.com/Abirdcfly/dupword v0.1.7 // indirect + dev.gaijin.team/go/exhaustruct/v5 v5.2.0 // indirect + dev.gaijin.team/go/golib v0.8.1 // indirect + github.com/4meepo/tagalign v1.4.4 // indirect + github.com/Abirdcfly/dupword v0.1.8 // indirect github.com/AdminBenni/iota-mixing v1.0.0 // indirect - github.com/AlwxSin/noinlineerr v1.0.5 // indirect - github.com/Antonboom/errname v1.1.1 // indirect - github.com/Antonboom/nilnil v1.1.1 // indirect + github.com/AlwxSin/noinlineerr v1.0.6 // indirect + github.com/Antonboom/errname v1.1.2 // indirect + github.com/Antonboom/nilnil v1.1.2 // indirect github.com/Antonboom/testifylint v1.6.4 // indirect github.com/BurntSushi/toml v1.6.0 // indirect - github.com/ClickHouse/clickhouse-go-linter v1.2.0 // indirect + github.com/ClickHouse/clickhouse-go-linter v1.2.1 // indirect github.com/Djarvur/go-err113 v0.1.1 // indirect github.com/Masterminds/semver/v3 v3.5.0 // indirect github.com/MirrexOne/unqueryvet v1.5.4 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect - github.com/alecthomas/chroma/v2 v2.24.1 // indirect - github.com/alecthomas/go-check-sumtype v0.3.1 // indirect + github.com/alecthomas/chroma/v2 v2.27.0 // indirect + github.com/alecthomas/go-check-sumtype v0.5.1-0.20260828200218-ae6904d28606 // indirect github.com/alexkohler/nakedret/v2 v2.0.6 // indirect github.com/alexkohler/prealloc v1.1.0 // indirect github.com/alfatraining/structtag v1.0.0 // indirect @@ -47,18 +47,18 @@ require ( github.com/blizzy78/varnamelen v0.8.0 // indirect github.com/bmatcuk/doublestar/v4 v4.7.1 // indirect github.com/bombsimon/wsl/v4 v4.7.0 // indirect - github.com/bombsimon/wsl/v5 v5.8.0 // indirect + github.com/bombsimon/wsl/v5 v5.9.0 // indirect github.com/breml/bidichk v0.3.3 // indirect github.com/breml/errchkjson v0.4.1 // indirect github.com/butuzov/ireturn v0.4.1 // indirect - github.com/butuzov/mirror v1.3.0 // indirect + github.com/butuzov/mirror v1.3.3 // indirect github.com/catenacyber/perfsprint v0.10.1 // indirect github.com/ccojocar/zxcvbn-go v1.0.4 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charithe/durationcheck v0.0.11 // indirect github.com/charmbracelet/colorprofile v0.4.3 // indirect - github.com/charmbracelet/ultraviolet v0.0.0-20251205161215-1948445e3318 // indirect - github.com/charmbracelet/x/ansi v0.11.7 // indirect + github.com/charmbracelet/ultraviolet v0.0.0-20260811164956-006e29f97886 // indirect + github.com/charmbracelet/x/ansi v0.11.8 // indirect github.com/charmbracelet/x/term v0.2.2 // indirect github.com/charmbracelet/x/termios v0.1.1 // indirect github.com/charmbracelet/x/windows v0.2.2 // indirect @@ -69,16 +69,16 @@ require ( github.com/daixiang0/gci v0.13.7 // indirect github.com/dave/dst v0.27.3 // indirect github.com/denis-tingaikin/go-header v0.5.0 // indirect - github.com/dlclark/regexp2 v1.12.0 // indirect + github.com/dlclark/regexp2/v2 v2.2.1 // indirect github.com/dnephin/pflag v1.0.7 // indirect github.com/ettle/strcase v0.2.0 // indirect github.com/fatih/color v1.19.0 // indirect github.com/fatih/structtag v1.2.0 // indirect - github.com/firefart/nonamedreturns v1.0.6 // indirect - github.com/fsnotify/fsnotify v1.8.0 // indirect + github.com/firefart/nonamedreturns v1.0.8 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect - github.com/ghostiam/protogetter v0.3.20 // indirect - github.com/go-critic/go-critic v0.14.3 // indirect + github.com/ghostiam/protogetter v1.0.1 // indirect + github.com/go-critic/go-critic v0.15.0 // indirect github.com/go-toolsmith/astcast v1.1.0 // indirect github.com/go-toolsmith/astcopy v1.1.0 // indirect github.com/go-toolsmith/astequal v1.2.0 // indirect @@ -89,14 +89,15 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/go-xmlfmt/xmlfmt v1.1.3 // indirect github.com/gobwas/glob v0.2.3 // indirect - github.com/godoc-lint/godoc-lint v0.11.2 // indirect - github.com/gofrs/flock v0.13.0 // indirect + github.com/godoc-lint/godoc-lint v0.11.4 // indirect + github.com/gofrs/flock v0.13.1 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golangci/asciicheck v0.5.0 // indirect + github.com/golangci/canonicalheader v0.0.0-20260827115959-a25c71c521f6 // indirect github.com/golangci/dupl v0.0.0-20260401084720-c99c5cf5c202 // indirect github.com/golangci/go-printf-func-name v0.1.1 // indirect - github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect - github.com/golangci/golangci-lint/v2 v2.12.2 // indirect + github.com/golangci/gofmt v0.0.0-20260820135601-e84e05053792 // indirect + github.com/golangci/golangci-lint/v2 v2.14.0 // indirect github.com/golangci/golines v0.15.0 // indirect github.com/golangci/misspell v0.8.0 // indirect github.com/golangci/plugin-module-register v0.1.2 // indirect @@ -118,23 +119,22 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jgautheron/goconst v1.10.0 // indirect + github.com/jgautheron/goconst v1.11.0 // indirect github.com/jjti/go-spancheck v0.6.5 // indirect github.com/julz/importas v0.2.0 // indirect github.com/karamaru-alpha/copyloopvar v1.2.2 // indirect - github.com/kisielk/errcheck v1.10.0 // indirect + github.com/kisielk/errcheck v1.20.0 // indirect github.com/kkHAIKE/contextcheck v1.1.6 // indirect github.com/kulti/thelper v0.7.1 // indirect github.com/kunwardeep/paralleltest v1.0.15 // indirect - github.com/lasiar/canonicalheader v1.1.2 // indirect github.com/ldez/exptostd v0.4.5 // indirect - github.com/ldez/gomoddirectives v0.8.0 // indirect + github.com/ldez/gomoddirectives v0.10.0 // indirect github.com/ldez/grignotin v0.10.1 // indirect github.com/ldez/structtags v0.6.1 // indirect - github.com/ldez/tagliatelle v0.7.2 // indirect + github.com/ldez/tagliatelle v0.8.0 // indirect github.com/ldez/usetesting v0.5.0 // indirect github.com/leonklingele/grouper v1.1.2 // indirect - github.com/lucasb-eyer/go-colorful v1.4.0 // indirect + github.com/lucasb-eyer/go-colorful v1.4.1 // indirect github.com/macabu/inamedparam v0.2.0 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/manuelarte/embeddedstructfieldcheck v0.4.0 // indirect @@ -142,21 +142,21 @@ require ( github.com/maratori/testableexamples v1.0.1 // indirect github.com/maratori/testpackage v1.1.2 // indirect github.com/matoous/godox v1.1.0 // indirect - github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.23 // indirect + github.com/mattn/go-colorable v0.1.15 // indirect + github.com/mattn/go-isatty v0.0.22 // indirect + github.com/mattn/go-runewidth v0.0.24 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect - github.com/mgechev/revive v1.15.0 // indirect + github.com/mgechev/revive v1.17.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moricho/tparallel v0.3.2 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/nakabonne/nestif v0.3.1 // indirect - github.com/nishanths/exhaustive v0.12.0 // indirect + github.com/nishanths/exhaustive v0.13.0 // indirect github.com/nishanths/predeclared v0.2.2 // indirect - github.com/nunnatsa/ginkgolinter v0.23.0 // indirect + github.com/nunnatsa/ginkgolinter v0.24.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.3.1 // indirect + github.com/pelletier/go-toml/v2 v2.4.3 // indirect github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect @@ -166,22 +166,22 @@ require ( github.com/quasilyte/gogrep v0.5.0 // indirect github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect - github.com/raeperd/recvcheck v0.2.0 // indirect + github.com/raeperd/recvcheck v0.3.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/rogpeppe/go-internal v1.16.0 // indirect github.com/ryancurrah/gomodguard v1.4.1 // indirect github.com/ryancurrah/gomodguard/v2 v2.1.3 // indirect github.com/ryanrolds/sqlclosecheck v0.6.0 // indirect github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect github.com/sanposhiho/wastedassign/v2 v2.1.0 // indirect - github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect + github.com/santhosh-tekuri/jsonschema/v6 v6.0.3 // indirect github.com/sashamelentyev/interfacebloat v1.1.0 // indirect github.com/sashamelentyev/usestdlibvars v1.29.0 // indirect - github.com/securego/gosec/v2 v2.26.1 // indirect - github.com/sirupsen/logrus v1.9.4 // indirect + github.com/securego/gosec/v2 v2.29.0 // indirect + github.com/sirupsen/logrus v1.10.2 // indirect github.com/sivchari/containedctx v1.0.3 // indirect github.com/sonatard/noctx v0.5.1 // indirect - github.com/sourcegraph/go-diff v0.8.0 // indirect + github.com/sourcegraph/go-diff v0.9.0 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/cobra v1.10.2 // indirect @@ -193,16 +193,16 @@ require ( github.com/stretchr/objx v0.5.3 // indirect github.com/subosito/gotenv v1.4.1 // indirect github.com/tetafro/godot v1.5.6 // indirect - github.com/timakin/bodyclose v0.0.0-20260129054331-73d1f95b84b4 // indirect - github.com/timonwong/loggercheck v0.11.0 // indirect + github.com/timakin/bodyclose v0.0.0-20260723120731-857993a2939c // indirect + github.com/timonwong/loggercheck v0.12.0 // indirect github.com/tomarrell/wrapcheck/v2 v2.12.0 // indirect github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect github.com/ultraware/funlen v0.2.0 // indirect github.com/ultraware/whitespace v0.2.0 // indirect github.com/uudashr/gocognit v1.2.1 // indirect - github.com/uudashr/iface v1.4.2 // indirect + github.com/uudashr/iface v1.5.1 // indirect github.com/xen0n/gosmopolitan v1.3.0 // indirect - github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/xo/terminfo v1.0.0 // indirect github.com/yagipy/maintidx v1.0.0 // indirect github.com/yeya24/promlinter v0.3.0 // indirect github.com/ykadowak/zerologlint v0.1.5 // indirect @@ -210,25 +210,25 @@ require ( go-simpler.org/musttag v0.14.0 // indirect go-simpler.org/sloglint v0.12.0 // indirect go.augendre.info/arangolint v0.4.0 // indirect - go.augendre.info/fatcontext v0.9.0 // indirect + go.augendre.info/fatcontext v0.10.1 // indirect go.uber.org/multierr v1.10.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.5 // indirect - golang.org/x/exp/typeparams v0.0.0-20260209203927-2842357ff358 // indirect - golang.org/x/sync v0.22.0 // indirect - golang.org/x/sys v0.47.0 // indirect - golang.org/x/telemetry v0.0.0-20260811182544-a038080d80e5 // indirect + golang.org/x/exp/typeparams v0.0.0-20260811152304-ee035b5b010f // indirect + golang.org/x/sync v0.23.0 // indirect + golang.org/x/sys v0.48.0 // indirect + golang.org/x/telemetry v0.0.0-20260908163034-4bcc4b2ee518 // indirect golang.org/x/term v0.39.0 // indirect - golang.org/x/text v0.36.0 // indirect - golang.org/x/tools v0.49.0 // indirect + golang.org/x/text v0.41.0 // indirect + golang.org/x/tools v0.50.0 // indirect golang.org/x/vuln v1.3.0 // indirect - google.golang.org/protobuf v1.36.10 // indirect + google.golang.org/protobuf v1.36.12 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gotest.tools/gotestsum v1.12.1 // indirect - honnef.co/go/tools v0.7.0 // indirect - mvdan.cc/gofumpt v0.9.2 // indirect - mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 // indirect + honnef.co/go/tools v0.8.1 // indirect + mvdan.cc/gofumpt v0.12.0 // indirect + mvdan.cc/unparam v0.0.0-20260823230713-2fa3d841b0c8 // indirect ) tool ( diff --git a/tools/go.sum b/tools/go.sum index 84f18539029..0aa259e3315 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1,9 +1,9 @@ -4d63.com/gocheckcompilerdirectives v1.3.0 h1:Ew5y5CtcAAQeTVKUVFrE7EwHMrTO6BggtEj8BZSjZ3A= -4d63.com/gocheckcompilerdirectives v1.3.0/go.mod h1:ofsJ4zx2QAuIP/NO/NAh1ig6R1Fb18/GI7RVMwz7kAY= +4d63.com/gocheckcompilerdirectives v1.4.0 h1:ZLq62rbGWVmQhiZ8kuNVIT/M09xCSTdJz9K3xOdT/CY= +4d63.com/gocheckcompilerdirectives v1.4.0/go.mod h1:9ZOAiMOjqC/nRwci2fcUXVHUNLG/cH6r6rhUh+jTFtQ= 4d63.com/gochecknoglobals v0.2.2 h1:H1vdnwnMaZdQW/N+NrkT1SZMTBmcwHe9Vq8lJcYYTtU= 4d63.com/gochecknoglobals v0.2.2/go.mod h1:lLxwTQjL5eIesRbvnzIP3jZtG140FnTdz+AlMa+ogt0= -charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU= -charm.land/lipgloss/v2 v2.0.3/go.mod h1:7myLU9iG/3xluAWzpY/fSxYYHCgoKTie7laxk6ATwXA= +charm.land/lipgloss/v2 v2.0.6 h1:EaGKeuA8FvF+v2BT5VmZd2LoYLaMZJXA5n34th8nCIQ= +charm.land/lipgloss/v2 v2.0.6/go.mod h1:ipDDJNSGa1hlwDtSfW1s2/xR8Vdhbut4PXh2zEKZd0Q= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -36,35 +36,37 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -codeberg.org/chavacava/garif v0.2.0 h1:F0tVjhYbuOCnvNcU3YSpO6b3Waw6Bimy4K0mM8y6MfY= -codeberg.org/chavacava/garif v0.2.0/go.mod h1:P2BPbVbT4QcvLZrORc2T29szK3xEOlnl0GiPTJmEqBQ= +codeberg.org/chavacava/garif v0.2.1 h1:K9oYxSlvlXrHXyW26Z4q61bTpJDo1wbvXcYKar/F/LM= +codeberg.org/chavacava/garif v0.2.1/go.mod h1:oHnDSmc0f9K1MeE+MQD/yjkiIB5Xsn5y3S9Dg96Xk84= codeberg.org/polyfloyd/go-errorlint v1.9.0 h1:VkdEEmA1VBpH6ecQoMR4LdphVI3fA4RrCh2an7YmodI= codeberg.org/polyfloyd/go-errorlint v1.9.0/go.mod h1:GPRRu2LzVijNn4YkrZYJfatQIdS+TrcK8rL5Xs24qw8= dev.gaijin.team/go/exhaustruct/v4 v4.0.0 h1:873r7aNneqoBB3IaFIzhvt2RFYTuHgmMjoKfwODoI1Y= dev.gaijin.team/go/exhaustruct/v4 v4.0.0/go.mod h1:aZ/k2o4Y05aMJtiux15x8iXaumE88YdiB0Ai4fXOzPI= -dev.gaijin.team/go/golib v0.6.0 h1:v6nnznFTs4bppib/NyU1PQxobwDHwCXXl15P7DV5Zgo= -dev.gaijin.team/go/golib v0.6.0/go.mod h1:uY1mShx8Z/aNHWDyAkZTkX+uCi5PdX7KsG1eDQa2AVE= +dev.gaijin.team/go/exhaustruct/v5 v5.2.0 h1:HZB49Fshn8qHJCi9VzYtrcnR1jbLteRHXfnQz8Adams= +dev.gaijin.team/go/exhaustruct/v5 v5.2.0/go.mod h1:5IshpqhgGdKIrF8lBmi3M6YKmI7T3hMzAL9nrflko88= +dev.gaijin.team/go/golib v0.8.1 h1:JYju4x9BSo+QD/AYeHULVDcvEhiFg8wOi6pT0IaZF5E= +dev.gaijin.team/go/golib v0.8.1/go.mod h1:c5fu7t1RSGMxSQgcUYO1sODbzsYnOCXJLmHeNG1Eb+0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/4meepo/tagalign v1.4.3 h1:Bnu7jGWwbfpAie2vyl63Zup5KuRv21olsPIha53BJr8= -github.com/4meepo/tagalign v1.4.3/go.mod h1:00WwRjiuSbrRJnSVeGWPLp2epS5Q/l4UEy0apLLS37c= -github.com/Abirdcfly/dupword v0.1.7 h1:2j8sInznrje4I0CMisSL6ipEBkeJUJAmK1/lfoNGWrQ= -github.com/Abirdcfly/dupword v0.1.7/go.mod h1:K0DkBeOebJ4VyOICFdppB23Q0YMOgVafM0zYW0n9lF4= +github.com/4meepo/tagalign v1.4.4 h1:052JDGj2pBORc6NkD30dDXpsUpoYszDeUwr9/5YZuVA= +github.com/4meepo/tagalign v1.4.4/go.mod h1:00WwRjiuSbrRJnSVeGWPLp2epS5Q/l4UEy0apLLS37c= +github.com/Abirdcfly/dupword v0.1.8 h1:SrhcUuGsROBuChFxHALRYzyyPODWn9zwghmzPvD9Cd8= +github.com/Abirdcfly/dupword v0.1.8/go.mod h1:XZrhVnI7YGpsTiWZANSQaBJ4QpL/Tq5vIEdKJJAs9WI= github.com/AdminBenni/iota-mixing v1.0.0 h1:Os6lpjG2dp/AE5fYBPAA1zfa2qMdCAWwPMCgpwKq7wo= github.com/AdminBenni/iota-mixing v1.0.0/go.mod h1:i4+tpAaB+qMVIV9OK3m4/DAynOd5bQFaOu+2AhtBCNY= -github.com/AlwxSin/noinlineerr v1.0.5 h1:RUjt63wk1AYWTXtVXbSqemlbVTb23JOSRiNsshj7TbY= -github.com/AlwxSin/noinlineerr v1.0.5/go.mod h1:+QgkkoYrMH7RHvcdxdlI7vYYEdgeoFOVjU9sUhw/rQc= -github.com/Antonboom/errname v1.1.1 h1:bllB7mlIbTVzO9jmSWVWLjxTEbGBVQ1Ff/ClQgtPw9Q= -github.com/Antonboom/errname v1.1.1/go.mod h1:gjhe24xoxXp0ScLtHzjiXp0Exi1RFLKJb0bVBtWKCWQ= -github.com/Antonboom/nilnil v1.1.1 h1:9Mdr6BYd8WHCDngQnNVV0b554xyisFioEKi30sksufQ= -github.com/Antonboom/nilnil v1.1.1/go.mod h1:yCyAmSw3doopbOWhJlVci+HuyNRuHJKIv6V2oYQa8II= +github.com/AlwxSin/noinlineerr v1.0.6 h1:KAvuxunTe9QxvqrFB7nZTdb/7Wzas4AvifslTnG0Ld8= +github.com/AlwxSin/noinlineerr v1.0.6/go.mod h1:+QgkkoYrMH7RHvcdxdlI7vYYEdgeoFOVjU9sUhw/rQc= +github.com/Antonboom/errname v1.1.2 h1:dxwONZJua3VB8Xh/VaCjqAcqF645sWWv7xj26zy7tdQ= +github.com/Antonboom/errname v1.1.2/go.mod h1:YeZIpgLMxT+SNkruGgYkLhzq/9vs3fsolTZegKaKDZI= +github.com/Antonboom/nilnil v1.1.2 h1:aNlFuJhaEseXe4fHO3xbjXlSeEiQVYa2lEkWD2s2hAY= +github.com/Antonboom/nilnil v1.1.2/go.mod h1:0ynwvphOLmAuMwTNDyBnDZmSwZoDpcFXmUHmzoHH2WA= github.com/Antonboom/testifylint v1.6.4 h1:gs9fUEy+egzxkEbq9P4cpcMB6/G0DYdMeiFS87UiqmQ= github.com/Antonboom/testifylint v1.6.4/go.mod h1:YO33FROXX2OoUfwjz8g+gUxQXio5i9qpVy7nXGbxDD4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ClickHouse/clickhouse-go-linter v1.2.0 h1:zbm174up3hTKjp0wKZVnTzRiG7tSF5XZF0FJG/MuCBI= -github.com/ClickHouse/clickhouse-go-linter v1.2.0/go.mod h1:pLorS7ffPTfuUV9M0SJgfHA/h/WQPQUk2FWG9x74cQ4= +github.com/ClickHouse/clickhouse-go-linter v1.2.1 h1:zGEKIyd5YL08ieWG/LOUmlau2DxbxPVOfAeo+4Jz3ck= +github.com/ClickHouse/clickhouse-go-linter v1.2.1/go.mod h1:pLorS7ffPTfuUV9M0SJgfHA/h/WQPQUk2FWG9x74cQ4= github.com/Djarvur/go-err113 v0.1.1 h1:eHfopDqXRwAi+YmCUas75ZE0+hoBHJ2GQNLYRSxao4g= github.com/Djarvur/go-err113 v0.1.1/go.mod h1:IaWJdYFLg76t2ihfflPZnM1LIQszWOsFDh2hhhAVF6k= github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= @@ -75,10 +77,10 @@ github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsu github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo= 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/chroma/v2 v2.24.1 h1:m5ffpfZbIb++k8AqFEKy9uVgY12xIQtBsQlc6DfZJQM= -github.com/alecthomas/chroma/v2 v2.24.1/go.mod h1:l+ohZ9xRXIbGe7cIW+YZgOGbvuVLjMps/FYN/CwuabI= -github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU= -github.com/alecthomas/go-check-sumtype v0.3.1/go.mod h1:A8TSiN3UPRw3laIgWEUOHHLPa6/r9MtoigdlP5h3K/E= +github.com/alecthomas/chroma/v2 v2.27.0 h1:FodwmyOBgJULFYmDqibcp9pvfDLWdtPRh9v/r5BXYZs= +github.com/alecthomas/chroma/v2 v2.27.0/go.mod h1:NjJ3ciIgrqBNeIkWZ4e46nseoLDslxU1LmfCoL+wcY8= +github.com/alecthomas/go-check-sumtype v0.5.1-0.20260828200218-ae6904d28606 h1:dXPJ+uOJLWb8rjlAuLX7JPiRJtZKw/53Ol+WxdDJ1Eo= +github.com/alecthomas/go-check-sumtype v0.5.1-0.20260828200218-ae6904d28606/go.mod h1:ZH31IJyNpxpStxP2ayCcPQz+3T2G/OnxIQqe4LWvSDw= github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -114,16 +116,16 @@ github.com/bmatcuk/doublestar/v4 v4.7.1 h1:fdDeAqgT47acgwd9bd9HxJRDmc9UAmPpc+2m0 github.com/bmatcuk/doublestar/v4 v4.7.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/bombsimon/wsl/v4 v4.7.0 h1:1Ilm9JBPRczjyUs6hvOPKvd7VL1Q++PL8M0SXBDf+jQ= github.com/bombsimon/wsl/v4 v4.7.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg= -github.com/bombsimon/wsl/v5 v5.8.0 h1:JTkyfs4yl8SPejrCF2GdABXE+mO1WvM7iUYzRWlsxDs= -github.com/bombsimon/wsl/v5 v5.8.0/go.mod h1:AbOLsulgkqP4ZnitHf9gwPtCOGlrzkk0jb0uNxRSY0o= +github.com/bombsimon/wsl/v5 v5.9.0 h1:WCrgZ7RQnZO5oEwbVTlYgBdU3wL294kR1BSWV8vTfsU= +github.com/bombsimon/wsl/v5 v5.9.0/go.mod h1:kjo4HiAV5FDkHC8/uzJq9mBffEEd6WT/nvN7DoMovDM= github.com/breml/bidichk v0.3.3 h1:WSM67ztRusf1sMoqH6/c4OBCUlRVTKq+CbSeo0R17sE= github.com/breml/bidichk v0.3.3/go.mod h1:ISbsut8OnjB367j5NseXEGGgO/th206dVa427kR8YTE= github.com/breml/errchkjson v0.4.1 h1:keFSS8D7A2T0haP9kzZTi7o26r7kE3vymjZNeNDRDwg= github.com/breml/errchkjson v0.4.1/go.mod h1:a23OvR6Qvcl7DG/Z4o0el6BRAjKnaReoPQFciAl9U3s= github.com/butuzov/ireturn v0.4.1 h1:vWb3NO4t77iku/sjCQ/2pHTQeOmxEhjIriJqRLg1Y+I= github.com/butuzov/ireturn v0.4.1/go.mod h1:q+DXKzTDV5guNuXLnIab9fKXizTn2miZHLhxH7V/GB4= -github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc= -github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI= +github.com/butuzov/mirror v1.3.3 h1:v0RsWBhfFc1RQqE/f3sHpSttKDtodFn0gFmtYyD4/hA= +github.com/butuzov/mirror v1.3.3/go.mod h1:h9BzzwYnTiHO0GzgvaTqIg7VSsOUhdIv51cHFFBmX1w= github.com/catenacyber/perfsprint v0.10.1 h1:u7Riei30bk46XsG8nknMhKLXG9BcXz3+3tl/WpKm0PQ= github.com/catenacyber/perfsprint v0.10.1/go.mod h1:DJTGsi/Zufpuus6XPGJyKOTMELe347o6akPvWG9Zcsc= github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc= @@ -137,10 +139,10 @@ github.com/charithe/durationcheck v0.0.11 h1:g1/EX1eIiKS57NTWsYtHDZ/APfeXKhye1Di github.com/charithe/durationcheck v0.0.11/go.mod h1:x5iZaixRNl8ctbM+3B2RrPG5t856TxRyVQEnbIEM2X4= github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q= github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q= -github.com/charmbracelet/ultraviolet v0.0.0-20251205161215-1948445e3318 h1:OqDqxQZliC7C8adA7KjelW3OjtAxREfeHkNcd66wpeI= -github.com/charmbracelet/ultraviolet v0.0.0-20251205161215-1948445e3318/go.mod h1:Y6kE2GzHfkyQQVCSL9r2hwokSrIlHGzZG+71+wDYSZI= -github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI= -github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ= +github.com/charmbracelet/ultraviolet v0.0.0-20260811164956-006e29f97886 h1:rdnVWKgJpTVXKuKuJyxDJ+NFJdUaUqGvyGy61OcvlbA= +github.com/charmbracelet/ultraviolet v0.0.0-20260811164956-006e29f97886/go.mod h1:nAw0d9PhFp1qdzi2xhQU5YOu5sVpDIHWlaW2Uz/bCro= +github.com/charmbracelet/x/ansi v0.11.8 h1:JMFwp0CgDC2+jcOB162HH5k7I3FVbgFSMMYg7dSPBQQ= +github.com/charmbracelet/x/ansi v0.11.8/go.mod h1:ZNN+3mXny/516oTQPLMPIBeSINvNJJQ8uQXDgbeJxY0= github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= @@ -174,6 +176,8 @@ 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/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8= github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0= +github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= github.com/dnephin/pflag v1.0.7 h1:oxONGlWxhmUct0YzKTgrpQv9AUA1wtPBn7zuSjJqptk= github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -186,18 +190,18 @@ github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/firefart/nonamedreturns v1.0.6 h1:vmiBcKV/3EqKY3ZiPxCINmpS431OcE1S47AQUwhrg8E= -github.com/firefart/nonamedreturns v1.0.6/go.mod h1:R8NisJnSIpvPWheCq0mNRXJok6D8h7fagJTF8EMEwCo= +github.com/firefart/nonamedreturns v1.0.8 h1:iB32Dl17zJl1zlVEj/WlUWgx0HiRyQ85OUw1WHa4/II= +github.com/firefart/nonamedreturns v1.0.8/go.mod h1:vxFNvm5AfP/8rgAKFzYmnqx0yp1HjrYsErZ9pHPTznA= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= -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/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.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/ghostiam/protogetter v0.3.20 h1:oW7OPFit2FxZOpmMRPP9FffU4uUpfeE/rEdE1f+MzD0= -github.com/ghostiam/protogetter v0.3.20/go.mod h1:FjIu5Yfs6FT391m+Fjp3fbAYJ6rkL/J6ySpZBfnODuI= -github.com/go-critic/go-critic v0.14.3 h1:5R1qH2iFeo4I/RJU8vTezdqs08Egi4u5p6vOESA0pog= -github.com/go-critic/go-critic v0.14.3/go.mod h1:xwntfW6SYAd7h1OqDzmN6hBX/JxsEKl5up/Y2bsxgVQ= +github.com/ghostiam/protogetter v1.0.1 h1:q4LLTx2KJHJpxrfO3BniUDWoFkoqWD/UlHhClBlUlLM= +github.com/ghostiam/protogetter v1.0.1/go.mod h1:50Fh5yZfs6SFGrd1FlmT04NcguyEOxyjNK5zGD6/EvM= +github.com/go-critic/go-critic v0.15.0 h1:MDUZIQKytIl+vPEc0Igw51m4uLTdi1ZGz2jatEqNs1g= +github.com/go-critic/go-critic v0.15.0/go.mod h1:3BPrw8nHATGm3o2n37cssOmJzpySGKCdY8JWkCzxgKQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -207,10 +211,10 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= -github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= -github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= +github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8= +github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-quicktest/qt v1.102.0 h1:HSQxCeh5YZH3EL3W39ixjtyaEhcWSXQHtHnMBzSs474= +github.com/go-quicktest/qt v1.102.0/go.mod h1:p4lGIVX+8Wa6ZPNDvqcxq36XpUDLh42FLetFU7odllI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= @@ -239,10 +243,10 @@ github.com/go-xmlfmt/xmlfmt v1.1.3 h1:t8Ey3Uy7jDSEisW2K3somuMKIpzktkWptA0iFCnRUW github.com/go-xmlfmt/xmlfmt v1.1.3/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godoc-lint/godoc-lint v0.11.2 h1:Bp0FkJWoSdNsBikdNgIcgtaoo+xz6I/Y9s5WSBQUeeM= -github.com/godoc-lint/godoc-lint v0.11.2/go.mod h1:iVpGdL1JCikNH2gGeAn3Hh+AgN5Gx/I/cxV+91L41jo= -github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw= -github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0= +github.com/godoc-lint/godoc-lint v0.11.4 h1:N9zUYVJ/OkznBbrBsU/zODvua64EUplMBLQWStO3+1M= +github.com/godoc-lint/godoc-lint v0.11.4/go.mod h1:7usTXoxS0QYIi5usTSCPwR0w/6xLjcz450shXjLn3t4= +github.com/gofrs/flock v0.13.1 h1:jjREztyBeSKBZYAC+mgc1laB+xsgy4kYMf3FbKF2UBo= +github.com/gofrs/flock v0.13.1/go.mod h1:sf4BFiHwnvgxa25DlQoDqXQnwRMEOwqxRq37P6MzzmE= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -275,14 +279,16 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golangci/asciicheck v0.5.0 h1:jczN/BorERZwK8oiFBOGvlGPknhvq0bjnysTj4nUfo0= github.com/golangci/asciicheck v0.5.0/go.mod h1:5RMNAInbNFw2krqN6ibBxN/zfRFa9S6tA1nPdM0l8qQ= +github.com/golangci/canonicalheader v0.0.0-20260827115959-a25c71c521f6 h1:fVLolA3dG6s0brGetsiDAtcnpMSwVa2LqXJEw/9RJG4= +github.com/golangci/canonicalheader v0.0.0-20260827115959-a25c71c521f6/go.mod h1:1xo+NFW5S+bEf2DKXhaxuzvcDN5AR6o/KMwvqC5Mkpo= github.com/golangci/dupl v0.0.0-20260401084720-c99c5cf5c202 h1:CbTB8KpqnViI6lIXxp03Oclc4VFHi3K4BWC1TacsZ+A= github.com/golangci/dupl v0.0.0-20260401084720-c99c5cf5c202/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E= github.com/golangci/go-printf-func-name v0.1.1 h1:hIYTFJqAGp1iwoIfsNTpoq1xZAarogrvjO9AfiW3B4U= github.com/golangci/go-printf-func-name v0.1.1/go.mod h1:Es64MpWEZbh0UBtTAICOZiB+miW53w/K9Or/4QogJss= -github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE= -github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY= -github.com/golangci/golangci-lint/v2 v2.12.2 h1:7+d1uY0bq1MU2UV3R5pW5Q7QWdcoq4naMRXM+gsJKrs= -github.com/golangci/golangci-lint/v2 v2.12.2/go.mod h1:opqHHuIcTG2R+4akzWMd4o1BnD9/1LcjICWOujr91U8= +github.com/golangci/gofmt v0.0.0-20260820135601-e84e05053792 h1:WL8YKrt3UbOBqSRU7GpP5BTtQTMWtVtj+mfPijgZeIg= +github.com/golangci/gofmt v0.0.0-20260820135601-e84e05053792/go.mod h1:te5hX0dW4C5r6YbXs+6ysNr8Q5UTmdIqGbb+mlFiYmA= +github.com/golangci/golangci-lint/v2 v2.14.0 h1:ot8QffRa4LzAAEgtvNYrVs9esxQ7xoTwoAv6uhp4ngA= +github.com/golangci/golangci-lint/v2 v2.14.0/go.mod h1:amHimCzNDP1GfVno3hIiNssjvqXmuW+CPZAHOdR4cIc= github.com/golangci/golines v0.15.0 h1:Qnph25g8Y1c5fdo1X7GaRDGgnMHgnxh4Gk4VfPTtRx0= github.com/golangci/golines v0.15.0/go.mod h1:AZjXd23tbHMpowhtnGlj9KCNsysj72aeZVVHnVcZx10= github.com/golangci/misspell v0.8.0 h1:qvxQhiE2/5z+BVRo1kwYA8yGz+lOlu5Jfvtx2b04Jbg= @@ -324,8 +330,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 h1:z2ogiKUYzX5Is6zr/vP9vJGqPwcdqsWjOt+V8J7+bTc= -github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3 h1:LMLX+LgTNWpfvCBdFebv6EsYotImrt/Ppc5cXIriCSo= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3/go.mod h1:jl5iWTm0/hd5PjEYEOuwAJ57L/CibdZfrqZ5XA5GrCk= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -366,8 +372,8 @@ github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSo github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jgautheron/goconst v1.10.0 h1:Ptt+OoE4NaEWKhLrWrrN3IpZdGLiqaf7WLnEX/iv4Jw= -github.com/jgautheron/goconst v1.10.0/go.mod h1:0p+wv1lFOiUr0IlNNT1nrm6+8DB8u2sU6KHGzFRXHDc= +github.com/jgautheron/goconst v1.11.0 h1:KgN90z5qXt5f0Uzf3cWXev3hfMMFUyNeKdpkSBRvLDk= +github.com/jgautheron/goconst v1.11.0/go.mod h1:0p+wv1lFOiUr0IlNNT1nrm6+8DB8u2sU6KHGzFRXHDc= github.com/jjti/go-spancheck v0.6.5 h1:lmi7pKxa37oKYIMScialXUK6hP3iY5F1gu+mLBPgYB8= github.com/jjti/go-spancheck v0.6.5/go.mod h1:aEogkeatBrbYsyW6y5TgDfihCulDYciL1B7rG2vSsrU= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -383,8 +389,8 @@ github.com/julz/importas v0.2.0 h1:y+MJN/UdL63QbFJHws9BVC5RpA2iq0kpjrFajTGivjQ= github.com/julz/importas v0.2.0/go.mod h1:pThlt589EnCYtMnmhmRYY/qn9lCf/frPOK+WMx3xiJY= github.com/karamaru-alpha/copyloopvar v1.2.2 h1:yfNQvP9YaGQR7VaWLYcfZUlRP2eo2vhExWKxD/fP6q0= github.com/karamaru-alpha/copyloopvar v1.2.2/go.mod h1:oY4rGZqZ879JkJMtX3RRkcXRkmUvH0x35ykgaKgsgJY= -github.com/kisielk/errcheck v1.10.0 h1:Lvs/YAHP24YKg08LA8oDw2z9fJVme090RAXd90S+rrw= -github.com/kisielk/errcheck v1.10.0/go.mod h1:kQxWMMVZgIkDq7U8xtG/n2juOjbLgZtedi0D+/VL/i8= +github.com/kisielk/errcheck v1.20.0 h1:9rwHBNKzd4wkDWcROy3DvFGNqEPlkxBg305rvk7HabI= +github.com/kisielk/errcheck v1.20.0/go.mod h1:O+f80MKNwX8Oor2jwgpeQ9An7uJm+hRSgT+h22knRJU= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkHAIKE/contextcheck v1.1.6 h1:7HIyRcnyzxL9Lz06NGhiKvenXq7Zw6Q0UQu/ttjfJCE= github.com/kkHAIKE/contextcheck v1.1.6/go.mod h1:3dDbMRNBFaq8HFXWC1JyvDSPm43CmE6IuHam8Wr0rkg= @@ -402,24 +408,22 @@ github.com/kulti/thelper v0.7.1 h1:fI8QITAoFVLx+y+vSyuLBP+rcVIB8jKooNSCT2EiI98= github.com/kulti/thelper v0.7.1/go.mod h1:NsMjfQEy6sd+9Kfw8kCP61W1I0nerGSYSFnGaxQkcbs= github.com/kunwardeep/paralleltest v1.0.15 h1:ZMk4Qt306tHIgKISHWFJAO1IDQJLc6uDyJMLyncOb6w= github.com/kunwardeep/paralleltest v1.0.15/go.mod h1:di4moFqtfz3ToSKxhNjhOZL+696QtJGCFe132CbBLGk= -github.com/lasiar/canonicalheader v1.1.2 h1:vZ5uqwvDbyJCnMhmFYimgMZnJMjwljN5VGY0VKbMXb4= -github.com/lasiar/canonicalheader v1.1.2/go.mod h1:qJCeLFS0G/QlLQ506T+Fk/fWMa2VmBUiEI2cuMK4djI= github.com/ldez/exptostd v0.4.5 h1:kv2ZGUVI6VwRfp/+bcQ6Nbx0ghFWcGIKInkG/oFn1aQ= github.com/ldez/exptostd v0.4.5/go.mod h1:QRjHRMXJrCTIm9WxVNH6VW7oN7KrGSht69bIRwvdFsM= -github.com/ldez/gomoddirectives v0.8.0 h1:JqIuTtgvFC2RdH1s357vrE23WJF2cpDCPFgA/TWDGpk= -github.com/ldez/gomoddirectives v0.8.0/go.mod h1:jutzamvZR4XYJLr0d5Honycp4Gy6GEg2mS9+2YX3F1Q= +github.com/ldez/gomoddirectives v0.10.0 h1:Zb23rfMMkG21B6pZ9OfESzemByP5Qr7YvWcXQZE/S3Q= +github.com/ldez/gomoddirectives v0.10.0/go.mod h1:W9uh0721Vc7aaVoiMXTpKIveLmtHC9uaOSiHM4OK5a8= github.com/ldez/grignotin v0.10.1 h1:keYi9rYsgbvqAZGI1liek5c+jv9UUjbvdj3Tbn5fn4o= github.com/ldez/grignotin v0.10.1/go.mod h1:UlDbXFCARrXbWGNGP3S5vsysNXAPhnSuBufpTEbwOas= github.com/ldez/structtags v0.6.1 h1:bUooFLbXx41tW8SvkfwfFkkjPYvFFs59AAMgVg6DUBk= github.com/ldez/structtags v0.6.1/go.mod h1:YDxVSgDy/MON6ariaxLF2X09bh19qL7MtGBN5MrvbdY= -github.com/ldez/tagliatelle v0.7.2 h1:KuOlL70/fu9paxuxbeqlicJnCspCRjH0x8FW+NfgYUk= -github.com/ldez/tagliatelle v0.7.2/go.mod h1:PtGgm163ZplJfZMZ2sf5nhUT170rSuPgBimoyYtdaSI= +github.com/ldez/tagliatelle v0.8.0 h1:QczqVPa22JdT40p3m5JTTVmPMv5wDORqdomJn6/Pnn0= +github.com/ldez/tagliatelle v0.8.0/go.mod h1:K9n83Wv0wyVq3JYF9WI28BX8xXhDBVP3thHJ0ENuiEs= github.com/ldez/usetesting v0.5.0 h1:3/QtzZObBKLy1F4F8jLuKJiKBjjVFi1IavpoWbmqLwc= github.com/ldez/usetesting v0.5.0/go.mod h1:Spnb4Qppf8JTuRgblLrEWb7IE6rDmUpGvxY3iRrzvDQ= github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= -github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4= -github.com/lucasb-eyer/go-colorful v1.4.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lucasb-eyer/go-colorful v1.4.1 h1:1EO+WB73+EH8EVbzlrG3KLAfEypQWVHIBqlTf+2hNss= +github.com/lucasb-eyer/go-colorful v1.4.1/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/macabu/inamedparam v0.2.0 h1:VyPYpOc10nkhI2qeNUdh3Zket4fcZjEWe35poddBCpE= github.com/macabu/inamedparam v0.2.0/go.mod h1:+Pee9/YfGe5LJ62pYXqB89lJ+0k5bsR8Wgz/C0Zlq3U= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= @@ -436,16 +440,16 @@ github.com/matoous/godox v1.1.0 h1:W5mqwbyWrwZv6OQ5Z1a/DHGMOvXYCBP3+Ht7KMoJhq4= github.com/matoous/godox v1.1.0/go.mod h1:jgE/3fUXiTurkdHOLT5WEkThTSuE7yxHv5iWPa80afs= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw= -github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY= +github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= +github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU= +github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgechev/revive v1.15.0 h1:vJ0HzSBzfNyPbHKolgiFjHxLek9KUijhqh42yGoqZ8Q= -github.com/mgechev/revive v1.15.0/go.mod h1:LlAKO3QQe9OJ0pVZzI2GPa8CbXGZ/9lNpCGvK4T/a8A= +github.com/mgechev/revive v1.17.0 h1:hwTTVC3svSv9X2FA2hiYT17Uws+lfxDWhPxzBZZCREg= +github.com/mgechev/revive v1.17.0/go.mod h1:uiVNUF8ruVh4WHm/aPs7kKEeuo+m6oO3tuOfniyzP/g= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -463,16 +467,16 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= -github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhKRf3Swg= -github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs= +github.com/nishanths/exhaustive v0.13.0 h1:Rof0axOSNQaaPaPmLK5RxcRrJV2Vcv+vfUmuRy+2EAM= +github.com/nishanths/exhaustive v0.13.0/go.mod h1:3/adQjJgvD/UFHHSYBjpK9Wbz8DOvf0FBtzx+zI0Rlo= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/nunnatsa/ginkgolinter v0.23.0 h1:x3o4DGYOWbBMP/VdNQKgSj+25aJKx2Pe6lHr8gBcgf8= -github.com/nunnatsa/ginkgolinter v0.23.0/go.mod h1:9qN1+0akwXEccwV1CAcCDfcoBlWXHB+ML9884pL4SZ4= -github.com/onsi/ginkgo/v2 v2.28.2 h1:DTrMfpqxiNUyQ3Y0zhn1n3cOO2euFgQPYIpkWwxVFps= -github.com/onsi/ginkgo/v2 v2.28.2/go.mod h1:CLtbVInNckU3/+gC8LzkGUb9oF+e8W8TdUsxPwvdOgE= -github.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28= -github.com/onsi/gomega v1.39.1/go.mod h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg= +github.com/nunnatsa/ginkgolinter v0.24.0 h1:Mp0EagluLFP98JatP6nqp/gGEoljNG97uf9AcxcBVy8= +github.com/nunnatsa/ginkgolinter v0.24.0/go.mod h1:2ZMRuzX6+3XXyY6UZOwb6n+MCocVGbkIsDBC4vuWz5c= +github.com/onsi/ginkgo/v2 v2.32.1 h1:6tlvcDm/3sE8lGJbZ4+d4mO3RLy24/tQWOFzVSQNIfw= +github.com/onsi/ginkgo/v2 v2.32.1/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44= +github.com/onsi/gomega v1.42.1 h1:iN1rCUX+44NZ1Dc97MPoeFYbFR0vh8zxoxMFwKdyZ6I= +github.com/onsi/gomega v1.42.1/go.mod h1:REff/hsDsodHoKlWsP2mAPhu1+5/6hVYNf9rIEBpeSg= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= @@ -482,8 +486,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/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc= -github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pelletier/go-toml/v2 v2.4.3 h1:GTRvJQutkOSftxIFD5xw9aepkYNuPWmVJpffdDPYVpY= +github.com/pelletier/go-toml/v2 v2.4.3/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -520,13 +524,13 @@ github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= -github.com/raeperd/recvcheck v0.2.0 h1:GnU+NsbiCqdC2XX5+vMZzP+jAJC5fht7rcVTAhX74UI= -github.com/raeperd/recvcheck v0.2.0/go.mod h1:n04eYkwIR0JbgD73wT8wL4JjPC3wm0nFtzBnWNocnYU= +github.com/raeperd/recvcheck v0.3.1 h1:p7nZMxiCWkdUtY2i3o+pv1h4fJCR5gpvqAXr9326hEY= +github.com/raeperd/recvcheck v0.3.1/go.mod h1:CbE7iRocQ4uc71JwpW/CPSh4BShnkre4A9Gb508RypU= 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/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rogpeppe/go-internal v1.16.0 h1:O9DK+vNMDVGLr2BeZqmpLeMjiMNkuXfcqntWbZV6S5g= +github.com/rogpeppe/go-internal v1.16.0/go.mod h1:DrUVZyrJU+txYW5/1kwtXQSMFio52ZOxX7yM1VHvnxs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.4.1 h1:eWC8eUMNZ/wM/PWuZBv7JxxqT5fiIKSIyTvjb7Elr+g= github.com/ryancurrah/gomodguard v1.4.1/go.mod h1:qnMJwV1hX9m+YJseXEBhd2s90+1Xn6x9dLz11ualI1I= @@ -538,27 +542,27 @@ github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDj github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0= github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4= -github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= -github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.3 h1:1EYB5IzjZawrrnELUi78f9fPu57HuXjmddZPjrls/28= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.3/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= github.com/sashamelentyev/usestdlibvars v1.29.0 h1:8J0MoRrw4/NAXtjQqTHrbW9NN+3iMf7Knkq057v4XOQ= github.com/sashamelentyev/usestdlibvars v1.29.0/go.mod h1:8PpnjHMk5VdeWlVb4wCdrB8PNbLqZ3wBZTZWkrpZZL8= -github.com/securego/gosec/v2 v2.26.1 h1:gdkttGhQFVehqRJ8grKH4DrpqM/QlPKNHBnl8QgcEC4= -github.com/securego/gosec/v2 v2.26.1/go.mod h1:57UW4p0uoP3kxoTkhoo3axLdVAi+OWrLg/Ax/kdqtPE= +github.com/securego/gosec/v2 v2.29.0 h1:pF2HSLcnY5voqpxQumEe0O5YAAbvF4Syu4qeIewpLyc= +github.com/securego/gosec/v2 v2.29.0/go.mod h1:47C7ej+L2bC1NOxteU2aCGnCi4cZaoKzRt5y9plIvuY= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= 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.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= -github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= +github.com/sirupsen/logrus v1.10.2 h1:G2SED73/qrAu6YwbdxOD6peLkCBI3z7L+ykJFTXJBBo= +github.com/sirupsen/logrus v1.10.2/go.mod h1:SLEg8TqYulVKKfIGHldVp2K2aYz2DKSVBq4g/H5bR7Q= github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE= github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4= github.com/sonatard/noctx v0.5.1 h1:wklWg9c9ZYugOAk7qG4yP4PBrlQsmSLPTvW1K4PRQMs= github.com/sonatard/noctx v0.5.1/go.mod h1:64XdbzFb18XL4LporKXp8poqZtPKbCrqQ402CV+kJas= -github.com/sourcegraph/go-diff v0.8.0 h1:ipIyu4cTsLbIrln4l0qtHA3r0a7gyK4ntKjtQytHhvY= -github.com/sourcegraph/go-diff v0.8.0/go.mod h1:hWlcO7Al+UZStZAP8rBumHpCK5ZHQ5BXsMls8p4+F5E= +github.com/sourcegraph/go-diff v0.9.0 h1:7xcVsayWHhvxZGrqt1o89vvBApCa4nyCgO7tNxDHJ+Q= +github.com/sourcegraph/go-diff v0.9.0/go.mod h1:hWlcO7Al+UZStZAP8rBumHpCK5ZHQ5BXsMls8p4+F5E= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= @@ -595,10 +599,10 @@ 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.5.6 h1:IEkrFCwXaYHlOn4mGzGS3F3dkP6m9t0jpwqBFPIkKiA= github.com/tetafro/godot v1.5.6/go.mod h1:eOkMrVQurDui411nBY2FA05EYH01r14LuWY/NrVDVcU= -github.com/timakin/bodyclose v0.0.0-20260129054331-73d1f95b84b4 h1:SiHe5XLTn9sFWJ5pBwJ5FN/4j34q9ZlOAD//kMoMYp0= -github.com/timakin/bodyclose v0.0.0-20260129054331-73d1f95b84b4/go.mod h1:sDHLK7rb/59v/ZxZ7KtymgcoxuUMxjXq8gtu9VMOK8M= -github.com/timonwong/loggercheck v0.11.0 h1:jdaMpYBl+Uq9mWPXv1r8jc5fC3gyXx4/WGwTnnNKn4M= -github.com/timonwong/loggercheck v0.11.0/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8= +github.com/timakin/bodyclose v0.0.0-20260723120731-857993a2939c h1:d/FUP8GD4QiY/rdFzZmBu3KqL9eBNVzMu7W/5pGkaMM= +github.com/timakin/bodyclose v0.0.0-20260723120731-857993a2939c/go.mod h1:sDHLK7rb/59v/ZxZ7KtymgcoxuUMxjXq8gtu9VMOK8M= +github.com/timonwong/loggercheck v0.12.0 h1:7Cb9XGLJZSWYNjgL459DIhpSiEHupD+MLQ6vaN2Pl3g= +github.com/timonwong/loggercheck v0.12.0/go.mod h1:Wa6Y+SJHQR01mViZlLLY5GAZVOWOLNMbkXddMjFWQCs= github.com/tomarrell/wrapcheck/v2 v2.12.0 h1:H/qQ1aNWz/eeIhxKAFvkfIA+N7YDvq6TWVFL27Of9is= github.com/tomarrell/wrapcheck/v2 v2.12.0/go.mod h1:AQhQuZd0p7b6rfW+vUwHm5OMCGgp63moQ9Qr/0BpIWo= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= @@ -609,12 +613,12 @@ github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSW github.com/ultraware/whitespace v0.2.0/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8= github.com/uudashr/gocognit v1.2.1 h1:CSJynt5txTnORn/DkhiB4mZjwPuifyASC8/6Q0I/QS4= github.com/uudashr/gocognit v1.2.1/go.mod h1:acaubQc6xYlXFEMb9nWX2dYBzJ/bIjEkc1zzvyIZg5Q= -github.com/uudashr/iface v1.4.2 h1:06Vq5RKVYThBsj0Bnw4oasMjD1r+7CE/bcKOA8dVSvg= -github.com/uudashr/iface v1.4.2/go.mod h1:pbeBPlbuU2qkNDn0mmfrxP2X+wjPMIQAy+r1MBXSXtg= +github.com/uudashr/iface v1.5.1 h1:BS3yrgaT55s3dAtJoxuTnsZNbsejq/mVuzp49YDyfBA= +github.com/uudashr/iface v1.5.1/go.mod h1:5UWoT6SvTdTww/KToRj6clO+n4Kg3/NrAQvgOB+5Ggw= github.com/xen0n/gosmopolitan v1.3.0 h1:zAZI1zefvo7gcpbCOrPSHJZJYA9ZgLfJqtKzZ5pHqQM= github.com/xen0n/gosmopolitan v1.3.0/go.mod h1:rckfr5T6o4lBtM1ga7mLGKZmLxswUoH1zxHgNXOsEt4= -github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= -github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/xo/terminfo v1.0.0 h1:2ZpYzqWzyyytjk3TP6aJVDhkMAkc99/1xKQdA3TDTBY= +github.com/xo/terminfo v1.0.0/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= 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= @@ -637,8 +641,8 @@ go-simpler.org/sloglint v0.12.0 h1:UzWDlLWNE5FLqsvyq3tWYHuQMbqrervOhT8qPl4Mmw4= go-simpler.org/sloglint v0.12.0/go.mod h1:jBjjC2bm8rYrs88oTRlFX497kWjJsyZWYoNaXkGRI6I= go.augendre.info/arangolint v0.4.0 h1:xSCZjRoS93nXazBSg5d0OGCi9APPLNMmmLrC995tR50= go.augendre.info/arangolint v0.4.0/go.mod h1:l+f/b4plABuFISuKnTGD4RioXiCCgghv2xqst/xOvAA= -go.augendre.info/fatcontext v0.9.0 h1:Gt5jGD4Zcj8CDMVzjOJITlSb9cEch54hjRRlN3qDojE= -go.augendre.info/fatcontext v0.9.0/go.mod h1:L94brOAT1OOUNue6ph/2HnwxoNlds9aXDF2FcUntbNw= +go.augendre.info/fatcontext v0.10.1 h1:HCS/+eob32cM0mEtmZM6NiXdqvS5KiZmsR+fCubTpbc= +go.augendre.info/fatcontext v0.10.1/go.mod h1:pqpGvA9GlrXy+aXkp8L2dKz12Zp4g2FhzcAtwToU+2w= 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= @@ -674,8 +678,8 @@ golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/y golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20260209203927-2842357ff358 h1:qWFG1Dj7TBjOjOvhEOkmyGPVoquqUKnIU0lEVLp8xyk= -golang.org/x/exp/typeparams v0.0.0-20260209203927-2842357ff358/go.mod h1:4Mzdyp/6jzw9auFDJ3OMF5qksa7UvPnzKqTVGcb04ms= +golang.org/x/exp/typeparams v0.0.0-20260811152304-ee035b5b010f h1:+lI8cDJ4uceLipg2f1ODay7fEuLkk0BIHXd6PB8icxo= +golang.org/x/exp/typeparams v0.0.0-20260811152304-ee035b5b010f/go.mod h1:PqrXSW65cXDZH0k4IeUbhmg/bcAZDbzNz3byBpKCsXo= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -736,8 +740,8 @@ golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= -golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= +golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues= +golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -757,8 +761,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= -golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= +golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= 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-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -802,11 +806,10 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260811182544-a038080d80e5 h1:ZUSxONxc981v7AW7QUg+I9WwZzSTTJ019ENBYr5pV/Q= -golang.org/x/telemetry v0.0.0-20260811182544-a038080d80e5/go.mod h1:LVehoXe41cL5SCVQilsV7Gg6BNG+Js6P9PhSbYTIUkQ= +golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= +golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/telemetry v0.0.0-20260908163034-4bcc4b2ee518 h1:F5BWKvW126NXR74uxkxuc1jQHhm/rwm/J3rSiFyuRs4= +golang.org/x/telemetry v0.0.0-20260908163034-4bcc4b2ee518/go.mod h1:i+ivNqjDnTF3WTElsdk5g9V5DTSBYgdNo7xTU9SDwYA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -820,8 +823,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -872,8 +875,8 @@ golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0t golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.49.0 h1:3NI7VXzL9+1WZD52Dx2ttoPwD5DWrFGpl9mFZDlmisI= -golang.org/x/tools v0.49.0/go.mod h1:SJNXV9DBKT0UbdttsQjbfJlAE/q+y36++zo3uL3N0Oo= +golang.org/x/tools v0.50.0 h1:c2ifzfcuY7L90lZ2aKd8S4K2NpASF08SZx9ZuJkHmSU= +golang.org/x/tools v0.50.0/go.mod h1:7ulVMw3831Mwi5EZD6RomGyffr4VFjuNYXf2BbCEAV0= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= @@ -959,14 +962,13 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +google.golang.org/protobuf v1.36.12 h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc= +google.golang.org/protobuf v1.36.12/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= 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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -991,12 +993,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.7.0 h1:w6WUp1VbkqPEgLz4rkBzH/CSU6HkoqNLp6GstyTx3lU= -honnef.co/go/tools v0.7.0/go.mod h1:pm29oPxeP3P82ISxZDgIYeOaf9ta6Pi0EWvCFoLG2vc= -mvdan.cc/gofumpt v0.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4= -mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s= -mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 h1:ssMzja7PDPJV8FStj7hq9IKiuiKhgz9ErWw+m68e7DI= -mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15/go.mod h1:4M5MMXl2kW6fivUT6yRGpLLPNfuGtU2Z0cPvFquGDYU= +honnef.co/go/tools v0.8.1 h1:+JKf3xJ1ni4CwrhVg4/pqsfPGP6vNAXcKbMXJodYx3w= +honnef.co/go/tools v0.8.1/go.mod h1:XA+OnlRA9EDh/ukGvXMNSZNKGwFQJ+5dER0ioUkOxks= +mvdan.cc/gofumpt v0.12.0 h1:1Lbudkz2kpM9Cjz2pL4M19u7q+GaEhCTNf7N9mfpcho= +mvdan.cc/gofumpt v0.12.0/go.mod h1:SmBHHrljiZu/uoypeKup3rFzP6eoC9UwCp2iH5E3jZA= +mvdan.cc/unparam v0.0.0-20260823230713-2fa3d841b0c8 h1:Re1NRyLpiAt9kB+ImaaoapwWiQXrKwER4tY8fLOkDew= +mvdan.cc/unparam v0.0.0-20260823230713-2fa3d841b0c8/go.mod h1:MrS/+zJ1M2xvGXhKktiHbNQeQPyg3Qel+KkzT+f7/i4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/tools/task/go.mod b/tools/task/go.mod index d189d4e4d7b..9a11a040fce 100644 --- a/tools/task/go.mod +++ b/tools/task/go.mod @@ -1,8 +1,8 @@ module github.com/databricks/cli/tools/task -go 1.26.0 +go 1.27.0 -toolchain go1.26.9 +toolchain go1.27.2 require ( cel.dev/expr v0.25.2 // indirect From a2781dbcbb29d0dabf461cb5ac7e931dfe99e79e Mon Sep 17 00:00:00 2001 From: "denis.bilenko" Date: Wed, 14 Oct 2026 13:27:17 +0000 Subject: [PATCH 2/4] Update golden for Go 1.27 JSON syntax error position Co-authored-by: Isaac --- acceptance/cmd/api/request-handling/output.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acceptance/cmd/api/request-handling/output.txt b/acceptance/cmd/api/request-handling/output.txt index a8d9ede8e51..cb4438fa337 100644 --- a/acceptance/cmd/api/request-handling/output.txt +++ b/acceptance/cmd/api/request-handling/output.txt @@ -24,4 +24,4 @@ OK: Accept header present } === Malformed --json is rejected client-side with a positioned error -Error: error decoding JSON at (inline):1:9: invalid character '}' looking for beginning of object key string +Error: error decoding JSON at (inline):1:8: invalid character ',' looking for beginning of value From 6edff108d6bed77292482a5ca3daf61106068593 Mon Sep 17 00:00:00 2001 From: "denis.bilenko" Date: Wed, 14 Oct 2026 13:28:31 +0000 Subject: [PATCH 3/4] Add PR link to changelog fragment Co-authored-by: Isaac --- .nextchanges/dependency-updates/go-1.27.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nextchanges/dependency-updates/go-1.27.md b/.nextchanges/dependency-updates/go-1.27.md index 74e6c1bb1e5..a8b3f54b315 100644 --- a/.nextchanges/dependency-updates/go-1.27.md +++ b/.nextchanges/dependency-updates/go-1.27.md @@ -1 +1 @@ -* Bump Go to 1.27.2. Release binaries built with Go 1.27 require macOS 13 Ventura or later. +* Bump Go to 1.27.2. Release binaries now require macOS 13 Ventura or later. ([#7052](https://github.com/databricks/cli/pull/7052)) From 1eb2c88894356f9706e72fecf468c9aac3fda3e7 Mon Sep 17 00:00:00 2001 From: "denis.bilenko" Date: Wed, 14 Oct 2026 13:58:00 +0000 Subject: [PATCH 4/4] Regenerate enum_fields.go with Go 1.27 gofmt alignment Co-authored-by: Isaac --- bundle/internal/validation/generated/enum_fields.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundle/internal/validation/generated/enum_fields.go b/bundle/internal/validation/generated/enum_fields.go index 1fd0ad206c3..42401ec6968 100644 --- a/bundle/internal/validation/generated/enum_fields.go +++ b/bundle/internal/validation/generated/enum_fields.go @@ -255,8 +255,8 @@ var EnumFields = map[string][]string{ "resources.pipelines.*.ingestion_definition.objects[*].table.table_configuration.scd_type": {"APPEND_ONLY", "SCD_TYPE_1", "SCD_TYPE_2"}, "resources.pipelines.*.ingestion_definition.source_type": {"BIGQUERY", "CONFLUENCE", "DYNAMICS365", "FOREIGN_CATALOG", "GA4_RAW_DATA", "GOOGLE_DRIVE", "JIRA", "MANAGED_POSTGRESQL", "META_MARKETING", "MYSQL", "NETSUITE", "ORACLE", "POSTGRESQL", "RABBITMQ", "SALESFORCE", "SERVICENOW", "SHAREPOINT", "SMARTSHEET", "SQLSERVER", "TERADATA", "TIKTOK_ADS", "WORKDAY_RAAS", "ZENDESK"}, "resources.pipelines.*.ingestion_definition.table_configuration.scd_type": {"APPEND_ONLY", "SCD_TYPE_1", "SCD_TYPE_2"}, - "resources.pipelines.*.permissions[*].level": {"CAN_MANAGE", "CAN_RUN", "CAN_VIEW", "IS_OWNER"}, - "resources.pipelines.*.restart_window.days_of_week[*]": {"FRIDAY", "MONDAY", "SATURDAY", "SUNDAY", "THURSDAY", "TUESDAY", "WEDNESDAY"}, + "resources.pipelines.*.permissions[*].level": {"CAN_MANAGE", "CAN_RUN", "CAN_VIEW", "IS_OWNER"}, + "resources.pipelines.*.restart_window.days_of_week[*]": {"FRIDAY", "MONDAY", "SATURDAY", "SUNDAY", "THURSDAY", "TUESDAY", "WEDNESDAY"}, "resources.postgres_endpoints.*.endpoint_type": {"ENDPOINT_TYPE_READ_ONLY", "ENDPOINT_TYPE_READ_WRITE"},