Skip to content

Commit 4b7ed1a

Browse files
committed
feat(database): add has_external_agent flag to template_versions and workspace_builds
1 parent a8c89a1 commit 4b7ed1a

File tree

19 files changed

+570
-259
lines changed

19 files changed

+570
-259
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4733,9 +4733,9 @@ func (q *querier) UpdateTemplateScheduleByID(ctx context.Context, arg database.U
47334733
return update(q.log, q.auth, fetch, q.db.UpdateTemplateScheduleByID)(ctx, arg)
47344734
}
47354735

4736-
func (q *querier) UpdateTemplateVersionAITaskByJobID(ctx context.Context, arg database.UpdateTemplateVersionAITaskByJobIDParams) error {
4737-
// An actor is allowed to update the template version AI task flag if they are authorized to update the template.
4738-
tv, err := q.db.GetTemplateVersionByJobID(ctx, arg.JobID)
4736+
func (q *querier) UpdateTemplateVersionByID(ctx context.Context, arg database.UpdateTemplateVersionByIDParams) error {
4737+
// An actor is allowed to update the template version if they are authorized to update the template.
4738+
tv, err := q.db.GetTemplateVersionByID(ctx, arg.ID)
47394739
if err != nil {
47404740
return err
47414741
}
@@ -4752,12 +4752,12 @@ func (q *querier) UpdateTemplateVersionAITaskByJobID(ctx context.Context, arg da
47524752
if err := q.authorizeContext(ctx, policy.ActionUpdate, obj); err != nil {
47534753
return err
47544754
}
4755-
return q.db.UpdateTemplateVersionAITaskByJobID(ctx, arg)
4755+
return q.db.UpdateTemplateVersionByID(ctx, arg)
47564756
}
47574757

4758-
func (q *querier) UpdateTemplateVersionByID(ctx context.Context, arg database.UpdateTemplateVersionByIDParams) error {
4759-
// An actor is allowed to update the template version if they are authorized to update the template.
4760-
tv, err := q.db.GetTemplateVersionByID(ctx, arg.ID)
4758+
func (q *querier) UpdateTemplateVersionDescriptionByJobID(ctx context.Context, arg database.UpdateTemplateVersionDescriptionByJobIDParams) error {
4759+
// An actor is allowed to update the template version description if they are authorized to update the template.
4760+
tv, err := q.db.GetTemplateVersionByJobID(ctx, arg.JobID)
47614761
if err != nil {
47624762
return err
47634763
}
@@ -4774,11 +4774,11 @@ func (q *querier) UpdateTemplateVersionByID(ctx context.Context, arg database.Up
47744774
if err := q.authorizeContext(ctx, policy.ActionUpdate, obj); err != nil {
47754775
return err
47764776
}
4777-
return q.db.UpdateTemplateVersionByID(ctx, arg)
4777+
return q.db.UpdateTemplateVersionDescriptionByJobID(ctx, arg)
47784778
}
47794779

4780-
func (q *querier) UpdateTemplateVersionDescriptionByJobID(ctx context.Context, arg database.UpdateTemplateVersionDescriptionByJobIDParams) error {
4781-
// An actor is allowed to update the template version description if they are authorized to update the template.
4780+
func (q *querier) UpdateTemplateVersionExternalAuthProvidersByJobID(ctx context.Context, arg database.UpdateTemplateVersionExternalAuthProvidersByJobIDParams) error {
4781+
// An actor is allowed to update the template version external auth providers if they are authorized to update the template.
47824782
tv, err := q.db.GetTemplateVersionByJobID(ctx, arg.JobID)
47834783
if err != nil {
47844784
return err
@@ -4796,11 +4796,11 @@ func (q *querier) UpdateTemplateVersionDescriptionByJobID(ctx context.Context, a
47964796
if err := q.authorizeContext(ctx, policy.ActionUpdate, obj); err != nil {
47974797
return err
47984798
}
4799-
return q.db.UpdateTemplateVersionDescriptionByJobID(ctx, arg)
4799+
return q.db.UpdateTemplateVersionExternalAuthProvidersByJobID(ctx, arg)
48004800
}
48014801

4802-
func (q *querier) UpdateTemplateVersionExternalAuthProvidersByJobID(ctx context.Context, arg database.UpdateTemplateVersionExternalAuthProvidersByJobIDParams) error {
4803-
// An actor is allowed to update the template version external auth providers if they are authorized to update the template.
4802+
func (q *querier) UpdateTemplateVersionFlagsByJobID(ctx context.Context, arg database.UpdateTemplateVersionFlagsByJobIDParams) error {
4803+
// An actor is allowed to update the template version ai task and external agent flag if they are authorized to update the template.
48044804
tv, err := q.db.GetTemplateVersionByJobID(ctx, arg.JobID)
48054805
if err != nil {
48064806
return err
@@ -4818,7 +4818,7 @@ func (q *querier) UpdateTemplateVersionExternalAuthProvidersByJobID(ctx context.
48184818
if err := q.authorizeContext(ctx, policy.ActionUpdate, obj); err != nil {
48194819
return err
48204820
}
4821-
return q.db.UpdateTemplateVersionExternalAuthProvidersByJobID(ctx, arg)
4821+
return q.db.UpdateTemplateVersionFlagsByJobID(ctx, arg)
48224822
}
48234823

48244824
func (q *querier) UpdateTemplateWorkspacesLastUsedAt(ctx context.Context, arg database.UpdateTemplateWorkspacesLastUsedAtParams) error {
@@ -5143,7 +5143,15 @@ func (q *querier) UpdateWorkspaceAutostart(ctx context.Context, arg database.Upd
51435143
return update(q.log, q.auth, fetch, q.db.UpdateWorkspaceAutostart)(ctx, arg)
51445144
}
51455145

5146-
func (q *querier) UpdateWorkspaceBuildAITaskByID(ctx context.Context, arg database.UpdateWorkspaceBuildAITaskByIDParams) error {
5146+
// UpdateWorkspaceBuildCostByID is used by the provisioning system to update the cost of a workspace build.
5147+
func (q *querier) UpdateWorkspaceBuildCostByID(ctx context.Context, arg database.UpdateWorkspaceBuildCostByIDParams) error {
5148+
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
5149+
return err
5150+
}
5151+
return q.db.UpdateWorkspaceBuildCostByID(ctx, arg)
5152+
}
5153+
5154+
func (q *querier) UpdateWorkspaceBuildDeadlineByID(ctx context.Context, arg database.UpdateWorkspaceBuildDeadlineByIDParams) error {
51475155
build, err := q.db.GetWorkspaceBuildByID(ctx, arg.ID)
51485156
if err != nil {
51495157
return err
@@ -5158,18 +5166,10 @@ func (q *querier) UpdateWorkspaceBuildAITaskByID(ctx context.Context, arg databa
51585166
if err != nil {
51595167
return err
51605168
}
5161-
return q.db.UpdateWorkspaceBuildAITaskByID(ctx, arg)
5162-
}
5163-
5164-
// UpdateWorkspaceBuildCostByID is used by the provisioning system to update the cost of a workspace build.
5165-
func (q *querier) UpdateWorkspaceBuildCostByID(ctx context.Context, arg database.UpdateWorkspaceBuildCostByIDParams) error {
5166-
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
5167-
return err
5168-
}
5169-
return q.db.UpdateWorkspaceBuildCostByID(ctx, arg)
5169+
return q.db.UpdateWorkspaceBuildDeadlineByID(ctx, arg)
51705170
}
51715171

5172-
func (q *querier) UpdateWorkspaceBuildDeadlineByID(ctx context.Context, arg database.UpdateWorkspaceBuildDeadlineByIDParams) error {
5172+
func (q *querier) UpdateWorkspaceBuildFlagsByID(ctx context.Context, arg database.UpdateWorkspaceBuildFlagsByIDParams) error {
51735173
build, err := q.db.GetWorkspaceBuildByID(ctx, arg.ID)
51745174
if err != nil {
51755175
return err
@@ -5184,7 +5184,7 @@ func (q *querier) UpdateWorkspaceBuildDeadlineByID(ctx context.Context, arg data
51845184
if err != nil {
51855185
return err
51865186
}
5187-
return q.db.UpdateWorkspaceBuildDeadlineByID(ctx, arg)
5187+
return q.db.UpdateWorkspaceBuildFlagsByID(ctx, arg)
51885188
}
51895189

51905190
func (q *querier) UpdateWorkspaceBuildProvisionerStateByID(ctx context.Context, arg database.UpdateWorkspaceBuildProvisionerStateByIDParams) error {

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,13 +1355,13 @@ func (s *MethodTestSuite) TestTemplate() {
13551355
dbm.EXPECT().UpdateTemplateScheduleByID(gomock.Any(), arg).Return(nil).AnyTimes()
13561356
check.Args(arg).Asserts(t1, policy.ActionUpdate)
13571357
}))
1358-
s.Run("UpdateTemplateVersionAITaskByJobID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
1358+
s.Run("UpdateTemplateVersionFlagsByJobID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
13591359
t := testutil.Fake(s.T(), faker, database.Template{})
13601360
tv := testutil.Fake(s.T(), faker, database.TemplateVersion{TemplateID: uuid.NullUUID{UUID: t.ID, Valid: true}})
1361-
arg := database.UpdateTemplateVersionAITaskByJobIDParams{JobID: tv.JobID, HasAITask: sql.NullBool{Bool: true, Valid: true}}
1361+
arg := database.UpdateTemplateVersionFlagsByJobIDParams{JobID: tv.JobID, HasAITask: sql.NullBool{Bool: true, Valid: true}, HasExternalAgent: sql.NullBool{Bool: true, Valid: true}}
13621362
dbm.EXPECT().GetTemplateVersionByJobID(gomock.Any(), tv.JobID).Return(tv, nil).AnyTimes()
13631363
dbm.EXPECT().GetTemplateByID(gomock.Any(), t.ID).Return(t, nil).AnyTimes()
1364-
dbm.EXPECT().UpdateTemplateVersionAITaskByJobID(gomock.Any(), arg).Return(nil).AnyTimes()
1364+
dbm.EXPECT().UpdateTemplateVersionFlagsByJobID(gomock.Any(), arg).Return(nil).AnyTimes()
13651365
check.Args(arg).Asserts(t, policy.ActionUpdate)
13661366
}))
13671367
s.Run("UpdateTemplateWorkspacesLastUsedAt", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
@@ -2955,7 +2955,7 @@ func (s *MethodTestSuite) TestWorkspace() {
29552955
Deadline: b.Deadline,
29562956
}).Asserts(w, policy.ActionUpdate)
29572957
}))
2958-
s.Run("UpdateWorkspaceBuildAITaskByID", s.Subtest(func(db database.Store, check *expects) {
2958+
s.Run("UpdateWorkspaceBuildFlagsByID", s.Subtest(func(db database.Store, check *expects) {
29592959
u := dbgen.User(s.T(), db, database.User{})
29602960
o := dbgen.Organization(s.T(), db, database.Organization{})
29612961
tpl := dbgen.Template(s.T(), db, database.Template{
@@ -2983,10 +2983,12 @@ func (s *MethodTestSuite) TestWorkspace() {
29832983
res := dbgen.WorkspaceResource(s.T(), db, database.WorkspaceResource{JobID: b.JobID})
29842984
agt := dbgen.WorkspaceAgent(s.T(), db, database.WorkspaceAgent{ResourceID: res.ID})
29852985
app := dbgen.WorkspaceApp(s.T(), db, database.WorkspaceApp{AgentID: agt.ID})
2986-
check.Args(database.UpdateWorkspaceBuildAITaskByIDParams{
2987-
HasAITask: sql.NullBool{Bool: true, Valid: true},
2988-
SidebarAppID: uuid.NullUUID{UUID: app.ID, Valid: true},
2989-
ID: b.ID,
2986+
check.Args(database.UpdateWorkspaceBuildFlagsByIDParams{
2987+
ID: b.ID,
2988+
HasAITask: sql.NullBool{Bool: true, Valid: true},
2989+
HasExternalAgent: sql.NullBool{Bool: true, Valid: true},
2990+
SidebarAppID: uuid.NullUUID{UUID: app.ID, Valid: true},
2991+
UpdatedAt: b.UpdatedAt,
29902992
}).Asserts(w, policy.ActionUpdate)
29912993
}))
29922994
s.Run("SoftDeleteWorkspaceByID", s.Subtest(func(db database.Store, check *expects) {

coderd/database/dbgen/dbgen.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ func WorkspaceBuild(t testing.TB, db database.Store, orig database.WorkspaceBuil
437437
jobID := takeFirst(orig.JobID, uuid.New())
438438
hasAITask := takeFirst(orig.HasAITask, sql.NullBool{})
439439
sidebarAppID := takeFirst(orig.AITaskSidebarAppID, uuid.NullUUID{})
440+
hasExternalAgent := takeFirst(orig.HasExternalAgent, sql.NullBool{})
440441
var build database.WorkspaceBuild
441442
err := db.InTx(func(db database.Store) error {
442443
err := db.InsertWorkspaceBuild(genCtx, database.InsertWorkspaceBuildParams{
@@ -470,12 +471,13 @@ func WorkspaceBuild(t testing.TB, db database.Store, orig database.WorkspaceBuil
470471
require.NoError(t, err)
471472
}
472473

473-
if hasAITask.Valid {
474-
require.NoError(t, db.UpdateWorkspaceBuildAITaskByID(genCtx, database.UpdateWorkspaceBuildAITaskByIDParams{
475-
HasAITask: hasAITask,
476-
SidebarAppID: sidebarAppID,
477-
UpdatedAt: dbtime.Now(),
478-
ID: buildID,
474+
if hasAITask.Valid || hasExternalAgent.Valid {
475+
require.NoError(t, db.UpdateWorkspaceBuildFlagsByID(genCtx, database.UpdateWorkspaceBuildFlagsByIDParams{
476+
ID: buildID,
477+
HasAITask: hasAITask,
478+
HasExternalAgent: hasExternalAgent,
479+
SidebarAppID: sidebarAppID,
480+
UpdatedAt: dbtime.Now(),
479481
}))
480482
}
481483

@@ -1028,6 +1030,7 @@ func ExternalAuthLink(t testing.TB, db database.Store, orig database.ExternalAut
10281030
func TemplateVersion(t testing.TB, db database.Store, orig database.TemplateVersion) database.TemplateVersion {
10291031
var version database.TemplateVersion
10301032
hasAITask := takeFirst(orig.HasAITask, sql.NullBool{})
1033+
hasExternalAgent := takeFirst(orig.HasExternalAgent, sql.NullBool{})
10311034
jobID := takeFirst(orig.JobID, uuid.New())
10321035
err := db.InTx(func(db database.Store) error {
10331036
versionID := takeFirst(orig.ID, uuid.New())
@@ -1048,11 +1051,12 @@ func TemplateVersion(t testing.TB, db database.Store, orig database.TemplateVers
10481051
return err
10491052
}
10501053

1051-
if hasAITask.Valid {
1052-
require.NoError(t, db.UpdateTemplateVersionAITaskByJobID(genCtx, database.UpdateTemplateVersionAITaskByJobIDParams{
1053-
JobID: jobID,
1054-
HasAITask: hasAITask,
1055-
UpdatedAt: dbtime.Now(),
1054+
if hasAITask.Valid || hasExternalAgent.Valid {
1055+
require.NoError(t, db.UpdateTemplateVersionFlagsByJobID(genCtx, database.UpdateTemplateVersionFlagsByJobIDParams{
1056+
JobID: jobID,
1057+
HasAITask: hasAITask,
1058+
HasExternalAgent: hasExternalAgent,
1059+
UpdatedAt: dbtime.Now(),
10561060
}))
10571061
}
10581062

coderd/database/dbmetrics/querymetrics.go

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

Lines changed: 28 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy