From 9c43ddf6484ac885f995df34e8adc29602e715f3 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Wed, 7 Sep 2022 18:34:53 +0000 Subject: [PATCH] fix: Remove name from workspace builds Fixes #1561. --- cli/state.go | 25 +++---- cli/state_test.go | 3 +- .../autobuild/executor/lifecycle_executor.go | 2 - coderd/coderd.go | 1 - coderd/coderdtest/authtest.go | 5 -- coderd/database/databasefake/databasefake.go | 17 ----- coderd/database/dump.sql | 4 -- .../000045_workspacebuildname.down.sql | 2 + .../000045_workspacebuildname.up.sql | 2 + coderd/database/models.go | 1 - coderd/database/querier.go | 1 - coderd/database/queries.sql.go | 66 +++---------------- coderd/database/queries/workspacebuilds.sql | 12 +--- coderd/database/unique_constraint.go | 1 - coderd/httpmw/workspacebuildparam_test.go | 1 - coderd/workspacebuilds.go | 48 -------------- coderd/workspaces.go | 3 - coderd/workspaces_test.go | 39 ----------- codersdk/workspacebuilds.go | 1 - codersdk/workspaces.go | 13 ---- site/src/api/typesGenerated.ts | 1 - site/src/testHelpers/entities.ts | 2 - 22 files changed, 29 insertions(+), 221 deletions(-) create mode 100644 coderd/database/migrations/000045_workspacebuildname.down.sql create mode 100644 coderd/database/migrations/000045_workspacebuildname.up.sql diff --git a/cli/state.go b/cli/state.go index d6e5a4e549608..9564b9746cf83 100644 --- a/cli/state.go +++ b/cli/state.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "os" + "strconv" "time" "github.com/spf13/cobra" @@ -22,7 +23,7 @@ func state() *cobra.Command { } func statePull() *cobra.Command { - var buildName string + var buildNumber int cmd := &cobra.Command{ Use: "pull [file]", Args: cobra.MinimumNArgs(1), @@ -31,15 +32,15 @@ func statePull() *cobra.Command { if err != nil { return err } - workspace, err := namedWorkspace(cmd, client, args[0]) - if err != nil { - return err - } var build codersdk.WorkspaceBuild - if buildName == "latest" { + if buildNumber == 0 { + workspace, err := namedWorkspace(cmd, client, args[0]) + if err != nil { + return err + } build = workspace.LatestBuild } else { - build, err = client.WorkspaceBuildByName(cmd.Context(), workspace.ID, buildName) + build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(cmd.Context(), codersdk.Me, args[0], strconv.Itoa(buildNumber)) if err != nil { return err } @@ -58,12 +59,12 @@ func statePull() *cobra.Command { return os.WriteFile(args[1], state, 0600) }, } - cmd.Flags().StringVarP(&buildName, "build", "b", "latest", "Specify a workspace build to target by name.") + cmd.Flags().IntVarP(&buildNumber, "build", "b", 0, "Specify a workspace build to target by name.") return cmd } func statePush() *cobra.Command { - var buildName string + var buildNumber int cmd := &cobra.Command{ Use: "push ", Args: cobra.ExactArgs(2), @@ -77,10 +78,10 @@ func statePush() *cobra.Command { return err } var build codersdk.WorkspaceBuild - if buildName == "latest" { + if buildNumber == 0 { build = workspace.LatestBuild } else { - build, err = client.WorkspaceBuildByName(cmd.Context(), workspace.ID, buildName) + build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(cmd.Context(), codersdk.Me, args[0], strconv.Itoa(buildNumber)) if err != nil { return err } @@ -108,6 +109,6 @@ func statePush() *cobra.Command { return cliui.WorkspaceBuild(cmd.Context(), cmd.OutOrStderr(), client, build.ID, before) }, } - cmd.Flags().StringVarP(&buildName, "build", "b", "latest", "Specify a workspace build to target by name.") + cmd.Flags().IntVarP(&buildNumber, "build", "b", 0, "Specify a workspace build to target by name.") return cmd } diff --git a/cli/state_test.go b/cli/state_test.go index ef9495c4c1d03..b1482191c8609 100644 --- a/cli/state_test.go +++ b/cli/state_test.go @@ -4,6 +4,7 @@ import ( "bytes" "os" "path/filepath" + "strconv" "strings" "testing" @@ -113,7 +114,7 @@ func TestStatePush(t *testing.T) { template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) - cmd, root := clitest.New(t, "state", "push", "--build", workspace.LatestBuild.Name, workspace.Name, "-") + cmd, root := clitest.New(t, "state", "push", "--build", strconv.Itoa(int(workspace.LatestBuild.BuildNumber)), workspace.Name, "-") clitest.SetupConfig(t, client, root) cmd.SetIn(strings.NewReader("some magic state")) err := cmd.Execute() diff --git a/coderd/autobuild/executor/lifecycle_executor.go b/coderd/autobuild/executor/lifecycle_executor.go index 6cd45823bbf8c..22536583b6d3f 100644 --- a/coderd/autobuild/executor/lifecycle_executor.go +++ b/coderd/autobuild/executor/lifecycle_executor.go @@ -6,7 +6,6 @@ import ( "time" "github.com/google/uuid" - "github.com/moby/moby/pkg/namesgenerator" "golang.org/x/sync/errgroup" "golang.org/x/xerrors" @@ -290,7 +289,6 @@ func build(ctx context.Context, store database.Store, workspace database.Workspa WorkspaceID: workspace.ID, TemplateVersionID: priorHistory.TemplateVersionID, BuildNumber: priorBuildNumber + 1, - Name: namesgenerator.GetRandomName(1), ProvisionerState: priorHistory.ProvisionerState, InitiatorID: workspace.OwnerID, Transition: trans, diff --git a/coderd/coderd.go b/coderd/coderd.go index d3eeb7a462c9a..b97692758052f 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -434,7 +434,6 @@ func New(options *Options) *API { r.Route("/builds", func(r chi.Router) { r.Get("/", api.workspaceBuilds) r.Post("/", api.postWorkspaceBuilds) - r.Get("/{workspacebuildname}", api.workspaceBuildByName) }) r.Route("/autostart", func(r chi.Router) { r.Put("/", api.putWorkspaceAutostart) diff --git a/coderd/coderdtest/authtest.go b/coderd/coderdtest/authtest.go index 354ea0a353e06..6eb3df8ac6bc5 100644 --- a/coderd/coderdtest/authtest.go +++ b/coderd/coderdtest/authtest.go @@ -126,7 +126,6 @@ func NewAuthTester(ctx context.Context, t *testing.T, options *Options) *AuthTes "{workspace}": workspace.ID.String(), "{workspacebuild}": workspace.LatestBuild.ID.String(), "{workspacename}": workspace.Name, - "{workspacebuildname}": workspace.LatestBuild.Name, "{workspaceagent}": workspaceResources[0].Agents[0].ID.String(), "{buildnumber}": strconv.FormatInt(int64(workspace.LatestBuild.BuildNumber), 10), "{template}": template.ID.String(), @@ -211,10 +210,6 @@ func AGPLRoutes(a *AuthTester) (map[string]string, map[string]RouteCheck) { AssertObject: rbac.ResourceWorkspace, AssertAction: rbac.ActionRead, }, - "GET:/api/v2/workspaces/{workspace}/builds/{workspacebuildname}": { - AssertAction: rbac.ActionRead, - AssertObject: workspaceRBACObj, - }, "GET:/api/v2/workspacebuilds/{workspacebuild}": { AssertAction: rbac.ActionRead, AssertObject: workspaceRBACObj, diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index 588c96fa8de53..e08fe7eaf1011 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -774,22 +774,6 @@ func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceID(_ context.Context, return history, nil } -func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndName(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndNameParams) (database.WorkspaceBuild, error) { - q.mutex.RLock() - defer q.mutex.RUnlock() - - for _, workspaceBuild := range q.workspaceBuilds { - if workspaceBuild.WorkspaceID.String() != arg.WorkspaceID.String() { - continue - } - if !strings.EqualFold(workspaceBuild.Name, arg.Name) { - continue - } - return workspaceBuild, nil - } - return database.WorkspaceBuild{}, sql.ErrNoRows -} - func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1926,7 +1910,6 @@ func (q *fakeQuerier) InsertWorkspaceBuild(_ context.Context, arg database.Inser CreatedAt: arg.CreatedAt, UpdatedAt: arg.UpdatedAt, WorkspaceID: arg.WorkspaceID, - Name: arg.Name, TemplateVersionID: arg.TemplateVersionID, BuildNumber: arg.BuildNumber, Transition: arg.Transition, diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index 3e04f19cef06e..420179c7ea9d8 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -342,7 +342,6 @@ CREATE TABLE workspace_builds ( updated_at timestamp with time zone NOT NULL, workspace_id uuid NOT NULL, template_version_id uuid NOT NULL, - name character varying(64) NOT NULL, build_number integer NOT NULL, transition workspace_transition NOT NULL, initiator_id uuid NOT NULL, @@ -471,9 +470,6 @@ ALTER TABLE ONLY workspace_builds ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_workspace_id_build_number_key UNIQUE (workspace_id, build_number); -ALTER TABLE ONLY workspace_builds - ADD CONSTRAINT workspace_builds_workspace_id_name_key UNIQUE (workspace_id, name); - ALTER TABLE ONLY workspace_resource_metadata ADD CONSTRAINT workspace_resource_metadata_pkey PRIMARY KEY (workspace_resource_id, key); diff --git a/coderd/database/migrations/000045_workspacebuildname.down.sql b/coderd/database/migrations/000045_workspacebuildname.down.sql new file mode 100644 index 0000000000000..ebf4ef5ef4cb3 --- /dev/null +++ b/coderd/database/migrations/000045_workspacebuildname.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE workspace_builds + ADD COLUMN name character varying(64) NOT NULL; diff --git a/coderd/database/migrations/000045_workspacebuildname.up.sql b/coderd/database/migrations/000045_workspacebuildname.up.sql new file mode 100644 index 0000000000000..f038d085f22fa --- /dev/null +++ b/coderd/database/migrations/000045_workspacebuildname.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE workspace_builds + DROP COLUMN name; diff --git a/coderd/database/models.go b/coderd/database/models.go index 4c220f21e230c..020bb4bdc8b70 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -568,7 +568,6 @@ type WorkspaceBuild struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"` - Name string `db:"name" json:"name"` BuildNumber int32 `db:"build_number" json:"build_number"` Transition WorkspaceTransition `db:"transition" json:"transition"` InitiatorID uuid.UUID `db:"initiator_id" json:"initiator_id"` diff --git a/coderd/database/querier.go b/coderd/database/querier.go index 2cb7cd459485e..490bacdf43a3b 100644 --- a/coderd/database/querier.go +++ b/coderd/database/querier.go @@ -88,7 +88,6 @@ type querier interface { GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) GetWorkspaceBuildByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDParams) ([]WorkspaceBuild, error) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) - GetWorkspaceBuildByWorkspaceIDAndName(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndNameParams) (WorkspaceBuild, error) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceBuild, error) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) GetWorkspaceByOwnerIDAndName(ctx context.Context, arg GetWorkspaceByOwnerIDAndNameParams) (Workspace, error) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 9792595b0fdc8..954f08227e1e5 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -3850,7 +3850,7 @@ func (q *sqlQuerier) InsertWorkspaceApp(ctx context.Context, arg InsertWorkspace const getLatestWorkspaceBuildByWorkspaceID = `-- name: GetLatestWorkspaceBuildByWorkspaceID :one SELECT - id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason + id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE @@ -3870,7 +3870,6 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, w &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -3883,7 +3882,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, w } const getLatestWorkspaceBuilds = `-- name: GetLatestWorkspaceBuilds :many -SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.name, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason +SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason FROM ( SELECT workspace_id, MAX(build_number) as max_build_number @@ -3912,7 +3911,6 @@ func (q *sqlQuerier) GetLatestWorkspaceBuilds(ctx context.Context) ([]WorkspaceB &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -3935,7 +3933,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuilds(ctx context.Context) ([]WorkspaceB } const getLatestWorkspaceBuildsByWorkspaceIDs = `-- name: GetLatestWorkspaceBuildsByWorkspaceIDs :many -SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.name, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason +SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason FROM ( SELECT workspace_id, MAX(build_number) as max_build_number @@ -3966,7 +3964,6 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -3990,7 +3987,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, const getWorkspaceBuildByID = `-- name: GetWorkspaceBuildByID :one SELECT - id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason + id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE @@ -4008,7 +4005,6 @@ func (q *sqlQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (W &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -4022,7 +4018,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (W const getWorkspaceBuildByJobID = `-- name: GetWorkspaceBuildByJobID :one SELECT - id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason + id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE @@ -4040,7 +4036,6 @@ func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UU &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -4054,7 +4049,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UU const getWorkspaceBuildByWorkspaceID = `-- name: GetWorkspaceBuildByWorkspaceID :many SELECT - id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason + id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE @@ -4112,7 +4107,6 @@ func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceID(ctx context.Context, arg Get &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -4136,7 +4130,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceID(ctx context.Context, arg Get const getWorkspaceBuildByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one SELECT - id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason + id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE @@ -4158,43 +4152,6 @@ func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Co &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, - &i.BuildNumber, - &i.Transition, - &i.InitiatorID, - &i.ProvisionerState, - &i.JobID, - &i.Deadline, - &i.Reason, - ) - return i, err -} - -const getWorkspaceBuildByWorkspaceIDAndName = `-- name: GetWorkspaceBuildByWorkspaceIDAndName :one -SELECT - id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason -FROM - workspace_builds -WHERE - workspace_id = $1 - AND "name" = $2 -` - -type GetWorkspaceBuildByWorkspaceIDAndNameParams struct { - WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` - Name string `db:"name" json:"name"` -} - -func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndName(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndNameParams) (WorkspaceBuild, error) { - row := q.db.QueryRowContext(ctx, getWorkspaceBuildByWorkspaceIDAndName, arg.WorkspaceID, arg.Name) - var i WorkspaceBuild - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.WorkspaceID, - &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -4207,7 +4164,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndName(ctx context.Context, } const getWorkspaceBuildsCreatedAfter = `-- name: GetWorkspaceBuildsCreatedAfter :many -SELECT id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE created_at > $1 +SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE created_at > $1 ` func (q *sqlQuerier) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceBuild, error) { @@ -4225,7 +4182,6 @@ func (q *sqlQuerier) GetWorkspaceBuildsCreatedAfter(ctx context.Context, created &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, @@ -4256,7 +4212,6 @@ INSERT INTO workspace_id, template_version_id, "build_number", - "name", transition, initiator_id, job_id, @@ -4265,7 +4220,7 @@ INSERT INTO reason ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) RETURNING id, created_at, updated_at, workspace_id, template_version_id, name, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason + ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason ` type InsertWorkspaceBuildParams struct { @@ -4275,7 +4230,6 @@ type InsertWorkspaceBuildParams struct { WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"` BuildNumber int32 `db:"build_number" json:"build_number"` - Name string `db:"name" json:"name"` Transition WorkspaceTransition `db:"transition" json:"transition"` InitiatorID uuid.UUID `db:"initiator_id" json:"initiator_id"` JobID uuid.UUID `db:"job_id" json:"job_id"` @@ -4292,7 +4246,6 @@ func (q *sqlQuerier) InsertWorkspaceBuild(ctx context.Context, arg InsertWorkspa arg.WorkspaceID, arg.TemplateVersionID, arg.BuildNumber, - arg.Name, arg.Transition, arg.InitiatorID, arg.JobID, @@ -4307,7 +4260,6 @@ func (q *sqlQuerier) InsertWorkspaceBuild(ctx context.Context, arg InsertWorkspa &i.UpdatedAt, &i.WorkspaceID, &i.TemplateVersionID, - &i.Name, &i.BuildNumber, &i.Transition, &i.InitiatorID, diff --git a/coderd/database/queries/workspacebuilds.sql b/coderd/database/queries/workspacebuilds.sql index f584a8eed37f4..550354d63ef2d 100644 --- a/coderd/database/queries/workspacebuilds.sql +++ b/coderd/database/queries/workspacebuilds.sql @@ -21,15 +21,6 @@ LIMIT -- name: GetWorkspaceBuildsCreatedAfter :many SELECT * FROM workspace_builds WHERE created_at > $1; --- name: GetWorkspaceBuildByWorkspaceIDAndName :one -SELECT - * -FROM - workspace_builds -WHERE - workspace_id = $1 - AND "name" = $2; - -- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one SELECT * @@ -122,7 +113,6 @@ INSERT INTO workspace_id, template_version_id, "build_number", - "name", transition, initiator_id, job_id, @@ -131,7 +121,7 @@ INSERT INTO reason ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) RETURNING *; + ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING *; -- name: UpdateWorkspaceBuildByID :exec UPDATE diff --git a/coderd/database/unique_constraint.go b/coderd/database/unique_constraint.go index 1edb0a408ed20..046ff5a5095c2 100644 --- a/coderd/database/unique_constraint.go +++ b/coderd/database/unique_constraint.go @@ -15,7 +15,6 @@ const ( UniqueWorkspaceAppsAgentIDNameKey UniqueConstraint = "workspace_apps_agent_id_name_key" // ALTER TABLE ONLY workspace_apps ADD CONSTRAINT workspace_apps_agent_id_name_key UNIQUE (agent_id, name); UniqueWorkspaceBuildsJobIDKey UniqueConstraint = "workspace_builds_job_id_key" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_job_id_key UNIQUE (job_id); UniqueWorkspaceBuildsWorkspaceIDBuildNumberKey UniqueConstraint = "workspace_builds_workspace_id_build_number_key" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_workspace_id_build_number_key UNIQUE (workspace_id, build_number); - UniqueWorkspaceBuildsWorkspaceIDNameKey UniqueConstraint = "workspace_builds_workspace_id_name_key" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_workspace_id_name_key UNIQUE (workspace_id, name); UniqueIndexOrganizationName UniqueConstraint = "idx_organization_name" // CREATE UNIQUE INDEX idx_organization_name ON organizations USING btree (name); UniqueIndexOrganizationNameLower UniqueConstraint = "idx_organization_name_lower" // CREATE UNIQUE INDEX idx_organization_name_lower ON organizations USING btree (lower(name)); UniqueIndexUsersEmail UniqueConstraint = "idx_users_email" // CREATE UNIQUE INDEX idx_users_email ON users USING btree (email); diff --git a/coderd/httpmw/workspacebuildparam_test.go b/coderd/httpmw/workspacebuildparam_test.go index c993a0cb66fb6..e16f18417d3a1 100644 --- a/coderd/httpmw/workspacebuildparam_test.go +++ b/coderd/httpmw/workspacebuildparam_test.go @@ -122,7 +122,6 @@ func TestWorkspaceBuildParam(t *testing.T) { workspaceBuild, err := db.InsertWorkspaceBuild(context.Background(), database.InsertWorkspaceBuildParams{ ID: uuid.New(), WorkspaceID: workspace.ID, - Name: "moo", }) require.NoError(t, err) chi.RouteContext(r.Context()).URLParams.Add("workspacebuild", workspaceBuild.ID.String()) diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index 764127dd47a23..b98c67195491a 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -10,7 +10,6 @@ import ( "github.com/go-chi/chi/v5" "github.com/google/uuid" - "github.com/moby/moby/pkg/namesgenerator" "golang.org/x/exp/slices" "golang.org/x/xerrors" @@ -236,51 +235,6 @@ func (api *API) workspaceBuildByBuildNumber(rw http.ResponseWriter, r *http.Requ workspace, workspaceBuild, job)) } -func (api *API) workspaceBuildByName(rw http.ResponseWriter, r *http.Request) { - workspace := httpmw.WorkspaceParam(r) - workspaceBuildName := chi.URLParam(r, "workspacebuildname") - if !api.Authorize(r, rbac.ActionRead, workspace) { - httpapi.ResourceNotFound(rw) - return - } - - workspaceBuild, err := api.Database.GetWorkspaceBuildByWorkspaceIDAndName(r.Context(), database.GetWorkspaceBuildByWorkspaceIDAndNameParams{ - WorkspaceID: workspace.ID, - Name: workspaceBuildName, - }) - if errors.Is(err, sql.ErrNoRows) { - httpapi.ResourceNotFound(rw) - return - } - if err != nil { - httpapi.Write(rw, http.StatusInternalServerError, codersdk.Response{ - Message: "Internal error fetching workspace build by name.", - Detail: err.Error(), - }) - return - } - job, err := api.Database.GetProvisionerJobByID(r.Context(), workspaceBuild.JobID) - if err != nil { - httpapi.Write(rw, http.StatusInternalServerError, codersdk.Response{ - Message: "Internal error fetching provisioner job.", - Detail: err.Error(), - }) - return - } - users, err := api.Database.GetUsersByIDs(r.Context(), []uuid.UUID{workspace.OwnerID, workspaceBuild.InitiatorID}) - if err != nil { - httpapi.Write(rw, http.StatusInternalServerError, codersdk.Response{ - Message: "Internal error getting user.", - Detail: err.Error(), - }) - return - } - - httpapi.Write(rw, http.StatusOK, - convertWorkspaceBuild(findUser(workspace.OwnerID, users), findUser(workspaceBuild.InitiatorID, users), - workspace, workspaceBuild, job)) -} - func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { apiKey := httpmw.APIKey(r) workspace := httpmw.WorkspaceParam(r) @@ -502,7 +456,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { WorkspaceID: workspace.ID, TemplateVersionID: templateVersion.ID, BuildNumber: priorBuildNum + 1, - Name: namesgenerator.GetRandomName(1), ProvisionerState: state, InitiatorID: apiKey.UserID, Transition: database.WorkspaceTransition(createBuild.Transition), @@ -700,7 +653,6 @@ func convertWorkspaceBuild( WorkspaceName: workspace.Name, TemplateVersionID: workspaceBuild.TemplateVersionID, BuildNumber: workspaceBuild.BuildNumber, - Name: workspaceBuild.Name, Transition: codersdk.WorkspaceTransition(workspaceBuild.Transition), InitiatorID: workspaceBuild.InitiatorID, InitiatorUsername: initiatorName, diff --git a/coderd/workspaces.go b/coderd/workspaces.go index 7d74dc2597b79..fa9e0784a20b7 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -14,7 +14,6 @@ import ( "github.com/go-chi/chi/v5" "github.com/google/uuid" - "github.com/moby/moby/pkg/namesgenerator" "golang.org/x/sync/errgroup" "golang.org/x/xerrors" "nhooyr.io/websocket" @@ -438,7 +437,6 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req UpdatedAt: now, WorkspaceID: workspace.ID, TemplateVersionID: templateVersion.ID, - Name: namesgenerator.GetRandomName(1), InitiatorID: apiKey.UserID, Transition: database.WorkspaceTransitionStart, JobID: provisionerJob.ID, @@ -870,7 +868,6 @@ func convertWorkspaces(ctx context.Context, db database.Store, workspaces []data UpdatedAt: workspaceBuild.UpdatedAt, WorkspaceID: workspaceBuild.WorkspaceID, TemplateVersionID: workspaceBuild.TemplateVersionID, - Name: workspaceBuild.Name, BuildNumber: workspaceBuild.BuildNumber, Transition: workspaceBuild.Transition, InitiatorID: workspaceBuild.InitiatorID, diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index 2184c98888681..976c2dbb37bae 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -876,45 +876,6 @@ func TestPostWorkspaceBuild(t *testing.T) { }) } -func TestWorkspaceBuildByName(t *testing.T) { - t.Parallel() - t.Run("NotFound", func(t *testing.T) { - t.Parallel() - client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) - user := coderdtest.CreateFirstUser(t, client) - version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) - template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) - coderdtest.AwaitTemplateVersionJob(t, client, version.ID) - workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) - - ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) - defer cancel() - - _, err := client.WorkspaceBuildByName(ctx, workspace.ID, "something") - var apiErr *codersdk.Error - require.ErrorAs(t, err, &apiErr) - require.Equal(t, http.StatusNotFound, apiErr.StatusCode()) - }) - - t.Run("Found", func(t *testing.T) { - t.Parallel() - client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) - user := coderdtest.CreateFirstUser(t, client) - version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) - coderdtest.AwaitTemplateVersionJob(t, client, version.ID) - template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) - workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) - - ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) - defer cancel() - - build, err := client.WorkspaceBuild(ctx, workspace.LatestBuild.ID) - require.NoError(t, err) - _, err = client.WorkspaceBuildByName(ctx, workspace.ID, build.Name) - require.NoError(t, err) - }) -} - func TestWorkspaceUpdateAutostart(t *testing.T) { t.Parallel() dublinLoc := mustLocation(t, "Europe/Dublin") diff --git a/codersdk/workspacebuilds.go b/codersdk/workspacebuilds.go index 5a158a00f6ab1..8020926834c9d 100644 --- a/codersdk/workspacebuilds.go +++ b/codersdk/workspacebuilds.go @@ -45,7 +45,6 @@ type WorkspaceBuild struct { WorkspaceOwnerName string `json:"workspace_owner_name"` TemplateVersionID uuid.UUID `json:"template_version_id"` BuildNumber int32 `json:"build_number"` - Name string `json:"name"` Transition WorkspaceTransition `json:"transition"` InitiatorID uuid.UUID `json:"initiator_id"` InitiatorUsername string `json:"initiator_name"` diff --git a/codersdk/workspaces.go b/codersdk/workspaces.go index 7a4cac76380e0..2fdad3b5a5ea9 100644 --- a/codersdk/workspaces.go +++ b/codersdk/workspaces.go @@ -122,19 +122,6 @@ func (c *Client) CreateWorkspaceBuild(ctx context.Context, workspace uuid.UUID, return workspaceBuild, json.NewDecoder(res.Body).Decode(&workspaceBuild) } -func (c *Client) WorkspaceBuildByName(ctx context.Context, workspace uuid.UUID, name string) (WorkspaceBuild, error) { - res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/builds/%s", workspace, name), nil) - if err != nil { - return WorkspaceBuild{}, err - } - defer res.Body.Close() - if res.StatusCode != http.StatusOK { - return WorkspaceBuild{}, readBodyAsError(res) - } - var workspaceBuild WorkspaceBuild - return workspaceBuild, json.NewDecoder(res.Body).Decode(&workspaceBuild) -} - func (c *Client) WatchWorkspace(ctx context.Context, id uuid.UUID) (<-chan Workspace, error) { conn, err := c.dialWebsocket(ctx, fmt.Sprintf("/api/v2/workspaces/%s/watch", id)) if err != nil { diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 21bace379c564..3b8dc43af2aea 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -604,7 +604,6 @@ export interface WorkspaceBuild { readonly workspace_owner_name: string readonly template_version_id: string readonly build_number: number - readonly name: string readonly transition: WorkspaceTransition readonly initiator_id: string readonly initiator_name: string diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 3e3023f5ed228..e03cfb0d04028 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -201,7 +201,6 @@ export const MockWorkspaceBuild: TypesGen.WorkspaceBuild = { initiator_id: MockUser.id, initiator_name: MockUser.username, job: MockProvisionerJob, - name: "a-workspace-build", template_version_id: "", transition: "start", updated_at: "2022-05-17T17:39:01.382927298Z", @@ -222,7 +221,6 @@ export const MockFailedWorkspaceBuild = ( initiator_id: MockUser.id, initiator_name: MockUser.username, job: MockFailedProvisionerJob, - name: "a-workspace-build", template_version_id: "", transition: transition, updated_at: "2022-05-17T17:39:01.382927298Z",