@backstage-community/plugin-github-actions 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/alpha/entityCards.esm.js +5 -5
- package/dist/alpha/entityCards.esm.js.map +1 -1
- package/dist/alpha/entityContent.esm.js +2 -2
- package/dist/alpha/entityContent.esm.js.map +1 -1
- package/dist/alpha.d.ts +4 -4
- package/dist/components/Cards/Cards.esm.js +19 -10
- package/dist/components/Cards/Cards.esm.js.map +1 -1
- package/dist/components/Cards/RecentWorkflowRunsCard.esm.js +34 -30
- package/dist/components/Cards/RecentWorkflowRunsCard.esm.js.map +1 -1
- package/dist/components/Router.esm.js +13 -10
- package/dist/components/Router.esm.js.map +1 -1
- package/dist/components/WorkflowRunDetails/WorkflowRunDetails.esm.js +94 -36
- package/dist/components/WorkflowRunDetails/WorkflowRunDetails.esm.js.map +1 -1
- package/dist/components/WorkflowRunLogs/WorkflowRunLogs.esm.js +41 -35
- package/dist/components/WorkflowRunLogs/WorkflowRunLogs.esm.js.map +1 -1
- package/dist/components/WorkflowRunStatus/WorkflowRunStatus.esm.js +12 -9
- package/dist/components/WorkflowRunStatus/WorkflowRunStatus.esm.js.map +1 -1
- package/dist/components/WorkflowRunsCard/WorkflowRunsCard.esm.js +198 -165
- package/dist/components/WorkflowRunsCard/WorkflowRunsCard.esm.js.map +1 -1
- package/dist/components/WorkflowRunsTable/WorkflowRunsTable.esm.js +25 -18
- package/dist/components/WorkflowRunsTable/WorkflowRunsTable.esm.js.map +1 -1
- package/dist/components/useWorkflowRuns.esm.js +1 -1
- package/dist/components/useWorkflowRuns.esm.js.map +1 -1
- package/dist/index.d.ts +15 -18
- package/package.json +16 -16
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
2
3
|
import Typography from '@material-ui/core/Typography';
|
|
3
4
|
import Box from '@material-ui/core/Box';
|
|
4
5
|
import IconButton from '@material-ui/core/IconButton';
|
|
@@ -70,132 +71,152 @@ const WorkflowRunsCardView = ({
|
|
|
70
71
|
const classes = useStyles();
|
|
71
72
|
const routeLink = useRouteRef(buildRouteRef);
|
|
72
73
|
const filteredRuns = runs?.filter((run) => matchesSearchTerm(run, searchTerm));
|
|
73
|
-
return /* @__PURE__ */
|
|
74
|
-
Box,
|
|
75
|
-
{
|
|
76
|
-
display: "flex",
|
|
77
|
-
flexDirection: "column",
|
|
78
|
-
p: 2,
|
|
79
|
-
height: "100%",
|
|
80
|
-
alignItems: "center"
|
|
81
|
-
},
|
|
82
|
-
/* @__PURE__ */ React.createElement(
|
|
74
|
+
return /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
|
|
75
|
+
filteredRuns && runs?.length !== 0 ? filteredRuns.map((run) => /* @__PURE__ */ jsx(Grid, { item: true, container: true, xs: 12, lg: 6, xl: 4, children: /* @__PURE__ */ jsx(Box, { className: classes.card, children: /* @__PURE__ */ jsx(
|
|
83
76
|
Box,
|
|
84
77
|
{
|
|
85
|
-
sx: { width: "100%" },
|
|
86
|
-
textAlign: "center",
|
|
87
78
|
display: "flex",
|
|
88
79
|
flexDirection: "column",
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
title: run.status ?? "No Status",
|
|
95
|
-
placement: "top-start"
|
|
96
|
-
},
|
|
97
|
-
/* @__PURE__ */ React.createElement(
|
|
98
|
-
Alert,
|
|
80
|
+
p: 2,
|
|
81
|
+
height: "100%",
|
|
82
|
+
alignItems: "center",
|
|
83
|
+
children: /* @__PURE__ */ jsxs(
|
|
84
|
+
Box,
|
|
99
85
|
{
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
86
|
+
sx: { width: "100%" },
|
|
87
|
+
textAlign: "center",
|
|
88
|
+
display: "flex",
|
|
89
|
+
flexDirection: "column",
|
|
90
|
+
height: "100%",
|
|
91
|
+
children: [
|
|
92
|
+
/* @__PURE__ */ jsx(
|
|
93
|
+
Tooltip,
|
|
94
|
+
{
|
|
95
|
+
title: run.status ?? "No Status",
|
|
96
|
+
placement: "top-start",
|
|
97
|
+
children: /* @__PURE__ */ jsx(
|
|
98
|
+
Alert,
|
|
99
|
+
{
|
|
100
|
+
variant: "outlined",
|
|
101
|
+
severity: statusColors[run.conclusion],
|
|
102
|
+
style: { alignItems: "center" },
|
|
103
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: /* @__PURE__ */ jsx(Link, { to: routeLink({ id: run.id }), children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: run.workflowName }) }) })
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
/* @__PURE__ */ jsx(Tooltip, { title: run.message ?? "No run message", children: /* @__PURE__ */ jsxs(Box, { display: "flex", flexDirection: "column", marginY: 1, children: [
|
|
109
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle2", component: "span", children: "Commit" }),
|
|
110
|
+
/* @__PURE__ */ jsx(
|
|
111
|
+
Typography,
|
|
112
|
+
{
|
|
113
|
+
variant: "body2",
|
|
114
|
+
component: "span",
|
|
115
|
+
style: { overflowWrap: "break-word" },
|
|
116
|
+
children: run.source.commit.hash
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
] }) }),
|
|
120
|
+
run.source.branchName && /* @__PURE__ */ jsxs(Box, { display: "flex", flexDirection: "column", marginY: 1, children: [
|
|
121
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle2", component: "span", children: "Branch" }),
|
|
122
|
+
/* @__PURE__ */ jsx(
|
|
123
|
+
Typography,
|
|
124
|
+
{
|
|
125
|
+
variant: "body2",
|
|
126
|
+
component: "span",
|
|
127
|
+
style: { overflowWrap: "break-word" },
|
|
128
|
+
children: run.source.branchName
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
] }),
|
|
132
|
+
/* @__PURE__ */ jsxs(Box, { display: "flex", flexDirection: "column", marginY: 1, children: [
|
|
133
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle2", component: "span", children: "Workflow ID" }),
|
|
134
|
+
/* @__PURE__ */ jsx(
|
|
135
|
+
Typography,
|
|
136
|
+
{
|
|
137
|
+
variant: "body2",
|
|
138
|
+
component: "span",
|
|
139
|
+
style: { overflowWrap: "break-word" },
|
|
140
|
+
children: run.id
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] }),
|
|
144
|
+
/* @__PURE__ */ jsx(
|
|
145
|
+
WorkflowRunStatus,
|
|
146
|
+
{
|
|
147
|
+
status: run.status,
|
|
148
|
+
conclusion: run.conclusion
|
|
149
|
+
}
|
|
150
|
+
),
|
|
151
|
+
/* @__PURE__ */ jsxs(
|
|
152
|
+
Box,
|
|
153
|
+
{
|
|
154
|
+
display: "flex",
|
|
155
|
+
flexDirection: "column",
|
|
156
|
+
justifyContent: "space-between",
|
|
157
|
+
alignItems: "center",
|
|
158
|
+
mt: "auto",
|
|
159
|
+
children: [
|
|
160
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 2, marginBottom: 1, children: /* @__PURE__ */ jsx(
|
|
161
|
+
Button,
|
|
162
|
+
{
|
|
163
|
+
endIcon: /* @__PURE__ */ jsx(RetryIcon, {}),
|
|
164
|
+
onClick: run.onReRunClick,
|
|
165
|
+
variant: "outlined",
|
|
166
|
+
children: "Rerun workflow"
|
|
167
|
+
}
|
|
168
|
+
) }),
|
|
169
|
+
run.githubUrl && /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(
|
|
170
|
+
LinkButton,
|
|
171
|
+
{
|
|
172
|
+
to: run.githubUrl,
|
|
173
|
+
endIcon: /* @__PURE__ */ jsx(ExternalLinkIcon, {}),
|
|
174
|
+
children: "View on GitHub"
|
|
175
|
+
}
|
|
176
|
+
) })
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
]
|
|
181
|
+
}
|
|
105
182
|
)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
{
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
},
|
|
123
|
-
run.source.branchName
|
|
124
|
-
)),
|
|
125
|
-
/* @__PURE__ */ React.createElement(Box, { display: "flex", flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React.createElement(Typography, { variant: "subtitle2", component: "span" }, "Workflow ID"), /* @__PURE__ */ React.createElement(
|
|
126
|
-
Typography,
|
|
127
|
-
{
|
|
128
|
-
variant: "body2",
|
|
129
|
-
component: "span",
|
|
130
|
-
style: { overflowWrap: "break-word" }
|
|
131
|
-
},
|
|
132
|
-
run.id
|
|
133
|
-
)),
|
|
134
|
-
/* @__PURE__ */ React.createElement(
|
|
135
|
-
WorkflowRunStatus,
|
|
136
|
-
{
|
|
137
|
-
status: run.status,
|
|
138
|
-
conclusion: run.conclusion
|
|
139
|
-
}
|
|
140
|
-
),
|
|
141
|
-
/* @__PURE__ */ React.createElement(
|
|
142
|
-
Box,
|
|
143
|
-
{
|
|
144
|
-
display: "flex",
|
|
145
|
-
flexDirection: "column",
|
|
146
|
-
justifyContent: "space-between",
|
|
147
|
-
alignItems: "center",
|
|
148
|
-
mt: "auto"
|
|
149
|
-
},
|
|
150
|
-
/* @__PURE__ */ React.createElement(Box, { marginTop: 2, marginBottom: 1 }, /* @__PURE__ */ React.createElement(
|
|
151
|
-
Button,
|
|
152
|
-
{
|
|
153
|
-
endIcon: /* @__PURE__ */ React.createElement(RetryIcon, null),
|
|
154
|
-
onClick: run.onReRunClick,
|
|
155
|
-
variant: "outlined"
|
|
156
|
-
},
|
|
157
|
-
"Rerun workflow"
|
|
158
|
-
)),
|
|
159
|
-
run.githubUrl && /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(
|
|
160
|
-
LinkButton,
|
|
161
|
-
{
|
|
162
|
-
to: run.githubUrl,
|
|
163
|
-
endIcon: /* @__PURE__ */ React.createElement(ExternalLinkIcon, null)
|
|
164
|
-
},
|
|
165
|
-
"View on GitHub"
|
|
166
|
-
))
|
|
167
|
-
)
|
|
168
|
-
)
|
|
169
|
-
)))) : /* @__PURE__ */ React.createElement(Box, { p: 2 }, loading ? /* @__PURE__ */ React.createElement(CircularProgress, null) : "No matching runs found."), /* @__PURE__ */ React.createElement("div", { className: classes.pagination }, /* @__PURE__ */ React.createElement(
|
|
170
|
-
TablePagination,
|
|
171
|
-
{
|
|
172
|
-
component: "div",
|
|
173
|
-
count: total,
|
|
174
|
-
page,
|
|
175
|
-
rowsPerPage: pageSize,
|
|
176
|
-
onPageChange: (_, newPage) => onChangePage(newPage),
|
|
177
|
-
onRowsPerPageChange: (event) => onChangePageSize(parseInt(event.target.value, 6)),
|
|
178
|
-
labelRowsPerPage: "Workflows per page",
|
|
179
|
-
rowsPerPageOptions: [6, 12, 18, { label: "All", value: -1 }]
|
|
180
|
-
}
|
|
181
|
-
)));
|
|
183
|
+
}
|
|
184
|
+
) }) }, run.id)) : /* @__PURE__ */ jsx(Box, { p: 2, children: loading ? /* @__PURE__ */ jsx(CircularProgress, {}) : "No matching runs found." }),
|
|
185
|
+
/* @__PURE__ */ jsx("div", { className: classes.pagination, children: /* @__PURE__ */ jsx(
|
|
186
|
+
TablePagination,
|
|
187
|
+
{
|
|
188
|
+
component: "div",
|
|
189
|
+
count: total,
|
|
190
|
+
page,
|
|
191
|
+
rowsPerPage: pageSize,
|
|
192
|
+
onPageChange: (_, newPage) => onChangePage(newPage),
|
|
193
|
+
onRowsPerPageChange: (event) => onChangePageSize(parseInt(event.target.value, 6)),
|
|
194
|
+
labelRowsPerPage: "Workflows per page",
|
|
195
|
+
rowsPerPageOptions: [6, 12, 18, { label: "All", value: -1 }]
|
|
196
|
+
}
|
|
197
|
+
) })
|
|
198
|
+
] });
|
|
182
199
|
};
|
|
183
200
|
const WorkflowRunsCardSearch = ({
|
|
184
201
|
searchTerm,
|
|
185
202
|
handleSearch,
|
|
186
203
|
retry
|
|
187
204
|
}) => {
|
|
188
|
-
return /* @__PURE__ */
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
205
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
206
|
+
/* @__PURE__ */ jsx(Box, { flexGrow: 1 }),
|
|
207
|
+
/* @__PURE__ */ jsx(
|
|
208
|
+
TextField,
|
|
209
|
+
{
|
|
210
|
+
type: "search",
|
|
211
|
+
label: "Search",
|
|
212
|
+
value: searchTerm,
|
|
213
|
+
onChange: handleSearch,
|
|
214
|
+
"data-testid": "search-control",
|
|
215
|
+
style: { marginRight: "20px" }
|
|
216
|
+
}
|
|
217
|
+
),
|
|
218
|
+
/* @__PURE__ */ jsx(ButtonGroup, { children: /* @__PURE__ */ jsx(Tooltip, { title: "Reload workflow runs", children: /* @__PURE__ */ jsx(IconButton, { onClick: retry, children: /* @__PURE__ */ jsx(SyncIcon, {}) }) }) })
|
|
219
|
+
] });
|
|
199
220
|
};
|
|
200
221
|
const WorkflowRunsCard = ({ entity }) => {
|
|
201
222
|
const projectName = getProjectNameFromEntity(entity);
|
|
@@ -228,65 +249,77 @@ const WorkflowRunsCard = ({ entity }) => {
|
|
|
228
249
|
useEffect(() => {
|
|
229
250
|
setBranch(defaultBranch);
|
|
230
251
|
}, [defaultBranch]);
|
|
231
|
-
return /* @__PURE__ */
|
|
252
|
+
return /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(
|
|
232
253
|
InfoCard,
|
|
233
254
|
{
|
|
234
|
-
title: /* @__PURE__ */
|
|
235
|
-
|
|
236
|
-
{
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
onChange: handleMenuChange,
|
|
241
|
-
"data-testid": "menu-control",
|
|
242
|
-
style: {
|
|
243
|
-
marginLeft: "30px",
|
|
244
|
-
marginRight: "20px",
|
|
245
|
-
width: "230px"
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
branches.map((branchItem) => /* @__PURE__ */ React.createElement(MenuItem, { key: branchItem.name, value: branchItem.name }, branchItem.name === defaultBranch ? /* @__PURE__ */ React.createElement(Typography, { variant: "body2", component: "span" }, branchItem.name, " ", /* @__PURE__ */ React.createElement(
|
|
249
|
-
Typography,
|
|
255
|
+
title: /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", children: [
|
|
256
|
+
/* @__PURE__ */ jsx(GitHubIcon, {}),
|
|
257
|
+
/* @__PURE__ */ jsx(Box, { mr: 1 }),
|
|
258
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h6", children: projectName }),
|
|
259
|
+
/* @__PURE__ */ jsxs(
|
|
260
|
+
Select,
|
|
250
261
|
{
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
262
|
+
value: branch,
|
|
263
|
+
label: "Branch",
|
|
264
|
+
onChange: handleMenuChange,
|
|
265
|
+
"data-testid": "menu-control",
|
|
266
|
+
style: {
|
|
267
|
+
marginLeft: "30px",
|
|
268
|
+
marginRight: "20px",
|
|
269
|
+
width: "230px"
|
|
270
|
+
},
|
|
271
|
+
children: [
|
|
272
|
+
branches.map((branchItem) => /* @__PURE__ */ jsx(MenuItem, { value: branchItem.name, children: branchItem.name === defaultBranch ? /* @__PURE__ */ jsxs(Typography, { variant: "body2", component: "span", children: [
|
|
273
|
+
branchItem.name,
|
|
274
|
+
" ",
|
|
275
|
+
/* @__PURE__ */ jsx(
|
|
276
|
+
Typography,
|
|
277
|
+
{
|
|
278
|
+
variant: "body2",
|
|
279
|
+
component: "span",
|
|
280
|
+
style: { color: "lightgray", fontSize: "x-small" },
|
|
281
|
+
children: "(default)"
|
|
282
|
+
}
|
|
283
|
+
)
|
|
284
|
+
] }) : branchItem.name }, branchItem.name)),
|
|
285
|
+
/* @__PURE__ */ jsx(
|
|
286
|
+
MenuItem,
|
|
287
|
+
{
|
|
288
|
+
value: "all",
|
|
289
|
+
style: { color: "lightGrey", fontSize: "small" },
|
|
290
|
+
children: "select all branches"
|
|
291
|
+
},
|
|
292
|
+
"all"
|
|
293
|
+
)
|
|
294
|
+
]
|
|
254
295
|
},
|
|
255
|
-
|
|
256
|
-
)
|
|
257
|
-
/* @__PURE__ */
|
|
258
|
-
|
|
296
|
+
branch
|
|
297
|
+
),
|
|
298
|
+
/* @__PURE__ */ jsx(
|
|
299
|
+
WorkflowRunsCardSearch,
|
|
259
300
|
{
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
"select all branches"
|
|
301
|
+
searchTerm,
|
|
302
|
+
handleSearch,
|
|
303
|
+
retry
|
|
304
|
+
}
|
|
265
305
|
)
|
|
266
|
-
),
|
|
267
|
-
|
|
306
|
+
] }),
|
|
307
|
+
children: /* @__PURE__ */ jsx(
|
|
308
|
+
WorkflowRunsCardView,
|
|
268
309
|
{
|
|
310
|
+
runs,
|
|
311
|
+
loading: cardProps.loading,
|
|
312
|
+
onChangePageSize: setPageSize,
|
|
313
|
+
onChangePage: setPage,
|
|
314
|
+
page: cardProps.page,
|
|
315
|
+
total: cardProps.total,
|
|
316
|
+
pageSize: cardProps.pageSize,
|
|
269
317
|
searchTerm,
|
|
270
|
-
|
|
271
|
-
retry
|
|
318
|
+
projectName
|
|
272
319
|
}
|
|
273
|
-
)
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
WorkflowRunsCardView,
|
|
277
|
-
{
|
|
278
|
-
runs,
|
|
279
|
-
loading: cardProps.loading,
|
|
280
|
-
onChangePageSize: setPageSize,
|
|
281
|
-
onChangePage: setPage,
|
|
282
|
-
page: cardProps.page,
|
|
283
|
-
total: cardProps.total,
|
|
284
|
-
pageSize: cardProps.pageSize,
|
|
285
|
-
searchTerm,
|
|
286
|
-
projectName
|
|
287
|
-
}
|
|
288
|
-
)
|
|
289
|
-
));
|
|
320
|
+
)
|
|
321
|
+
}
|
|
322
|
+
) });
|
|
290
323
|
};
|
|
291
324
|
|
|
292
325
|
export { WorkflowRunsCard, WorkflowRunsCardView, WorkflowRunsCard as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowRunsCard.esm.js","sources":["../../../src/components/WorkflowRunsCard/WorkflowRunsCard.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { ChangeEvent, useEffect, useState } from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Grid from '@material-ui/core/Grid';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport TextField from '@material-ui/core/TextField';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport { LinkButton, Link, InfoCard } from '@backstage/core-components';\nimport GitHubIcon from '@material-ui/icons/GitHub';\nimport RetryIcon from '@material-ui/icons/Replay';\nimport SyncIcon from '@material-ui/icons/Sync';\nimport ExternalLinkIcon from '@material-ui/icons/Launch';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport { buildRouteRef } from '../../routes';\nimport { getProjectNameFromEntity } from '../getProjectNameFromEntity';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\n\nimport Alert, { Color } from '@material-ui/lab/Alert';\nimport { Entity } from '@backstage/catalog-model';\nimport Button from '@material-ui/core/Button';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n card: {\n border: `1px solid ${theme.palette.divider}`,\n boxShadow: theme.shadows[2],\n borderRadius: '4px',\n overflow: 'visible',\n position: 'relative',\n margin: theme.spacing(4, 1, 1),\n flex: '1',\n minWidth: '0px',\n },\n externalLinkIcon: {\n fontSize: 'inherit',\n verticalAlign: 'middle',\n },\n pagination: {\n width: '100%',\n },\n }),\n);\n\ntype WorkflowRunsCardViewProps = {\n runs?: WorkflowRun[];\n searchTerm: string;\n loading: boolean;\n onChangePageSize: (pageSize: number) => void;\n onChangePage: (page: number) => void;\n page: number;\n total: number;\n pageSize: number;\n projectName: string;\n};\n\nconst statusColors: Record<string, string> = {\n skipped: 'warning',\n canceled: 'info',\n timed_out: 'error',\n failure: 'error',\n success: 'success',\n};\n\nconst matchesSearchTerm = (run: WorkflowRun, searchTerm: string) => {\n const lowerCaseSearchTerm = searchTerm.toLocaleLowerCase();\n return (\n run.workflowName?.toLocaleLowerCase().includes(lowerCaseSearchTerm) ||\n run.source.branchName?.toLocaleLowerCase().includes(lowerCaseSearchTerm) ||\n run.status?.toLocaleLowerCase().includes(lowerCaseSearchTerm) ||\n run.id?.toLocaleLowerCase().includes(lowerCaseSearchTerm)\n );\n};\n\nexport const WorkflowRunsCardView = ({\n runs,\n searchTerm,\n loading,\n onChangePageSize,\n onChangePage,\n page,\n total,\n pageSize,\n}: WorkflowRunsCardViewProps) => {\n const classes = useStyles();\n const routeLink = useRouteRef(buildRouteRef);\n\n const filteredRuns = runs?.filter(run => matchesSearchTerm(run, searchTerm));\n\n return (\n <Grid container spacing={3}>\n {filteredRuns && runs?.length !== 0 ? (\n filteredRuns.map(run => (\n <Grid key={run.id} item container xs={12} lg={6} xl={4}>\n <Box className={classes.card}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n p={2}\n height=\"100%\"\n alignItems=\"center\"\n >\n <Box\n sx={{ width: '100%' }}\n textAlign=\"center\"\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n >\n <Tooltip\n title={run.status ?? 'No Status'}\n placement=\"top-start\"\n >\n <Alert\n variant=\"outlined\"\n severity={\n statusColors[\n run.conclusion as keyof typeof statusColors\n ] as Color\n }\n style={{ alignItems: 'center' }}\n >\n <Typography variant=\"h6\">\n <Link to={routeLink({ id: run.id })}>\n <Typography variant=\"h6\">\n {run.workflowName}\n </Typography>\n </Link>\n </Typography>\n </Alert>\n </Tooltip>\n <Tooltip title={run.message ?? 'No run message'}>\n <Box display=\"flex\" flexDirection=\"column\" marginY={1}>\n <Typography variant=\"subtitle2\" component=\"span\">\n Commit\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ overflowWrap: 'break-word' }}\n >\n {run.source.commit.hash!}\n </Typography>\n </Box>\n </Tooltip>\n\n {run.source.branchName && (\n <Box display=\"flex\" flexDirection=\"column\" marginY={1}>\n <Typography variant=\"subtitle2\" component=\"span\">\n Branch\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ overflowWrap: 'break-word' }}\n >\n {run.source.branchName}\n </Typography>\n </Box>\n )}\n <Box display=\"flex\" flexDirection=\"column\" marginY={1}>\n <Typography variant=\"subtitle2\" component=\"span\">\n Workflow ID\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ overflowWrap: 'break-word' }}\n >\n {run.id}\n </Typography>\n </Box>\n <WorkflowRunStatus\n status={run.status}\n conclusion={run.conclusion}\n />\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n mt=\"auto\"\n >\n <Box marginTop={2} marginBottom={1}>\n <Button\n endIcon={<RetryIcon />}\n onClick={run.onReRunClick}\n variant=\"outlined\"\n >\n Rerun workflow\n </Button>\n </Box>\n\n {run.githubUrl && (\n <Box>\n <LinkButton\n to={run.githubUrl}\n endIcon={<ExternalLinkIcon />}\n >\n View on GitHub\n </LinkButton>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n </Box>\n </Grid>\n ))\n ) : (\n <Box p={2}>\n {loading ? <CircularProgress /> : 'No matching runs found.'}\n </Box>\n )}\n <div className={classes.pagination}>\n <TablePagination\n component=\"div\"\n count={total}\n page={page}\n rowsPerPage={pageSize}\n onPageChange={(_, newPage) => onChangePage(newPage)}\n onRowsPerPageChange={event =>\n onChangePageSize(parseInt(event.target.value, 6))\n }\n labelRowsPerPage=\"Workflows per page\"\n rowsPerPageOptions={[6, 12, 18, { label: 'All', value: -1 }]}\n />\n </div>\n </Grid>\n );\n};\n\ntype WorkflowRunsCardProps = {\n entity: Entity;\n};\n\nconst WorkflowRunsCardSearch = ({\n searchTerm,\n handleSearch,\n retry,\n}: {\n searchTerm: string;\n handleSearch: (event: ChangeEvent<HTMLInputElement>) => void;\n retry: () => void;\n}) => {\n return (\n <>\n <Box flexGrow={1} />\n <TextField\n type=\"search\"\n label=\"Search\"\n value={searchTerm}\n onChange={handleSearch}\n data-testid=\"search-control\"\n style={{ marginRight: '20px' }}\n />\n <ButtonGroup>\n <Tooltip title=\"Reload workflow runs\">\n <IconButton onClick={retry}>\n <SyncIcon />\n </IconButton>\n </Tooltip>\n </ButtonGroup>\n </>\n );\n};\n\nexport const WorkflowRunsCard = ({ entity }: WorkflowRunsCardProps) => {\n const projectName = getProjectNameFromEntity(entity);\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (projectName ?? '/').split('/');\n const [branch, setBranch] = useState<string | undefined>('default');\n const [runs, setRuns] = useState<WorkflowRun[] | undefined>([]);\n const [searchTerm, setSearchTerm] = useState('');\n\n const handleSearch = (event: ChangeEvent<HTMLInputElement>) => {\n setSearchTerm(event.target.value);\n };\n\n const [\n { runs: runsData, branches, defaultBranch, ...cardProps },\n { retry, setPage, setPageSize },\n ] = useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch: branch === 'all' ? undefined : branch,\n });\n\n const handleMenuChange = (\n event: ChangeEvent<{ name?: string; value: unknown }>,\n ) => {\n const selectedValue = event.target.value as string;\n setBranch(selectedValue);\n setPage(0);\n retry();\n };\n\n useEffect(() => {\n setRuns(runsData);\n }, [runsData, branch]);\n\n useEffect(() => {\n setBranch(defaultBranch);\n }, [defaultBranch]);\n\n return (\n <Grid item>\n <InfoCard\n title={\n <Box display=\"flex\" alignItems=\"center\">\n <GitHubIcon />\n <Box mr={1} />\n <Typography variant=\"h6\">{projectName}</Typography>\n\n <Select\n value={branch}\n key={branch}\n label=\"Branch\"\n onChange={handleMenuChange}\n data-testid=\"menu-control\"\n style={{\n marginLeft: '30px',\n marginRight: '20px',\n width: '230px',\n }}\n >\n {branches.map(branchItem => (\n <MenuItem key={branchItem.name} value={branchItem.name}>\n {branchItem.name === defaultBranch ? (\n <Typography variant=\"body2\" component=\"span\">\n {branchItem.name}{' '}\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ color: 'lightgray', fontSize: 'x-small' }}\n >\n (default)\n </Typography>\n </Typography>\n ) : (\n branchItem.name\n )}\n </MenuItem>\n ))}\n\n <MenuItem\n value=\"all\"\n key=\"all\"\n style={{ color: 'lightGrey', fontSize: 'small' }}\n >\n select all branches\n </MenuItem>\n </Select>\n\n <WorkflowRunsCardSearch\n searchTerm={searchTerm}\n handleSearch={handleSearch}\n retry={retry}\n />\n </Box>\n }\n >\n <WorkflowRunsCardView\n runs={runs}\n loading={cardProps.loading}\n onChangePageSize={setPageSize}\n onChangePage={setPage}\n page={cardProps.page}\n total={cardProps.total}\n pageSize={cardProps.pageSize}\n searchTerm={searchTerm}\n projectName={projectName}\n />\n </InfoCard>\n </Grid>\n );\n};\n\nexport default WorkflowRunsCard;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkflowRunsCard.esm.js","sources":["../../../src/components/WorkflowRunsCard/WorkflowRunsCard.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ChangeEvent, useEffect, useState } from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Grid from '@material-ui/core/Grid';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport TextField from '@material-ui/core/TextField';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport { LinkButton, Link, InfoCard } from '@backstage/core-components';\nimport GitHubIcon from '@material-ui/icons/GitHub';\nimport RetryIcon from '@material-ui/icons/Replay';\nimport SyncIcon from '@material-ui/icons/Sync';\nimport ExternalLinkIcon from '@material-ui/icons/Launch';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport { buildRouteRef } from '../../routes';\nimport { getProjectNameFromEntity } from '../getProjectNameFromEntity';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\n\nimport Alert, { Color } from '@material-ui/lab/Alert';\nimport { Entity } from '@backstage/catalog-model';\nimport Button from '@material-ui/core/Button';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n card: {\n border: `1px solid ${theme.palette.divider}`,\n boxShadow: theme.shadows[2],\n borderRadius: '4px',\n overflow: 'visible',\n position: 'relative',\n margin: theme.spacing(4, 1, 1),\n flex: '1',\n minWidth: '0px',\n },\n externalLinkIcon: {\n fontSize: 'inherit',\n verticalAlign: 'middle',\n },\n pagination: {\n width: '100%',\n },\n }),\n);\n\ntype WorkflowRunsCardViewProps = {\n runs?: WorkflowRun[];\n searchTerm: string;\n loading: boolean;\n onChangePageSize: (pageSize: number) => void;\n onChangePage: (page: number) => void;\n page: number;\n total: number;\n pageSize: number;\n projectName: string;\n};\n\nconst statusColors: Record<string, string> = {\n skipped: 'warning',\n canceled: 'info',\n timed_out: 'error',\n failure: 'error',\n success: 'success',\n};\n\nconst matchesSearchTerm = (run: WorkflowRun, searchTerm: string) => {\n const lowerCaseSearchTerm = searchTerm.toLocaleLowerCase();\n return (\n run.workflowName?.toLocaleLowerCase().includes(lowerCaseSearchTerm) ||\n run.source.branchName?.toLocaleLowerCase().includes(lowerCaseSearchTerm) ||\n run.status?.toLocaleLowerCase().includes(lowerCaseSearchTerm) ||\n run.id?.toLocaleLowerCase().includes(lowerCaseSearchTerm)\n );\n};\n\nexport const WorkflowRunsCardView = ({\n runs,\n searchTerm,\n loading,\n onChangePageSize,\n onChangePage,\n page,\n total,\n pageSize,\n}: WorkflowRunsCardViewProps) => {\n const classes = useStyles();\n const routeLink = useRouteRef(buildRouteRef);\n\n const filteredRuns = runs?.filter(run => matchesSearchTerm(run, searchTerm));\n\n return (\n <Grid container spacing={3}>\n {filteredRuns && runs?.length !== 0 ? (\n filteredRuns.map(run => (\n <Grid key={run.id} item container xs={12} lg={6} xl={4}>\n <Box className={classes.card}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n p={2}\n height=\"100%\"\n alignItems=\"center\"\n >\n <Box\n sx={{ width: '100%' }}\n textAlign=\"center\"\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n >\n <Tooltip\n title={run.status ?? 'No Status'}\n placement=\"top-start\"\n >\n <Alert\n variant=\"outlined\"\n severity={\n statusColors[\n run.conclusion as keyof typeof statusColors\n ] as Color\n }\n style={{ alignItems: 'center' }}\n >\n <Typography variant=\"h6\">\n <Link to={routeLink({ id: run.id })}>\n <Typography variant=\"h6\">\n {run.workflowName}\n </Typography>\n </Link>\n </Typography>\n </Alert>\n </Tooltip>\n <Tooltip title={run.message ?? 'No run message'}>\n <Box display=\"flex\" flexDirection=\"column\" marginY={1}>\n <Typography variant=\"subtitle2\" component=\"span\">\n Commit\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ overflowWrap: 'break-word' }}\n >\n {run.source.commit.hash!}\n </Typography>\n </Box>\n </Tooltip>\n\n {run.source.branchName && (\n <Box display=\"flex\" flexDirection=\"column\" marginY={1}>\n <Typography variant=\"subtitle2\" component=\"span\">\n Branch\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ overflowWrap: 'break-word' }}\n >\n {run.source.branchName}\n </Typography>\n </Box>\n )}\n <Box display=\"flex\" flexDirection=\"column\" marginY={1}>\n <Typography variant=\"subtitle2\" component=\"span\">\n Workflow ID\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ overflowWrap: 'break-word' }}\n >\n {run.id}\n </Typography>\n </Box>\n <WorkflowRunStatus\n status={run.status}\n conclusion={run.conclusion}\n />\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n mt=\"auto\"\n >\n <Box marginTop={2} marginBottom={1}>\n <Button\n endIcon={<RetryIcon />}\n onClick={run.onReRunClick}\n variant=\"outlined\"\n >\n Rerun workflow\n </Button>\n </Box>\n\n {run.githubUrl && (\n <Box>\n <LinkButton\n to={run.githubUrl}\n endIcon={<ExternalLinkIcon />}\n >\n View on GitHub\n </LinkButton>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n </Box>\n </Grid>\n ))\n ) : (\n <Box p={2}>\n {loading ? <CircularProgress /> : 'No matching runs found.'}\n </Box>\n )}\n <div className={classes.pagination}>\n <TablePagination\n component=\"div\"\n count={total}\n page={page}\n rowsPerPage={pageSize}\n onPageChange={(_, newPage) => onChangePage(newPage)}\n onRowsPerPageChange={event =>\n onChangePageSize(parseInt(event.target.value, 6))\n }\n labelRowsPerPage=\"Workflows per page\"\n rowsPerPageOptions={[6, 12, 18, { label: 'All', value: -1 }]}\n />\n </div>\n </Grid>\n );\n};\n\ntype WorkflowRunsCardProps = {\n entity: Entity;\n};\n\nconst WorkflowRunsCardSearch = ({\n searchTerm,\n handleSearch,\n retry,\n}: {\n searchTerm: string;\n handleSearch: (event: ChangeEvent<HTMLInputElement>) => void;\n retry: () => void;\n}) => {\n return (\n <>\n <Box flexGrow={1} />\n <TextField\n type=\"search\"\n label=\"Search\"\n value={searchTerm}\n onChange={handleSearch}\n data-testid=\"search-control\"\n style={{ marginRight: '20px' }}\n />\n <ButtonGroup>\n <Tooltip title=\"Reload workflow runs\">\n <IconButton onClick={retry}>\n <SyncIcon />\n </IconButton>\n </Tooltip>\n </ButtonGroup>\n </>\n );\n};\n\nexport const WorkflowRunsCard = ({ entity }: WorkflowRunsCardProps) => {\n const projectName = getProjectNameFromEntity(entity);\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (projectName ?? '/').split('/');\n const [branch, setBranch] = useState<string | undefined>('default');\n const [runs, setRuns] = useState<WorkflowRun[] | undefined>([]);\n const [searchTerm, setSearchTerm] = useState('');\n\n const handleSearch = (event: ChangeEvent<HTMLInputElement>) => {\n setSearchTerm(event.target.value);\n };\n\n const [\n { runs: runsData, branches, defaultBranch, ...cardProps },\n { retry, setPage, setPageSize },\n ] = useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch: branch === 'all' ? undefined : branch,\n });\n\n const handleMenuChange = (\n event: ChangeEvent<{ name?: string; value: unknown }>,\n ) => {\n const selectedValue = event.target.value as string;\n setBranch(selectedValue);\n setPage(0);\n retry();\n };\n\n useEffect(() => {\n setRuns(runsData);\n }, [runsData, branch]);\n\n useEffect(() => {\n setBranch(defaultBranch);\n }, [defaultBranch]);\n\n return (\n <Grid item>\n <InfoCard\n title={\n <Box display=\"flex\" alignItems=\"center\">\n <GitHubIcon />\n <Box mr={1} />\n <Typography variant=\"h6\">{projectName}</Typography>\n\n <Select\n value={branch}\n key={branch}\n label=\"Branch\"\n onChange={handleMenuChange}\n data-testid=\"menu-control\"\n style={{\n marginLeft: '30px',\n marginRight: '20px',\n width: '230px',\n }}\n >\n {branches.map(branchItem => (\n <MenuItem key={branchItem.name} value={branchItem.name}>\n {branchItem.name === defaultBranch ? (\n <Typography variant=\"body2\" component=\"span\">\n {branchItem.name}{' '}\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ color: 'lightgray', fontSize: 'x-small' }}\n >\n (default)\n </Typography>\n </Typography>\n ) : (\n branchItem.name\n )}\n </MenuItem>\n ))}\n\n <MenuItem\n value=\"all\"\n key=\"all\"\n style={{ color: 'lightGrey', fontSize: 'small' }}\n >\n select all branches\n </MenuItem>\n </Select>\n\n <WorkflowRunsCardSearch\n searchTerm={searchTerm}\n handleSearch={handleSearch}\n retry={retry}\n />\n </Box>\n }\n >\n <WorkflowRunsCardView\n runs={runs}\n loading={cardProps.loading}\n onChangePageSize={setPageSize}\n onChangePage={setPage}\n page={cardProps.page}\n total={cardProps.total}\n pageSize={cardProps.pageSize}\n searchTerm={searchTerm}\n projectName={projectName}\n />\n </InfoCard>\n </Grid>\n );\n};\n\nexport default WorkflowRunsCard;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,MAAQ,EAAA,CAAA,UAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,MAC1C,SAAA,EAAW,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MAC1B,YAAc,EAAA,KAAA;AAAA,MACd,QAAU,EAAA,SAAA;AAAA,MACV,QAAU,EAAA,UAAA;AAAA,MACV,MAAQ,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,MAC7B,IAAM,EAAA,GAAA;AAAA,MACN,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,QAAU,EAAA,SAAA;AAAA,MACV,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,UAAY,EAAA;AAAA,MACV,KAAO,EAAA;AAAA;AACT,GACD;AACH,CAAA;AAcA,MAAM,YAAuC,GAAA;AAAA,EAC3C,OAAS,EAAA,SAAA;AAAA,EACT,QAAU,EAAA,MAAA;AAAA,EACV,SAAW,EAAA,OAAA;AAAA,EACX,OAAS,EAAA,OAAA;AAAA,EACT,OAAS,EAAA;AACX,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,GAAA,EAAkB,UAAuB,KAAA;AAClE,EAAM,MAAA,mBAAA,GAAsB,WAAW,iBAAkB,EAAA;AACzD,EACE,OAAA,GAAA,CAAI,YAAc,EAAA,iBAAA,EAAoB,CAAA,QAAA,CAAS,mBAAmB,CAAA,IAClE,GAAI,CAAA,MAAA,CAAO,UAAY,EAAA,iBAAA,EAAoB,CAAA,QAAA,CAAS,mBAAmB,CAAA,IACvE,GAAI,CAAA,MAAA,EAAQ,iBAAkB,EAAA,CAAE,QAAS,CAAA,mBAAmB,CAC5D,IAAA,GAAA,CAAI,EAAI,EAAA,iBAAA,EAAoB,CAAA,QAAA,CAAS,mBAAmB,CAAA;AAE5D,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAiC,KAAA;AAC/B,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA,SAAA,GAAY,YAAY,aAAa,CAAA;AAE3C,EAAA,MAAM,eAAe,IAAM,EAAA,MAAA,CAAO,SAAO,iBAAkB,CAAA,GAAA,EAAK,UAAU,CAAC,CAAA;AAE3E,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACtB,EAAA,QAAA,EAAA;AAAA,IAAgB,YAAA,IAAA,IAAA,EAAM,WAAW,CAChC,GAAA,YAAA,CAAa,IAAI,CACf,GAAA,qBAAA,GAAA,CAAC,IAAkB,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,SAAA,EAAS,MAAC,EAAI,EAAA,EAAA,EAAI,IAAI,CAAG,EAAA,EAAA,EAAI,GACnD,QAAC,kBAAA,GAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,IACtB,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,MAAA;AAAA,QACR,aAAc,EAAA,QAAA;AAAA,QACd,CAAG,EAAA,CAAA;AAAA,QACH,MAAO,EAAA,MAAA;AAAA,QACP,UAAW,EAAA,QAAA;AAAA,QAEX,QAAA,kBAAA,IAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,EAAE,KAAA,EAAO,MAAO,EAAA;AAAA,YACpB,SAAU,EAAA,QAAA;AAAA,YACV,OAAQ,EAAA,MAAA;AAAA,YACR,aAAc,EAAA,QAAA;AAAA,YACd,MAAO,EAAA,MAAA;AAAA,YAEP,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,IAAI,MAAU,IAAA,WAAA;AAAA,kBACrB,SAAU,EAAA,WAAA;AAAA,kBAEV,QAAA,kBAAA,GAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,OAAQ,EAAA,UAAA;AAAA,sBACR,QAAA,EACE,YACE,CAAA,GAAA,CAAI,UACN,CAAA;AAAA,sBAEF,KAAA,EAAO,EAAE,UAAA,EAAY,QAAS,EAAA;AAAA,sBAE9B,QAAA,kBAAA,GAAA,CAAC,cAAW,OAAQ,EAAA,IAAA,EAClB,8BAAC,IAAK,EAAA,EAAA,EAAA,EAAI,UAAU,EAAE,EAAA,EAAI,IAAI,EAAG,EAAC,GAChC,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,IACjB,EAAA,QAAA,EAAA,GAAA,CAAI,YACP,EAAA,CAAA,EACF,CACF,EAAA;AAAA;AAAA;AACF;AAAA,eACF;AAAA,8BACC,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,GAAA,CAAI,OAAW,IAAA,gBAAA,EAC7B,QAAC,kBAAA,IAAA,CAAA,GAAA,EAAA,EAAI,OAAQ,EAAA,MAAA,EAAO,aAAc,EAAA,QAAA,EAAS,SAAS,CAClD,EAAA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,WAAY,EAAA,SAAA,EAAU,QAAO,QAEjD,EAAA,QAAA,EAAA,CAAA;AAAA,gCACA,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,OAAQ,EAAA,OAAA;AAAA,oBACR,SAAU,EAAA,MAAA;AAAA,oBACV,KAAA,EAAO,EAAE,YAAA,EAAc,YAAa,EAAA;AAAA,oBAEnC,QAAA,EAAA,GAAA,CAAI,OAAO,MAAO,CAAA;AAAA;AAAA;AACrB,eAAA,EACF,CACF,EAAA,CAAA;AAAA,cAEC,GAAA,CAAI,MAAO,CAAA,UAAA,oBACT,IAAA,CAAA,GAAA,EAAA,EAAI,SAAQ,MAAO,EAAA,aAAA,EAAc,QAAS,EAAA,OAAA,EAAS,CAClD,EAAA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,WAAY,EAAA,SAAA,EAAU,QAAO,QAEjD,EAAA,QAAA,EAAA,CAAA;AAAA,gCACA,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,OAAQ,EAAA,OAAA;AAAA,oBACR,SAAU,EAAA,MAAA;AAAA,oBACV,KAAA,EAAO,EAAE,YAAA,EAAc,YAAa,EAAA;AAAA,oBAEnC,cAAI,MAAO,CAAA;AAAA;AAAA;AACd,eACF,EAAA,CAAA;AAAA,mCAED,GAAI,EAAA,EAAA,OAAA,EAAQ,QAAO,aAAc,EAAA,QAAA,EAAS,SAAS,CAClD,EAAA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,WAAY,EAAA,SAAA,EAAU,QAAO,QAEjD,EAAA,aAAA,EAAA,CAAA;AAAA,gCACA,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,OAAQ,EAAA,OAAA;AAAA,oBACR,SAAU,EAAA,MAAA;AAAA,oBACV,KAAA,EAAO,EAAE,YAAA,EAAc,YAAa,EAAA;AAAA,oBAEnC,QAAI,EAAA,GAAA,CAAA;AAAA;AAAA;AACP,eACF,EAAA,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,iBAAA;AAAA,gBAAA;AAAA,kBACC,QAAQ,GAAI,CAAA,MAAA;AAAA,kBACZ,YAAY,GAAI,CAAA;AAAA;AAAA,eAClB;AAAA,8BACA,IAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACC,OAAQ,EAAA,MAAA;AAAA,kBACR,aAAc,EAAA,QAAA;AAAA,kBACd,cAAe,EAAA,eAAA;AAAA,kBACf,UAAW,EAAA,QAAA;AAAA,kBACX,EAAG,EAAA,MAAA;AAAA,kBAEH,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,YAAA,EAAc,CAC/B,EAAA,QAAA,kBAAA,GAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,sBAAU,SAAU,EAAA,EAAA,CAAA;AAAA,wBACpB,SAAS,GAAI,CAAA,YAAA;AAAA,wBACb,OAAQ,EAAA,UAAA;AAAA,wBACT,QAAA,EAAA;AAAA;AAAA,qBAGH,EAAA,CAAA;AAAA,oBAEC,GAAA,CAAI,SACH,oBAAA,GAAA,CAAC,GACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,sBAAC,UAAA;AAAA,sBAAA;AAAA,wBACC,IAAI,GAAI,CAAA,SAAA;AAAA,wBACR,OAAA,sBAAU,gBAAiB,EAAA,EAAA,CAAA;AAAA,wBAC5B,QAAA,EAAA;AAAA;AAAA,qBAGH,EAAA;AAAA;AAAA;AAAA;AAEJ;AAAA;AAAA;AACF;AAAA,KAEJ,EAAA,CAAA,EAAA,EAjHS,GAAI,CAAA,EAkHf,CACD,CAED,mBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,CAAA,EAAG,CACL,EAAA,QAAA,EAAA,OAAA,mBAAW,GAAA,CAAA,gBAAA,EAAA,EAAiB,IAAK,yBACpC,EAAA,CAAA;AAAA,oBAED,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,UACtB,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,KAAA;AAAA,QACV,KAAO,EAAA,KAAA;AAAA,QACP,IAAA;AAAA,QACA,WAAa,EAAA,QAAA;AAAA,QACb,YAAc,EAAA,CAAC,CAAG,EAAA,OAAA,KAAY,aAAa,OAAO,CAAA;AAAA,QAClD,mBAAA,EAAqB,WACnB,gBAAiB,CAAA,QAAA,CAAS,MAAM,MAAO,CAAA,KAAA,EAAO,CAAC,CAAC,CAAA;AAAA,QAElD,gBAAiB,EAAA,oBAAA;AAAA,QACjB,kBAAA,EAAoB,CAAC,CAAA,EAAG,EAAI,EAAA,EAAA,EAAI,EAAE,KAAO,EAAA,KAAA,EAAO,KAAO,EAAA,CAAA,CAAA,EAAI;AAAA;AAAA,KAE/D,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;AAMA,MAAM,yBAAyB,CAAC;AAAA,EAC9B,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAIM,KAAA;AACJ,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,GAAA,EAAA,EAAI,UAAU,CAAG,EAAA,CAAA;AAAA,oBAClB,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,QAAA;AAAA,QACL,KAAM,EAAA,QAAA;AAAA,QACN,KAAO,EAAA,UAAA;AAAA,QACP,QAAU,EAAA,YAAA;AAAA,QACV,aAAY,EAAA,gBAAA;AAAA,QACZ,KAAA,EAAO,EAAE,WAAA,EAAa,MAAO;AAAA;AAAA,KAC/B;AAAA,oBACC,GAAA,CAAA,WAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA,EAAQ,OAAM,sBACb,EAAA,QAAA,kBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAS,KACnB,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,CAAA,EACZ,GACF,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,gBAAmB,GAAA,CAAC,EAAE,MAAA,EAAoC,KAAA;AACrE,EAAM,MAAA,WAAA,GAAc,yBAAyB,MAAM,CAAA;AACnD,EAAM,MAAA,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAC7C,EAAA,MAAM,CAAC,KAAO,EAAA,IAAI,KAAK,WAAe,IAAA,GAAA,EAAK,MAAM,GAAG,CAAA;AACpD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAA6B,SAAS,CAAA;AAClE,EAAA,MAAM,CAAC,IAAM,EAAA,OAAO,CAAI,GAAA,QAAA,CAAoC,EAAE,CAAA;AAC9D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAE/C,EAAM,MAAA,YAAA,GAAe,CAAC,KAAyC,KAAA;AAC7D,IAAc,aAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,GAClC;AAEA,EAAM,MAAA;AAAA,IACJ,EAAE,IAAM,EAAA,QAAA,EAAU,QAAU,EAAA,aAAA,EAAe,GAAG,SAAU,EAAA;AAAA,IACxD,EAAE,KAAO,EAAA,OAAA,EAAS,WAAY;AAAA,MAC5B,eAAgB,CAAA;AAAA,IAClB,QAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,EAAQ,MAAW,KAAA,KAAA,GAAQ,KAAY,CAAA,GAAA;AAAA,GACxC,CAAA;AAED,EAAM,MAAA,gBAAA,GAAmB,CACvB,KACG,KAAA;AACH,IAAM,MAAA,aAAA,GAAgB,MAAM,MAAO,CAAA,KAAA;AACnC,IAAA,SAAA,CAAU,aAAa,CAAA;AACvB,IAAA,OAAA,CAAQ,CAAC,CAAA;AACT,IAAM,KAAA,EAAA;AAAA,GACR;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,GACf,EAAA,CAAC,QAAU,EAAA,MAAM,CAAC,CAAA;AAErB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAA,CAAU,aAAa,CAAA;AAAA,GACzB,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EACE,uBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IACR,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,uBACG,IAAA,CAAA,GAAA,EAAA,EAAI,OAAQ,EAAA,MAAA,EAAO,YAAW,QAC7B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,CAAA;AAAA,wBACZ,GAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CAAG,EAAA,CAAA;AAAA,wBACX,GAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,IAAA,EAAM,QAAY,EAAA,WAAA,EAAA,CAAA;AAAA,wBAEtC,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAO,EAAA,MAAA;AAAA,YAEP,KAAM,EAAA,QAAA;AAAA,YACN,QAAU,EAAA,gBAAA;AAAA,YACV,aAAY,EAAA,cAAA;AAAA,YACZ,KAAO,EAAA;AAAA,cACL,UAAY,EAAA,MAAA;AAAA,cACZ,WAAa,EAAA,MAAA;AAAA,cACb,KAAO,EAAA;AAAA,aACT;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,QAAA,CAAS,GAAI,CAAA,CAAA,UAAA,qBACX,GAAA,CAAA,QAAA,EAAA,EAA+B,OAAO,UAAW,CAAA,IAAA,EAC/C,QAAW,EAAA,UAAA,CAAA,IAAA,KAAS,gCAClB,IAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,OAAA,EAAQ,WAAU,MACnC,EAAA,QAAA,EAAA;AAAA,gBAAW,UAAA,CAAA,IAAA;AAAA,gBAAM,GAAA;AAAA,gCAClB,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,OAAQ,EAAA,OAAA;AAAA,oBACR,SAAU,EAAA,MAAA;AAAA,oBACV,KAAO,EAAA,EAAE,KAAO,EAAA,WAAA,EAAa,UAAU,SAAU,EAAA;AAAA,oBAClD,QAAA,EAAA;AAAA;AAAA;AAED,eAAA,EACF,CAEA,GAAA,UAAA,CAAW,IAbA,EAAA,EAAA,UAAA,CAAW,IAe1B,CACD,CAAA;AAAA,8BAED,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,KAAM,EAAA,KAAA;AAAA,kBAEN,KAAO,EAAA,EAAE,KAAO,EAAA,WAAA,EAAa,UAAU,OAAQ,EAAA;AAAA,kBAChD,QAAA,EAAA;AAAA,iBAAA;AAAA,gBAFK;AAAA;AAIN;AAAA,WAAA;AAAA,UAnCK;AAAA,SAoCP;AAAA,wBAEA,GAAA;AAAA,UAAC,sBAAA;AAAA,UAAA;AAAA,YACC,UAAA;AAAA,YACA,YAAA;AAAA,YACA;AAAA;AAAA;AACF,OACF,EAAA,CAAA;AAAA,MAGF,QAAA,kBAAA,GAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,SAAS,SAAU,CAAA,OAAA;AAAA,UACnB,gBAAkB,EAAA,WAAA;AAAA,UAClB,YAAc,EAAA,OAAA;AAAA,UACd,MAAM,SAAU,CAAA,IAAA;AAAA,UAChB,OAAO,SAAU,CAAA,KAAA;AAAA,UACjB,UAAU,SAAU,CAAA,QAAA;AAAA,UACpB,UAAA;AAAA,UACA;AAAA;AAAA;AACF;AAAA,GAEJ,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import Typography from '@material-ui/core/Typography';
|
|
3
3
|
import Box from '@material-ui/core/Box';
|
|
4
4
|
import IconButton from '@material-ui/core/IconButton';
|
|
@@ -35,22 +35,25 @@ const generatedColumns = [
|
|
|
35
35
|
const LinkWrapper = () => {
|
|
36
36
|
const routeLink = useRouteRef(buildRouteRef);
|
|
37
37
|
const truncatedMessage = truncateAtNewline(row.message);
|
|
38
|
-
return /* @__PURE__ */
|
|
38
|
+
return /* @__PURE__ */ jsx(
|
|
39
39
|
Link,
|
|
40
40
|
{
|
|
41
41
|
component: Link$1,
|
|
42
42
|
to: routeLink({ id: row.id }),
|
|
43
|
-
title: row.message
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
title: row.message,
|
|
44
|
+
children: truncatedMessage
|
|
45
|
+
}
|
|
46
46
|
);
|
|
47
47
|
};
|
|
48
|
-
return /* @__PURE__ */
|
|
48
|
+
return /* @__PURE__ */ jsx(LinkWrapper, {});
|
|
49
49
|
}
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
title: "Source",
|
|
53
|
-
render: (row) => /* @__PURE__ */
|
|
53
|
+
render: (row) => /* @__PURE__ */ jsxs(Typography, { variant: "body2", noWrap: true, children: [
|
|
54
|
+
/* @__PURE__ */ jsx(Typography, { paragraph: true, variant: "body2", children: row.source?.branchName }),
|
|
55
|
+
/* @__PURE__ */ jsx(Typography, { paragraph: true, variant: "body2", children: row.source?.commit.hash })
|
|
56
|
+
] })
|
|
54
57
|
},
|
|
55
58
|
{
|
|
56
59
|
title: "Workflow",
|
|
@@ -61,11 +64,11 @@ const generatedColumns = [
|
|
|
61
64
|
customSort: (d1, d2) => {
|
|
62
65
|
return getStatusDescription(d1).localeCompare(getStatusDescription(d2));
|
|
63
66
|
},
|
|
64
|
-
render: (row) => /* @__PURE__ */
|
|
67
|
+
render: (row) => /* @__PURE__ */ jsx(Box, { display: "flex", alignItems: "center", children: /* @__PURE__ */ jsx(WorkflowRunStatus, { status: row.status, conclusion: row.conclusion }) })
|
|
65
68
|
},
|
|
66
69
|
{
|
|
67
70
|
title: "Actions",
|
|
68
|
-
render: (row) => /* @__PURE__ */
|
|
71
|
+
render: (row) => /* @__PURE__ */ jsx(Tooltip, { title: "Rerun workflow", children: /* @__PURE__ */ jsx(IconButton, { onClick: row.onReRunClick, children: /* @__PURE__ */ jsx(RetryIcon, {}) }) }),
|
|
69
72
|
width: "10%"
|
|
70
73
|
}
|
|
71
74
|
];
|
|
@@ -80,7 +83,7 @@ const WorkflowRunsTableView = ({
|
|
|
80
83
|
onChangePageSize,
|
|
81
84
|
total
|
|
82
85
|
}) => {
|
|
83
|
-
return /* @__PURE__ */
|
|
86
|
+
return /* @__PURE__ */ jsx(
|
|
84
87
|
Table,
|
|
85
88
|
{
|
|
86
89
|
isLoading: loading,
|
|
@@ -89,7 +92,7 @@ const WorkflowRunsTableView = ({
|
|
|
89
92
|
page,
|
|
90
93
|
actions: [
|
|
91
94
|
{
|
|
92
|
-
icon: () => /* @__PURE__ */
|
|
95
|
+
icon: () => /* @__PURE__ */ jsx(SyncIcon, {}),
|
|
93
96
|
tooltip: "Reload workflow runs",
|
|
94
97
|
isFreeAction: true,
|
|
95
98
|
onClick: () => retry()
|
|
@@ -99,7 +102,11 @@ const WorkflowRunsTableView = ({
|
|
|
99
102
|
onPageChange: onChangePage,
|
|
100
103
|
onRowsPerPageChange: onChangePageSize,
|
|
101
104
|
style: { width: "100%" },
|
|
102
|
-
title: /* @__PURE__ */
|
|
105
|
+
title: /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", children: [
|
|
106
|
+
/* @__PURE__ */ jsx(GitHubIcon, {}),
|
|
107
|
+
/* @__PURE__ */ jsx(Box, { mr: 1 }),
|
|
108
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h6", children: projectName })
|
|
109
|
+
] }),
|
|
103
110
|
columns: generatedColumns
|
|
104
111
|
}
|
|
105
112
|
);
|
|
@@ -119,23 +126,23 @@ const WorkflowRunsTable = ({
|
|
|
119
126
|
});
|
|
120
127
|
const githubHost = hostname || "github.com";
|
|
121
128
|
const hasNoRuns = !tableProps.loading && !runs;
|
|
122
|
-
return hasNoRuns ? /* @__PURE__ */
|
|
129
|
+
return hasNoRuns ? /* @__PURE__ */ jsx(
|
|
123
130
|
EmptyState,
|
|
124
131
|
{
|
|
125
132
|
missing: "data",
|
|
126
133
|
title: "No Workflow Data",
|
|
127
134
|
description: "This component has GitHub Actions enabled, but no data was found. Have you created any Workflows? Click the button below to create a new Workflow.",
|
|
128
|
-
action: /* @__PURE__ */
|
|
135
|
+
action: /* @__PURE__ */ jsx(
|
|
129
136
|
Button,
|
|
130
137
|
{
|
|
131
138
|
variant: "contained",
|
|
132
139
|
color: "primary",
|
|
133
|
-
href: `https://${githubHost}/${projectName}/actions/new
|
|
134
|
-
|
|
135
|
-
|
|
140
|
+
href: `https://${githubHost}/${projectName}/actions/new`,
|
|
141
|
+
children: "Create new Workflow"
|
|
142
|
+
}
|
|
136
143
|
)
|
|
137
144
|
}
|
|
138
|
-
) : /* @__PURE__ */
|
|
145
|
+
) : /* @__PURE__ */ jsx(
|
|
139
146
|
WorkflowRunsTableView,
|
|
140
147
|
{
|
|
141
148
|
...tableProps,
|