From f1342db88f61b17c9e9eaaf71fa330f2e499f9cd Mon Sep 17 00:00:00 2001 From: Kyle Carberry <kyle@carberry.com> Date: Tue, 13 Jun 2023 18:44:15 +0000 Subject: [PATCH 1/3] chore: rename store to dbmock for consistency --- Makefile | 6 +++--- coderd/database/dbmock/{store.go => dbmock.go} | 0 coderd/database/dbmock/doc.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename coderd/database/dbmock/{store.go => dbmock.go} (100%) diff --git a/Makefile b/Makefile index d198e2a29c16c..c113da58bb6c8 100644 --- a/Makefile +++ b/Makefile @@ -431,7 +431,7 @@ lint/helm: gen: \ coderd/database/dump.sql \ coderd/database/querier.go \ - coderd/database/dbmock/store.go \ + coderd/database/dbmock/dbmock.go \ provisionersdk/proto/provisioner.pb.go \ provisionerd/proto/provisionerd.pb.go \ site/src/api/typesGenerated.ts \ @@ -453,7 +453,7 @@ gen/mark-fresh: files="\ coderd/database/dump.sql \ coderd/database/querier.go \ - coderd/database/dbmock/store.go \ + coderd/database/dbmock/dbmock.go \ provisionersdk/proto/provisioner.pb.go \ provisionerd/proto/provisionerd.pb.go \ site/src/api/typesGenerated.ts \ @@ -490,7 +490,7 @@ coderd/database/querier.go: coderd/database/sqlc.yaml coderd/database/dump.sql $ ./coderd/database/generate.sh -coderd/database/dbmock/store.go: coderd/database/db.go coderd/database/querier.go +coderd/database/dbmock/dbmock.go: coderd/database/db.go coderd/database/querier.go go generate ./coderd/database/dbmock/ provisionersdk/proto/provisioner.pb.go: provisionersdk/proto/provisioner.proto diff --git a/coderd/database/dbmock/store.go b/coderd/database/dbmock/dbmock.go similarity index 100% rename from coderd/database/dbmock/store.go rename to coderd/database/dbmock/dbmock.go diff --git a/coderd/database/dbmock/doc.go b/coderd/database/dbmock/doc.go index 1aaeb50463812..2199de635b86b 100644 --- a/coderd/database/dbmock/doc.go +++ b/coderd/database/dbmock/doc.go @@ -1,4 +1,4 @@ // package dbmock contains a mocked implementation of the database.Store interface for use in tests package dbmock -//go:generate mockgen -destination ./store.go -package dbmock github.com/coder/coder/coderd/database Store +//go:generate mockgen -destination ./dbmock.go -package dbmock github.com/coder/coder/coderd/database Store From da8631db2dd006f657a3d46ff1be09dbd7aa6ae3 Mon Sep 17 00:00:00 2001 From: Kyle Carberry <kyle@carberry.com> Date: Tue, 13 Jun 2023 18:48:05 +0000 Subject: [PATCH 2/3] chore: remove redundant dbtype package This wasn't necessary and forked how we do DB types. --- coderd/coderd.go | 3 +-- coderd/database/dbgen/dbgen.go | 3 +-- coderd/database/dbtype/dbtype.go | 29 -------------------- coderd/database/models.go | 5 ++-- coderd/database/queries.sql.go | 5 ++-- coderd/database/sqlc.yaml | 6 +++-- coderd/database/time.go | 14 ---------- coderd/database/{drivers.go => types.go} | 34 ++++++++++++++++++++++++ coderd/workspaces_test.go | 5 ++-- coderd/wsbuilder/wsbuilder_test.go | 5 ++-- 10 files changed, 48 insertions(+), 61 deletions(-) delete mode 100644 coderd/database/time.go rename coderd/database/{drivers.go => types.go} (55%) diff --git a/coderd/coderd.go b/coderd/coderd.go index f1aa14e145eac..64cc157c723d4 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -48,7 +48,6 @@ import ( "github.com/coder/coder/coderd/database" "github.com/coder/coder/coderd/database/dbauthz" "github.com/coder/coder/coderd/database/dbmetrics" - "github.com/coder/coder/coderd/database/dbtype" "github.com/coder/coder/coderd/gitauth" "github.com/coder/coder/coderd/gitsshkey" "github.com/coder/coder/coderd/healthcheck" @@ -948,7 +947,7 @@ func (api *API) CreateInMemoryProvisionerDaemon(ctx context.Context, debounce ti CreatedAt: database.Now(), Name: name, Provisioners: []database.ProvisionerType{database.ProvisionerTypeEcho, database.ProvisionerTypeTerraform}, - Tags: dbtype.StringMap{ + Tags: database.StringMap{ provisionerdserver.TagScope: provisionerdserver.ScopeOrganization, }, }) diff --git a/coderd/database/dbgen/dbgen.go b/coderd/database/dbgen/dbgen.go index 604873fa2afb6..1a428ba2ba63c 100644 --- a/coderd/database/dbgen/dbgen.go +++ b/coderd/database/dbgen/dbgen.go @@ -18,7 +18,6 @@ import ( "github.com/coder/coder/coderd/database" "github.com/coder/coder/coderd/database/dbauthz" - "github.com/coder/coder/coderd/database/dbtype" "github.com/coder/coder/coderd/rbac" "github.com/coder/coder/cryptorand" ) @@ -278,7 +277,7 @@ func ProvisionerJob(t testing.TB, db database.Store, orig database.ProvisionerJo // Always set some tags to prevent Acquire from grabbing jobs it should not. if !orig.StartedAt.Time.IsZero() { if orig.Tags == nil { - orig.Tags = make(dbtype.StringMap) + orig.Tags = make(database.StringMap) } // Make sure when we acquire the job, we only get this one. orig.Tags[id.String()] = "true" diff --git a/coderd/database/dbtype/dbtype.go b/coderd/database/dbtype/dbtype.go index 9ab47c16f5552..2811f6f5a93c8 100644 --- a/coderd/database/dbtype/dbtype.go +++ b/coderd/database/dbtype/dbtype.go @@ -1,30 +1 @@ package dbtype - -import ( - "database/sql/driver" - "encoding/json" - - "golang.org/x/xerrors" -) - -type StringMap map[string]string - -func (m *StringMap) Scan(src interface{}) error { - if src == nil { - return nil - } - switch src := src.(type) { - case []byte: - err := json.Unmarshal(src, m) - if err != nil { - return err - } - default: - return xerrors.Errorf("unsupported Scan, storing driver.Value type %T into type %T", src, m) - } - return nil -} - -func (m StringMap) Value() (driver.Value, error) { - return json.Marshal(m) -} diff --git a/coderd/database/models.go b/coderd/database/models.go index 558e1c51a94d7..cd571d6bba803 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -11,7 +11,6 @@ import ( "fmt" "time" - "github.com/coder/coder/coderd/database/dbtype" "github.com/google/uuid" "github.com/lib/pq" "github.com/tabbed/pqtype" @@ -1478,7 +1477,7 @@ type ProvisionerDaemon struct { Name string `db:"name" json:"name"` Provisioners []ProvisionerType `db:"provisioners" json:"provisioners"` ReplicaID uuid.NullUUID `db:"replica_id" json:"replica_id"` - Tags dbtype.StringMap `db:"tags" json:"tags"` + Tags StringMap `db:"tags" json:"tags"` } type ProvisionerJob struct { @@ -1497,7 +1496,7 @@ type ProvisionerJob struct { Input json.RawMessage `db:"input" json:"input"` WorkerID uuid.NullUUID `db:"worker_id" json:"worker_id"` FileID uuid.UUID `db:"file_id" json:"file_id"` - Tags dbtype.StringMap `db:"tags" json:"tags"` + Tags StringMap `db:"tags" json:"tags"` ErrorCode sql.NullString `db:"error_code" json:"error_code"` TraceMetadata pqtype.NullRawMessage `db:"trace_metadata" json:"trace_metadata"` } diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index d27802827763b..2c71a96ccc4e0 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -10,7 +10,6 @@ import ( "encoding/json" "time" - "github.com/coder/coder/coderd/database/dbtype" "github.com/google/uuid" "github.com/lib/pq" "github.com/tabbed/pqtype" @@ -1999,7 +1998,7 @@ type InsertProvisionerDaemonParams struct { CreatedAt time.Time `db:"created_at" json:"created_at"` Name string `db:"name" json:"name"` Provisioners []ProvisionerType `db:"provisioners" json:"provisioners"` - Tags dbtype.StringMap `db:"tags" json:"tags"` + Tags StringMap `db:"tags" json:"tags"` } func (q *sqlQuerier) InsertProvisionerDaemon(ctx context.Context, arg InsertProvisionerDaemonParams) (ProvisionerDaemon, error) { @@ -2365,7 +2364,7 @@ type InsertProvisionerJobParams struct { FileID uuid.UUID `db:"file_id" json:"file_id"` Type ProvisionerJobType `db:"type" json:"type"` Input json.RawMessage `db:"input" json:"input"` - Tags dbtype.StringMap `db:"tags" json:"tags"` + Tags StringMap `db:"tags" json:"tags"` TraceMetadata pqtype.NullRawMessage `db:"trace_metadata" json:"trace_metadata"` } diff --git a/coderd/database/sqlc.yaml b/coderd/database/sqlc.yaml index cd3e846afb430..0330a3503e1ef 100644 --- a/coderd/database/sqlc.yaml +++ b/coderd/database/sqlc.yaml @@ -8,9 +8,11 @@ overrides: go: overrides: - column: "provisioner_daemons.tags" - go_type: "github.com/coder/coder/coderd/database/dbtype.StringMap" + go_type: + type: "StringMap" - column: "provisioner_jobs.tags" - go_type: "github.com/coder/coder/coderd/database/dbtype.StringMap" + go_type: + type: "StringMap" - column: "users.rbac_roles" go_type: "github.com/lib/pq.StringArray" - column: "templates.user_acl" diff --git a/coderd/database/time.go b/coderd/database/time.go deleted file mode 100644 index 290ddf228fb7b..0000000000000 --- a/coderd/database/time.go +++ /dev/null @@ -1,14 +0,0 @@ -package database - -import "time" - -// Now returns a standardized timezone used for database resources. -func Now() time.Time { - return Time(time.Now().UTC()) -} - -// Time returns a time compatible with Postgres. Postgres only stores dates with -// microsecond precision. -func Time(t time.Time) time.Time { - return t.Round(time.Microsecond) -} diff --git a/coderd/database/drivers.go b/coderd/database/types.go similarity index 55% rename from coderd/database/drivers.go rename to coderd/database/types.go index a1084d1229662..45d21964ac27c 100644 --- a/coderd/database/drivers.go +++ b/coderd/database/types.go @@ -3,6 +3,7 @@ package database import ( "database/sql/driver" "encoding/json" + "time" "golang.org/x/xerrors" @@ -43,3 +44,36 @@ func (t *TemplateACL) Scan(src interface{}) error { func (t TemplateACL) Value() (driver.Value, error) { return json.Marshal(t) } + +type StringMap map[string]string + +func (m *StringMap) Scan(src interface{}) error { + if src == nil { + return nil + } + switch src := src.(type) { + case []byte: + err := json.Unmarshal(src, m) + if err != nil { + return err + } + default: + return xerrors.Errorf("unsupported Scan, storing driver.Value type %T into type %T", src, m) + } + return nil +} + +func (m StringMap) Value() (driver.Value, error) { + return json.Marshal(m) +} + +// Now returns a standardized timezone used for database resources. +func Now() time.Time { + return Time(time.Now().UTC()) +} + +// Time returns a time compatible with Postgres. Postgres only stores dates with +// microsecond precision. +func Time(t time.Time) time.Time { + return t.Round(time.Microsecond) +} diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index c9bdc60afd19e..ee651dc8d626e 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -26,7 +26,6 @@ import ( "github.com/coder/coder/coderd/database/dbauthz" "github.com/coder/coder/coderd/database/dbgen" "github.com/coder/coder/coderd/database/dbtestutil" - "github.com/coder/coder/coderd/database/dbtype" "github.com/coder/coder/coderd/parameter" "github.com/coder/coder/coderd/rbac" "github.com/coder/coder/coderd/schedule" @@ -589,7 +588,7 @@ func TestWorkspaceFilterAllStatus(t *testing.T) { InitiatorID: owner.UserID, WorkerID: uuid.NullUUID{}, FileID: file.ID, - Tags: dbtype.StringMap{ + Tags: database.StringMap{ "custom": "true", }, }) @@ -617,7 +616,7 @@ func TestWorkspaceFilterAllStatus(t *testing.T) { job.Type = database.ProvisionerJobTypeWorkspaceBuild job.OrganizationID = owner.OrganizationID // Need to prevent acquire from getting this job. - job.Tags = dbtype.StringMap{ + job.Tags = database.StringMap{ jobID.String(): "true", } job = dbgen.ProvisionerJob(t, db, job) diff --git a/coderd/wsbuilder/wsbuilder_test.go b/coderd/wsbuilder/wsbuilder_test.go index bef69d5ea99d8..414841e80b7f0 100644 --- a/coderd/wsbuilder/wsbuilder_test.go +++ b/coderd/wsbuilder/wsbuilder_test.go @@ -15,7 +15,6 @@ import ( "github.com/coder/coder/coderd/database" "github.com/coder/coder/coderd/database/dbmock" - "github.com/coder/coder/coderd/database/dbtype" "github.com/coder/coder/coderd/provisionerdserver" "github.com/coder/coder/coderd/wsbuilder" "github.com/coder/coder/codersdk" @@ -614,7 +613,7 @@ func withActiveVersion(params []database.TemplateVersionParameter) func(mTx *dbm StorageMethod: database.ProvisionerStorageMethodFile, Type: database.ProvisionerJobTypeTemplateVersionImport, Input: nil, - Tags: dbtype.StringMap{ + Tags: database.StringMap{ "version": "active", provisionerdserver.TagScope: provisionerdserver.ScopeUser, }, @@ -654,7 +653,7 @@ func withInactiveVersion(params []database.TemplateVersionParameter) func(mTx *d StorageMethod: database.ProvisionerStorageMethodFile, Type: database.ProvisionerJobTypeTemplateVersionImport, Input: nil, - Tags: dbtype.StringMap{ + Tags: database.StringMap{ "version": "inactive", provisionerdserver.TagScope: provisionerdserver.ScopeUser, }, From 7070d8c3718c4ea3a29e439e76e072e8cfb5cdc2 Mon Sep 17 00:00:00 2001 From: Kyle Carberry <kyle@carberry.com> Date: Tue, 13 Jun 2023 18:57:08 +0000 Subject: [PATCH 3/3] fix: use gcr.io postgres image to remove ratelimit --- coderd/database/postgres/postgres.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coderd/database/postgres/postgres.go b/coderd/database/postgres/postgres.go index c34ca0243c08e..85710d8bb0f7b 100644 --- a/coderd/database/postgres/postgres.go +++ b/coderd/database/postgres/postgres.go @@ -63,7 +63,7 @@ func OpenContainerized(port int) (string, func(), error) { } resource, err := pool.RunWithOptions(&dockertest.RunOptions{ - Repository: "postgres", + Repository: "gcr.io/coder-dev-1/postgres", Tag: "13", Env: []string{ "POSTGRES_PASSWORD=postgres",