@backstage-community/plugin-github-actions 0.6.17 → 0.6.19
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/README.md +52 -2
- package/alpha/package.json +7 -0
- package/dist/alpha/apis.esm.js +15 -0
- package/dist/alpha/apis.esm.js.map +1 -0
- package/dist/alpha/entityCards.esm.js +51 -0
- package/dist/alpha/entityCards.esm.js.map +1 -0
- package/dist/alpha/entityContent.esm.js +15 -0
- package/dist/alpha/entityContent.esm.js.map +1 -0
- package/dist/alpha.d.ts +10 -0
- package/dist/alpha.esm.js +24 -0
- package/dist/alpha.esm.js.map +1 -0
- package/dist/api/GithubActionsApi.esm.js +1 -1
- package/dist/api/GithubActionsApi.esm.js.map +1 -1
- package/dist/components/Cards/Cards.esm.js +2 -1
- package/dist/components/Cards/Cards.esm.js.map +1 -1
- package/dist/components/Cards/RecentWorkflowRunsCard.esm.js +6 -1
- package/dist/components/Cards/RecentWorkflowRunsCard.esm.js.map +1 -1
- package/dist/components/WorkflowRunStatus/WorkflowRunStatus.esm.js +12 -1
- package/dist/components/WorkflowRunStatus/WorkflowRunStatus.esm.js.map +1 -1
- package/dist/components/WorkflowRunsCard/WorkflowRunsCard.esm.js +83 -68
- package/dist/components/WorkflowRunsCard/WorkflowRunsCard.esm.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/package.json +22 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @backstage-community/plugin-github-actions
|
|
2
2
|
|
|
3
|
+
## 0.6.19
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- af13ef6: Improves responsiveness and theme compatibility of entity cards
|
|
8
|
+
|
|
9
|
+
## 0.6.18
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 9c52968: Adds support for Backstage's new frontend system, available via the `/alpha` sub-path export.
|
|
14
|
+
|
|
3
15
|
## 0.6.17
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
Website: [https://github.com/actions](https://github.com/actions)
|
|
4
4
|
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [GitHub Actions Plugin](#github-actions-plugin)
|
|
8
|
+
- [Table of Contents](#table-of-contents)
|
|
9
|
+
- [Screenshots](#screenshots)
|
|
10
|
+
- [Setup](#setup)
|
|
11
|
+
- [Generic Requirements](#generic-requirements)
|
|
12
|
+
- [Installation](#installation)
|
|
13
|
+
- [Integrating with `EntityPage`](#integrating-with-entitypage)
|
|
14
|
+
- [Integrating with `EntityPage` (New Frontend System)](#integrating-with-entitypage-new-frontend-system)
|
|
15
|
+
- [Self-hosted / Enterprise GitHub](#self-hosted--enterprise-github)
|
|
16
|
+
- [Features](#features)
|
|
17
|
+
- [Limitations](#limitations)
|
|
18
|
+
- [Optional Workflow Runs Card View](#optional-workflow-runs-card-view)
|
|
19
|
+
|
|
5
20
|
## Screenshots
|
|
6
21
|
|
|
7
22
|
TBD
|
|
@@ -33,7 +48,7 @@ TBD
|
|
|
33
48
|
owner: user:guest
|
|
34
49
|
```
|
|
35
50
|
|
|
36
|
-
###
|
|
51
|
+
### Installation
|
|
37
52
|
|
|
38
53
|
1. Install the plugin dependency in your Backstage app package:
|
|
39
54
|
|
|
@@ -42,7 +57,9 @@ TBD
|
|
|
42
57
|
yarn --cwd packages/app add @backstage-community/plugin-github-actions
|
|
43
58
|
```
|
|
44
59
|
|
|
45
|
-
|
|
60
|
+
### Integrating with `EntityPage`
|
|
61
|
+
|
|
62
|
+
1. Add to the app `EntityPage` component:
|
|
46
63
|
|
|
47
64
|
```tsx
|
|
48
65
|
// In packages/app/src/components/catalog/EntityPage.tsx
|
|
@@ -64,6 +81,39 @@ const serviceEntityPage = (
|
|
|
64
81
|
3. Run the app with `yarn start` and the backend with `yarn start-backend`.
|
|
65
82
|
Then navigate to `/github-actions/` under any entity.
|
|
66
83
|
|
|
84
|
+
### Integrating with `EntityPage` (New Frontend System)
|
|
85
|
+
|
|
86
|
+
Follow this section if you are using Backstage's [new frontend system](https://backstage.io/docs/frontend-system/).
|
|
87
|
+
|
|
88
|
+
1. Import `githubActionsPlugin` in your `App.tsx` and add it to your app's `features` array:
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import githubActionsPlugin from '@backstage-community/plugin-github-actions/alpha';
|
|
92
|
+
|
|
93
|
+
// ...
|
|
94
|
+
|
|
95
|
+
export const app = createApp({
|
|
96
|
+
features: [
|
|
97
|
+
// ...
|
|
98
|
+
githubActionsPlugin,
|
|
99
|
+
// ...
|
|
100
|
+
],
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
2. Next, enable your desired extensions in `app-config.yaml`
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
app:
|
|
108
|
+
extensions:
|
|
109
|
+
- entity-content:github-actions/entity
|
|
110
|
+
- entity-card:github-actions/latest-workflow-run
|
|
111
|
+
- entity-card:github-actions/latest-branch-workflow-runs
|
|
112
|
+
- entity-card:github-actions/recent-workflow-runs
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
3. Whichever extensions you've enabled should now appear in your entity page.
|
|
116
|
+
|
|
67
117
|
### Self-hosted / Enterprise GitHub
|
|
68
118
|
|
|
69
119
|
The plugin will try to use `backstage.io/source-location` or `backstage.io/managed-by-location`
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createApiExtension, createApiFactory, configApiRef } from '@backstage/frontend-plugin-api';
|
|
2
|
+
import { scmAuthApiRef } from '@backstage/integration-react';
|
|
3
|
+
import { githubActionsApiRef } from '../api/GithubActionsApi.esm.js';
|
|
4
|
+
import { GithubActionsClient } from '../api/GithubActionsClient.esm.js';
|
|
5
|
+
|
|
6
|
+
const githubActionsApi = createApiExtension({
|
|
7
|
+
factory: createApiFactory({
|
|
8
|
+
api: githubActionsApiRef,
|
|
9
|
+
deps: { configApi: configApiRef, scmAuthApi: scmAuthApiRef },
|
|
10
|
+
factory: ({ configApi, scmAuthApi }) => new GithubActionsClient({ configApi, scmAuthApi })
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export { githubActionsApi };
|
|
15
|
+
//# sourceMappingURL=apis.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apis.esm.js","sources":["../../src/alpha/apis.ts"],"sourcesContent":["import {\n configApiRef,\n createApiExtension,\n createApiFactory,\n} from '@backstage/frontend-plugin-api';\nimport { scmAuthApiRef } from '@backstage/integration-react';\nimport { githubActionsApiRef, GithubActionsClient } from '../api';\n\n/**\n * @alpha\n */\nexport const githubActionsApi = createApiExtension({\n factory: createApiFactory({\n api: githubActionsApiRef,\n deps: { configApi: configApiRef, scmAuthApi: scmAuthApiRef },\n factory: ({ configApi, scmAuthApi }) =>\n new GithubActionsClient({ configApi, scmAuthApi }),\n }),\n});\n"],"names":[],"mappings":";;;;;AAWO,MAAM,mBAAmB,kBAAmB,CAAA;AAAA,EACjD,SAAS,gBAAiB,CAAA;AAAA,IACxB,GAAK,EAAA,mBAAA;AAAA,IACL,IAAM,EAAA,EAAE,SAAW,EAAA,YAAA,EAAc,YAAY,aAAc,EAAA;AAAA,IAC3D,OAAA,EAAS,CAAC,EAAE,SAAW,EAAA,UAAA,EACrB,KAAA,IAAI,mBAAoB,CAAA,EAAE,SAAW,EAAA,UAAA,EAAY,CAAA;AAAA,GACpD,CAAA;AACH,CAAC;;;;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { createSchemaFromZod } from '@backstage/frontend-plugin-api';
|
|
3
|
+
import { createEntityCardExtension } from '@backstage/plugin-catalog-react/alpha';
|
|
4
|
+
|
|
5
|
+
const entityGithubActionsCard = createEntityCardExtension({
|
|
6
|
+
name: "workflow-runs",
|
|
7
|
+
loader: () => import('../components/Router.esm.js').then((m) => /* @__PURE__ */ React.createElement(m.Router, { view: "cards" }))
|
|
8
|
+
});
|
|
9
|
+
const entityLatestGithubActionRunCard = createEntityCardExtension({
|
|
10
|
+
name: "latest-workflow-run",
|
|
11
|
+
configSchema: createSchemaFromZod(
|
|
12
|
+
(z) => z.object({
|
|
13
|
+
props: z.object({
|
|
14
|
+
branch: z.string().default("master")
|
|
15
|
+
}).default({}),
|
|
16
|
+
filter: z.string().optional()
|
|
17
|
+
})
|
|
18
|
+
),
|
|
19
|
+
loader: ({ config }) => import('../components/Cards/index.esm.js').then((m) => /* @__PURE__ */ React.createElement(m.LatestWorkflowRunCard, { ...config.props }))
|
|
20
|
+
});
|
|
21
|
+
const entityLatestGithubActionsForBranchCard = createEntityCardExtension(
|
|
22
|
+
{
|
|
23
|
+
name: "latest-branch-workflow-runs",
|
|
24
|
+
configSchema: createSchemaFromZod(
|
|
25
|
+
(z) => z.object({
|
|
26
|
+
props: z.object({
|
|
27
|
+
branch: z.string().default("master")
|
|
28
|
+
}).default({}),
|
|
29
|
+
filter: z.string().optional()
|
|
30
|
+
})
|
|
31
|
+
),
|
|
32
|
+
loader: ({ config }) => import('../components/Cards/index.esm.js').then((m) => /* @__PURE__ */ React.createElement(m.LatestWorkflowsForBranchCard, { ...config.props }))
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
const entityRecentGithubActionsRunsCard = createEntityCardExtension({
|
|
36
|
+
name: "recent-workflow-runs",
|
|
37
|
+
configSchema: createSchemaFromZod(
|
|
38
|
+
(z) => z.object({
|
|
39
|
+
props: z.object({
|
|
40
|
+
branch: z.string().default("master"),
|
|
41
|
+
dense: z.boolean().default(false),
|
|
42
|
+
limit: z.number().default(5).optional()
|
|
43
|
+
}).default({}),
|
|
44
|
+
filter: z.string().optional()
|
|
45
|
+
})
|
|
46
|
+
),
|
|
47
|
+
loader: ({ config }) => import('../components/Cards/index.esm.js').then((m) => /* @__PURE__ */ React.createElement(m.RecentWorkflowRunsCard, { ...config.props }))
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export { entityGithubActionsCard, entityLatestGithubActionRunCard, entityLatestGithubActionsForBranchCard, entityRecentGithubActionsRunsCard };
|
|
51
|
+
//# sourceMappingURL=entityCards.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityCards.esm.js","sources":["../../src/alpha/entityCards.tsx"],"sourcesContent":["import React from 'react';\nimport { createSchemaFromZod } from '@backstage/frontend-plugin-api';\nimport { createEntityCardExtension } from '@backstage/plugin-catalog-react/alpha';\n\n/**\n * @alpha\n */\nexport const entityGithubActionsCard = createEntityCardExtension({\n name: 'workflow-runs',\n loader: () =>\n import('../components/Router').then(m => <m.Router view=\"cards\" />),\n});\n\n/**\n * @alpha\n */\nexport const entityLatestGithubActionRunCard = createEntityCardExtension({\n name: 'latest-workflow-run',\n configSchema: createSchemaFromZod(z =>\n z.object({\n props: z\n .object({\n branch: z.string().default('master'),\n })\n .default({}),\n filter: z.string().optional(),\n }),\n ),\n loader: ({ config }) =>\n import('../components/Cards').then(m => (\n <m.LatestWorkflowRunCard {...config.props} />\n )),\n});\n\n/**\n * @alpha\n */\nexport const entityLatestGithubActionsForBranchCard = createEntityCardExtension(\n {\n name: 'latest-branch-workflow-runs',\n configSchema: createSchemaFromZod(z =>\n z.object({\n props: z\n .object({\n branch: z.string().default('master'),\n })\n .default({}),\n filter: z.string().optional(),\n }),\n ),\n loader: ({ config }) =>\n import('../components/Cards').then(m => (\n <m.LatestWorkflowsForBranchCard {...config.props} />\n )),\n },\n);\n\n/**\n * @alpha\n */\nexport const entityRecentGithubActionsRunsCard = createEntityCardExtension({\n name: 'recent-workflow-runs',\n configSchema: createSchemaFromZod(z =>\n z.object({\n props: z\n .object({\n branch: z.string().default('master'),\n dense: z.boolean().default(false),\n limit: z.number().default(5).optional(),\n })\n .default({}),\n filter: z.string().optional(),\n }),\n ),\n loader: ({ config }) =>\n import('../components/Cards').then(m => (\n <m.RecentWorkflowRunsCard {...config.props} />\n )),\n});\n"],"names":[],"mappings":";;;;AAOO,MAAM,0BAA0B,yBAA0B,CAAA;AAAA,EAC/D,IAAM,EAAA,eAAA;AAAA,EACN,MAAQ,EAAA,MACN,OAAO,6BAAsB,CAAE,CAAA,IAAA,CAAK,CAAK,CAAA,qBAAA,KAAA,CAAA,aAAA,CAAC,CAAE,CAAA,MAAA,EAAF,EAAS,IAAA,EAAK,SAAQ,CAAE,CAAA;AACtE,CAAC,EAAA;AAKM,MAAM,kCAAkC,yBAA0B,CAAA;AAAA,EACvE,IAAM,EAAA,qBAAA;AAAA,EACN,YAAc,EAAA,mBAAA;AAAA,IAAoB,CAAA,CAAA,KAChC,EAAE,MAAO,CAAA;AAAA,MACP,KAAA,EAAO,EACJ,MAAO,CAAA;AAAA,QACN,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAQ,QAAQ,CAAA;AAAA,OACpC,CAAA,CACA,OAAQ,CAAA,EAAE,CAAA;AAAA,MACb,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,KAC7B,CAAA;AAAA,GACH;AAAA,EACA,QAAQ,CAAC,EAAE,MAAO,EAAA,KAChB,OAAO,kCAAqB,CAAA,CAAE,IAAK,CAAA,CAAA,CAAA,yCAChC,CAAE,CAAA,qBAAA,EAAF,EAAyB,GAAG,MAAA,CAAO,OAAO,CAC5C,CAAA;AACL,CAAC,EAAA;AAKM,MAAM,sCAAyC,GAAA,yBAAA;AAAA,EACpD;AAAA,IACE,IAAM,EAAA,6BAAA;AAAA,IACN,YAAc,EAAA,mBAAA;AAAA,MAAoB,CAAA,CAAA,KAChC,EAAE,MAAO,CAAA;AAAA,QACP,KAAA,EAAO,EACJ,MAAO,CAAA;AAAA,UACN,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAQ,QAAQ,CAAA;AAAA,SACpC,CAAA,CACA,OAAQ,CAAA,EAAE,CAAA;AAAA,QACb,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,OAC7B,CAAA;AAAA,KACH;AAAA,IACA,QAAQ,CAAC,EAAE,MAAO,EAAA,KAChB,OAAO,kCAAqB,CAAA,CAAE,IAAK,CAAA,CAAA,CAAA,yCAChC,CAAE,CAAA,4BAAA,EAAF,EAAgC,GAAG,MAAA,CAAO,OAAO,CACnD,CAAA;AAAA,GACL;AACF,EAAA;AAKO,MAAM,oCAAoC,yBAA0B,CAAA;AAAA,EACzE,IAAM,EAAA,sBAAA;AAAA,EACN,YAAc,EAAA,mBAAA;AAAA,IAAoB,CAAA,CAAA,KAChC,EAAE,MAAO,CAAA;AAAA,MACP,KAAA,EAAO,EACJ,MAAO,CAAA;AAAA,QACN,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAQ,QAAQ,CAAA;AAAA,QACnC,KAAO,EAAA,CAAA,CAAE,OAAQ,EAAA,CAAE,QAAQ,KAAK,CAAA;AAAA,QAChC,OAAO,CAAE,CAAA,MAAA,GAAS,OAAQ,CAAA,CAAC,EAAE,QAAS,EAAA;AAAA,OACvC,CAAA,CACA,OAAQ,CAAA,EAAE,CAAA;AAAA,MACb,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,KAC7B,CAAA;AAAA,GACH;AAAA,EACA,QAAQ,CAAC,EAAE,MAAO,EAAA,KAChB,OAAO,kCAAqB,CAAA,CAAE,IAAK,CAAA,CAAA,CAAA,yCAChC,CAAE,CAAA,sBAAA,EAAF,EAA0B,GAAG,MAAA,CAAO,OAAO,CAC7C,CAAA;AACL,CAAC;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { convertLegacyRouteRef } from '@backstage/core-compat-api';
|
|
3
|
+
import { createEntityContentExtension } from '@backstage/plugin-catalog-react/alpha';
|
|
4
|
+
import { rootRouteRef } from '../routes.esm.js';
|
|
5
|
+
|
|
6
|
+
const entityGithubActionsContent = createEntityContentExtension({
|
|
7
|
+
defaultPath: "github-actions",
|
|
8
|
+
defaultTitle: "GitHub Actions",
|
|
9
|
+
name: "entity",
|
|
10
|
+
routeRef: convertLegacyRouteRef(rootRouteRef),
|
|
11
|
+
loader: () => import('../components/Router.esm.js').then((m) => /* @__PURE__ */ React.createElement(m.Router, { view: "table" }))
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export { entityGithubActionsContent };
|
|
15
|
+
//# sourceMappingURL=entityContent.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityContent.esm.js","sources":["../../src/alpha/entityContent.tsx"],"sourcesContent":["import React from 'react';\nimport { convertLegacyRouteRef } from '@backstage/core-compat-api';\nimport { createEntityContentExtension } from '@backstage/plugin-catalog-react/alpha';\nimport { rootRouteRef } from '../routes';\n\n/**\n * @alpha\n */\nexport const entityGithubActionsContent = createEntityContentExtension({\n defaultPath: 'github-actions',\n defaultTitle: 'GitHub Actions',\n name: 'entity',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: () =>\n import('../components/Router').then(m => <m.Router view=\"table\" />),\n});\n"],"names":[],"mappings":";;;;;AAQO,MAAM,6BAA6B,4BAA6B,CAAA;AAAA,EACrE,WAAa,EAAA,gBAAA;AAAA,EACb,YAAc,EAAA,gBAAA;AAAA,EACd,IAAM,EAAA,QAAA;AAAA,EACN,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,EAC5C,MAAQ,EAAA,MACN,OAAO,6BAAsB,CAAE,CAAA,IAAA,CAAK,CAAK,CAAA,qBAAA,KAAA,CAAA,aAAA,CAAC,CAAE,CAAA,MAAA,EAAF,EAAS,IAAA,EAAK,SAAQ,CAAE,CAAA;AACtE,CAAC;;;;"}
|
package/dist/alpha.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @alpha
|
|
5
|
+
*/
|
|
6
|
+
declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
|
|
7
|
+
entityContent: _backstage_frontend_plugin_api.RouteRef<undefined>;
|
|
8
|
+
}, {}>;
|
|
9
|
+
|
|
10
|
+
export { _default as default };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { convertLegacyRouteRefs } from '@backstage/core-compat-api';
|
|
2
|
+
import { createPlugin } from '@backstage/frontend-plugin-api';
|
|
3
|
+
import { githubActionsApi } from './alpha/apis.esm.js';
|
|
4
|
+
import { entityGithubActionsCard, entityLatestGithubActionRunCard, entityLatestGithubActionsForBranchCard, entityRecentGithubActionsRunsCard } from './alpha/entityCards.esm.js';
|
|
5
|
+
import { entityGithubActionsContent } from './alpha/entityContent.esm.js';
|
|
6
|
+
import { rootRouteRef } from './routes.esm.js';
|
|
7
|
+
|
|
8
|
+
var alpha = createPlugin({
|
|
9
|
+
id: "github-actions",
|
|
10
|
+
routes: convertLegacyRouteRefs({
|
|
11
|
+
entityContent: rootRouteRef
|
|
12
|
+
}),
|
|
13
|
+
extensions: [
|
|
14
|
+
entityGithubActionsContent,
|
|
15
|
+
entityGithubActionsCard,
|
|
16
|
+
entityLatestGithubActionRunCard,
|
|
17
|
+
entityLatestGithubActionsForBranchCard,
|
|
18
|
+
entityRecentGithubActionsRunsCard,
|
|
19
|
+
githubActionsApi
|
|
20
|
+
]
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export { alpha as default };
|
|
24
|
+
//# sourceMappingURL=alpha.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alpha.esm.js","sources":["../src/alpha.ts"],"sourcesContent":["import { convertLegacyRouteRefs } from '@backstage/core-compat-api';\nimport { createPlugin } from '@backstage/frontend-plugin-api';\nimport {\n entityGithubActionsCard,\n entityGithubActionsContent,\n entityLatestGithubActionRunCard,\n entityLatestGithubActionsForBranchCard,\n entityRecentGithubActionsRunsCard,\n githubActionsApi,\n} from './alpha/index';\nimport { rootRouteRef } from './routes';\n\n/**\n * @alpha\n */\nexport default createPlugin({\n id: 'github-actions',\n routes: convertLegacyRouteRefs({\n entityContent: rootRouteRef,\n }),\n extensions: [\n entityGithubActionsContent,\n entityGithubActionsCard,\n entityLatestGithubActionRunCard,\n entityLatestGithubActionsForBranchCard,\n entityRecentGithubActionsRunsCard,\n githubActionsApi,\n ],\n});\n"],"names":[],"mappings":";;;;;;;AAeA,YAAe,YAAa,CAAA;AAAA,EAC1B,EAAI,EAAA,gBAAA;AAAA,EACJ,QAAQ,sBAAuB,CAAA;AAAA,IAC7B,aAAe,EAAA,YAAA;AAAA,GAChB,CAAA;AAAA,EACD,UAAY,EAAA;AAAA,IACV,0BAAA;AAAA,IACA,uBAAA;AAAA,IACA,+BAAA;AAAA,IACA,sCAAA;AAAA,IACA,iCAAA;AAAA,IACA,gBAAA;AAAA,GACF;AACF,CAAC,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GithubActionsApi.esm.js","sources":["../../src/api/GithubActionsApi.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 */\n\nimport {
|
|
1
|
+
{"version":3,"file":"GithubActionsApi.esm.js","sources":["../../src/api/GithubActionsApi.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 */\n\nimport { createApiRef } from '@backstage/frontend-plugin-api';\nimport { RestEndpointMethodTypes } from '@octokit/rest';\n\n/** @public */\nexport const githubActionsApiRef = createApiRef<GithubActionsApi>({\n id: 'plugin.githubactions.service',\n});\n\n/**\n * A client for fetching information about GitHub actions.\n *\n * @public\n */\nexport type GithubActionsApi = {\n listWorkflowRuns: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n pageSize?: number;\n page?: number;\n branch?: string;\n }) => Promise<\n RestEndpointMethodTypes['actions']['listWorkflowRuns']['response']['data']\n >;\n\n getWorkflow: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n id: number;\n }) => Promise<\n RestEndpointMethodTypes['actions']['getWorkflow']['response']['data']\n >;\n\n getWorkflowRun: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n id: number;\n }) => Promise<\n RestEndpointMethodTypes['actions']['getWorkflowRun']['response']['data']\n >;\n\n reRunWorkflow: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n runId: number;\n }) => Promise<any>;\n\n listJobsForWorkflowRun: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n id: number;\n pageSize?: number;\n page?: number;\n }) => Promise<\n RestEndpointMethodTypes['actions']['listJobsForWorkflowRun']['response']['data']\n >;\n\n downloadJobLogsForWorkflowRun: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n runId: number;\n }) => Promise<\n RestEndpointMethodTypes['actions']['downloadJobLogsForWorkflowRun']['response']['data']\n >;\n\n listBranches: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n page: number;\n }) => Promise<\n RestEndpointMethodTypes['repos']['listBranches']['response']['data']\n >;\n\n getDefaultBranch: (options: {\n hostname?: string;\n owner: string;\n repo: string;\n }) => Promise<\n RestEndpointMethodTypes['repos']['get']['response']['data']['default_branch']\n >;\n};\n"],"names":[],"mappings":";;AAoBO,MAAM,sBAAsB,YAA+B,CAAA;AAAA,EAChE,EAAI,EAAA,8BAAA;AACN,CAAC;;;;"}
|
|
@@ -11,6 +11,7 @@ import { WorkflowRunStatus } from '../WorkflowRunStatus/WorkflowRunStatus.esm.js
|
|
|
11
11
|
import { useApi, errorApiRef } from '@backstage/core-plugin-api';
|
|
12
12
|
import { InfoCard, StructuredMetadataTable, Link } from '@backstage/core-components';
|
|
13
13
|
import { getHostnameFromEntity } from '../getHostnameFromEntity.esm.js';
|
|
14
|
+
import Box from '@material-ui/core/Box';
|
|
14
15
|
|
|
15
16
|
const useStyles = makeStyles({
|
|
16
17
|
externalLinkIcon: {
|
|
@@ -27,7 +28,7 @@ const WidgetContent = (props) => {
|
|
|
27
28
|
StructuredMetadataTable,
|
|
28
29
|
{
|
|
29
30
|
metadata: {
|
|
30
|
-
status: /* @__PURE__ */ React.createElement(
|
|
31
|
+
status: /* @__PURE__ */ React.createElement(Box, { display: "flex" }, /* @__PURE__ */ React.createElement(
|
|
31
32
|
WorkflowRunStatus,
|
|
32
33
|
{
|
|
33
34
|
status: lastRun.status,
|
|
@@ -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 React, { 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';\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
|
|
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 React, { 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 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 { branch = 'master', 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 [{ runs, loading, error }] = useWorkflowRuns({\n hostname,\n owner,\n repo,\n branch,\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 { branch = 'master', variant } = props;\n const { entity } = useEntity();\n\n return (\n <InfoCard title={`Last ${branch} build`} variant={variant}>\n <WorkflowRunsTable branch={branch} entity={entity} />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { useApi, errorApiRef, useRouteRef } from '@backstage/core-plugin-api';
|
|
|
9
9
|
import { ErrorPanel, InfoCard, Link, Table } from '@backstage/core-components';
|
|
10
10
|
import { buildRouteRef } from '../../routes.esm.js';
|
|
11
11
|
import { getHostnameFromEntity } from '../getHostnameFromEntity.esm.js';
|
|
12
|
+
import Box from '@material-ui/core/Box';
|
|
12
13
|
|
|
13
14
|
const firstLine = (message) => message.split("\n")[0];
|
|
14
15
|
const RecentWorkflowRunsCard = (props) => {
|
|
@@ -59,7 +60,11 @@ const RecentWorkflowRunsCard = (props) => {
|
|
|
59
60
|
render: (data) => /* @__PURE__ */ React.createElement(Link, { component: Link$1, to: routeLink({ id: data.id }) }, firstLine(data.message ?? ""))
|
|
60
61
|
},
|
|
61
62
|
{ title: "Branch", field: "source.branchName" },
|
|
62
|
-
{
|
|
63
|
+
{
|
|
64
|
+
title: "Status",
|
|
65
|
+
field: "status",
|
|
66
|
+
render: (p) => /* @__PURE__ */ React.createElement(Box, { display: "flex" }, /* @__PURE__ */ React.createElement(WorkflowRunStatus, { ...p }))
|
|
67
|
+
}
|
|
63
68
|
],
|
|
64
69
|
data: runs
|
|
65
70
|
}
|
|
@@ -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 React, { 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';\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 {
|
|
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 React, { 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,8 +1,19 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { StatusPending, StatusOK, StatusError, StatusWarning, StatusAborted, StatusRunning } from '@backstage/core-components';
|
|
3
|
+
import Box from '@material-ui/core/Box';
|
|
4
|
+
import Typography from '@material-ui/core/Typography';
|
|
5
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
3
6
|
|
|
7
|
+
const useStyles = makeStyles(() => ({
|
|
8
|
+
statusIcon: {
|
|
9
|
+
"& svg": {
|
|
10
|
+
position: "static"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}));
|
|
4
14
|
const WorkflowRunStatus = (props) => {
|
|
5
|
-
|
|
15
|
+
const classes = useStyles();
|
|
16
|
+
return /* @__PURE__ */ React.createElement(Box, { display: "flex", justifyContent: "center", alignItems: "center" }, /* @__PURE__ */ React.createElement(Box, { className: classes.statusIcon }, /* @__PURE__ */ React.createElement(WorkflowIcon, { ...props })), /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, getStatusDescription(props)));
|
|
6
17
|
};
|
|
7
18
|
function WorkflowIcon({
|
|
8
19
|
status,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowRunStatus.esm.js","sources":["../../../src/components/WorkflowRunStatus/WorkflowRunStatus.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 React from 'react';\nimport {\n StatusPending,\n StatusRunning,\n StatusOK,\n StatusWarning,\n StatusAborted,\n StatusError,\n} from '@backstage/core-components';\n\nexport const WorkflowRunStatus = (props: {\n status?: string;\n conclusion?: string;\n}) => {\n return (\n
|
|
1
|
+
{"version":3,"file":"WorkflowRunStatus.esm.js","sources":["../../../src/components/WorkflowRunStatus/WorkflowRunStatus.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 React from 'react';\nimport {\n StatusPending,\n StatusRunning,\n StatusOK,\n StatusWarning,\n StatusAborted,\n StatusError,\n} from '@backstage/core-components';\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n statusIcon: {\n '& svg': {\n position: 'static',\n },\n },\n}));\n\nexport const WorkflowRunStatus = (props: {\n status?: string;\n conclusion?: string;\n}) => {\n const classes = useStyles();\n return (\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\">\n <Box className={classes.statusIcon}>\n <WorkflowIcon {...props} />\n </Box>\n <Typography variant=\"body2\">{getStatusDescription(props)}</Typography>\n </Box>\n );\n};\n\nexport function WorkflowIcon({\n status,\n conclusion,\n}: {\n status?: string;\n conclusion?: string;\n}) {\n if (status === undefined) return null;\n switch (status.toLocaleLowerCase('en-US')) {\n case 'queued':\n return <StatusPending />;\n\n case 'in_progress':\n return <StatusRunning />;\n case 'completed':\n switch (conclusion?.toLocaleLowerCase('en-US')) {\n case 'skipped':\n case 'cancelled':\n return <StatusAborted />;\n\n case 'timed_out':\n return <StatusWarning />;\n case 'failure':\n return <StatusError />;\n default:\n return <StatusOK />;\n }\n default:\n return <StatusPending />;\n }\n}\n\nexport function getStatusDescription({\n status,\n conclusion,\n}: {\n status?: string;\n conclusion?: string;\n}) {\n if (status === undefined) return '';\n switch (status.toLocaleLowerCase('en-US')) {\n case 'queued':\n return 'Queued';\n case 'in_progress':\n return 'In progress';\n case 'completed':\n switch (conclusion?.toLocaleLowerCase('en-US')) {\n case 'skipped':\n case 'cancelled':\n return 'Aborted';\n case 'timed_out':\n return 'Timed out';\n case 'failure':\n return 'Error';\n default:\n return 'Completed';\n }\n default:\n return 'Pending';\n }\n}\n"],"names":[],"mappings":";;;;;;AA6BA,MAAM,SAAA,GAAY,WAAW,OAAO;AAAA,EAClC,UAAY,EAAA;AAAA,IACV,OAAS,EAAA;AAAA,MACP,QAAU,EAAA,QAAA;AAAA,KACZ;AAAA,GACF;AACF,CAAE,CAAA,CAAA,CAAA;AAEW,MAAA,iBAAA,GAAoB,CAAC,KAG5B,KAAA;AACJ,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,OAAA,EAAQ,MAAO,EAAA,cAAA,EAAe,QAAS,EAAA,UAAA,EAAW,QACrD,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,UAAA,EAAA,sCACrB,YAAc,EAAA,EAAA,GAAG,KAAO,EAAA,CAC3B,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAS,EAAA,EAAA,oBAAA,CAAqB,KAAK,CAAE,CAC3D,CAAA,CAAA;AAEJ,EAAA;AAEO,SAAS,YAAa,CAAA;AAAA,EAC3B,MAAA;AAAA,EACA,UAAA;AACF,CAGG,EAAA;AACD,EAAI,IAAA,MAAA,KAAW,QAAkB,OAAA,IAAA,CAAA;AACjC,EAAQ,QAAA,MAAA,CAAO,iBAAkB,CAAA,OAAO,CAAG;AAAA,IACzC,KAAK,QAAA;AACH,MAAA,2CAAQ,aAAc,EAAA,IAAA,CAAA,CAAA;AAAA,IAExB,KAAK,aAAA;AACH,MAAA,2CAAQ,aAAc,EAAA,IAAA,CAAA,CAAA;AAAA,IACxB,KAAK,WAAA;AACH,MAAQ,QAAA,UAAA,EAAY,iBAAkB,CAAA,OAAO,CAAG;AAAA,QAC9C,KAAK,SAAA,CAAA;AAAA,QACL,KAAK,WAAA;AACH,UAAA,2CAAQ,aAAc,EAAA,IAAA,CAAA,CAAA;AAAA,QAExB,KAAK,WAAA;AACH,UAAA,2CAAQ,aAAc,EAAA,IAAA,CAAA,CAAA;AAAA,QACxB,KAAK,SAAA;AACH,UAAA,2CAAQ,WAAY,EAAA,IAAA,CAAA,CAAA;AAAA,QACtB;AACE,UAAA,2CAAQ,QAAS,EAAA,IAAA,CAAA,CAAA;AAAA,OACrB;AAAA,IACF;AACE,MAAA,2CAAQ,aAAc,EAAA,IAAA,CAAA,CAAA;AAAA,GAC1B;AACF,CAAA;AAEO,SAAS,oBAAqB,CAAA;AAAA,EACnC,MAAA;AAAA,EACA,UAAA;AACF,CAGG,EAAA;AACD,EAAI,IAAA,MAAA,KAAW,QAAkB,OAAA,EAAA,CAAA;AACjC,EAAQ,QAAA,MAAA,CAAO,iBAAkB,CAAA,OAAO,CAAG;AAAA,IACzC,KAAK,QAAA;AACH,MAAO,OAAA,QAAA,CAAA;AAAA,IACT,KAAK,aAAA;AACH,MAAO,OAAA,aAAA,CAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAQ,QAAA,UAAA,EAAY,iBAAkB,CAAA,OAAO,CAAG;AAAA,QAC9C,KAAK,SAAA,CAAA;AAAA,QACL,KAAK,WAAA;AACH,UAAO,OAAA,SAAA,CAAA;AAAA,QACT,KAAK,WAAA;AACH,UAAO,OAAA,WAAA,CAAA;AAAA,QACT,KAAK,SAAA;AACH,UAAO,OAAA,OAAA,CAAA;AAAA,QACT;AACE,UAAO,OAAA,WAAA,CAAA;AAAA,OACX;AAAA,IACF;AACE,MAAO,OAAA,SAAA,CAAA;AAAA,GACX;AACF;;;;"}
|
|
@@ -3,8 +3,6 @@ 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';
|
|
5
5
|
import Tooltip from '@material-ui/core/Tooltip';
|
|
6
|
-
import Button from '@material-ui/core/Button';
|
|
7
|
-
import Chip from '@material-ui/core/Chip';
|
|
8
6
|
import ButtonGroup from '@material-ui/core/ButtonGroup';
|
|
9
7
|
import Grid from '@material-ui/core/Grid';
|
|
10
8
|
import TablePagination from '@material-ui/core/TablePagination';
|
|
@@ -13,7 +11,7 @@ import MenuItem from '@material-ui/core/MenuItem';
|
|
|
13
11
|
import TextField from '@material-ui/core/TextField';
|
|
14
12
|
import CircularProgress from '@material-ui/core/CircularProgress';
|
|
15
13
|
import { makeStyles, createStyles } from '@material-ui/core/styles';
|
|
16
|
-
import { EmptyState, InfoCard, Link,
|
|
14
|
+
import { EmptyState, InfoCard, Link, LinkButton } from '@backstage/core-components';
|
|
17
15
|
import GitHubIcon from '@material-ui/icons/GitHub';
|
|
18
16
|
import RetryIcon from '@material-ui/icons/Replay';
|
|
19
17
|
import SyncIcon from '@material-ui/icons/Sync';
|
|
@@ -25,6 +23,7 @@ import { buildRouteRef } from '../../routes.esm.js';
|
|
|
25
23
|
import { getProjectNameFromEntity } from '../getProjectNameFromEntity.esm.js';
|
|
26
24
|
import { getHostnameFromEntity } from '../getHostnameFromEntity.esm.js';
|
|
27
25
|
import Alert from '@material-ui/lab/Alert';
|
|
26
|
+
import Button from '@material-ui/core/Button';
|
|
28
27
|
|
|
29
28
|
const useStyles = makeStyles(
|
|
30
29
|
(theme) => createStyles({
|
|
@@ -42,12 +41,6 @@ const useStyles = makeStyles(
|
|
|
42
41
|
fontSize: "inherit",
|
|
43
42
|
verticalAlign: "middle"
|
|
44
43
|
},
|
|
45
|
-
bottomline: {
|
|
46
|
-
display: "flex",
|
|
47
|
-
justifyContent: "space-between",
|
|
48
|
-
alignItems: "center",
|
|
49
|
-
marginTop: "-5px"
|
|
50
|
-
},
|
|
51
44
|
pagination: {
|
|
52
45
|
width: "100%"
|
|
53
46
|
}
|
|
@@ -77,80 +70,102 @@ const WorkflowRunsCardView = ({
|
|
|
77
70
|
const classes = useStyles();
|
|
78
71
|
const routeLink = useRouteRef(buildRouteRef);
|
|
79
72
|
const filteredRuns = runs?.filter((run) => matchesSearchTerm(run, searchTerm));
|
|
80
|
-
return /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 3 }, filteredRuns && runs?.length !== 0 ? filteredRuns.map((run) => /* @__PURE__ */ React.createElement(Grid, { key: run.id, item: true, container: true, xs: 12,
|
|
73
|
+
return /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 3 }, filteredRuns && runs?.length !== 0 ? filteredRuns.map((run) => /* @__PURE__ */ React.createElement(Grid, { key: run.id, item: true, container: true, xs: 12, lg: 6, xl: 4 }, /* @__PURE__ */ React.createElement(Box, { className: classes.card }, /* @__PURE__ */ React.createElement(
|
|
81
74
|
Box,
|
|
82
75
|
{
|
|
83
76
|
display: "flex",
|
|
84
77
|
flexDirection: "column",
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
78
|
+
p: 2,
|
|
79
|
+
height: "100%",
|
|
80
|
+
alignItems: "center"
|
|
88
81
|
},
|
|
89
|
-
/* @__PURE__ */ React.createElement(
|
|
90
|
-
|
|
82
|
+
/* @__PURE__ */ React.createElement(
|
|
83
|
+
Box,
|
|
91
84
|
{
|
|
92
|
-
|
|
93
|
-
|
|
85
|
+
sx: { width: "100%" },
|
|
86
|
+
textAlign: "center",
|
|
87
|
+
display: "flex",
|
|
88
|
+
flexDirection: "column",
|
|
89
|
+
height: "100%"
|
|
94
90
|
},
|
|
95
91
|
/* @__PURE__ */ React.createElement(
|
|
96
|
-
|
|
92
|
+
Tooltip,
|
|
97
93
|
{
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
style: { alignItems: "center" }
|
|
94
|
+
title: run.status ?? "No Status",
|
|
95
|
+
placement: "top-start"
|
|
101
96
|
},
|
|
102
|
-
/* @__PURE__ */ React.createElement(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
97
|
+
/* @__PURE__ */ React.createElement(
|
|
98
|
+
Alert,
|
|
99
|
+
{
|
|
100
|
+
variant: "outlined",
|
|
101
|
+
severity: statusColors[run.conclusion],
|
|
102
|
+
style: { alignItems: "center" }
|
|
103
|
+
},
|
|
104
|
+
/* @__PURE__ */ React.createElement(Typography, { variant: "h6" }, /* @__PURE__ */ React.createElement(Link, { to: routeLink({ id: run.id }) }, /* @__PURE__ */ React.createElement(Typography, { variant: "h6" }, run.workflowName)))
|
|
105
|
+
)
|
|
106
|
+
),
|
|
107
|
+
/* @__PURE__ */ React.createElement(Tooltip, { title: run.message ?? "No run message" }, /* @__PURE__ */ React.createElement(Box, { display: "flex", flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React.createElement(Typography, { variant: "subtitle2", component: "span" }, "Commit"), /* @__PURE__ */ React.createElement(
|
|
108
|
+
Typography,
|
|
109
|
+
{
|
|
110
|
+
variant: "body2",
|
|
111
|
+
component: "span",
|
|
112
|
+
style: { overflowWrap: "break-word" }
|
|
113
|
+
},
|
|
114
|
+
run.source.commit.hash
|
|
115
|
+
))),
|
|
116
|
+
run.source.branchName && /* @__PURE__ */ React.createElement(Box, { display: "flex", flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React.createElement(Typography, { variant: "subtitle2", component: "span" }, "Branch"), /* @__PURE__ */ React.createElement(
|
|
117
|
+
Typography,
|
|
118
|
+
{
|
|
119
|
+
variant: "body2",
|
|
120
|
+
component: "span",
|
|
121
|
+
style: { overflowWrap: "break-word" }
|
|
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
|
+
)),
|
|
111
134
|
/* @__PURE__ */ React.createElement(
|
|
112
|
-
|
|
135
|
+
WorkflowRunStatus,
|
|
113
136
|
{
|
|
114
|
-
|
|
137
|
+
status: run.status,
|
|
138
|
+
conclusion: run.conclusion
|
|
115
139
|
}
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
), /* @__PURE__ */ React.createElement(
|
|
130
|
-
Chip,
|
|
131
|
-
{
|
|
132
|
-
size: "small",
|
|
133
|
-
label: /* @__PURE__ */ React.createElement(Box, { display: "flex", alignItems: "center" }, /* @__PURE__ */ React.createElement(
|
|
134
|
-
WorkflowRunStatus,
|
|
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,
|
|
135
152
|
{
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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"
|
|
139
166
|
))
|
|
140
|
-
|
|
141
|
-
)
|
|
142
|
-
ExternalLinkIcon,
|
|
143
|
-
{
|
|
144
|
-
className: classes.externalLinkIcon
|
|
145
|
-
}
|
|
146
|
-
)), /* @__PURE__ */ React.createElement(ButtonGroup, null, /* @__PURE__ */ React.createElement(Tooltip, { title: "Rerun workflow" }, /* @__PURE__ */ React.createElement(
|
|
147
|
-
IconButton,
|
|
148
|
-
{
|
|
149
|
-
onClick: run.onReRunClick,
|
|
150
|
-
style: { fontSize: "12px" }
|
|
151
|
-
},
|
|
152
|
-
/* @__PURE__ */ React.createElement(RetryIcon, null)
|
|
153
|
-
)))))
|
|
167
|
+
)
|
|
168
|
+
)
|
|
154
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(
|
|
155
170
|
TablePagination,
|
|
156
171
|
{
|
|
@@ -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 Button from '@material-ui/core/Button';\nimport Chip from '@material-ui/core/Chip';\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 {\n EmptyState,\n Link,\n MarkdownContent,\n InfoCard,\n} 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';\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 bottomline: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: '-5px',\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} sm={4} md={4} xl={4}>\n <Box className={classes.card}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n m={3}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Box pt={2} sx={{ width: '100%' }} textAlign=\"center\">\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 color=\"primary\" variant=\"h6\">\n {run.workflowName}\n </Typography>\n </Link>\n </Typography>\n </Alert>\n </Tooltip>\n <Tooltip title={run.message ?? 'No run message'}>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ fontSize: 'smaller' }}\n >\n <MarkdownContent\n content={`Commit ID : ${run.source.commit.hash!}`}\n />\n </Typography>\n </Tooltip>\n\n {run.source.branchName && (\n <MarkdownContent\n content={`Branch : ${run.source.branchName}`}\n />\n )}\n <Chip\n key={run.id}\n size=\"small\"\n label={`Workflow ID : ${run.id}`}\n />\n <Chip\n size=\"small\"\n label={\n <Box display=\"flex\" alignItems=\"center\">\n <WorkflowRunStatus\n status={run.status}\n conclusion={run.conclusion}\n />\n </Box>\n }\n />\n <div className={classes.bottomline}>\n {run.githubUrl && (\n <Link to={run.githubUrl}>\n Workflow runs on GitHub{' '}\n <ExternalLinkIcon\n className={classes.externalLinkIcon}\n />\n </Link>\n )}\n <ButtonGroup>\n <Tooltip title=\"Rerun workflow\">\n <IconButton\n onClick={run.onReRunClick}\n style={{ fontSize: '12px' }}\n >\n <RetryIcon />\n </IconButton>\n </Tooltip>\n </ButtonGroup>\n </div>\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 githubHost = hostname || 'github.com';\n const hasNoRuns = !cardProps.loading && !runsData;\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 {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 <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 )}\n </Grid>\n );\n};\n\nexport default WorkflowRunsCard;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,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,KAAA;AAAA,KACZ;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,QAAU,EAAA,SAAA;AAAA,MACV,aAAe,EAAA,QAAA;AAAA,KACjB;AAAA,IACA,UAAY,EAAA;AAAA,MACV,OAAS,EAAA,MAAA;AAAA,MACT,cAAgB,EAAA,eAAA;AAAA,MAChB,UAAY,EAAA,QAAA;AAAA,MACZ,SAAW,EAAA,MAAA;AAAA,KACb;AAAA,IACA,UAAY,EAAA;AAAA,MACV,KAAO,EAAA,MAAA;AAAA,KACT;AAAA,GACD,CAAA;AACH,CAAA,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,SAAA;AACX,CAAA,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,GAAA,EAAkB,UAAuB,KAAA;AAClE,EAAM,MAAA,mBAAA,GAAsB,WAAW,iBAAkB,EAAA,CAAA;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,CAAA;AAE5D,CAAA,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,QAAA;AACF,CAAiC,KAAA;AAC/B,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAC1B,EAAM,MAAA,SAAA,GAAY,YAAY,aAAa,CAAA,CAAA;AAE3C,EAAA,MAAM,eAAe,IAAM,EAAA,MAAA,CAAO,SAAO,iBAAkB,CAAA,GAAA,EAAK,UAAU,CAAC,CAAA,CAAA;AAE3E,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACtB,EAAA,EAAA,YAAA,IAAgB,IAAM,EAAA,MAAA,KAAW,IAChC,YAAa,CAAA,GAAA,CAAI,CACf,GAAA,qBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,GAAK,EAAA,GAAA,CAAI,EAAI,EAAA,IAAA,EAAI,IAAC,EAAA,SAAA,EAAS,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,CAAA,EAAG,EAAI,EAAA,CAAA,EAAG,IAAI,CAC1D,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAW,QAAQ,IACtB,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,MAAA;AAAA,MACR,aAAc,EAAA,QAAA;AAAA,MACd,CAAG,EAAA,CAAA;AAAA,MACH,UAAW,EAAA,QAAA;AAAA,MACX,cAAe,EAAA,QAAA;AAAA,KAAA;AAAA,oBAEf,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CAAG,EAAA,EAAA,EAAI,EAAE,KAAO,EAAA,MAAA,EAAU,EAAA,SAAA,EAAU,QAC3C,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,IAAI,MAAU,IAAA,WAAA;AAAA,QACrB,SAAU,EAAA,WAAA;AAAA,OAAA;AAAA,sBAEV,KAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,UAAA;AAAA,UACR,QAAA,EACE,YACE,CAAA,GAAA,CAAI,UACN,CAAA;AAAA,UAEF,KAAA,EAAO,EAAE,UAAA,EAAY,QAAS,EAAA;AAAA,SAAA;AAAA,wBAE9B,KAAA,CAAA,aAAA,CAAC,cAAW,OAAQ,EAAA,IAAA,EAAA,sCACjB,IAAK,EAAA,EAAA,EAAA,EAAI,SAAU,CAAA,EAAE,EAAI,EAAA,GAAA,CAAI,IAAI,CAAA,EAAA,kBAC/B,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,KAAM,EAAA,SAAA,EAAU,SAAQ,IACjC,EAAA,EAAA,GAAA,CAAI,YACP,CACF,CACF,CAAA;AAAA,OACF;AAAA,uBAED,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,GAAA,CAAI,WAAW,gBAC7B,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,OAAA;AAAA,QACR,SAAU,EAAA,MAAA;AAAA,QACV,KAAA,EAAO,EAAE,QAAA,EAAU,SAAU,EAAA;AAAA,OAAA;AAAA,sBAE7B,KAAA,CAAA,aAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,CAAA,YAAA,EAAe,GAAI,CAAA,MAAA,CAAO,OAAO,IAAK,CAAA,CAAA;AAAA,SAAA;AAAA,OACjD;AAAA,KAEJ,CAAA,EAEC,GAAI,CAAA,MAAA,CAAO,UACV,oBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,OAAS,EAAA,CAAA,SAAA,EAAY,GAAI,CAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,OAAA;AAAA,KAG9C,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,KAAK,GAAI,CAAA,EAAA;AAAA,QACT,IAAK,EAAA,OAAA;AAAA,QACL,KAAA,EAAO,CAAiB,cAAA,EAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,OAAA;AAAA,KAEhC,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,OAAA;AAAA,QACL,uBACG,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,OAAQ,EAAA,MAAA,EAAO,YAAW,QAC7B,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,QAAQ,GAAI,CAAA,MAAA;AAAA,YACZ,YAAY,GAAI,CAAA,UAAA;AAAA,WAAA;AAAA,SAEpB,CAAA;AAAA,OAAA;AAAA,KAGJ,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,QAAQ,UACrB,EAAA,EAAA,GAAA,CAAI,SACH,oBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAI,GAAI,CAAA,SAAA,EAAA,EAAW,2BACC,GACxB,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,WAAW,OAAQ,CAAA,gBAAA;AAAA,OAAA;AAAA,KAEvB,CAEF,kBAAA,KAAA,CAAA,aAAA,CAAC,mCACE,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,OAAM,gBACb,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAS,GAAI,CAAA,YAAA;AAAA,QACb,KAAA,EAAO,EAAE,QAAA,EAAU,MAAO,EAAA;AAAA,OAAA;AAAA,0CAEzB,SAAU,EAAA,IAAA,CAAA;AAAA,KAEf,CACF,CACF,CACF,CAAA;AAAA,GAEJ,CACF,CACD,oBAEA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,GAAG,CACL,EAAA,EAAA,OAAA,mBAAW,KAAA,CAAA,aAAA,CAAA,gBAAA,EAAA,IAAiB,IAAK,yBACpC,CAAA,sCAED,KAAI,EAAA,EAAA,SAAA,EAAW,QAAQ,UACtB,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,KAAA;AAAA,MACV,KAAO,EAAA,KAAA;AAAA,MACP,IAAA;AAAA,MACA,WAAa,EAAA,QAAA;AAAA,MACb,YAAc,EAAA,CAAC,CAAG,EAAA,OAAA,KAAY,aAAa,OAAO,CAAA;AAAA,MAClD,mBAAA,EAAqB,WACnB,gBAAiB,CAAA,QAAA,CAAS,MAAM,MAAO,CAAA,KAAA,EAAO,CAAC,CAAC,CAAA;AAAA,MAElD,gBAAiB,EAAA,oBAAA;AAAA,MACjB,kBAAA,EAAoB,CAAC,CAAA,EAAG,EAAI,EAAA,EAAA,EAAI,EAAE,KAAO,EAAA,KAAA,EAAO,KAAO,EAAA,CAAA,CAAA,EAAI,CAAA;AAAA,KAAA;AAAA,GAE/D,CACF,CAAA,CAAA;AAEJ,EAAA;AAMA,MAAM,yBAAyB,CAAC;AAAA,EAC9B,UAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AACF,CAIM,KAAA;AACJ,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,QAAA,EAAU,GAAG,CAClB,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,QAAA;AAAA,MACL,KAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA,UAAA;AAAA,MACP,QAAU,EAAA,YAAA;AAAA,MACV,aAAY,EAAA,gBAAA;AAAA,MACZ,KAAA,EAAO,EAAE,WAAA,EAAa,MAAO,EAAA;AAAA,KAAA;AAAA,qBAE9B,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,OAAM,sBACb,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAS,yBAClB,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAS,CACZ,CACF,CACF,CACF,CAAA,CAAA;AAEJ,CAAA,CAAA;AAEO,MAAM,gBAAmB,GAAA,CAAC,EAAE,MAAA,EAAoC,KAAA;AACrE,EAAM,MAAA,WAAA,GAAc,yBAAyB,MAAM,CAAA,CAAA;AACnD,EAAM,MAAA,QAAA,GAAW,sBAAsB,MAAM,CAAA,CAAA;AAC7C,EAAA,MAAM,CAAC,KAAO,EAAA,IAAI,KAAK,WAAe,IAAA,GAAA,EAAK,MAAM,GAAG,CAAA,CAAA;AACpD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAA6B,SAAS,CAAA,CAAA;AAClE,EAAA,MAAM,CAAC,IAAM,EAAA,OAAO,CAAI,GAAA,QAAA,CAAoC,EAAE,CAAA,CAAA;AAC9D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA,CAAA;AAE/C,EAAM,MAAA,YAAA,GAAe,CAAC,KAAyC,KAAA;AAC7D,IAAc,aAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA,CAAA;AAAA,GAClC,CAAA;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,EAAA;AAAA,MAC5B,eAAgB,CAAA;AAAA,IAClB,QAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,EAAQ,MAAW,KAAA,KAAA,GAAQ,KAAY,CAAA,GAAA,MAAA;AAAA,GACxC,CAAA,CAAA;AAED,EAAA,MAAM,aAAa,QAAY,IAAA,YAAA,CAAA;AAC/B,EAAA,MAAM,SAAY,GAAA,CAAC,SAAU,CAAA,OAAA,IAAW,CAAC,QAAA,CAAA;AAEzC,EAAM,MAAA,gBAAA,GAAmB,CACvB,KACG,KAAA;AACH,IAAM,MAAA,aAAA,GAAgB,MAAM,MAAO,CAAA,KAAA,CAAA;AACnC,IAAA,SAAA,CAAU,aAAa,CAAA,CAAA;AACvB,IAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AACT,IAAM,KAAA,EAAA,CAAA;AAAA,GACR,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAAA,GACf,EAAA,CAAC,QAAU,EAAA,MAAM,CAAC,CAAA,CAAA;AAErB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAA,CAAU,aAAa,CAAA,CAAA;AAAA,GACzB,EAAG,CAAC,aAAa,CAAC,CAAA,CAAA;AAElB,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAA,EACP,SACC,mBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,MAAA;AAAA,MACR,KAAM,EAAA,kBAAA;AAAA,MACN,WAAY,EAAA,oJAAA;AAAA,MACZ,MACE,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,WAAA;AAAA,UACR,KAAM,EAAA,SAAA;AAAA,UACN,IAAM,EAAA,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA,EAAI,WAAW,CAAA,YAAA,CAAA;AAAA,SAAA;AAAA,QAC3C,qBAAA;AAAA,OAED;AAAA,KAAA;AAAA,GAIJ,mBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA,sCACG,GAAI,EAAA,EAAA,OAAA,EAAQ,QAAO,UAAW,EAAA,QAAA,EAAA,sCAC5B,UAAW,EAAA,IAAA,CAAA,sCACX,GAAI,EAAA,EAAA,EAAA,EAAI,GAAG,CACZ,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,OAAQ,EAAA,IAAA,EAAA,EAAM,WAAY,CAEtC,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAO,EAAA,MAAA;AAAA,UACP,GAAK,EAAA,MAAA;AAAA,UACL,KAAM,EAAA,QAAA;AAAA,UACN,QAAU,EAAA,gBAAA;AAAA,UACV,aAAY,EAAA,cAAA;AAAA,UACZ,KAAO,EAAA;AAAA,YACL,UAAY,EAAA,MAAA;AAAA,YACZ,WAAa,EAAA,MAAA;AAAA,YACb,KAAO,EAAA,OAAA;AAAA,WACT;AAAA,SAAA;AAAA,QAEC,QAAA,CAAS,IAAI,CACZ,UAAA,qBAAA,KAAA,CAAA,aAAA,CAAC,YAAS,GAAK,EAAA,UAAA,CAAW,IAAM,EAAA,KAAA,EAAO,UAAW,CAAA,IAAA,EAAA,EAC/C,WAAW,IAAS,KAAA,aAAA,uCAClB,UAAW,EAAA,EAAA,OAAA,EAAQ,SAAQ,SAAU,EAAA,MAAA,EAAA,EACnC,UAAW,CAAA,IAAA,EAAM,GAClB,kBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,OAAA;AAAA,YACR,SAAU,EAAA,MAAA;AAAA,YACV,KAAO,EAAA,EAAE,KAAO,EAAA,WAAA,EAAa,UAAU,SAAU,EAAA;AAAA,WAAA;AAAA,UAClD,WAAA;AAAA,SAGH,CAAA,GAEA,UAAW,CAAA,IAEf,CACD,CAAA;AAAA,wBAED,KAAA,CAAA,aAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,KAAM,EAAA,KAAA;AAAA,YACN,GAAI,EAAA,KAAA;AAAA,YACJ,KAAO,EAAA,EAAE,KAAO,EAAA,WAAA,EAAa,UAAU,OAAQ,EAAA;AAAA,WAAA;AAAA,UAChD,qBAAA;AAAA,SAED;AAAA,OAGF,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACC,UAAA;AAAA,UACA,YAAA;AAAA,UACA,KAAA;AAAA,SAAA;AAAA,OAEJ,CAAA;AAAA,KAAA;AAAA,oBAGF,KAAA,CAAA,aAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAS,SAAU,CAAA,OAAA;AAAA,QACnB,gBAAkB,EAAA,WAAA;AAAA,QAClB,YAAc,EAAA,OAAA;AAAA,QACd,MAAM,SAAU,CAAA,IAAA;AAAA,QAChB,OAAO,SAAU,CAAA,KAAA;AAAA,QACjB,UAAU,SAAU,CAAA,QAAA;AAAA,QACpB,UAAA;AAAA,QACA,WAAA;AAAA,OAAA;AAAA,KACF;AAAA,GAGN,CAAA,CAAA;AAEJ;;;;"}
|
|
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 {\n LinkButton,\n EmptyState,\n Link,\n InfoCard,\n} 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 githubHost = hostname || 'github.com';\n const hasNoRuns = !cardProps.loading && !runsData;\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 {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 <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 )}\n </Grid>\n );\n};\n\nexport default WorkflowRunsCard;\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -190,12 +190,12 @@ declare const githubActionsPlugin: _backstage_core_plugin_api.BackstagePlugin<{
|
|
|
190
190
|
declare const EntityGithubActionsContent: (props: RouterProps) => react.JSX.Element;
|
|
191
191
|
/** @public */
|
|
192
192
|
declare const EntityLatestGithubActionRunCard: (props: {
|
|
193
|
-
branch
|
|
193
|
+
branch?: string | undefined;
|
|
194
194
|
variant?: _backstage_core_components.InfoCardVariants | undefined;
|
|
195
195
|
}) => react.JSX.Element;
|
|
196
196
|
/** @public */
|
|
197
197
|
declare const EntityLatestGithubActionsForBranchCard: (props: {
|
|
198
|
-
branch
|
|
198
|
+
branch?: string | undefined;
|
|
199
199
|
variant?: _backstage_core_components.InfoCardVariants | undefined;
|
|
200
200
|
}) => react.JSX.Element;
|
|
201
201
|
/** @public */
|
|
@@ -213,12 +213,12 @@ declare const Router: (props: RouterProps) => react__default.JSX.Element;
|
|
|
213
213
|
|
|
214
214
|
/** @public */
|
|
215
215
|
declare const LatestWorkflowRunCard: (props: {
|
|
216
|
-
branch
|
|
216
|
+
branch?: string;
|
|
217
217
|
variant?: InfoCardVariants;
|
|
218
218
|
}) => react__default.JSX.Element;
|
|
219
219
|
/** @public */
|
|
220
220
|
declare const LatestWorkflowsForBranchCard: (props: {
|
|
221
|
-
branch
|
|
221
|
+
branch?: string;
|
|
222
222
|
variant?: InfoCardVariants;
|
|
223
223
|
}) => react__default.JSX.Element;
|
|
224
224
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage-community/plugin-github-actions",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.19",
|
|
4
4
|
"description": "A Backstage plugin that integrates towards GitHub Actions",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "frontend-plugin",
|
|
@@ -10,9 +10,20 @@
|
|
|
10
10
|
]
|
|
11
11
|
},
|
|
12
12
|
"publishConfig": {
|
|
13
|
-
"access": "public"
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./dist/index.esm.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"default": "./dist/index.esm.js"
|
|
20
|
+
},
|
|
21
|
+
"./alpha": {
|
|
22
|
+
"import": "./dist/alpha.esm.js",
|
|
23
|
+
"types": "./dist/alpha.d.ts",
|
|
24
|
+
"default": "./dist/alpha.esm.js"
|
|
25
|
+
},
|
|
26
|
+
"./package.json": "./package.json"
|
|
16
27
|
},
|
|
17
28
|
"keywords": [
|
|
18
29
|
"backstage",
|
|
@@ -27,10 +38,11 @@
|
|
|
27
38
|
},
|
|
28
39
|
"license": "Apache-2.0",
|
|
29
40
|
"sideEffects": false,
|
|
30
|
-
"main": "dist/index.esm.js",
|
|
31
|
-
"types": "dist/index.d.ts",
|
|
41
|
+
"main": "./dist/index.esm.js",
|
|
42
|
+
"types": "./dist/index.d.ts",
|
|
32
43
|
"files": [
|
|
33
|
-
"dist"
|
|
44
|
+
"dist",
|
|
45
|
+
"alpha"
|
|
34
46
|
],
|
|
35
47
|
"scripts": {
|
|
36
48
|
"build": "backstage-cli package build",
|
|
@@ -43,8 +55,10 @@
|
|
|
43
55
|
},
|
|
44
56
|
"dependencies": {
|
|
45
57
|
"@backstage/catalog-model": "^1.5.0",
|
|
58
|
+
"@backstage/core-compat-api": "^0.2.7",
|
|
46
59
|
"@backstage/core-components": "^0.14.9",
|
|
47
60
|
"@backstage/core-plugin-api": "^1.9.3",
|
|
61
|
+
"@backstage/frontend-plugin-api": "^0.6.7",
|
|
48
62
|
"@backstage/integration": "^1.13.0",
|
|
49
63
|
"@backstage/integration-react": "^1.1.29",
|
|
50
64
|
"@backstage/plugin-catalog-react": "^1.12.2",
|
|
@@ -61,6 +75,7 @@
|
|
|
61
75
|
"@backstage/cli": "^0.26.11",
|
|
62
76
|
"@backstage/core-app-api": "^1.14.0",
|
|
63
77
|
"@backstage/dev-utils": "^1.0.35",
|
|
78
|
+
"@backstage/frontend-test-utils": "^0.1.10",
|
|
64
79
|
"@backstage/test-utils": "^1.5.8",
|
|
65
80
|
"@testing-library/dom": "^10.0.0",
|
|
66
81
|
"@testing-library/jest-dom": "^6.0.0",
|