Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat: allow for default presets#18445

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
dannykopping wants to merge7 commits intomain
base:main
Choose a base branch
Loading
fromdk/default-preset
Open
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletionCLAUDE.md
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,5 +103,4 @@ Read [cursor rules](.cursorrules).

The frontend is contained in the site folder.

For building Frontend refer to [this document](docs/contributing/frontend.md)
Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Drive-by: link is dead.

For building Frontend refer to [this document](docs/about/contributing/frontend.md)
3 changes: 3 additions & 0 deletionscoderd/apidoc/docs.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

3 changes: 3 additions & 0 deletionscoderd/apidoc/swagger.json
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

1 change: 1 addition & 0 deletionscoderd/database/dbfake/dbfake.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -395,6 +395,7 @@ func (t TemplateVersionBuilder) Do() TemplateVersionResponse {
CreatedAt: version.CreatedAt,
DesiredInstances: preset.DesiredInstances,
InvalidateAfterSecs: preset.InvalidateAfterSecs,
IsDefault: false,
})
}

Expand Down
1 change: 1 addition & 0 deletionscoderd/database/dbgen/dbgen.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1261,6 +1261,7 @@ func Preset(t testing.TB, db database.Store, seed database.InsertPresetParams) d
CreatedAt: takeFirst(seed.CreatedAt, dbtime.Now()),
DesiredInstances: seed.DesiredInstances,
InvalidateAfterSecs: seed.InvalidateAfterSecs,
IsDefault: seed.IsDefault,
})
require.NoError(t, err, "insert preset")
return preset
Expand Down
1 change: 1 addition & 0 deletionscoderd/database/dbmem/dbmem.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -9135,6 +9135,7 @@ func (q *FakeQuerier) InsertPreset(_ context.Context, arg database.InsertPresetP
Valid: true,
},
PrebuildStatus: database.PrebuildStatusHealthy,
IsDefault: arg.IsDefault,
}
q.presets = append(q.presets, preset)
return preset, nil
Expand Down
5 changes: 4 additions & 1 deletioncoderd/database/dump.sql
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
DROP INDEX IF EXISTS idx_template_version_presets_default;
ALTER TABLE template_version_presets DROP COLUMN IF EXISTS is_default;
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
ALTER TABLE template_version_presets ADD COLUMN is_default BOOLEAN NOT NULL DEFAULT FALSE;

-- Add a unique constraint to ensure only one default preset per template version
CREATE UNIQUE INDEX idx_template_version_presets_default
ON template_version_presets (template_version_id)
WHERE is_default = TRUE;
1 change: 1 addition & 0 deletionscoderd/database/models.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

21 changes: 15 additions & 6 deletionscoderd/database/queries.sql.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

7 changes: 5 additions & 2 deletionscoderd/database/queries/presets.sql
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,15 +5,17 @@ INSERT INTO template_version_presets (
name,
created_at,
desired_instances,
invalidate_after_secs
invalidate_after_secs,
is_default
)
VALUES (
@id,
@template_version_id,
@name,
@created_at,
@desired_instances,
@invalidate_after_secs
@invalidate_after_secs,
@is_default
) RETURNING *;

-- name: InsertPresetParameters :many
Expand DownExpand Up@@ -69,3 +71,4 @@ SELECT tvp.*, tv.template_id, tv.organization_id FROM
template_version_presets tvp
INNER JOIN template_versions tv ON tvp.template_version_id = tv.id
WHERE tvp.id = @preset_id;

1 change: 1 addition & 0 deletionscoderd/database/unique_constraint.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

5 changes: 3 additions & 2 deletionscoderd/presets.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,8 +41,9 @@ func (api *API) templateVersionPresets(rw http.ResponseWriter, r *http.Request)
var res []codersdk.Preset
for _, preset := range presets {
sdkPreset := codersdk.Preset{
ID: preset.ID,
Name: preset.Name,
ID: preset.ID,
Name: preset.Name,
Default: preset.IsDefault,
}
for _, presetParam := range presetParams {
if presetParam.TemplateVersionPresetID != preset.ID {
Expand Down
92 changes: 92 additions & 0 deletionscoderd/presets_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
package coderd_test

import (
"slices"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/coder/coder/v2/coderd/coderdtest"
Expand DownExpand Up@@ -138,3 +140,93 @@ func TestTemplateVersionPresets(t *testing.T) {
})
}
}

func TestTemplateVersionPresetsDefault(t *testing.T) {
t.Parallel()

type expectedPreset struct {
name string
isDefault bool
}

cases := []struct {
name string
presets []database.InsertPresetParams
expected []expectedPreset
}{
{
name: "no presets",
presets: nil,
expected: nil,
},
{
name: "single default preset",
presets: []database.InsertPresetParams{
{Name: "Default Preset", IsDefault: true},
},
expected: []expectedPreset{
{name: "Default Preset", isDefault: true},
},
},
{
name: "single non-default preset",
presets: []database.InsertPresetParams{
{Name: "Regular Preset", IsDefault: false},
},
expected: []expectedPreset{
{name: "Regular Preset", isDefault: false},
},
},
{
name: "mixed presets",
presets: []database.InsertPresetParams{
{Name: "Default Preset", IsDefault: true},
{Name: "Regular Preset", IsDefault: false},
},
expected: []expectedPreset{
{name: "Default Preset", isDefault: true},
{name: "Regular Preset", isDefault: false},
},
},
}

for _, tc := range cases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
ctx := testutil.Context(t, testutil.WaitShort)

client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
user := coderdtest.CreateFirstUser(t, client)
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)

// Create presets
for _, preset := range tc.presets {
preset.TemplateVersionID = version.ID
_ = dbgen.Preset(t, db, preset)
}

// Get presets via API
userSubject, _, err := httpmw.UserRBACSubject(ctx, db, user.UserID, rbac.ScopeAll)
require.NoError(t, err)
userCtx := dbauthz.As(ctx, userSubject)

gotPresets, err := client.TemplateVersionPresets(userCtx, version.ID)
require.NoError(t, err)

// Verify results
require.Len(t, gotPresets, len(tc.expected))

for _, expected := range tc.expected {
found := slices.ContainsFunc(gotPresets, func(preset codersdk.Preset) bool {
if preset.Name != expected.name {
return false
}

return assert.Equal(t, expected.isDefault, preset.Default)
})
require.True(t, found, "Expected preset %s not found", expected.name)
}
})
}
}
2 changes: 2 additions & 0 deletionscoderd/provisionerdserver/provisionerdserver.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,6 +28,7 @@ import (
protobuf "google.golang.org/protobuf/proto"

"cdr.dev/slog"

"github.com/coder/coder/v2/coderd/util/slice"

"github.com/coder/coder/v2/codersdk/drpcsdk"
Expand DownExpand Up@@ -2217,6 +2218,7 @@ func InsertWorkspacePresetAndParameters(ctx context.Context, db database.Store,
CreatedAt: t,
DesiredInstances: desiredInstances,
InvalidateAfterSecs: ttl,
IsDefault: protoPreset.GetDefault(),
})
if err != nil {
return xerrors.Errorf("insert preset: %w", err)
Expand Down
1 change: 1 addition & 0 deletionscodersdk/presets.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,6 +14,7 @@ type Preset struct {
ID uuid.UUID
Name string
Parameters []PresetParameter
Default bool
}

type PresetParameter struct {
Expand Down
2 changes: 2 additions & 0 deletionsdocs/reference/api/schemas.md
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

Loading
Loading

[8]ページ先頭

©2009-2025 Movatter.jp