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

Commit3a68676

Browse files
stirbyEmyrkjaaydenhethanndickson
authored
chore: cherry-pick bug fixes for release 2.23 (#18219)
Co-authored-by: Steven Masley <Emyrk@users.noreply.github.com>Co-authored-by: Jaayden Halko <jaayden.halko@gmail.com>Co-authored-by: Steven Masley <stevenmasley@gmail.com>Co-authored-by: Ethan <39577870+ethanndickson@users.noreply.github.com>
1 parentd3b6863 commit3a68676

File tree

13 files changed

+346
-195
lines changed

13 files changed

+346
-195
lines changed

‎cli/ssh.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1594,12 +1594,14 @@ func writeCoderConnectNetInfo(ctx context.Context, networkInfoDir string) error
15941594
// Converts workspace name input to owner/workspace.agent format
15951595
// Possible valid input formats:
15961596
// workspace
1597+
// workspace.agent
15971598
// owner/workspace
15981599
// owner--workspace
15991600
// owner/workspace--agent
16001601
// owner/workspace.agent
16011602
// owner--workspace--agent
16021603
// owner--workspace.agent
1604+
// agent.workspace.owner - for parity with Coder Connect
16031605
funcnormalizeWorkspaceInput(inputstring)string {
16041606
// Split on "/", "--", and "."
16051607
parts:=workspaceNameRe.Split(input,-1)
@@ -1608,8 +1610,15 @@ func normalizeWorkspaceInput(input string) string {
16081610
case1:
16091611
returninput// "workspace"
16101612
case2:
1613+
ifstrings.Contains(input,".") {
1614+
returnfmt.Sprintf("%s.%s",parts[0],parts[1])// "workspace.agent"
1615+
}
16111616
returnfmt.Sprintf("%s/%s",parts[0],parts[1])// "owner/workspace"
16121617
case3:
1618+
// If the only separator is a dot, it's the Coder Connect format
1619+
if!strings.Contains(input,"/")&&!strings.Contains(input,"--") {
1620+
returnfmt.Sprintf("%s/%s.%s",parts[2],parts[1],parts[0])// "owner/workspace.agent"
1621+
}
16131622
returnfmt.Sprintf("%s/%s.%s",parts[0],parts[1],parts[2])// "owner/workspace.agent"
16141623
default:
16151624
returninput// Fallback

‎cli/ssh_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,14 @@ func TestSSH(t *testing.T) {
107107

108108
cases:= []string{
109109
"myworkspace",
110+
"myworkspace.dev",
110111
"myuser/myworkspace",
111112
"myuser--myworkspace",
112113
"myuser/myworkspace--dev",
113114
"myuser/myworkspace.dev",
114115
"myuser--myworkspace--dev",
115116
"myuser--myworkspace.dev",
117+
"dev.myworkspace.myuser",
116118
}
117119

118120
for_,tc:=rangecases {

‎coderd/coderd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@ func New(options *Options) *API {
860860
next.ServeHTTP(w,r)
861861
})
862862
},
863-
//httpmw.CSRF(options.DeploymentValues.HTTPCookies),
863+
httpmw.CSRF(options.DeploymentValues.HTTPCookies),
864864
)
865865

866866
// This incurs a performance hit from the middleware, but is required to make sure

‎coderd/parameters_test.go

Lines changed: 90 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/coder/coder/v2/coderd/database/dbtestutil"
1616
"github.com/coder/coder/v2/coderd/database/pubsub"
1717
"github.com/coder/coder/v2/coderd/rbac"
18+
"github.com/coder/coder/v2/coderd/util/ptr"
1819
"github.com/coder/coder/v2/codersdk"
1920
"github.com/coder/coder/v2/codersdk/wsjson"
2021
"github.com/coder/coder/v2/provisioner/echo"
@@ -211,6 +212,86 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) {
211212
require.Zero(t,setup.api.FileCache.Count())
212213
})
213214

215+
t.Run("RebuildParameters",func(t*testing.T) {
216+
t.Parallel()
217+
218+
dynamicParametersTerraformSource,err:=os.ReadFile("testdata/parameters/modules/main.tf")
219+
require.NoError(t,err)
220+
221+
modulesArchive,err:=terraform.GetModulesArchive(os.DirFS("testdata/parameters/modules"))
222+
require.NoError(t,err)
223+
224+
setup:=setupDynamicParamsTest(t,setupDynamicParamsTestParams{
225+
provisionerDaemonVersion:provProto.CurrentVersion.String(),
226+
mainTF:dynamicParametersTerraformSource,
227+
modulesArchive:modulesArchive,
228+
plan:nil,
229+
static:nil,
230+
})
231+
232+
ctx:=testutil.Context(t,testutil.WaitMedium)
233+
stream:=setup.stream
234+
previews:=stream.Chan()
235+
236+
// Should see the output of the module represented
237+
preview:=testutil.RequireReceive(ctx,t,previews)
238+
require.Equal(t,-1,preview.ID)
239+
require.Empty(t,preview.Diagnostics)
240+
241+
require.Len(t,preview.Parameters,1)
242+
require.Equal(t,"jetbrains_ide",preview.Parameters[0].Name)
243+
require.True(t,preview.Parameters[0].Value.Valid)
244+
require.Equal(t,"CL",preview.Parameters[0].Value.Value)
245+
_=stream.Close(websocket.StatusGoingAway)
246+
247+
wrk:=coderdtest.CreateWorkspace(t,setup.client,setup.template.ID,func(request*codersdk.CreateWorkspaceRequest) {
248+
request.RichParameterValues= []codersdk.WorkspaceBuildParameter{
249+
{
250+
Name:preview.Parameters[0].Name,
251+
Value:"GO",
252+
},
253+
}
254+
})
255+
coderdtest.AwaitWorkspaceBuildJobCompleted(t,setup.client,wrk.LatestBuild.ID)
256+
257+
params,err:=setup.client.WorkspaceBuildParameters(ctx,wrk.LatestBuild.ID)
258+
require.NoError(t,err)
259+
require.Len(t,params,1)
260+
require.Equal(t,"jetbrains_ide",params[0].Name)
261+
require.Equal(t,"GO",params[0].Value)
262+
263+
// A helper function to assert params
264+
doTransition:=func(t*testing.T,trans codersdk.WorkspaceTransition) {
265+
t.Helper()
266+
267+
fooVal:=coderdtest.RandomUsername(t)
268+
bld,err:=setup.client.CreateWorkspaceBuild(ctx,wrk.ID, codersdk.CreateWorkspaceBuildRequest{
269+
TemplateVersionID:setup.template.ActiveVersionID,
270+
Transition:trans,
271+
RichParameterValues: []codersdk.WorkspaceBuildParameter{
272+
// No validation, so this should work as is.
273+
// Overwrite the value on each transition
274+
{Name:"foo",Value:fooVal},
275+
},
276+
EnableDynamicParameters:ptr.Ref(true),
277+
})
278+
require.NoError(t,err)
279+
coderdtest.AwaitWorkspaceBuildJobCompleted(t,setup.client,wrk.LatestBuild.ID)
280+
281+
latestParams,err:=setup.client.WorkspaceBuildParameters(ctx,bld.ID)
282+
require.NoError(t,err)
283+
require.ElementsMatch(t,latestParams, []codersdk.WorkspaceBuildParameter{
284+
{Name:"jetbrains_ide",Value:"GO"},
285+
{Name:"foo",Value:fooVal},
286+
})
287+
}
288+
289+
// Restart the workspace, then delete. Asserting params on all builds.
290+
doTransition(t,codersdk.WorkspaceTransitionStop)
291+
doTransition(t,codersdk.WorkspaceTransitionStart)
292+
doTransition(t,codersdk.WorkspaceTransitionDelete)
293+
})
294+
214295
t.Run("BadOwner",func(t*testing.T) {
215296
t.Parallel()
216297

@@ -266,9 +347,10 @@ type setupDynamicParamsTestParams struct {
266347
}
267348

268349
typedynamicParamsTeststruct {
269-
client*codersdk.Client
270-
api*coderd.API
271-
stream*wsjson.Stream[codersdk.DynamicParametersResponse, codersdk.DynamicParametersRequest]
350+
client*codersdk.Client
351+
api*coderd.API
352+
stream*wsjson.Stream[codersdk.DynamicParametersResponse, codersdk.DynamicParametersRequest]
353+
template codersdk.Template
272354
}
273355

274356
funcsetupDynamicParamsTest(t*testing.T,argssetupDynamicParamsTestParams)dynamicParamsTest {
@@ -300,7 +382,7 @@ func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dyn
300382

301383
version:=coderdtest.CreateTemplateVersion(t,templateAdmin,owner.OrganizationID,files)
302384
coderdtest.AwaitTemplateVersionJobCompleted(t,templateAdmin,version.ID)
303-
_=coderdtest.CreateTemplate(t,templateAdmin,owner.OrganizationID,version.ID)
385+
tpl:=coderdtest.CreateTemplate(t,templateAdmin,owner.OrganizationID,version.ID)
304386

305387
ctx:=testutil.Context(t,testutil.WaitShort)
306388
stream,err:=templateAdmin.TemplateVersionDynamicParameters(ctx,version.ID)
@@ -321,9 +403,10 @@ func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dyn
321403
})
322404

323405
returndynamicParamsTest{
324-
client:ownerClient,
325-
stream:stream,
326-
api:api,
406+
client:ownerClient,
407+
api:api,
408+
stream:stream,
409+
template:tpl,
327410
}
328411
}
329412

‎coderd/wsbuilder/wsbuilder.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,11 @@ func (b *Builder) getParameters() (names, values []string, err error) {
623623
returnnil,nil,BuildError{http.StatusBadRequest,"Unable to build workspace with unsupported parameters",err}
624624
}
625625

626+
lastBuildParameterValues:=db2sdk.WorkspaceBuildParameters(lastBuildParameters)
627+
resolver:= codersdk.ParameterResolver{
628+
Rich:lastBuildParameterValues,
629+
}
630+
626631
// Dynamic parameters skip all parameter validation.
627632
// Deleting a workspace also should skip parameter validation.
628633
// Pass the user's input as is.
@@ -632,19 +637,34 @@ func (b *Builder) getParameters() (names, values []string, err error) {
632637
// conditional parameter existence, the static frame of reference
633638
// is not sufficient. So assume the user is correct, or pull in the
634639
// dynamic param code to find the actual parameters.
640+
latestValues:=make(map[string]string,len(b.richParameterValues))
641+
for_,latest:=rangeb.richParameterValues {
642+
latestValues[latest.Name]=latest.Value
643+
}
644+
645+
// Merge the inputs with values from the previous build.
646+
for_,last:=rangelastBuildParameterValues {
647+
// TODO: Ideally we use the resolver here and look at parameter
648+
// fields such as 'ephemeral'. This requires loading the terraform
649+
// files. For now, just send the previous inputs as is.
650+
if_,exists:=latestValues[last.Name];exists {
651+
// latestValues take priority, so skip this previous value.
652+
continue
653+
}
654+
names=append(names,last.Name)
655+
values=append(values,last.Value)
656+
}
657+
635658
for_,value:=rangeb.richParameterValues {
636659
names=append(names,value.Name)
637660
values=append(values,value.Value)
638661
}
662+
639663
b.parameterNames=&names
640664
b.parameterValues=&values
641665
returnnames,values,nil
642666
}
643667

644-
resolver:= codersdk.ParameterResolver{
645-
Rich:db2sdk.WorkspaceBuildParameters(lastBuildParameters),
646-
}
647-
648668
for_,templateVersionParameter:=rangetemplateVersionParameters {
649669
tvp,err:=db2sdk.TemplateVersionParameter(templateVersionParameter)
650670
iferr!=nil {

‎site/src/components/FeatureStageBadge/FeatureStageBadge.stories.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,30 @@ const meta: Meta<typeof FeatureStageBadge> = {
1212
exportdefaultmeta;
1313
typeStory=StoryObj<typeofFeatureStageBadge>;
1414

15-
exportconstMediumBeta:Story={
15+
exportconstSmallBeta:Story={
1616
args:{
17-
size:"md",
17+
size:"sm",
18+
contentType:"beta",
1819
},
1920
};
2021

21-
exportconstSmallBeta:Story={
22+
exportconstMediumBeta:Story={
2223
args:{
23-
size:"sm",
24+
size:"md",
25+
contentType:"beta",
2426
},
2527
};
2628

27-
exportconstLargeBeta:Story={
29+
exportconstSmallEarlyAccess:Story={
2830
args:{
29-
size:"lg",
31+
size:"sm",
32+
contentType:"early_access",
3033
},
3134
};
3235

33-
exportconstMediumExperimental:Story={
36+
exportconstMediumEarlyAccess:Story={
3437
args:{
3538
size:"md",
36-
contentType:"experimental",
39+
contentType:"early_access",
3740
},
3841
};

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp