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

Commitafcea74

Browse files
fix(site): retry and debug passing build parameters options (#12384)
1 parentaf4d0b1 commitafcea74

15 files changed

+400
-77
lines changed

‎site/src/components/FullPageLayout/Sidebar.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,17 @@ interface SidebarIconButton extends ComponentProps<typeof TopbarIconButton> {
7474
isActive:boolean;
7575
}
7676

77-
exportconstSidebarIconButton:FC<SidebarIconButton>=(props)=>{
77+
exportconstSidebarIconButton:FC<SidebarIconButton>=({
78+
isActive,
79+
...buttonProps
80+
})=>{
7881
return(
7982
<TopbarIconButton
8083
css={[
8184
{opacity:0.75,"&:hover":{opacity:1}},
82-
props.isActive&&styles.activeSidebarIconButton,
85+
isActive&&styles.activeSidebarIconButton,
8386
]}
84-
{...props}
87+
{...buttonProps}
8588
/>
8689
);
8790
};

‎site/src/pages/WorkspacePage/Workspace.tsx

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import{typeInterpolation,typeTheme}from"@emotion/react";
2-
importButtonfrom"@mui/material/Button";
32
importAlertTitlefrom"@mui/material/AlertTitle";
43
import{typeFC}from"react";
54
import{useNavigate}from"react-router-dom";
@@ -43,9 +42,9 @@ export interface WorkspaceProps {
4342
buildInfo?:TypesGen.BuildInfoResponse;
4443
sshPrefix?:string;
4544
template:TypesGen.Template;
46-
canRetryDebugMode:boolean;
47-
handleBuildRetry:()=>void;
48-
handleBuildRetryDebug:()=>void;
45+
canDebugMode:boolean;
46+
handleRetry:(buildParameters?:TypesGen.WorkspaceBuildParameter[])=>void;
47+
handleDebug:(buildParameters?:TypesGen.WorkspaceBuildParameter[])=>void;
4948
buildLogs?:React.ReactNode;
5049
latestVersion?:TypesGen.TemplateVersion;
5150
permissions:WorkspacePermissions;
@@ -75,9 +74,9 @@ export const Workspace: FC<WorkspaceProps> = ({
7574
buildInfo,
7675
sshPrefix,
7776
template,
78-
canRetryDebugMode,
79-
handleBuildRetry,
80-
handleBuildRetryDebug,
77+
canDebugMode,
78+
handleRetry,
79+
handleDebug,
8180
buildLogs,
8281
latestVersion,
8382
permissions,
@@ -129,12 +128,12 @@ export const Workspace: FC<WorkspaceProps> = ({
129128
handleUpdate={handleUpdate}
130129
handleCancel={handleCancel}
131130
handleSettings={handleSettings}
132-
handleBuildRetry={handleBuildRetry}
133-
handleBuildRetryDebug={handleBuildRetryDebug}
131+
handleRetry={handleRetry}
132+
handleDebug={handleDebug}
134133
handleChangeVersion={handleChangeVersion}
135134
handleDormantActivate={handleDormantActivate}
136135
handleToggleFavorite={handleToggleFavorite}
137-
canRetryDebugMode={canRetryDebugMode}
136+
canDebugMode={canDebugMode}
138137
canChangeVersions={canChangeVersions}
139138
isUpdating={isUpdating}
140139
isRestarting={isRestarting}
@@ -208,20 +207,7 @@ export const Workspace: FC<WorkspaceProps> = ({
208207
)}
209208

210209
{workspace.latest_build.job.error&&(
211-
<Alert
212-
severity="error"
213-
actions={
214-
<Button
215-
onClick={
216-
canRetryDebugMode ?handleBuildRetryDebug :handleBuildRetry
217-
}
218-
variant="text"
219-
size="small"
220-
>
221-
Retry{canRetryDebugMode&&" in debug mode"}
222-
</Button>
223-
}
224-
>
210+
<Alertseverity="error">
225211
<AlertTitle>Workspace build failed</AlertTitle>
226212
<AlertDetail>{workspace.latest_build.job.error}</AlertDetail>
227213
</Alert>

‎site/src/pages/WorkspacePage/WorkspaceActions/BuildParametersPopover.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,19 @@ import {
3232
usePopover,
3333
}from"components/Popover/Popover";
3434
import{TopbarButton}from"components/FullPageLayout/Topbar";
35+
importvisuallyHiddenfrom"@mui/utils/visuallyHidden";
3536

3637
interfaceBuildParametersPopoverProps{
3738
workspace:Workspace;
3839
disabled?:boolean;
3940
onSubmit:(buildParameters:WorkspaceBuildParameter[])=>void;
41+
label:string;
4042
}
4143

4244
exportconstBuildParametersPopover:FC<BuildParametersPopoverProps>=({
4345
workspace,
4446
disabled,
47+
label,
4548
onSubmit,
4649
})=>{
4750
const{data:parameters}=useQuery({
@@ -62,6 +65,7 @@ export const BuildParametersPopover: FC<BuildParametersPopoverProps> = ({
6265
css={{paddingLeft:0,paddingRight:0,minWidth:"28px !important"}}
6366
>
6467
<ExpandMoreOutlinedcss={{fontSize:14}}/>
68+
<spancss={{ ...visuallyHidden}}>{label}</span>
6569
</TopbarButton>
6670
</PopoverTrigger>
6771
<PopoverContent

‎site/src/pages/WorkspacePage/WorkspaceActions/Buttons.tsx

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,14 @@ import ReplayIcon from "@mui/icons-material/Replay";
77
importBlockIconfrom"@mui/icons-material/Block";
88
importOutlinedBlockIconfrom"@mui/icons-material/BlockOutlined";
99
importPowerSettingsNewIconfrom"@mui/icons-material/PowerSettingsNew";
10-
importRetryIconfrom"@mui/icons-material/BuildOutlined";
11-
importRetryDebugIconfrom"@mui/icons-material/BugReportOutlined";
1210
importStarfrom"@mui/icons-material/Star";
1311
importStarBorderfrom"@mui/icons-material/StarBorder";
1412
import{typeFC}from"react";
1513
importtype{Workspace,WorkspaceBuildParameter}from"api/typesGenerated";
1614
import{BuildParametersPopover}from"./BuildParametersPopover";
1715
import{TopbarButton}from"components/FullPageLayout/Topbar";
1816

19-
interfaceActionButtonProps{
17+
exportinterfaceActionButtonProps{
2018
loading?:boolean;
2119
handleAction:(buildParameters?:WorkspaceBuildParameter[])=>void;
2220
disabled?:boolean;
@@ -84,6 +82,7 @@ export const StartButton: FC<ActionButtonPropsWithWorkspace> = ({
8482
{loading ?<>Starting&hellip;</> :"Start"}
8583
</TopbarButton>
8684
<BuildParametersPopover
85+
label="Start with build parameters"
8786
workspace={workspace}
8887
disabled={loading}
8988
onSubmit={handleAction}
@@ -141,6 +140,7 @@ export const RestartButton: FC<ActionButtonPropsWithWorkspace> = ({
141140
{loading ?<>Restarting&hellip;</> :<>Restart&hellip;</>}
142141
</TopbarButton>
143142
<BuildParametersPopover
143+
label="Restart with build parameters"
144144
workspace={workspace}
145145
disabled={loading}
146146
onSubmit={handleAction}
@@ -175,24 +175,6 @@ export const DisabledButton: FC<DisabledButtonProps> = ({ label }) => {
175175
);
176176
};
177177

178-
typeRetryButtonProps=Omit<ActionButtonProps,"loading">&{
179-
debug?:boolean;
180-
};
181-
182-
exportconstRetryButton:FC<RetryButtonProps>=({
183-
handleAction,
184-
debug=false,
185-
})=>{
186-
return(
187-
<TopbarButton
188-
startIcon={debug ?<RetryDebugIcon/> :<RetryIcon/>}
189-
onClick={()=>handleAction()}
190-
>
191-
Retry{debug&&" (Debug)"}
192-
</TopbarButton>
193-
);
194-
};
195-
196178
interfaceFavoriteButtonProps{
197179
onToggle:(workspaceID:string)=>void;
198180
workspaceID:string;
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import{Meta,StoryObj}from"@storybook/react";
2+
import{DebugButton}from"./DebugButton";
3+
import{MockWorkspace}from"testHelpers/entities";
4+
import{userEvent,waitFor,within,expect}from"@storybook/test";
5+
6+
constmeta:Meta<typeofDebugButton>={
7+
title:"pages/WorkspacePage/DebugButton",
8+
component:DebugButton,
9+
};
10+
11+
exportdefaultmeta;
12+
typeStory=StoryObj<typeofDebugButton>;
13+
14+
exportconstDefault:Story={};
15+
16+
exportconstWithBuildParameters:Story={
17+
args:{
18+
enableBuildParameters:true,
19+
workspace:MockWorkspace,
20+
},
21+
parameters:{
22+
queries:[
23+
{
24+
key:["workspace",MockWorkspace.id,"parameters"],
25+
data:{templateVersionRichParameters:[],buildParameters:[]},
26+
},
27+
],
28+
},
29+
};
30+
31+
exportconstWithOpenBuildParameters:Story={
32+
args:{
33+
enableBuildParameters:true,
34+
workspace:MockWorkspace,
35+
},
36+
parameters:{
37+
queries:[
38+
{
39+
key:["workspace",MockWorkspace.id,"parameters"],
40+
data:{templateVersionRichParameters:[],buildParameters:[]},
41+
},
42+
],
43+
},
44+
play:async({ canvasElement, step})=>{
45+
constscreen=within(canvasElement);
46+
47+
awaitstep("open popover",async()=>{
48+
awaituserEvent.click(screen.getByTestId("build-parameters-button"));
49+
awaitwaitFor(()=>
50+
expect(screen.getByText("Build Options")).toBeInTheDocument(),
51+
);
52+
});
53+
},
54+
};
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
importButtonGroupfrom"@mui/material/ButtonGroup";
2+
importDebugIconfrom"@mui/icons-material/BugReportOutlined";
3+
import{typeFC}from"react";
4+
importtype{Workspace}from"api/typesGenerated";
5+
import{BuildParametersPopover}from"./BuildParametersPopover";
6+
import{TopbarButton}from"components/FullPageLayout/Topbar";
7+
import{ActionButtonProps}from"./Buttons";
8+
9+
typeDebugButtonProps=Omit<ActionButtonProps,"loading">&{
10+
workspace:Workspace;
11+
enableBuildParameters:boolean;
12+
};
13+
14+
exportconstDebugButton:FC<DebugButtonProps>=({
15+
handleAction,
16+
workspace,
17+
enableBuildParameters,
18+
})=>{
19+
constmainAction=(
20+
<TopbarButtonstartIcon={<DebugIcon/>}onClick={()=>handleAction()}>
21+
Debug
22+
</TopbarButton>
23+
);
24+
25+
if(!enableBuildParameters){
26+
returnmainAction;
27+
}
28+
29+
return(
30+
<ButtonGroup
31+
variant="outlined"
32+
css={{
33+
// Workaround to make the border transitions smoothly on button groups
34+
"& > button:hover + button":{
35+
borderLeft:"1px solid #FFF",
36+
},
37+
}}
38+
>
39+
{mainAction}
40+
<BuildParametersPopover
41+
label="Debug with build parameters"
42+
workspace={workspace}
43+
onSubmit={handleAction}
44+
/>
45+
</ButtonGroup>
46+
);
47+
};
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import{Meta,StoryObj}from"@storybook/react";
2+
import{RetryButton}from"./RetryButton";
3+
import{MockWorkspace}from"testHelpers/entities";
4+
import{userEvent,waitFor,within,expect}from"@storybook/test";
5+
6+
constmeta:Meta<typeofRetryButton>={
7+
title:"pages/WorkspacePage/RetryButton",
8+
component:RetryButton,
9+
};
10+
11+
exportdefaultmeta;
12+
typeStory=StoryObj<typeofRetryButton>;
13+
14+
exportconstDefault:Story={};
15+
16+
exportconstWithBuildParameters:Story={
17+
args:{
18+
enableBuildParameters:true,
19+
workspace:MockWorkspace,
20+
},
21+
parameters:{
22+
queries:[
23+
{
24+
key:["workspace",MockWorkspace.id,"parameters"],
25+
data:{templateVersionRichParameters:[],buildParameters:[]},
26+
},
27+
],
28+
},
29+
};
30+
31+
exportconstWithOpenBuildParameters:Story={
32+
args:{
33+
enableBuildParameters:true,
34+
workspace:MockWorkspace,
35+
},
36+
parameters:{
37+
queries:[
38+
{
39+
key:["workspace",MockWorkspace.id,"parameters"],
40+
data:{templateVersionRichParameters:[],buildParameters:[]},
41+
},
42+
],
43+
},
44+
play:async({ canvasElement, step})=>{
45+
constscreen=within(canvasElement);
46+
47+
awaitstep("open popover",async()=>{
48+
awaituserEvent.click(screen.getByTestId("build-parameters-button"));
49+
awaitwaitFor(()=>
50+
expect(screen.getByText("Build Options")).toBeInTheDocument(),
51+
);
52+
});
53+
},
54+
};
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
importButtonGroupfrom"@mui/material/ButtonGroup";
2+
importRetryIconfrom"@mui/icons-material/CachedOutlined";
3+
import{typeFC}from"react";
4+
importtype{Workspace}from"api/typesGenerated";
5+
import{BuildParametersPopover}from"./BuildParametersPopover";
6+
import{TopbarButton}from"components/FullPageLayout/Topbar";
7+
import{ActionButtonProps}from"./Buttons";
8+
9+
typeRetryButtonProps=Omit<ActionButtonProps,"loading">&{
10+
enableBuildParameters:boolean;
11+
workspace:Workspace;
12+
};
13+
14+
exportconstRetryButton:FC<RetryButtonProps>=({
15+
handleAction,
16+
workspace,
17+
enableBuildParameters,
18+
})=>{
19+
constmainAction=(
20+
<TopbarButtonstartIcon={<RetryIcon/>}onClick={()=>handleAction()}>
21+
Retry
22+
</TopbarButton>
23+
);
24+
25+
if(!enableBuildParameters){
26+
returnmainAction;
27+
}
28+
29+
return(
30+
<ButtonGroup
31+
variant="outlined"
32+
css={{
33+
// Workaround to make the border transitions smoothly on button groups
34+
"& > button:hover + button":{
35+
borderLeft:"1px solid #FFF",
36+
},
37+
}}
38+
>
39+
{mainAction}
40+
<BuildParametersPopover
41+
label="Retry with build parameters"
42+
workspace={workspace}
43+
onSubmit={handleAction}
44+
/>
45+
</ButtonGroup>
46+
);
47+
};

‎site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.stories.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ export const Failed: Story = {
7373
},
7474
};
7575

76+
exportconstFailedWithDebug:Story={
77+
args:{
78+
workspace:Mocks.MockFailedWorkspace,
79+
canDebug:true,
80+
},
81+
};
82+
7683
exportconstUpdating:Story={
7784
args:{
7885
isUpdating:true,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp