@backstage-community/plugin-github-actions 0.13.0 → 0.13.1

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @backstage-community/plugin-github-actions
2
2
 
3
+ ## 0.13.1
4
+
5
+ ### Patch Changes
6
+
7
+ - e6e4a9d: Add workflow age field to help indicate when the workflow last ran
8
+
3
9
  ## 0.13.0
4
10
 
5
11
  ### Minor Changes
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useEntity } from '@backstage/plugin-catalog-react';
3
3
  import LinearProgress from '@material-ui/core/LinearProgress';
4
+ import Tooltip from '@material-ui/core/Tooltip';
4
5
  import Typography from '@material-ui/core/Typography';
5
6
  import { makeStyles } from '@material-ui/core/styles';
6
7
  import ExternalLinkIcon from '@material-ui/icons/Launch';
@@ -41,6 +42,7 @@ const WidgetContent = (props) => {
41
42
  conclusion: lastRun.conclusion
42
43
  }
43
44
  ) }),
45
+ age: /* @__PURE__ */ jsx(Box, { display: "flex", children: /* @__PURE__ */ jsx(Tooltip, { title: lastRun.statusDate ?? "", children: /* @__PURE__ */ jsx(Box, { children: lastRun.statusAge }) }) }),
44
46
  message: lastRun.message,
45
47
  url: /* @__PURE__ */ jsxs(Link, { to: lastRun.githubUrl ?? "", children: [
46
48
  "See more on GitHub",
@@ -1 +1 @@
1
- {"version":3,"file":"Cards.esm.js","sources":["../../../src/components/Cards/Cards.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 */\n\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExternalLinkIcon from '@material-ui/icons/Launch';\nimport { useEffect } from 'react';\nimport { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunsTable } from '../WorkflowRunsTable';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n InfoCard,\n InfoCardVariants,\n Link,\n StructuredMetadataTable,\n} from '@backstage/core-components';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\nimport { useDefaultBranch } from '../useDefaultBranch';\nimport Box from '@material-ui/core/Box';\n\nconst useStyles = makeStyles({\n externalLinkIcon: {\n fontSize: 'inherit',\n verticalAlign: 'bottom',\n },\n});\n\nconst WidgetContent = (props: {\n error?: Error;\n loading?: boolean;\n lastRun: WorkflowRun;\n branch?: string;\n}) => {\n const { error, loading, lastRun, branch } = props;\n const classes = useStyles();\n\n if (error) return <Typography>Couldn't fetch latest {branch} run</Typography>;\n if (loading) return <LinearProgress />;\n\n return (\n <StructuredMetadataTable\n metadata={{\n status: (\n <Box display=\"flex\">\n <WorkflowRunStatus\n status={lastRun.status}\n conclusion={lastRun.conclusion}\n />\n </Box>\n ),\n message: lastRun.message,\n url: (\n <Link to={lastRun.githubUrl ?? ''}>\n See more on GitHub{' '}\n <ExternalLinkIcon className={classes.externalLinkIcon} />\n </Link>\n ),\n }}\n />\n );\n};\n\n/** @public */\nexport const LatestWorkflowRunCard = (props: {\n branch?: string;\n variant?: InfoCardVariants;\n}) => {\n const { variant } = props;\n const { entity } = useEntity();\n const errorApi = useApi(errorApiRef);\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (\n entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/'\n ).split('/');\n const defaultBranch = useDefaultBranch({\n hostname,\n owner,\n repo,\n }).branch;\n const branch = props.branch ?? defaultBranch;\n const [{ runs, loading, error }] = useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n fetchAllBranches: false,\n });\n const lastRun = runs?.[0] ?? ({} as WorkflowRun);\n useEffect(() => {\n if (error) {\n errorApi.post(error);\n }\n }, [error, errorApi]);\n\n return (\n <InfoCard title={`Last ${branch} build`} variant={variant}>\n <WidgetContent\n error={error}\n loading={loading}\n branch={branch}\n lastRun={lastRun}\n />\n </InfoCard>\n );\n};\n\n/** @public */\nexport const LatestWorkflowsForBranchCard = (props: {\n branch?: string;\n variant?: InfoCardVariants;\n}) => {\n const { variant } = props;\n const { entity } = useEntity();\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (\n entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/'\n ).split('/');\n const defaultBranch = useDefaultBranch({\n hostname,\n owner,\n repo,\n }).branch;\n const branch = props.branch ?? defaultBranch;\n\n return (\n <InfoCard title={`Recent ${branch} builds`} variant={variant}>\n <WorkflowRunsTable branch={branch} entity={entity} />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAqCA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,gBAAkB,EAAA;AAAA,IAChB,QAAU,EAAA,SAAA;AAAA,IACV,aAAe,EAAA;AAAA;AAEnB,CAAC,CAAA;AAED,MAAM,aAAA,GAAgB,CAAC,KAKjB,KAAA;AACJ,EAAA,MAAM,EAAE,KAAA,EAAO,OAAS,EAAA,OAAA,EAAS,QAAW,GAAA,KAAA;AAC5C,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAI,IAAA,KAAA,EAAc,uBAAA,IAAA,CAAC,UAAW,EAAA,EAAA,QAAA,EAAA;AAAA,IAAA,wBAAA;AAAA,IAAuB,MAAA;AAAA,IAAO;AAAA,GAAI,EAAA,CAAA;AAChE,EAAI,IAAA,OAAA,EAAgB,uBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,CAAA;AAEpC,EACE,uBAAA,GAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA;AAAA,QACR,MACE,kBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,OAAA,EAAQ,MACX,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,QAAQ,OAAQ,CAAA,MAAA;AAAA,YAChB,YAAY,OAAQ,CAAA;AAAA;AAAA,SAExB,EAAA,CAAA;AAAA,QAEF,SAAS,OAAQ,CAAA,OAAA;AAAA,QACjB,qBACG,IAAA,CAAA,IAAA,EAAA,EAAK,EAAI,EAAA,OAAA,CAAQ,aAAa,EAAI,EAAA,QAAA,EAAA;AAAA,UAAA,oBAAA;AAAA,UACd,GAAA;AAAA,0BAClB,GAAA,CAAA,gBAAA,EAAA,EAAiB,SAAW,EAAA,OAAA,CAAQ,gBAAkB,EAAA;AAAA,SACzD,EAAA;AAAA;AAEJ;AAAA,GACF;AAEJ,CAAA;AAGa,MAAA,qBAAA,GAAwB,CAAC,KAGhC,KAAA;AACJ,EAAM,MAAA,EAAE,SAAY,GAAA,KAAA;AACpB,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAM,MAAA,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAC7C,EAAM,MAAA,CAAC,KAAO,EAAA,IAAI,CAChB,GAAA,CAAA,MAAA,EAAQ,QAAS,CAAA,WAAA,GAAc,yBAAyB,CAAA,IAAK,GAC7D,EAAA,KAAA,CAAM,GAAG,CAAA;AACX,EAAA,MAAM,gBAAgB,gBAAiB,CAAA;AAAA,IACrC,QAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAE,CAAA,MAAA;AACH,EAAM,MAAA,MAAA,GAAS,MAAM,MAAU,IAAA,aAAA;AAC/B,EAAA,MAAM,CAAC,EAAE,IAAA,EAAM,SAAS,KAAM,EAAC,IAAI,eAAgB,CAAA;AAAA,IACjD,QAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAkB,EAAA;AAAA,GACnB,CAAA;AACD,EAAA,MAAM,OAAU,GAAA,IAAA,GAAO,CAAC,CAAA,IAAM,EAAC;AAC/B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA;AACrB,GACC,EAAA,CAAC,KAAO,EAAA,QAAQ,CAAC,CAAA;AAEpB,EAAA,2BACG,QAAS,EAAA,EAAA,KAAA,EAAO,CAAQ,KAAA,EAAA,MAAM,UAAU,OACvC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ;AAGa,MAAA,4BAAA,GAA+B,CAAC,KAGvC,KAAA;AACJ,EAAM,MAAA,EAAE,SAAY,GAAA,KAAA;AACpB,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAM,MAAA,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAC7C,EAAM,MAAA,CAAC,KAAO,EAAA,IAAI,CAChB,GAAA,CAAA,MAAA,EAAQ,QAAS,CAAA,WAAA,GAAc,yBAAyB,CAAA,IAAK,GAC7D,EAAA,KAAA,CAAM,GAAG,CAAA;AACX,EAAA,MAAM,gBAAgB,gBAAiB,CAAA;AAAA,IACrC,QAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAE,CAAA,MAAA;AACH,EAAM,MAAA,MAAA,GAAS,MAAM,MAAU,IAAA,aAAA;AAE/B,EACE,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,KAAA,EAAO,CAAU,OAAA,EAAA,MAAM,CAAW,OAAA,CAAA,EAAA,OAAA,EAC1C,QAAC,kBAAA,GAAA,CAAA,iBAAA,EAAA,EAAkB,MAAgB,EAAA,MAAA,EAAgB,CACrD,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"Cards.esm.js","sources":["../../../src/components/Cards/Cards.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 */\n\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExternalLinkIcon from '@material-ui/icons/Launch';\nimport { useEffect } from 'react';\nimport { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunsTable } from '../WorkflowRunsTable';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n InfoCard,\n InfoCardVariants,\n Link,\n StructuredMetadataTable,\n} from '@backstage/core-components';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\nimport { useDefaultBranch } from '../useDefaultBranch';\nimport Box from '@material-ui/core/Box';\n\nconst useStyles = makeStyles({\n externalLinkIcon: {\n fontSize: 'inherit',\n verticalAlign: 'bottom',\n },\n});\n\nconst WidgetContent = (props: {\n error?: Error;\n loading?: boolean;\n lastRun: WorkflowRun;\n branch?: string;\n}) => {\n const { error, loading, lastRun, branch } = props;\n const classes = useStyles();\n\n if (error) return <Typography>Couldn't fetch latest {branch} run</Typography>;\n if (loading) return <LinearProgress />;\n\n return (\n <StructuredMetadataTable\n metadata={{\n status: (\n <Box display=\"flex\">\n <WorkflowRunStatus\n status={lastRun.status}\n conclusion={lastRun.conclusion}\n />\n </Box>\n ),\n age: (\n <Box display=\"flex\">\n <Tooltip title={lastRun.statusDate ?? ''}>\n <Box>{lastRun.statusAge}</Box>\n </Tooltip>\n </Box>\n ),\n message: lastRun.message,\n url: (\n <Link to={lastRun.githubUrl ?? ''}>\n See more on GitHub{' '}\n <ExternalLinkIcon className={classes.externalLinkIcon} />\n </Link>\n ),\n }}\n />\n );\n};\n\n/** @public */\nexport const LatestWorkflowRunCard = (props: {\n branch?: string;\n variant?: InfoCardVariants;\n}) => {\n const { variant } = props;\n const { entity } = useEntity();\n const errorApi = useApi(errorApiRef);\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (\n entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/'\n ).split('/');\n const defaultBranch = useDefaultBranch({\n hostname,\n owner,\n repo,\n }).branch;\n const branch = props.branch ?? defaultBranch;\n const [{ runs, loading, error }] = useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n fetchAllBranches: false,\n });\n const lastRun = runs?.[0] ?? ({} as WorkflowRun);\n useEffect(() => {\n if (error) {\n errorApi.post(error);\n }\n }, [error, errorApi]);\n\n return (\n <InfoCard title={`Last ${branch} build`} variant={variant}>\n <WidgetContent\n error={error}\n loading={loading}\n branch={branch}\n lastRun={lastRun}\n />\n </InfoCard>\n );\n};\n\n/** @public */\nexport const LatestWorkflowsForBranchCard = (props: {\n branch?: string;\n variant?: InfoCardVariants;\n}) => {\n const { variant } = props;\n const { entity } = useEntity();\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (\n entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/'\n ).split('/');\n const defaultBranch = useDefaultBranch({\n hostname,\n owner,\n repo,\n }).branch;\n const branch = props.branch ?? defaultBranch;\n\n return (\n <InfoCard title={`Recent ${branch} builds`} variant={variant}>\n <WorkflowRunsTable branch={branch} entity={entity} />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { Link as Link$1 } from 'react-router-dom';
5
5
  import { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity.esm.js';
6
6
  import { useWorkflowRuns } from '../useWorkflowRuns.esm.js';
7
7
  import { WorkflowRunStatus } from '../WorkflowRunStatus/WorkflowRunStatus.esm.js';
8
+ import Tooltip from '@material-ui/core/Tooltip';
8
9
  import Typography from '@material-ui/core/Typography';
9
10
  import { useApi, errorApiRef, useRouteRef } from '@backstage/core-plugin-api';
10
11
  import { ErrorPanel, InfoCard, Link, Table } from '@backstage/core-components';
@@ -67,6 +68,10 @@ const RecentWorkflowRunsCard = (props) => {
67
68
  title: "Status",
68
69
  field: "status",
69
70
  render: (p) => /* @__PURE__ */ jsx(Box, { display: "flex", children: /* @__PURE__ */ jsx(WorkflowRunStatus, { ...p }) })
71
+ },
72
+ {
73
+ title: "Age",
74
+ render: (row) => /* @__PURE__ */ jsx(Box, { display: "flex", children: /* @__PURE__ */ jsx(Tooltip, { title: row.statusDate ?? "", children: /* @__PURE__ */ jsx(Box, { children: row.statusAge }) }) })
70
75
  }
71
76
  ],
72
77
  data: runs
@@ -1 +1 @@
1
- {"version":3,"file":"RecentWorkflowRunsCard.esm.js","sources":["../../../src/components/Cards/RecentWorkflowRunsCard.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 { useEntity } from '@backstage/plugin-catalog-react';\nimport { useEffect } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport Typography from '@material-ui/core/Typography';\n\nimport { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n ErrorPanel,\n InfoCard,\n InfoCardVariants,\n Link,\n Table,\n} from '@backstage/core-components';\nimport { buildRouteRef } from '../../routes';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\nimport Box from '@material-ui/core/Box';\n\nconst firstLine = (message: string): string => message.split('\\n')[0];\n\n/** @public */\nexport const RecentWorkflowRunsCard = (props: {\n branch?: string;\n dense?: boolean;\n limit?: number;\n variant?: InfoCardVariants;\n}) => {\n const { branch, dense = false, limit = 5, variant } = props;\n\n const { entity } = useEntity();\n const errorApi = useApi(errorApiRef);\n\n const hostname = getHostnameFromEntity(entity);\n\n const [owner, repo] = (\n entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/'\n ).split('/');\n\n const [{ runs = [], loading, error }] = useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n initialPageSize: limit,\n });\n\n useEffect(() => {\n if (error) {\n errorApi.post(error);\n }\n }, [error, errorApi]);\n\n const githubHost = hostname || 'github.com';\n const routeLink = useRouteRef(buildRouteRef);\n\n if (error) {\n return <ErrorPanel title={error.message} error={error} />;\n }\n\n return (\n <InfoCard\n title=\"Recent Workflow Runs\"\n subheader={branch ? `Branch: ${branch}` : 'All Branches'}\n noPadding\n variant={variant}\n >\n {!runs.length ? (\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n This component has GitHub Actions enabled, but no workflows were\n found.\n </Typography>\n <Typography variant=\"body2\">\n <Link to={`https://${githubHost}/${owner}/${repo}/actions/new`}>\n Create a new workflow\n </Link>\n </Typography>\n </div>\n ) : (\n <Table<WorkflowRun>\n isLoading={loading}\n options={{\n search: false,\n paging: false,\n padding: dense ? 'dense' : 'default',\n toolbar: false,\n }}\n columns={[\n {\n title: 'Commit Message',\n field: 'message',\n render: data => (\n <Link component={RouterLink} to={routeLink({ id: data.id! })}>\n {firstLine(data.message ?? '')}\n </Link>\n ),\n },\n { title: 'Branch', field: 'source.branchName' },\n {\n title: 'Status',\n field: 'status',\n render: p => (\n <Box display=\"flex\">\n <WorkflowRunStatus {...p} />\n </Box>\n ),\n },\n ]}\n data={runs}\n />\n )}\n </InfoCard>\n );\n};\n"],"names":["RouterLink"],"mappings":"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"}
1
+ {"version":3,"file":"RecentWorkflowRunsCard.esm.js","sources":["../../../src/components/Cards/RecentWorkflowRunsCard.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 { useEntity } from '@backstage/plugin-catalog-react';\nimport { useEffect } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\n\nimport { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n ErrorPanel,\n InfoCard,\n InfoCardVariants,\n Link,\n Table,\n} from '@backstage/core-components';\nimport { buildRouteRef } from '../../routes';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\nimport Box from '@material-ui/core/Box';\n\nconst firstLine = (message: string): string => message.split('\\n')[0];\n\n/** @public */\nexport const RecentWorkflowRunsCard = (props: {\n branch?: string;\n dense?: boolean;\n limit?: number;\n variant?: InfoCardVariants;\n}) => {\n const { branch, dense = false, limit = 5, variant } = props;\n\n const { entity } = useEntity();\n const errorApi = useApi(errorApiRef);\n\n const hostname = getHostnameFromEntity(entity);\n\n const [owner, repo] = (\n entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/'\n ).split('/');\n\n const [{ runs = [], loading, error }] = useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n initialPageSize: limit,\n });\n\n useEffect(() => {\n if (error) {\n errorApi.post(error);\n }\n }, [error, errorApi]);\n\n const githubHost = hostname || 'github.com';\n const routeLink = useRouteRef(buildRouteRef);\n\n if (error) {\n return <ErrorPanel title={error.message} error={error} />;\n }\n\n return (\n <InfoCard\n title=\"Recent Workflow Runs\"\n subheader={branch ? `Branch: ${branch}` : 'All Branches'}\n noPadding\n variant={variant}\n >\n {!runs.length ? (\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n This component has GitHub Actions enabled, but no workflows were\n found.\n </Typography>\n <Typography variant=\"body2\">\n <Link to={`https://${githubHost}/${owner}/${repo}/actions/new`}>\n Create a new workflow\n </Link>\n </Typography>\n </div>\n ) : (\n <Table<WorkflowRun>\n isLoading={loading}\n options={{\n search: false,\n paging: false,\n padding: dense ? 'dense' : 'default',\n toolbar: false,\n }}\n columns={[\n {\n title: 'Commit Message',\n field: 'message',\n render: data => (\n <Link component={RouterLink} to={routeLink({ id: data.id! })}>\n {firstLine(data.message ?? '')}\n </Link>\n ),\n },\n { title: 'Branch', field: 'source.branchName' },\n {\n title: 'Status',\n field: 'status',\n render: p => (\n <Box display=\"flex\">\n <WorkflowRunStatus {...p} />\n </Box>\n ),\n },\n {\n title: 'Age',\n render: row => (\n <Box display=\"flex\">\n <Tooltip title={row.statusDate ?? ''}>\n <Box>{row.statusAge}</Box>\n </Tooltip>\n </Box>\n ),\n },\n ]}\n data={runs}\n />\n )}\n </InfoCard>\n );\n};\n"],"names":["RouterLink"],"mappings":"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"}
@@ -12,6 +12,7 @@ import TableBody from '@material-ui/core/TableBody';
12
12
  import TableCell from '@material-ui/core/TableCell';
13
13
  import TableContainer from '@material-ui/core/TableContainer';
14
14
  import TableRow from '@material-ui/core/TableRow';
15
+ import Tooltip from '@material-ui/core/Tooltip';
15
16
  import Typography from '@material-ui/core/Typography';
16
17
  import { makeStyles } from '@material-ui/core/styles';
17
18
  import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
@@ -162,6 +163,10 @@ const WorkflowRunDetails = ({ entity }) => {
162
163
  }
163
164
  ) })
164
165
  ] }),
166
+ /* @__PURE__ */ jsxs(TableRow, { children: [
167
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(Typography, { noWrap: true, children: "Age" }) }),
168
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(Tooltip, { title: details.value?.updated_at ?? "", children: /* @__PURE__ */ jsx(Typography, { noWrap: true, children: `${(details.value?.updated_at ? DateTime.fromISO(details.value?.updated_at) : DateTime.now()).toRelative()}` }) }) })
169
+ ] }),
165
170
  /* @__PURE__ */ jsxs(TableRow, { children: [
166
171
  /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(Typography, { noWrap: true, children: "Author" }) }),
167
172
  /* @__PURE__ */ jsx(TableCell, { children: `${details.value?.head_commit?.author?.name} (${details.value?.head_commit?.author?.email})` })
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowRunDetails.esm.js","sources":["../../../src/components/WorkflowRunDetails/WorkflowRunDetails.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 */\n\nimport { Entity } from '@backstage/catalog-model';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Box from '@material-ui/core/Box';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableRow from '@material-ui/core/TableRow';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExternalLinkIcon from '@material-ui/icons/Launch';\nimport { DateTime } from 'luxon';\nimport { Job, Jobs, Step } from '../../api';\nimport { getProjectNameFromEntity } from '../getProjectNameFromEntity';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport { useWorkflowRunJobs } from './useWorkflowRunJobs';\nimport { useWorkflowRunsDetails } from './useWorkflowRunsDetails';\nimport { WorkflowRunLogs } from '../WorkflowRunLogs';\nimport { Breadcrumbs, Link } from '@backstage/core-components';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\n\nconst useStyles = makeStyles<Theme>(theme => ({\n root: {\n maxWidth: 720,\n margin: theme.spacing(2),\n },\n title: {\n padding: theme.spacing(1, 0, 2, 0),\n },\n table: {\n padding: theme.spacing(1),\n },\n accordionDetails: {\n padding: 0,\n },\n button: {\n order: -1,\n marginRight: 0,\n marginLeft: '-20px',\n },\n externalLinkIcon: {\n fontSize: 'inherit',\n verticalAlign: 'bottom',\n },\n}));\n\nconst getElapsedTime = (start: string | undefined, end: string | undefined) => {\n if (!start || !end) {\n return '';\n }\n const startDate = DateTime.fromISO(start);\n const endDate = end ? DateTime.fromISO(end) : DateTime.now();\n const diff = endDate.diff(startDate);\n const timeElapsed = diff.toFormat(`m 'minutes' s 'seconds'`);\n return timeElapsed;\n};\n\nconst StepView = ({ step }: { step: Step }) => {\n return (\n <TableRow>\n <TableCell>\n <ListItemText\n primary={step.name}\n secondary={getElapsedTime(step.started_at, step.completed_at)}\n />\n </TableCell>\n <TableCell>\n <WorkflowRunStatus\n status={step.status.toLocaleUpperCase('en-US')}\n conclusion={step.conclusion?.toLocaleUpperCase('en-US')}\n />\n </TableCell>\n </TableRow>\n );\n};\n\nconst JobListItem = ({\n job,\n className,\n entity,\n}: {\n job: Job;\n className: string;\n entity: Entity;\n}) => {\n const classes = useStyles();\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} className={className}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n IconButtonProps={{\n className: classes.button,\n }}\n >\n <Typography variant=\"button\">\n {job.name} ({getElapsedTime(job.started_at, job.completed_at)})\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.accordionDetails}>\n <TableContainer>\n <Table>\n {job.steps?.map(step => (\n <StepView key={step.number} step={step} />\n ))}\n </Table>\n </TableContainer>\n </AccordionDetails>\n {job.status === 'queued' || job.status === 'in_progress' ? (\n <WorkflowRunLogs runId={job.id} inProgress entity={entity} />\n ) : (\n <WorkflowRunLogs runId={job.id} inProgress={false} entity={entity} />\n )}\n </Accordion>\n );\n};\n\nconst JobsList = ({ jobs, entity }: { jobs?: Jobs; entity: Entity }) => {\n const classes = useStyles();\n return (\n <Box>\n {jobs &&\n jobs.total_count > 0 &&\n jobs.jobs.map(job => (\n <JobListItem\n key={job.id}\n job={job}\n className={\n job.status !== 'success' ? classes.failed : classes.success\n }\n entity={entity}\n />\n ))}\n </Box>\n );\n};\n\nexport const WorkflowRunDetails = ({ entity }: { entity: Entity }) => {\n const projectName = getProjectNameFromEntity(entity);\n\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (projectName && projectName.split('/')) || [];\n const details = useWorkflowRunsDetails({ hostname, owner, repo });\n const jobs = useWorkflowRunJobs({ hostname, owner, repo });\n\n const classes = useStyles();\n\n if (details.error && details.error.message) {\n return (\n <Typography variant=\"h6\" color=\"error\">\n Failed to load build, {details.error.message}\n </Typography>\n );\n } else if (details.loading) {\n return <LinearProgress />;\n }\n return (\n <div className={classes.root}>\n <Box mb={3}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <Link to=\"..\">Workflow runs</Link>\n <Typography>Workflow run details</Typography>\n </Breadcrumbs>\n </Box>\n <TableContainer component={Paper} className={classes.table}>\n <Table>\n <TableBody>\n <TableRow>\n <TableCell>\n <Typography noWrap>Branch</Typography>\n </TableCell>\n <TableCell>{details.value?.head_branch}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Message</Typography>\n </TableCell>\n <TableCell>{details.value?.head_commit?.message}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Commit ID</Typography>\n </TableCell>\n <TableCell>{details.value?.head_commit?.id}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Workflow</Typography>\n </TableCell>\n <TableCell>{details.value?.name}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Status</Typography>\n </TableCell>\n <TableCell>\n <WorkflowRunStatus\n status={details.value?.status || undefined}\n conclusion={details.value?.conclusion || undefined}\n />\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Author</Typography>\n </TableCell>\n <TableCell>{`${details.value?.head_commit?.author?.name} (${details.value?.head_commit?.author?.email})`}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Links</Typography>\n </TableCell>\n <TableCell>\n {details.value?.html_url && (\n <Link to={details.value.html_url}>\n Workflow runs on GitHub{' '}\n <ExternalLinkIcon className={classes.externalLinkIcon} />\n </Link>\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell colSpan={2}>\n <Typography noWrap>Jobs</Typography>\n {jobs.loading ? (\n <CircularProgress />\n ) : (\n <JobsList jobs={jobs.value} entity={entity} />\n )}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowRunDetails.esm.js","sources":["../../../src/components/WorkflowRunDetails/WorkflowRunDetails.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 */\n\nimport { Entity } from '@backstage/catalog-model';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Box from '@material-ui/core/Box';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableRow from '@material-ui/core/TableRow';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExternalLinkIcon from '@material-ui/icons/Launch';\nimport { DateTime } from 'luxon';\nimport { Job, Jobs, Step } from '../../api';\nimport { getProjectNameFromEntity } from '../getProjectNameFromEntity';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport { useWorkflowRunJobs } from './useWorkflowRunJobs';\nimport { useWorkflowRunsDetails } from './useWorkflowRunsDetails';\nimport { WorkflowRunLogs } from '../WorkflowRunLogs';\nimport { Breadcrumbs, Link } from '@backstage/core-components';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\n\nconst useStyles = makeStyles<Theme>(theme => ({\n root: {\n maxWidth: 720,\n margin: theme.spacing(2),\n },\n title: {\n padding: theme.spacing(1, 0, 2, 0),\n },\n table: {\n padding: theme.spacing(1),\n },\n accordionDetails: {\n padding: 0,\n },\n button: {\n order: -1,\n marginRight: 0,\n marginLeft: '-20px',\n },\n externalLinkIcon: {\n fontSize: 'inherit',\n verticalAlign: 'bottom',\n },\n}));\n\nconst getElapsedTime = (start: string | undefined, end: string | undefined) => {\n if (!start || !end) {\n return '';\n }\n const startDate = DateTime.fromISO(start);\n const endDate = end ? DateTime.fromISO(end) : DateTime.now();\n const diff = endDate.diff(startDate);\n const timeElapsed = diff.toFormat(`m 'minutes' s 'seconds'`);\n return timeElapsed;\n};\n\nconst StepView = ({ step }: { step: Step }) => {\n return (\n <TableRow>\n <TableCell>\n <ListItemText\n primary={step.name}\n secondary={getElapsedTime(step.started_at, step.completed_at)}\n />\n </TableCell>\n <TableCell>\n <WorkflowRunStatus\n status={step.status.toLocaleUpperCase('en-US')}\n conclusion={step.conclusion?.toLocaleUpperCase('en-US')}\n />\n </TableCell>\n </TableRow>\n );\n};\n\nconst JobListItem = ({\n job,\n className,\n entity,\n}: {\n job: Job;\n className: string;\n entity: Entity;\n}) => {\n const classes = useStyles();\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} className={className}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n IconButtonProps={{\n className: classes.button,\n }}\n >\n <Typography variant=\"button\">\n {job.name} ({getElapsedTime(job.started_at, job.completed_at)})\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.accordionDetails}>\n <TableContainer>\n <Table>\n {job.steps?.map(step => (\n <StepView key={step.number} step={step} />\n ))}\n </Table>\n </TableContainer>\n </AccordionDetails>\n {job.status === 'queued' || job.status === 'in_progress' ? (\n <WorkflowRunLogs runId={job.id} inProgress entity={entity} />\n ) : (\n <WorkflowRunLogs runId={job.id} inProgress={false} entity={entity} />\n )}\n </Accordion>\n );\n};\n\nconst JobsList = ({ jobs, entity }: { jobs?: Jobs; entity: Entity }) => {\n const classes = useStyles();\n return (\n <Box>\n {jobs &&\n jobs.total_count > 0 &&\n jobs.jobs.map(job => (\n <JobListItem\n key={job.id}\n job={job}\n className={\n job.status !== 'success' ? classes.failed : classes.success\n }\n entity={entity}\n />\n ))}\n </Box>\n );\n};\n\nexport const WorkflowRunDetails = ({ entity }: { entity: Entity }) => {\n const projectName = getProjectNameFromEntity(entity);\n\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (projectName && projectName.split('/')) || [];\n const details = useWorkflowRunsDetails({ hostname, owner, repo });\n const jobs = useWorkflowRunJobs({ hostname, owner, repo });\n\n const classes = useStyles();\n\n if (details.error && details.error.message) {\n return (\n <Typography variant=\"h6\" color=\"error\">\n Failed to load build, {details.error.message}\n </Typography>\n );\n } else if (details.loading) {\n return <LinearProgress />;\n }\n return (\n <div className={classes.root}>\n <Box mb={3}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <Link to=\"..\">Workflow runs</Link>\n <Typography>Workflow run details</Typography>\n </Breadcrumbs>\n </Box>\n <TableContainer component={Paper} className={classes.table}>\n <Table>\n <TableBody>\n <TableRow>\n <TableCell>\n <Typography noWrap>Branch</Typography>\n </TableCell>\n <TableCell>{details.value?.head_branch}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Message</Typography>\n </TableCell>\n <TableCell>{details.value?.head_commit?.message}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Commit ID</Typography>\n </TableCell>\n <TableCell>{details.value?.head_commit?.id}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Workflow</Typography>\n </TableCell>\n <TableCell>{details.value?.name}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Status</Typography>\n </TableCell>\n <TableCell>\n <WorkflowRunStatus\n status={details.value?.status || undefined}\n conclusion={details.value?.conclusion || undefined}\n />\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Age</Typography>\n </TableCell>\n <TableCell>\n <Tooltip title={details.value?.updated_at ?? ''}>\n <Typography noWrap>{`${(details.value?.updated_at\n ? DateTime.fromISO(details.value?.updated_at)\n : DateTime.now()\n ).toRelative()}`}</Typography>\n </Tooltip>\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Author</Typography>\n </TableCell>\n <TableCell>{`${details.value?.head_commit?.author?.name} (${details.value?.head_commit?.author?.email})`}</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Typography noWrap>Links</Typography>\n </TableCell>\n <TableCell>\n {details.value?.html_url && (\n <Link to={details.value.html_url}>\n Workflow runs on GitHub{' '}\n <ExternalLinkIcon className={classes.externalLinkIcon} />\n </Link>\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell colSpan={2}>\n <Typography noWrap>Jobs</Typography>\n {jobs.loading ? (\n <CircularProgress />\n ) : (\n <JobsList jobs={jobs.value} entity={entity} />\n )}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -156,6 +156,15 @@ const WorkflowRunsCardView = ({
156
156
  )
157
157
  }
158
158
  ),
159
+ /* @__PURE__ */ jsx(
160
+ Box,
161
+ {
162
+ display: "flex",
163
+ justifyContent: "center",
164
+ alignItems: "center",
165
+ children: /* @__PURE__ */ jsx(Tooltip, { title: run.statusDate ?? "", children: /* @__PURE__ */ jsx(Box, { children: run.statusAge }) })
166
+ }
167
+ ),
159
168
  /* @__PURE__ */ jsxs(
160
169
  Box,
161
170
  {
@@ -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 { 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 <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <WorkflowRunStatus\n status={run.status}\n conclusion={run.conclusion}\n />\n </Box>\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 fetchAllBranches: true,\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 <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <WorkflowRunStatus\n status={run.status}\n conclusion={run.conclusion}\n />\n </Box>\n <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Tooltip title={run.statusDate ?? ''}>\n <Box>{run.statusAge}</Box>\n </Tooltip>\n </Box>\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 fetchAllBranches: true,\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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"}
@@ -66,6 +66,10 @@ const generatedColumns = [
66
66
  },
67
67
  render: (row) => /* @__PURE__ */ jsx(Box, { display: "flex", justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx(WorkflowRunStatus, { status: row.status, conclusion: row.conclusion }) })
68
68
  },
69
+ {
70
+ title: "Age",
71
+ render: (row) => /* @__PURE__ */ jsx(Box, { display: "flex", justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx(Tooltip, { title: row.statusDate ?? "", children: /* @__PURE__ */ jsx(Box, { children: row.statusAge }) }) })
72
+ },
69
73
  {
70
74
  title: "Actions",
71
75
  render: (row) => /* @__PURE__ */ jsx(Tooltip, { title: "Rerun workflow", children: /* @__PURE__ */ jsx(IconButton, { onClick: row.onReRunClick, children: /* @__PURE__ */ jsx(RetryIcon, {}) }) }),
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowRunsTable.esm.js","sources":["../../../src/components/WorkflowRunsTable/WorkflowRunsTable.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 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 Button from '@material-ui/core/Button';\nimport RetryIcon from '@material-ui/icons/Replay';\nimport GitHubIcon from '@material-ui/icons/GitHub';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport SyncIcon from '@material-ui/icons/Sync';\nimport { buildRouteRef } from '../../routes';\nimport { getProjectNameFromEntity } from '../getProjectNameFromEntity';\nimport { Entity } from '@backstage/catalog-model';\n\nimport {\n EmptyState,\n Table,\n TableColumn,\n Link,\n} from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\nimport { getStatusDescription } from '../WorkflowRunStatus/WorkflowRunStatus';\n\n// Utility function to truncate string at the first newline character\nconst truncateAtNewline = (str: string) => {\n const newlineIndex = str.indexOf('\\n');\n return newlineIndex !== -1 ? str.substring(0, newlineIndex) : str;\n};\n\nconst generatedColumns: TableColumn<Partial<WorkflowRun>>[] = [\n {\n title: 'ID',\n field: 'id',\n type: 'numeric',\n width: '150px',\n },\n {\n title: 'Message',\n field: 'message',\n highlight: true,\n render: row => {\n const LinkWrapper = () => {\n const routeLink = useRouteRef(buildRouteRef);\n const truncatedMessage = truncateAtNewline(row.message!);\n return (\n <Link\n component={RouterLink}\n to={routeLink({ id: row.id! })}\n title={row.message} // display full message on hover\n >\n {truncatedMessage}\n </Link>\n );\n };\n\n return <LinkWrapper />;\n },\n },\n {\n title: 'Source',\n render: row => (\n <Typography variant=\"body2\" noWrap>\n <Typography paragraph variant=\"body2\">\n {row.source?.branchName}\n </Typography>\n <Typography paragraph variant=\"body2\">\n {row.source?.commit.hash}\n </Typography>\n </Typography>\n ),\n },\n {\n title: 'Workflow',\n field: 'workflowName',\n },\n {\n title: 'Status',\n customSort: (d1, d2) => {\n return getStatusDescription(d1).localeCompare(getStatusDescription(d2));\n },\n render: row => (\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\">\n <WorkflowRunStatus status={row.status} conclusion={row.conclusion} />\n </Box>\n ),\n },\n {\n title: 'Actions',\n render: (row: Partial<WorkflowRun>) => (\n <Tooltip title=\"Rerun workflow\">\n <IconButton onClick={row.onReRunClick}>\n <RetryIcon />\n </IconButton>\n </Tooltip>\n ),\n width: '10%',\n },\n];\n\ntype Props = {\n loading: boolean;\n retry: () => void;\n runs?: WorkflowRun[];\n projectName: string;\n page: number;\n onChangePage: (page: number) => void;\n total: number;\n pageSize: number;\n onChangePageSize: (pageSize: number) => void;\n};\n\nexport const WorkflowRunsTableView = ({\n projectName,\n loading,\n pageSize,\n page,\n retry,\n runs,\n onChangePage,\n onChangePageSize,\n total,\n}: Props) => {\n return (\n <Table\n isLoading={loading}\n options={{ paging: true, pageSize, padding: 'dense' }}\n totalCount={total}\n page={page}\n actions={[\n {\n icon: () => <SyncIcon />,\n tooltip: 'Reload workflow runs',\n isFreeAction: true,\n onClick: () => retry(),\n },\n ]}\n data={runs ?? []}\n onPageChange={onChangePage}\n onRowsPerPageChange={onChangePageSize}\n style={{ width: '100%' }}\n title={\n <Box display=\"flex\" alignItems=\"center\">\n <GitHubIcon />\n <Box mr={1} />\n <Typography variant=\"h6\">{projectName}</Typography>\n </Box>\n }\n columns={generatedColumns}\n />\n );\n};\n\nexport const WorkflowRunsTable = ({\n entity,\n branch,\n}: {\n entity: Entity;\n branch?: string;\n}) => {\n const projectName = getProjectNameFromEntity(entity);\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (projectName ?? '/').split('/');\n const [{ runs, ...tableProps }, { retry, setPage, setPageSize }] =\n useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n fetchAllBranches: false,\n });\n\n const githubHost = hostname || 'github.com';\n const hasNoRuns = !tableProps.loading && !runs;\n\n return hasNoRuns ? (\n <EmptyState\n missing=\"data\"\n title=\"No Workflow Data\"\n 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.\"\n action={\n <Button\n variant=\"contained\"\n color=\"primary\"\n href={`https://${githubHost}/${projectName}/actions/new`}\n >\n Create new Workflow\n </Button>\n }\n />\n ) : (\n <WorkflowRunsTableView\n {...tableProps}\n runs={runs}\n loading={tableProps.loading}\n retry={retry}\n onChangePageSize={setPageSize}\n onChangePage={setPage}\n />\n );\n};\n"],"names":["RouterLink"],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowRunsTable.esm.js","sources":["../../../src/components/WorkflowRunsTable/WorkflowRunsTable.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 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 Button from '@material-ui/core/Button';\nimport RetryIcon from '@material-ui/icons/Replay';\nimport GitHubIcon from '@material-ui/icons/GitHub';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns';\nimport { WorkflowRunStatus } from '../WorkflowRunStatus';\nimport SyncIcon from '@material-ui/icons/Sync';\nimport { buildRouteRef } from '../../routes';\nimport { getProjectNameFromEntity } from '../getProjectNameFromEntity';\nimport { Entity } from '@backstage/catalog-model';\n\nimport {\n EmptyState,\n Table,\n TableColumn,\n Link,\n} from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { getHostnameFromEntity } from '../getHostnameFromEntity';\nimport { getStatusDescription } from '../WorkflowRunStatus/WorkflowRunStatus';\n\n// Utility function to truncate string at the first newline character\nconst truncateAtNewline = (str: string) => {\n const newlineIndex = str.indexOf('\\n');\n return newlineIndex !== -1 ? str.substring(0, newlineIndex) : str;\n};\n\nconst generatedColumns: TableColumn<Partial<WorkflowRun>>[] = [\n {\n title: 'ID',\n field: 'id',\n type: 'numeric',\n width: '150px',\n },\n {\n title: 'Message',\n field: 'message',\n highlight: true,\n render: row => {\n const LinkWrapper = () => {\n const routeLink = useRouteRef(buildRouteRef);\n const truncatedMessage = truncateAtNewline(row.message!);\n return (\n <Link\n component={RouterLink}\n to={routeLink({ id: row.id! })}\n title={row.message} // display full message on hover\n >\n {truncatedMessage}\n </Link>\n );\n };\n\n return <LinkWrapper />;\n },\n },\n {\n title: 'Source',\n render: row => (\n <Typography variant=\"body2\" noWrap>\n <Typography paragraph variant=\"body2\">\n {row.source?.branchName}\n </Typography>\n <Typography paragraph variant=\"body2\">\n {row.source?.commit.hash}\n </Typography>\n </Typography>\n ),\n },\n {\n title: 'Workflow',\n field: 'workflowName',\n },\n {\n title: 'Status',\n customSort: (d1, d2) => {\n return getStatusDescription(d1).localeCompare(getStatusDescription(d2));\n },\n render: row => (\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\">\n <WorkflowRunStatus status={row.status} conclusion={row.conclusion} />\n </Box>\n ),\n },\n {\n title: 'Age',\n render: row => (\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\">\n <Tooltip title={row.statusDate ?? ''}>\n <Box>{row.statusAge}</Box>\n </Tooltip>\n </Box>\n ),\n },\n {\n title: 'Actions',\n render: (row: Partial<WorkflowRun>) => (\n <Tooltip title=\"Rerun workflow\">\n <IconButton onClick={row.onReRunClick}>\n <RetryIcon />\n </IconButton>\n </Tooltip>\n ),\n width: '10%',\n },\n];\n\ntype Props = {\n loading: boolean;\n retry: () => void;\n runs?: WorkflowRun[];\n projectName: string;\n page: number;\n onChangePage: (page: number) => void;\n total: number;\n pageSize: number;\n onChangePageSize: (pageSize: number) => void;\n};\n\nexport const WorkflowRunsTableView = ({\n projectName,\n loading,\n pageSize,\n page,\n retry,\n runs,\n onChangePage,\n onChangePageSize,\n total,\n}: Props) => {\n return (\n <Table\n isLoading={loading}\n options={{ paging: true, pageSize, padding: 'dense' }}\n totalCount={total}\n page={page}\n actions={[\n {\n icon: () => <SyncIcon />,\n tooltip: 'Reload workflow runs',\n isFreeAction: true,\n onClick: () => retry(),\n },\n ]}\n data={runs ?? []}\n onPageChange={onChangePage}\n onRowsPerPageChange={onChangePageSize}\n style={{ width: '100%' }}\n title={\n <Box display=\"flex\" alignItems=\"center\">\n <GitHubIcon />\n <Box mr={1} />\n <Typography variant=\"h6\">{projectName}</Typography>\n </Box>\n }\n columns={generatedColumns}\n />\n );\n};\n\nexport const WorkflowRunsTable = ({\n entity,\n branch,\n}: {\n entity: Entity;\n branch?: string;\n}) => {\n const projectName = getProjectNameFromEntity(entity);\n const hostname = getHostnameFromEntity(entity);\n const [owner, repo] = (projectName ?? '/').split('/');\n const [{ runs, ...tableProps }, { retry, setPage, setPageSize }] =\n useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n fetchAllBranches: false,\n });\n\n const githubHost = hostname || 'github.com';\n const hasNoRuns = !tableProps.loading && !runs;\n\n return hasNoRuns ? (\n <EmptyState\n missing=\"data\"\n title=\"No Workflow Data\"\n 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.\"\n action={\n <Button\n variant=\"contained\"\n color=\"primary\"\n href={`https://${githubHost}/${projectName}/actions/new`}\n >\n Create new Workflow\n </Button>\n }\n />\n ) : (\n <WorkflowRunsTableView\n {...tableProps}\n runs={runs}\n loading={tableProps.loading}\n retry={retry}\n onChangePageSize={setPageSize}\n onChangePage={setPage}\n />\n );\n};\n"],"names":["RouterLink"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { useState } from 'react';
2
+ import { DateTime } from 'luxon';
2
3
  import useAsyncRetry from 'react-use/esm/useAsyncRetry';
3
4
  import { githubActionsApiRef } from '../api/GithubActionsApi.esm.js';
4
5
  import { useApi, errorApiRef } from '@backstage/core-plugin-api';
@@ -95,6 +96,8 @@ function useWorkflowRuns({
95
96
  }
96
97
  },
97
98
  status: run.status ?? void 0,
99
+ statusDate: run.updated_at,
100
+ statusAge: (run.updated_at ? DateTime.fromISO(run.updated_at) : DateTime.now()).toRelative() ?? void 0,
98
101
  conclusion: run.conclusion ?? void 0,
99
102
  url: run.url,
100
103
  githubUrl: run.html_url
@@ -1 +1 @@
1
- {"version":3,"file":"useWorkflowRuns.esm.js","sources":["../../src/components/useWorkflowRuns.ts"],"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 { useState } from 'react';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { githubActionsApiRef } from '../api/GithubActionsApi';\nimport { useApi, errorApiRef } from '@backstage/core-plugin-api';\nimport { Branch } from '../api';\n\nexport type WorkflowRun = {\n workflowName?: string;\n id: string;\n message?: string;\n url?: string;\n githubUrl?: string;\n source: {\n branchName?: string;\n commit: {\n hash?: string;\n url?: string;\n };\n };\n status?: string;\n conclusion?: string;\n onReRunClick: () => void;\n};\n\nexport function useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n initialPageSize = 6,\n fetchAllBranches = true,\n}: {\n hostname?: string;\n owner: string;\n repo: string;\n branch?: string | undefined;\n initialPageSize?: number;\n fetchAllBranches?: boolean;\n}) {\n const api = useApi(githubActionsApiRef);\n\n const errorApi = useApi(errorApiRef);\n\n const [total, setTotal] = useState(0);\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n const [branches, setBranches] = useState<Branch[]>([]);\n const [defaultBranch, setDefaultBranch] = useState<string>('');\n\n const {\n loading,\n value: runs,\n retry,\n error,\n } = useAsyncRetry<WorkflowRun[]>(async () => {\n const fetchedDefaultBranch = await api.getDefaultBranch({\n hostname,\n owner,\n repo,\n });\n\n setDefaultBranch(fetchedDefaultBranch);\n let selectedBranch = branch;\n if (branch === 'default') {\n selectedBranch = fetchedDefaultBranch;\n }\n\n const fetchBranches = async () => {\n let next = true;\n let iteratePage = 1;\n const branchSet: Branch[] = [];\n\n while (next) {\n const branchesData = await api.listBranches({\n hostname,\n owner,\n repo,\n page: iteratePage,\n });\n if (branchesData.length === 0) {\n next = false;\n }\n iteratePage++;\n branchSet.push(...branchesData);\n }\n\n return branchSet;\n };\n\n // Fetching branches is expensive and not needed in many cases\n if (fetchAllBranches) {\n const branchSet = await fetchBranches();\n setBranches(branchSet);\n }\n\n // GitHub API pagination count starts from 1\n const workflowRunsData = await api.listWorkflowRuns({\n hostname,\n owner,\n repo,\n pageSize,\n page: page + 1,\n branch: selectedBranch,\n });\n setTotal(workflowRunsData.total_count);\n // Transformation here\n return workflowRunsData.workflow_runs.map(run => ({\n workflowName: run.name ?? undefined,\n message: run.head_commit?.message,\n id: `${run.id}`,\n onReRunClick: async () => {\n try {\n await api.reRunWorkflow({\n hostname,\n owner,\n repo,\n runId: run.id,\n });\n } catch (e) {\n errorApi.post(\n new Error(`Failed to rerun the workflow: ${(e as Error).message}`),\n );\n }\n },\n source: {\n branchName: run.head_branch ?? undefined,\n commit: {\n hash: run.head_commit?.id,\n url: run.head_repository?.branches_url?.replace(\n '{/branch}',\n run.head_branch ?? '',\n ),\n },\n },\n status: run.status ?? undefined,\n conclusion: run.conclusion ?? undefined,\n url: run.url,\n githubUrl: run.html_url,\n }));\n }, [page, pageSize, repo, owner]);\n\n return [\n {\n page,\n pageSize,\n loading,\n runs,\n branches,\n defaultBranch,\n projectName: `${owner}/${repo}`,\n total,\n error,\n },\n {\n runs,\n setPage,\n setPageSize,\n retry,\n },\n ] as const;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useWorkflowRuns.esm.js","sources":["../../src/components/useWorkflowRuns.ts"],"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 { useState } from 'react';\nimport { DateTime } from 'luxon';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { githubActionsApiRef } from '../api/GithubActionsApi';\nimport { useApi, errorApiRef } from '@backstage/core-plugin-api';\nimport { Branch } from '../api';\n\nexport type WorkflowRun = {\n workflowName?: string;\n id: string;\n message?: string;\n url?: string;\n githubUrl?: string;\n source: {\n branchName?: string;\n commit: {\n hash?: string;\n url?: string;\n };\n };\n status?: string;\n statusDate?: string;\n statusAge?: string;\n conclusion?: string;\n onReRunClick: () => void;\n};\n\nexport function useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\n initialPageSize = 6,\n fetchAllBranches = true,\n}: {\n hostname?: string;\n owner: string;\n repo: string;\n branch?: string | undefined;\n initialPageSize?: number;\n fetchAllBranches?: boolean;\n}) {\n const api = useApi(githubActionsApiRef);\n\n const errorApi = useApi(errorApiRef);\n\n const [total, setTotal] = useState(0);\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n const [branches, setBranches] = useState<Branch[]>([]);\n const [defaultBranch, setDefaultBranch] = useState<string>('');\n\n const {\n loading,\n value: runs,\n retry,\n error,\n } = useAsyncRetry<WorkflowRun[]>(async () => {\n const fetchedDefaultBranch = await api.getDefaultBranch({\n hostname,\n owner,\n repo,\n });\n\n setDefaultBranch(fetchedDefaultBranch);\n let selectedBranch = branch;\n if (branch === 'default') {\n selectedBranch = fetchedDefaultBranch;\n }\n\n const fetchBranches = async () => {\n let next = true;\n let iteratePage = 1;\n const branchSet: Branch[] = [];\n\n while (next) {\n const branchesData = await api.listBranches({\n hostname,\n owner,\n repo,\n page: iteratePage,\n });\n if (branchesData.length === 0) {\n next = false;\n }\n iteratePage++;\n branchSet.push(...branchesData);\n }\n\n return branchSet;\n };\n\n // Fetching branches is expensive and not needed in many cases\n if (fetchAllBranches) {\n const branchSet = await fetchBranches();\n setBranches(branchSet);\n }\n\n // GitHub API pagination count starts from 1\n const workflowRunsData = await api.listWorkflowRuns({\n hostname,\n owner,\n repo,\n pageSize,\n page: page + 1,\n branch: selectedBranch,\n });\n setTotal(workflowRunsData.total_count);\n // Transformation here\n return workflowRunsData.workflow_runs.map(run => ({\n workflowName: run.name ?? undefined,\n message: run.head_commit?.message,\n id: `${run.id}`,\n onReRunClick: async () => {\n try {\n await api.reRunWorkflow({\n hostname,\n owner,\n repo,\n runId: run.id,\n });\n } catch (e) {\n errorApi.post(\n new Error(`Failed to rerun the workflow: ${(e as Error).message}`),\n );\n }\n },\n source: {\n branchName: run.head_branch ?? undefined,\n commit: {\n hash: run.head_commit?.id,\n url: run.head_repository?.branches_url?.replace(\n '{/branch}',\n run.head_branch ?? '',\n ),\n },\n },\n status: run.status ?? undefined,\n statusDate: run.updated_at,\n statusAge:\n (run.updated_at\n ? DateTime.fromISO(run.updated_at)\n : DateTime.now()\n ).toRelative() ?? undefined,\n conclusion: run.conclusion ?? undefined,\n url: run.url,\n githubUrl: run.html_url,\n }));\n }, [page, pageSize, repo, owner]);\n\n return [\n {\n page,\n pageSize,\n loading,\n runs,\n branches,\n defaultBranch,\n projectName: `${owner}/${repo}`,\n total,\n error,\n },\n {\n runs,\n setPage,\n setPageSize,\n retry,\n },\n ] as const;\n}\n"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -200,7 +200,7 @@ declare const EntityLatestGithubActionsForBranchCard: (props: {
200
200
  declare const EntityRecentGithubActionsRunsCard: (props: {
201
201
  branch?: string | undefined;
202
202
  dense?: boolean | undefined;
203
- limit?: number | undefined;
203
+ limit?: number | undefined; /** @public */
204
204
  variant?: _backstage_core_components.InfoCardVariants | undefined;
205
205
  }) => react_jsx_runtime.JSX.Element;
206
206
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-github-actions",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "description": "A Backstage plugin that integrates towards GitHub Actions",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",