Skip to content

Commit d004710

Browse files
authored
feat: add prebuild invalidation via last_invalidated_at timestamp (#20582)
Updates #17917
1 parent c2319e5 commit d004710

27 files changed

+636
-22
lines changed

coderd/apidoc/docs.go

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

coderd/apidoc/swagger.json

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

coderd/database/db2sdk/db2sdk.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,18 @@ func AIBridgeToolUsage(usage database.AIBridgeToolUsage) codersdk.AIBridgeToolUs
10211021
}
10221022
}
10231023

1024+
func InvalidatedPresets(invalidatedPresets []database.UpdatePresetsLastInvalidatedAtRow) []codersdk.InvalidatedPreset {
1025+
var presets []codersdk.InvalidatedPreset
1026+
for _, p := range invalidatedPresets {
1027+
presets = append(presets, codersdk.InvalidatedPreset{
1028+
TemplateName: p.TemplateName,
1029+
TemplateVersionName: p.TemplateVersionName,
1030+
PresetName: p.TemplateVersionPresetName,
1031+
})
1032+
}
1033+
return presets
1034+
}
1035+
10241036
func jsonOrEmptyMap(rawMessage pqtype.NullRawMessage) map[string]any {
10251037
var m map[string]any
10261038
if !rawMessage.Valid {

coderd/database/dbauthz/dbauthz.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4972,6 +4972,20 @@ func (q *querier) UpdatePresetPrebuildStatus(ctx context.Context, arg database.U
49724972
return q.db.UpdatePresetPrebuildStatus(ctx, arg)
49734973
}
49744974

4975+
func (q *querier) UpdatePresetsLastInvalidatedAt(ctx context.Context, arg database.UpdatePresetsLastInvalidatedAtParams) ([]database.UpdatePresetsLastInvalidatedAtRow, error) {
4976+
// Fetch template to check authorization
4977+
template, err := q.db.GetTemplateByID(ctx, arg.TemplateID)
4978+
if err != nil {
4979+
return nil, err
4980+
}
4981+
4982+
if err := q.authorizeContext(ctx, policy.ActionUpdate, template); err != nil {
4983+
return nil, err
4984+
}
4985+
4986+
return q.db.UpdatePresetsLastInvalidatedAt(ctx, arg)
4987+
}
4988+
49754989
func (q *querier) UpdateProvisionerDaemonLastSeenAt(ctx context.Context, arg database.UpdateProvisionerDaemonLastSeenAtParams) error {
49764990
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceProvisionerDaemon); err != nil {
49774991
return err

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,6 +1315,13 @@ func (s *MethodTestSuite) TestTemplate() {
13151315
dbm.EXPECT().UpsertTemplateUsageStats(gomock.Any()).Return(nil).AnyTimes()
13161316
check.Asserts(rbac.ResourceSystem, policy.ActionUpdate)
13171317
}))
1318+
s.Run("UpdatePresetsLastInvalidatedAt", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
1319+
t1 := testutil.Fake(s.T(), faker, database.Template{})
1320+
arg := database.UpdatePresetsLastInvalidatedAtParams{LastInvalidatedAt: sql.NullTime{Valid: true, Time: dbtime.Now()}, TemplateID: t1.ID}
1321+
dbm.EXPECT().GetTemplateByID(gomock.Any(), t1.ID).Return(t1, nil).AnyTimes()
1322+
dbm.EXPECT().UpdatePresetsLastInvalidatedAt(gomock.Any(), arg).Return([]database.UpdatePresetsLastInvalidatedAtRow{}, nil).AnyTimes()
1323+
check.Args(arg).Asserts(t1, policy.ActionUpdate)
1324+
}))
13181325
}
13191326

13201327
func (s *MethodTestSuite) TestUser() {

coderd/database/dbfake/dbfake.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,7 @@ func (t TemplateVersionBuilder) Do() TemplateVersionResponse {
613613
IsDefault: false,
614614
Description: preset.Description,
615615
Icon: preset.Icon,
616+
LastInvalidatedAt: preset.LastInvalidatedAt,
616617
})
617618
t.logger.Debug(context.Background(), "added preset",
618619
slog.F("preset_id", prst.ID),

coderd/database/dbgen/dbgen.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,6 +1428,7 @@ func Preset(t testing.TB, db database.Store, seed database.InsertPresetParams) d
14281428
IsDefault: seed.IsDefault,
14291429
Description: seed.Description,
14301430
Icon: seed.Icon,
1431+
LastInvalidatedAt: seed.LastInvalidatedAt,
14311432
})
14321433
require.NoError(t, err, "insert preset")
14331434
return preset

coderd/database/dbmetrics/querymetrics.go

Lines changed: 7 additions & 0 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: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dump.sql

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

0 commit comments

Comments
 (0)