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",