From d17e62ec9c18af1b41aaacf82b5a3b9c9599acc0 Mon Sep 17 00:00:00 2001 From: Seunghyun Hwang Date: Sat, 10 Oct 2026 15:57:45 +0900 Subject: [PATCH 1/2] dialect/sql/schema: Check leaves a foreign key or a check the schema does not declare alone Check says it asks whether the database is missing anything, and leaves alone what the app does not know about. It skipped only columns and indexes, which is ent's default for a migration -- so a foreign key or a check constraint a deployment added beside the schema came back as a drop and was read as drift, and a database stricter than the schema did not start. Those two are what a deployment adds that the ent schema cannot state: a foreign key that carries the tenant, a non-negative quantity. It now skips every kind of drop, spelled out, since WithSkipChanges replaces the default rather than adding to it. A foreign key the schema declares and the database lacks is still refused. Reported as lesomnus/payday#33. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01KxtnpRW533bdErnW8QPhsk --- .../sql/schema/integration/versioned_test.go | 49 ++++++++++++++++++- dialect/sql/schema/versioned.go | 21 +++++--- 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/dialect/sql/schema/integration/versioned_test.go b/dialect/sql/schema/integration/versioned_test.go index 0909c7babc..dadb0c51a1 100644 --- a/dialect/sql/schema/integration/versioned_test.go +++ b/dialect/sql/schema/integration/versioned_test.go @@ -14,7 +14,8 @@ import ( "github.com/ncruces/go-sqlite3/driver" "github.com/ncruces/go-sqlite3/vfs/memdb" "github.com/protobuf-orm/ent/dialect" - entsql "github.com/protobuf-orm/ent/dialect/sql" + "github.com/protobuf-orm/ent/dialect/entsql" + entdialectsql "github.com/protobuf-orm/ent/dialect/sql" entschema "github.com/protobuf-orm/ent/dialect/sql/schema" "github.com/protobuf-orm/ent/schema/field" "github.com/stretchr/testify/require" @@ -366,7 +367,7 @@ func TestCheck(t *testing.T) { t.Helper() db := open(t) - m, err := entschema.NewMigrate(entsql.OpenDB(dialect.SQLite, db)) + m, err := entschema.NewMigrate(entdialectsql.OpenDB(dialect.SQLite, db)) require.NoError(t, err) require.NoError(t, m.Create(ctx, vs...)) @@ -411,6 +412,50 @@ func TestCheck(t *testing.T) { x.NoError(entschema.Check(ctx, create(t, moved()), dialect.SQLite, testSchema())) }) + t.Run("a foreign key the database has and the code does not is left alone", func(t *testing.T) { + x := require.New(t) + + // What a deployment adds beside the schema: a reference the schema + // does not state, carried as a constraint. The column it is on is + // left alone already; the constraint used to be read as drift, and a + // database stricter than the schema did not start. + extra := testSchema() + holders, tenants := extra[0], extra[1] + deputy := &entschema.Column{Name: "deputy_tenant", Type: field.TypeUuid, Nullable: true} + holders.Columns = append(holders.Columns, deputy) + holders.ForeignKeys = append(holders.ForeignKeys, &entschema.ForeignKey{ + Symbol: "holder_deputy_tenant", + Columns: []*entschema.Column{deputy}, + RefColumns: []*entschema.Column{tenants.Columns[0]}, + RefTable: tenants, + OnDelete: entschema.NoAction, + }) + + x.NoError(entschema.Check(ctx, create(t, extra), dialect.SQLite, testSchema())) + }) + + t.Run("a check the database has and the code does not is left alone", func(t *testing.T) { + x := require.New(t) + + extra := testSchema() + extra[1].Annotation = &entsql.Annotation{Checks: map[string]string{"tenant_alias_set": "alias <> ''"}} + + x.NoError(entschema.Check(ctx, create(t, extra), dialect.SQLite, testSchema())) + }) + + t.Run("a foreign key the code has and the database does not is refused", func(t *testing.T) { + x := require.New(t) + + // Leaving drops alone is not leaving foreign keys alone: one the + // schema declares is something to have, like a column. + bare := testSchema() + bare[0].ForeignKeys = nil + + err := entschema.Check(ctx, create(t, bare), dialect.SQLite, testSchema()) + x.ErrorIs(err, entschema.ErrDrift) + x.Contains(err.Error(), "holder_tenant_tenant") + }) + t.Run("a table that is gone is refused", func(t *testing.T) { x := require.New(t) diff --git a/dialect/sql/schema/versioned.go b/dialect/sql/schema/versioned.go index 33db760729..6a788766ef 100644 --- a/dialect/sql/schema/versioned.go +++ b/dialect/sql/schema/versioned.go @@ -340,11 +340,16 @@ var ErrDrift = errors.New("the database is not the shape this binary's schema de // // # What it is not // -// Not "the database equals the schema". A column, an index or a table the app -// does not know about is left alone -- the diff is filtered to what would have -// to be **added** or widened. Which is the right policy for a guard that runs -// on every start: an operator's extra index is not a reason to refuse to serve, -// and a missing column is. +// Not "the database equals the schema". A column, an index, a foreign key, a +// check or a table the app does not know about is left alone -- the diff is +// filtered to what would have to be **added** or changed. Which is the right +// policy for a guard that runs on every start: an operator's extra index is not +// a reason to refuse to serve, and a missing column is. +// +// The foreign key and the check are there because they are what a deployment +// adds that the ent schema cannot state -- a foreign key that carries the +// tenant, so a reference cannot cross one -- and a guard that refused them made +// a database stricter than the schema one that would not start. // // # What it does not do // @@ -375,7 +380,11 @@ func Check(ctx context.Context, db *sql.DB, dialect string, tables []*Table) err // only way to tell it apart from a plan that is empty for another // reason. WithErrNoPlan(true), - // Deliberately not `WithDropColumn` or `WithDropIndex`; see above. + // Every kind of drop, and nothing else; see above. Spelled out because + // this replaces the default rather than adding to it, and the default + // is only columns and indexes -- which is how a foreign key the schema + // does not declare came to be read as drift. + WithSkipChanges(DropSchema|DropTable|DropColumn|DropIndex|DropForeignKey|DropCheck), ) if err != nil { return fmt.Errorf("new migrate: %w", err) From 2e0e86f8689ddfd9dabe7706b48a081f2f3ea669 Mon Sep 17 00:00:00 2001 From: Seunghyun Hwang Date: Sat, 10 Oct 2026 16:09:41 +0900 Subject: [PATCH 2/2] all: golang.org/x/tools v0.51.0, which reads what Go 1.27.2 writes `setup-go` with `1.27` now installs Go 1.27.2, whose export data is version 5, and x/tools v0.49.0 reads no further than 4: entc/load fails to import "context" and the cmd tests fail on any change. v0.51.0 reads it. Bumped in every module that requires it, so that `go mod tidy` in the generate job leaves nothing behind. Checked under GOTOOLCHAIN=go1.27.2: the unit job's seven test steps with -race, and the generate job's three `go generate ./... && go mod tidy` with no diff. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01KxtnpRW533bdErnW8QPhsk --- dialect/sql/schema/integration/go.mod | 8 ++++---- dialect/sql/schema/integration/go.sum | 16 +++++++-------- entc/integration/go.mod | 8 ++++---- entc/integration/go.sum | 16 +++++++-------- examples/go.mod | 14 +++++++------- examples/go.sum | 28 +++++++++++++-------------- go.mod | 6 +++--- go.sum | 12 ++++++------ 8 files changed, 54 insertions(+), 54 deletions(-) diff --git a/dialect/sql/schema/integration/go.mod b/dialect/sql/schema/integration/go.mod index ae12d71b5d..3874f56bfd 100644 --- a/dialect/sql/schema/integration/go.mod +++ b/dialect/sql/schema/integration/go.mod @@ -26,10 +26,10 @@ require ( github.com/zclconf/go-cty v1.19.0 // indirect github.com/zclconf/go-cty-yaml v1.2.0 // indirect go.yaml.in/yaml/v3 v3.0.5 // indirect - golang.org/x/mod v0.40.0 // indirect - golang.org/x/sync v0.22.0 // indirect - golang.org/x/sys v0.47.0 // indirect + golang.org/x/mod v0.41.0 // indirect + golang.org/x/sync v0.23.0 // indirect + golang.org/x/sys v0.48.0 // indirect golang.org/x/text v0.41.0 // indirect - golang.org/x/tools v0.49.0 // indirect + golang.org/x/tools v0.51.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/dialect/sql/schema/integration/go.sum b/dialect/sql/schema/integration/go.sum index aff65ce9e0..269a9741e4 100644 --- a/dialect/sql/schema/integration/go.sum +++ b/dialect/sql/schema/integration/go.sum @@ -44,16 +44,16 @@ github.com/zclconf/go-cty-yaml v1.2.0 h1:GDyL4+e/Qe/S0B7YaecMLbVvAR/Mp21CXMOSiCT github.com/zclconf/go-cty-yaml v1.2.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= -golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= -golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE= -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/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c= +golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o= +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.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= +golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= 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/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.51.0 h1:k4Xc/1Om9jwkBJBo4NVLMSARBoWtK10mx+W5BnXCeAI= +golang.org/x/tools v0.51.0/go.mod h1:9eEncMayCV6zRMGhR5eZEC2iBx98qWcF1HZ9Z7wJOoA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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= diff --git a/entc/integration/go.mod b/entc/integration/go.mod index cb1ef0c008..3c912c6009 100644 --- a/entc/integration/go.mod +++ b/entc/integration/go.mod @@ -11,7 +11,7 @@ require ( github.com/ncruces/go-sqlite3 v0.35.3 github.com/protobuf-orm/ent v0.14.6 github.com/stretchr/testify v1.11.1 - golang.org/x/sync v0.22.0 + golang.org/x/sync v0.23.0 ) require ( @@ -31,9 +31,9 @@ require ( github.com/stretchr/objx v0.5.2 // indirect github.com/zclconf/go-cty v1.19.0 // indirect github.com/zclconf/go-cty-yaml v1.2.0 // indirect - golang.org/x/mod v0.40.0 // indirect - golang.org/x/sys v0.47.0 // indirect + golang.org/x/mod v0.41.0 // indirect + golang.org/x/sys v0.48.0 // indirect golang.org/x/text v0.41.0 // indirect - golang.org/x/tools v0.49.0 // indirect + golang.org/x/tools v0.51.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/entc/integration/go.sum b/entc/integration/go.sum index 9a74a22143..6110c727cb 100644 --- a/entc/integration/go.sum +++ b/entc/integration/go.sum @@ -50,16 +50,16 @@ github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6 github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= github.com/zclconf/go-cty-yaml v1.2.0 h1:GDyL4+e/Qe/S0B7YaecMLbVvAR/Mp21CXMOSiCTOi1M= github.com/zclconf/go-cty-yaml v1.2.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= -golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= -golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE= -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/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c= +golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o= +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.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= +golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= 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/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.51.0 h1:k4Xc/1Om9jwkBJBo4NVLMSARBoWtK10mx+W5BnXCeAI= +golang.org/x/tools v0.51.0/go.mod h1:9eEncMayCV6zRMGhR5eZEC2iBx98qWcF1HZ9Z7wJOoA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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= diff --git a/examples/go.mod b/examples/go.mod index 78d21be290..5231a4261b 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -39,13 +39,13 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.46.0 // indirect go.opentelemetry.io/otel/trace v1.46.0 // indirect go.yaml.in/yaml/v3 v3.0.5 // indirect - golang.org/x/crypto v0.55.0 // indirect - golang.org/x/mod v0.40.0 // indirect - golang.org/x/net v0.58.0 // indirect - golang.org/x/sync v0.22.0 // indirect - golang.org/x/sys v0.47.0 // indirect - golang.org/x/text v0.41.0 // indirect - golang.org/x/tools v0.49.0 // indirect + golang.org/x/crypto v0.57.0 // indirect + golang.org/x/mod v0.41.0 // indirect + golang.org/x/net v0.59.0 // indirect + golang.org/x/sync v0.23.0 // indirect + golang.org/x/sys v0.48.0 // indirect + golang.org/x/text v0.42.0 // indirect + golang.org/x/tools v0.51.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect google.golang.org/api v0.296.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260831171406-18b4a7587f8a // indirect diff --git a/examples/go.sum b/examples/go.sum index 13c9d51979..d512077c91 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -99,24 +99,24 @@ go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= gocloud.dev v0.46.0 h1:niIuZwSjMtBx8K+ITB2s5kZullB13PGOS2ZoQPZxQ4Q= gocloud.dev v0.46.0/go.mod h1:ACQe+2qO+hEO+pdcvvsM+RB63r8TyGD1W3ESCLFyzvM= -golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= -golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= -golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= -golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE= -golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= -golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= +golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M= +golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA= +golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c= +golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o= +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.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= -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/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -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/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= +golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= +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/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI= +golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -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.51.0 h1:k4Xc/1Om9jwkBJBo4NVLMSARBoWtK10mx+W5BnXCeAI= +golang.org/x/tools v0.51.0/go.mod h1:9eEncMayCV6zRMGhR5eZEC2iBx98qWcF1HZ9Z7wJOoA= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= diff --git a/go.mod b/go.mod index 89f2986da3..426fc56c34 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,8 @@ require ( github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/lesomnus/xli v0.0.0-20260717171524-bf8cac633057 github.com/stretchr/testify v1.11.1 - golang.org/x/sync v0.22.0 - golang.org/x/tools v0.49.0 + golang.org/x/sync v0.23.0 + golang.org/x/tools v0.51.0 ) require ( @@ -26,7 +26,7 @@ require ( github.com/zclconf/go-cty v1.19.0 // indirect github.com/zclconf/go-cty-yaml v1.2.0 // indirect golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect - golang.org/x/mod v0.40.0 // indirect + golang.org/x/mod v0.41.0 // indirect golang.org/x/text v0.41.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index fadfc64022..005dbc687b 100644 --- a/go.sum +++ b/go.sum @@ -46,14 +46,14 @@ github.com/zclconf/go-cty-yaml v1.2.0 h1:GDyL4+e/Qe/S0B7YaecMLbVvAR/Mp21CXMOSiCT github.com/zclconf/go-cty-yaml v1.2.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= -golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= -golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE= -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/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c= +golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o= +golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= +golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= 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/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.51.0 h1:k4Xc/1Om9jwkBJBo4NVLMSARBoWtK10mx+W5BnXCeAI= +golang.org/x/tools v0.51.0/go.mod h1:9eEncMayCV6zRMGhR5eZEC2iBx98qWcF1HZ9Z7wJOoA= 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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=