@secustor/backstage-plugin-renovate 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +28 -0
- package/dist/alpha.d.ts +23 -20
- package/dist/alpha.esm.js +13 -11
- package/dist/alpha.esm.js.map +1 -1
- package/dist/components/EntityRenovateContent/EntityRenovateContent.esm.js +6 -3
- package/dist/components/EntityRenovateContent/EntityRenovateContent.esm.js.map +1 -1
- package/dist/components/RenovateDefaultOverview/RenovateDefaultOverview.esm.js +3 -3
- package/dist/components/RenovateDefaultOverview/RenovateDefaultOverview.esm.js.map +1 -1
- package/dist/components/RenovateStarter/RenovateStarter.esm.js +5 -6
- package/dist/components/RenovateStarter/RenovateStarter.esm.js.map +1 -1
- package/dist/components/ReportFetchComponent/InspectReportDialog.esm.js +14 -10
- package/dist/components/ReportFetchComponent/InspectReportDialog.esm.js.map +1 -1
- package/dist/components/StartRenovateButton/StartRenovateButton.esm.js +6 -7
- package/dist/components/StartRenovateButton/StartRenovateButton.esm.js.map +1 -1
- package/dist/tools/path.esm.js +9 -0
- package/dist/tools/path.esm.js.map +1 -0
- package/package.json +17 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @secustor/backstage-plugin-renovate
|
|
2
2
|
|
|
3
|
+
## 0.20.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#947](https://github.com/secustor/backstage-plugins/pull/947) [`ae3b4f1`](https://github.com/secustor/backstage-plugins/commit/ae3b4f10a74b6a22d53a8e5d0add2966c8132497) Thanks [@secustor](https://github.com/secustor)! - Move some components to @backstage/ui
|
|
8
|
+
|
|
9
|
+
- [#956](https://github.com/secustor/backstage-plugins/pull/956) [`5c2903d`](https://github.com/secustor/backstage-plugins/commit/5c2903d61b74d72bcf884e0e5129f4aafc813a05) Thanks [@secustor](https://github.com/secustor)! - Allow enabling RenovateStarter component on DefaultPage when using the new frontend system
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#947](https://github.com/secustor/backstage-plugins/pull/947) [`ae3b4f1`](https://github.com/secustor/backstage-plugins/commit/ae3b4f10a74b6a22d53a8e5d0add2966c8132497) Thanks [@secustor](https://github.com/secustor)! - Fix path filter for root EntityRenovateContent if it is on the root
|
|
14
|
+
|
|
15
|
+
- [#946](https://github.com/secustor/backstage-plugins/pull/946) [`bcbdf92`](https://github.com/secustor/backstage-plugins/commit/bcbdf92f8eefe66ed30cce94765247005ff529be) Thanks [@renovate](https://github.com/apps/renovate)! - Bump Backstage version to 1.46.1
|
|
16
|
+
|
|
17
|
+
- [#953](https://github.com/secustor/backstage-plugins/pull/953) [`521378c`](https://github.com/secustor/backstage-plugins/commit/521378c4ef45643bf7e4053c7804756ccae532a5) Thanks [@secustor](https://github.com/secustor)! - Remove no longer needed compatWrapper calls
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [[`bcbdf92`](https://github.com/secustor/backstage-plugins/commit/bcbdf92f8eefe66ed30cce94765247005ff529be)]:
|
|
20
|
+
- @secustor/backstage-plugin-renovate-client@0.10.9
|
|
21
|
+
- @secustor/backstage-plugin-renovate-common@0.9.5
|
|
22
|
+
|
|
23
|
+
## 0.19.1
|
|
24
|
+
|
|
25
|
+
### Patch Changes
|
|
26
|
+
|
|
27
|
+
- [#920](https://github.com/secustor/backstage-plugins/pull/920) [`d96b7f6`](https://github.com/secustor/backstage-plugins/commit/d96b7f6bce455782b5d7d7a46a39c571fb904445) Thanks [@renovate](https://github.com/apps/renovate)! - Bump to Backstage 1.45.1
|
|
28
|
+
|
|
3
29
|
## 0.19.0
|
|
4
30
|
|
|
5
31
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -20,6 +20,34 @@ Install the plugin:
|
|
|
20
20
|
yarn --cwd packages/app add @secustor/backstage-plugin-renovate
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
+
### New Frontend System
|
|
24
|
+
|
|
25
|
+
Add the plugin to your Backstage instance:
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
// Add the following to `packages/app/src/App.tsx`
|
|
29
|
+
import renovatePlugin from '@secustor/backstage-plugin-renovate/alpha';
|
|
30
|
+
|
|
31
|
+
export default createApp({
|
|
32
|
+
features: [
|
|
33
|
+
// Your other features
|
|
34
|
+
renovatePlugin,
|
|
35
|
+
],
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Configure the plugin in your `app-config.yaml`:
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
app:
|
|
43
|
+
extensions:
|
|
44
|
+
- page:renovate:
|
|
45
|
+
config:
|
|
46
|
+
showStarter: true # Optional: Show the starter configuration helper
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Old Frontend System
|
|
50
|
+
|
|
23
51
|
Add the plugin to your Backstage instance:
|
|
24
52
|
|
|
25
53
|
```tsx
|
package/dist/alpha.d.ts
CHANGED
|
@@ -2,38 +2,39 @@ import * as _backstage_catalog_model from '@backstage/catalog-model';
|
|
|
2
2
|
import * as _backstage_plugin_catalog_react_alpha from '@backstage/plugin-catalog-react/alpha';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
|
|
5
|
-
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
6
5
|
|
|
7
|
-
declare const renovateNavItem: _backstage_frontend_plugin_api.
|
|
6
|
+
declare const renovateNavItem: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
8
7
|
kind: "nav-item";
|
|
9
8
|
name: undefined;
|
|
10
9
|
config: {};
|
|
11
10
|
configInput: {};
|
|
12
11
|
output: _backstage_frontend_plugin_api.ExtensionDataRef<{
|
|
13
12
|
title: string;
|
|
14
|
-
icon:
|
|
13
|
+
icon: _backstage_frontend_plugin_api.IconComponent;
|
|
15
14
|
routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
|
|
16
15
|
}, "core.nav-item.target", {}>;
|
|
17
16
|
inputs: {};
|
|
18
17
|
params: {
|
|
19
18
|
title: string;
|
|
20
|
-
icon:
|
|
19
|
+
icon: _backstage_frontend_plugin_api.IconComponent;
|
|
21
20
|
routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
|
|
22
21
|
};
|
|
23
22
|
}>;
|
|
24
|
-
declare const renovatePage: _backstage_frontend_plugin_api.
|
|
25
|
-
kind: "page";
|
|
26
|
-
name: undefined;
|
|
23
|
+
declare const renovatePage: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
27
24
|
config: {
|
|
25
|
+
showStarter: boolean;
|
|
28
26
|
path: string | undefined;
|
|
29
27
|
};
|
|
30
28
|
configInput: {
|
|
31
|
-
|
|
29
|
+
showStarter?: boolean | undefined;
|
|
30
|
+
path?: string | undefined | undefined;
|
|
32
31
|
};
|
|
33
32
|
output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
|
|
34
33
|
optional: true;
|
|
35
34
|
}>;
|
|
36
35
|
inputs: {};
|
|
36
|
+
kind: "page";
|
|
37
|
+
name: undefined;
|
|
37
38
|
params: {
|
|
38
39
|
defaultPath?: [Error: `Use the 'path' param instead`];
|
|
39
40
|
path: string;
|
|
@@ -41,7 +42,7 @@ declare const renovatePage: _backstage_frontend_plugin_api.ExtensionDefinition<{
|
|
|
41
42
|
routeRef?: _backstage_frontend_plugin_api.RouteRef;
|
|
42
43
|
};
|
|
43
44
|
}>;
|
|
44
|
-
declare const EntityRenovateContent: _backstage_frontend_plugin_api.
|
|
45
|
+
declare const EntityRenovateContent: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
45
46
|
kind: "entity-content";
|
|
46
47
|
name: undefined;
|
|
47
48
|
config: {
|
|
@@ -79,16 +80,16 @@ declare const EntityRenovateContent: _backstage_frontend_plugin_api.ExtensionDef
|
|
|
79
80
|
};
|
|
80
81
|
}>;
|
|
81
82
|
declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{}, {}, {
|
|
82
|
-
"api:renovate": _backstage_frontend_plugin_api.
|
|
83
|
+
"api:renovate": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
83
84
|
kind: "api";
|
|
84
85
|
name: undefined;
|
|
85
86
|
config: {};
|
|
86
87
|
configInput: {};
|
|
87
|
-
output: _backstage_frontend_plugin_api.ExtensionDataRef<
|
|
88
|
+
output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
|
|
88
89
|
inputs: {};
|
|
89
|
-
params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params:
|
|
90
|
+
params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
|
|
90
91
|
}>;
|
|
91
|
-
"entity-content:renovate": _backstage_frontend_plugin_api.
|
|
92
|
+
"entity-content:renovate": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
92
93
|
kind: "entity-content";
|
|
93
94
|
name: undefined;
|
|
94
95
|
config: {
|
|
@@ -125,36 +126,38 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
|
|
|
125
126
|
filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
|
|
126
127
|
};
|
|
127
128
|
}>;
|
|
128
|
-
"nav-item:renovate": _backstage_frontend_plugin_api.
|
|
129
|
+
"nav-item:renovate": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
129
130
|
kind: "nav-item";
|
|
130
131
|
name: undefined;
|
|
131
132
|
config: {};
|
|
132
133
|
configInput: {};
|
|
133
134
|
output: _backstage_frontend_plugin_api.ExtensionDataRef<{
|
|
134
135
|
title: string;
|
|
135
|
-
icon:
|
|
136
|
+
icon: _backstage_frontend_plugin_api.IconComponent;
|
|
136
137
|
routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
|
|
137
138
|
}, "core.nav-item.target", {}>;
|
|
138
139
|
inputs: {};
|
|
139
140
|
params: {
|
|
140
141
|
title: string;
|
|
141
|
-
icon:
|
|
142
|
+
icon: _backstage_frontend_plugin_api.IconComponent;
|
|
142
143
|
routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
|
|
143
144
|
};
|
|
144
145
|
}>;
|
|
145
|
-
"page:renovate": _backstage_frontend_plugin_api.
|
|
146
|
-
kind: "page";
|
|
147
|
-
name: undefined;
|
|
146
|
+
"page:renovate": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
148
147
|
config: {
|
|
148
|
+
showStarter: boolean;
|
|
149
149
|
path: string | undefined;
|
|
150
150
|
};
|
|
151
151
|
configInput: {
|
|
152
|
-
|
|
152
|
+
showStarter?: boolean | undefined;
|
|
153
|
+
path?: string | undefined | undefined;
|
|
153
154
|
};
|
|
154
155
|
output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
|
|
155
156
|
optional: true;
|
|
156
157
|
}>;
|
|
157
158
|
inputs: {};
|
|
159
|
+
kind: "page";
|
|
160
|
+
name: undefined;
|
|
158
161
|
params: {
|
|
159
162
|
defaultPath?: [Error: `Use the 'path' param instead`];
|
|
160
163
|
path: string;
|
package/dist/alpha.esm.js
CHANGED
|
@@ -2,7 +2,6 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { createRouteRef, NavItemBlueprint, PageBlueprint, ApiBlueprint, fetchApiRef, discoveryApiRef, createFrontendPlugin } from '@backstage/frontend-plugin-api';
|
|
3
3
|
import { renovateApiRef } from './api.esm.js';
|
|
4
4
|
import { RenovateClient } from '@secustor/backstage-plugin-renovate-client';
|
|
5
|
-
import { compatWrapper } from '@backstage/core-compat-api';
|
|
6
5
|
import FormatPaintIcon from '@mui/icons-material/FormatPaint';
|
|
7
6
|
import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
|
|
8
7
|
|
|
@@ -14,22 +13,25 @@ const renovateNavItem = NavItemBlueprint.make({
|
|
|
14
13
|
routeRef: rootRouteRef
|
|
15
14
|
}
|
|
16
15
|
});
|
|
17
|
-
const renovatePage = PageBlueprint.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
const renovatePage = PageBlueprint.makeWithOverrides({
|
|
17
|
+
config: {
|
|
18
|
+
schema: {
|
|
19
|
+
showStarter: (z) => z.boolean().default(false)
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
factory(originalFactory, { config }) {
|
|
23
|
+
return originalFactory({
|
|
24
|
+
path: "/renovate",
|
|
25
|
+
routeRef: rootRouteRef,
|
|
26
|
+
loader: async () => import('./components/RenovateDefaultOverview/index.esm.js').then((m) => /* @__PURE__ */ jsx(m.RenovateDefaultOverview, { showStarter: config.showStarter }))
|
|
27
|
+
});
|
|
24
28
|
}
|
|
25
29
|
});
|
|
26
30
|
const EntityRenovateContent = EntityContentBlueprint.make({
|
|
27
31
|
params: {
|
|
28
32
|
path: "/renovate",
|
|
29
33
|
title: "Renovate",
|
|
30
|
-
loader: () => import('./components/EntityRenovateContent/index.esm.js').then(
|
|
31
|
-
(m) => compatWrapper(/* @__PURE__ */ jsx(m.EntityRenovateContent, {}))
|
|
32
|
-
)
|
|
34
|
+
loader: () => import('./components/EntityRenovateContent/index.esm.js').then((m) => /* @__PURE__ */ jsx(m.EntityRenovateContent, {}))
|
|
33
35
|
}
|
|
34
36
|
});
|
|
35
37
|
const renovateApi = ApiBlueprint.make({
|
package/dist/alpha.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import { discoveryApiRef, fetchApiRef } from '@backstage/frontend-plugin-api';\nimport {\n ApiBlueprint,\n createFrontendPlugin,\n NavItemBlueprint,\n createRouteRef,\n} from '@backstage/frontend-plugin-api';\nimport { renovateApiRef } from './api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\nimport { PageBlueprint } from '@backstage/frontend-plugin-api';\nimport
|
|
1
|
+
{"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import { discoveryApiRef, fetchApiRef } from '@backstage/frontend-plugin-api';\nimport {\n ApiBlueprint,\n createFrontendPlugin,\n NavItemBlueprint,\n createRouteRef,\n} from '@backstage/frontend-plugin-api';\nimport { renovateApiRef } from './api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\nimport { PageBlueprint } from '@backstage/frontend-plugin-api';\nimport FormatPaintIcon from '@mui/icons-material/FormatPaint';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\n\nconst rootRouteRef = createRouteRef();\n\nexport const renovateNavItem = NavItemBlueprint.make({\n params: {\n title: 'Renovate',\n icon: FormatPaintIcon,\n routeRef: rootRouteRef,\n },\n});\n\nexport const renovatePage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n showStarter: z => z.boolean().default(false),\n },\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n path: '/renovate',\n routeRef: rootRouteRef,\n loader: async () =>\n import('./components/RenovateDefaultOverview').then(m => (\n <m.RenovateDefaultOverview showStarter={config.showStarter} />\n )),\n });\n },\n});\n\nexport const EntityRenovateContent = EntityContentBlueprint.make({\n params: {\n path: '/renovate',\n title: 'Renovate',\n loader: () =>\n import('./components/EntityRenovateContent').then(m => (\n <m.EntityRenovateContent />\n )),\n },\n});\n\nconst renovateApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: renovateApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new RenovateClient({ discoveryApi, fetchApi }),\n }),\n});\n\nexport default createFrontendPlugin({\n pluginId: 'renovate',\n extensions: [\n renovatePage,\n renovateApi,\n EntityRenovateContent,\n renovateNavItem,\n ],\n});\n"],"names":[],"mappings":";;;;;;;AAaA,MAAM,eAAe,cAAA,EAAe;AAE7B,MAAM,eAAA,GAAkB,iBAAiB,IAAA,CAAK;AAAA,EACnD,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU;AAAA;AAEd,CAAC;AAEM,MAAM,YAAA,GAAe,cAAc,iBAAA,CAAkB;AAAA,EAC1D,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,aAAa,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK;AAAA;AAC7C,GACF;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAO,EAAG;AACnC,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ,YACN,OAAO,mDAAsC,EAAE,IAAA,CAAK,CAAA,CAAA,qBAClD,GAAA,CAAC,CAAA,CAAE,uBAAA,EAAF,EAA0B,WAAA,EAAa,MAAA,CAAO,aAAa,CAC7D;AAAA,KACJ,CAAA;AAAA,EACH;AACF,CAAC;AAEM,MAAM,qBAAA,GAAwB,uBAAuB,IAAA,CAAK;AAAA,EAC/D,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAO,iDAAoC,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,qBAChD,GAAA,CAAC,CAAA,CAAE,qBAAA,EAAF,EAAwB,CAC1B;AAAA;AAEP,CAAC;AAED,MAAM,WAAA,GAAc,aAAa,IAAA,CAAK;AAAA,EACpC,MAAA,EAAQ,kBACN,YAAA,CAAa;AAAA,IACX,GAAA,EAAK,cAAA;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,YAAA,EAAc,eAAA;AAAA,MACd,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,QAAA,EAAS,KACjC,IAAI,cAAA,CAAe,EAAE,YAAA,EAAc,QAAA,EAAU;AAAA,GAChD;AACL,CAAC,CAAA;AAED,YAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY;AAAA,IACV,YAAA;AAAA,IACA,WAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA;AAEJ,CAAC,CAAA;;;;"}
|
|
@@ -4,10 +4,12 @@ import { getEntitySourceLocation } from '@backstage/catalog-model';
|
|
|
4
4
|
import { useApi } from '@backstage/core-plugin-api';
|
|
5
5
|
import useAsync from 'react-use/lib/useAsync';
|
|
6
6
|
import { getTargetURL } from '@secustor/backstage-plugin-renovate-common';
|
|
7
|
-
import {
|
|
7
|
+
import { Link } from '@backstage/ui';
|
|
8
|
+
import { Progress, ResponseErrorPanel, Table } from '@backstage/core-components';
|
|
8
9
|
import is from '@sindresorhus/is';
|
|
9
10
|
import { scmIntegrationsApiRef } from '@backstage/integration-react';
|
|
10
11
|
import { isError } from '@backstage/errors';
|
|
12
|
+
import { getDirectoryFromPath } from '../../tools/path.esm.js';
|
|
11
13
|
import { getBiggestUpdate } from '../../tools/versioning.esm.js';
|
|
12
14
|
import { RenovateEmptyState } from '../RenovateReportEmptyState/RenovateEmptyState.esm.js';
|
|
13
15
|
import { renovateApiRef } from '../../api.esm.js';
|
|
@@ -58,11 +60,12 @@ const EntityRenovateContent = () => {
|
|
|
58
60
|
url: parsed.filepath,
|
|
59
61
|
base: target
|
|
60
62
|
});
|
|
63
|
+
const pathFilter = getDirectoryFromPath(parsed.filepath);
|
|
61
64
|
return /* @__PURE__ */ jsx(
|
|
62
65
|
DependencyTable,
|
|
63
66
|
{
|
|
64
67
|
packageFiles: value.report.packageFiles,
|
|
65
|
-
filter: { path:
|
|
68
|
+
filter: { path: pathFilter },
|
|
66
69
|
baseURL
|
|
67
70
|
}
|
|
68
71
|
);
|
|
@@ -102,7 +105,7 @@ function useData({
|
|
|
102
105
|
packageFile: baseURL ? /* @__PURE__ */ jsx(
|
|
103
106
|
Link,
|
|
104
107
|
{
|
|
105
|
-
|
|
108
|
+
href: scmIntegrationsApi.resolveUrl({ base: baseURL, url: file }),
|
|
106
109
|
children: file
|
|
107
110
|
}
|
|
108
111
|
) : file,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityRenovateContent.esm.js","sources":["../../../src/components/EntityRenovateContent/EntityRenovateContent.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { getEntitySourceLocation } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { getTargetURL } from '@secustor/backstage-plugin-renovate-common';\nimport {\n
|
|
1
|
+
{"version":3,"file":"EntityRenovateContent.esm.js","sources":["../../../src/components/EntityRenovateContent/EntityRenovateContent.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { getEntitySourceLocation } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { getTargetURL } from '@secustor/backstage-plugin-renovate-common';\nimport { Link } from '@backstage/ui';\nimport {\n Progress,\n ResponseErrorPanel,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport is from '@sindresorhus/is';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport { isError } from '@backstage/errors';\nimport { getBiggestUpdate, getDirectoryFromPath } from '../../tools';\nimport { DependencyTableProps, DependencyTableRow } from './types';\nimport { RenovateEmptyState } from '../RenovateReportEmptyState/RenovateEmptyState';\nimport { renovateApiRef } from '../../api';\n\nexport const DependencyTable = (props: DependencyTableProps) => {\n const columns: TableColumn[] = [\n { title: 'ID', field: 'id', hidden: true },\n { title: 'Package file', field: 'packageFile' },\n { title: 'Name', field: 'depName' },\n { title: 'Manager', field: 'manager' },\n { title: 'Type', field: 'depType' },\n { title: 'Current Value', field: 'currentValue' },\n { title: 'Current Version', field: 'currentVersion' },\n { title: 'Available Version', field: 'newVersion' },\n ];\n\n const data = useData(props);\n\n return (\n <Table\n title=\"Dependencies\"\n options={{ search: true, paging: false }}\n columns={columns}\n data={data}\n />\n );\n};\n\nexport const EntityRenovateContent = () => {\n const { entity } = useEntity();\n const renovateAPI = useApi(renovateApiRef);\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n\n const { value, loading, error } = useAsync(\n () => renovateAPI.getCurrentReport(entity),\n [entity],\n );\n\n if (error) {\n // rethrow error so it is captured by the error panel\n throw error;\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (is.nullOrUndefined(value)) {\n return <RenovateEmptyState />;\n }\n\n try {\n const { target } = getEntitySourceLocation(entity);\n const parsed = getTargetURL(target);\n const baseURL = scmIntegrationsApi.resolveUrl({\n url: parsed.filepath,\n base: target,\n });\n\n // Extract directory from filepath for filtering\n const pathFilter = getDirectoryFromPath(parsed.filepath);\n\n return (\n <DependencyTable\n packageFiles={value.report.packageFiles}\n filter={{ path: pathFilter }}\n baseURL={baseURL}\n />\n );\n } catch (e) {\n return (\n <ResponseErrorPanel\n error={isError(e) ? e : new Error(JSON.stringify(e))}\n />\n );\n }\n};\n\nfunction useData({\n packageFiles,\n filter,\n baseURL,\n}: DependencyTableProps): DependencyTableRow[] {\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n\n const data: DependencyTableRow[] = [];\n let id = 0;\n for (const [manager, packageFilesList] of Object.entries(packageFiles)) {\n for (const packageFileObject of packageFilesList) {\n // filter packages which are not in the same folder or in the tree underneath\n const pathFilter = filter?.path;\n if (pathFilter) {\n if (!packageFileObject.packageFile.startsWith(pathFilter)) {\n continue;\n }\n }\n for (const dependency of packageFileObject.deps) {\n const file = `/${packageFileObject.packageFile}`;\n\n const biggestUpdate = getBiggestUpdate(dependency.updates ?? []);\n\n const massagedDepName =\n dependency.depName ?? dependency.registryUrl ?? '';\n data.push({\n id,\n depName: massagedDepName,\n manager,\n packageFile: baseURL ? (\n <Link\n href={scmIntegrationsApi.resolveUrl({ base: baseURL, url: file })}\n >\n {file}\n </Link>\n ) : (\n file\n ),\n depType: dependency.depType,\n currentValue: dependency.currentValue ?? dependency.skipReason ?? '',\n currentVersion: dependency.currentVersion,\n newVersion: biggestUpdate?.newVersion ?? biggestUpdate?.newValue,\n });\n id++;\n }\n }\n }\n return data;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAoBO,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAgC;AAC9D,EAAA,MAAM,OAAA,GAAyB;AAAA,IAC7B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,IACzC,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,aAAA,EAAc;AAAA,IAC9C,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU;AAAA,IAClC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,IACrC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU;AAAA,IAClC,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,cAAA,EAAe;AAAA,IAChD,EAAE,KAAA,EAAO,iBAAA,EAAmB,KAAA,EAAO,gBAAA,EAAiB;AAAA,IACpD,EAAE,KAAA,EAAO,mBAAA,EAAqB,KAAA,EAAO,YAAA;AAAa,GACpD;AAEA,EAAA,MAAM,IAAA,GAAO,QAAQ,KAAK,CAAA;AAE1B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,cAAA;AAAA,MACN,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAQ,KAAA,EAAM;AAAA,MACvC,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAEO,MAAM,wBAAwB,MAAM;AACzC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAA,MAAM,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AAEvD,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAM,GAAI,QAAA;AAAA,IAChC,MAAM,WAAA,CAAY,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzC,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,KAAA,EAAO;AAET,IAAA,MAAM,KAAA;AAAA,EACR;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BAAQ,QAAA,EAAA,EAAS,CAAA;AAAA,EACnB;AAEA,EAAA,IAAI,EAAA,CAAG,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC7B,IAAA,2BAAQ,kBAAA,EAAA,EAAmB,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,uBAAA,CAAwB,MAAM,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,mBAAmB,UAAA,CAAW;AAAA,MAC5C,KAAK,MAAA,CAAO,QAAA;AAAA,MACZ,IAAA,EAAM;AAAA,KACP,CAAA;AAGD,IAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,MAAA,CAAO,QAAQ,CAAA;AAEvD,IAAA,uBACE,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,MAAM,MAAA,CAAO,YAAA;AAAA,QAC3B,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,QAC3B;AAAA;AAAA,KACF;AAAA,EAEJ,SAAS,CAAA,EAAG;AACV,IAAA,uBACE,GAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,GAAI,IAAI,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC;AAAA;AAAA,KACrD;AAAA,EAEJ;AACF;AAEA,SAAS,OAAA,CAAQ;AAAA,EACf,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA+C;AAC7C,EAAA,MAAM,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AAEvD,EAAA,MAAM,OAA6B,EAAC;AACpC,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,gBAAgB,KAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,EAAG;AACtE,IAAA,KAAA,MAAW,qBAAqB,gBAAA,EAAkB;AAEhD,MAAA,MAAM,aAAa,MAAA,EAAQ,IAAA;AAC3B,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAI,CAAC,iBAAA,CAAkB,WAAA,CAAY,UAAA,CAAW,UAAU,CAAA,EAAG;AACzD,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,KAAA,MAAW,UAAA,IAAc,kBAAkB,IAAA,EAAM;AAC/C,QAAA,MAAM,IAAA,GAAO,CAAA,CAAA,EAAI,iBAAA,CAAkB,WAAW,CAAA,CAAA;AAE9C,QAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,UAAA,CAAW,OAAA,IAAW,EAAE,CAAA;AAE/D,QAAA,MAAM,eAAA,GACJ,UAAA,CAAW,OAAA,IAAW,UAAA,CAAW,WAAA,IAAe,EAAA;AAClD,QAAA,IAAA,CAAK,IAAA,CAAK;AAAA,UACR,EAAA;AAAA,UACA,OAAA,EAAS,eAAA;AAAA,UACT,OAAA;AAAA,UACA,aAAa,OAAA,mBACX,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,mBAAmB,UAAA,CAAW,EAAE,MAAM,OAAA,EAAS,GAAA,EAAK,MAAM,CAAA;AAAA,cAE/D,QAAA,EAAA;AAAA;AAAA,WACH,GAEA,IAAA;AAAA,UAEF,SAAS,UAAA,CAAW,OAAA;AAAA,UACpB,YAAA,EAAc,UAAA,CAAW,YAAA,IAAgB,UAAA,CAAW,UAAA,IAAc,EAAA;AAAA,UAClE,gBAAgB,UAAA,CAAW,cAAA;AAAA,UAC3B,UAAA,EAAY,aAAA,EAAe,UAAA,IAAc,aAAA,EAAe;AAAA,SACzD,CAAA;AACD,QAAA,EAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import { Flex } from '@backstage/ui';
|
|
3
3
|
import { Page, Header, HeaderLabel, Content, ContentHeader, SupportButton } from '@backstage/core-components';
|
|
4
4
|
import { ReportFetchComponent } from '../ReportFetchComponent/ReportFetchComponent.esm.js';
|
|
5
5
|
import { RenovateStarter } from '../RenovateStarter/RenovateStarter.esm.js';
|
|
@@ -13,10 +13,10 @@ function RenovateDefaultOverview(props) {
|
|
|
13
13
|
] }),
|
|
14
14
|
/* @__PURE__ */ jsxs(Content, { children: [
|
|
15
15
|
/* @__PURE__ */ jsx(ContentHeader, { title: "Dependencies", children: /* @__PURE__ */ jsx(SupportButton, { children: "Renovate support" }) }),
|
|
16
|
-
/* @__PURE__ */ jsxs(
|
|
16
|
+
/* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "3", children: [
|
|
17
17
|
/* @__PURE__ */ jsx(DependencyTable, {}),
|
|
18
18
|
props?.showStarter && /* @__PURE__ */ jsx(RenovateStarter, {}),
|
|
19
|
-
/* @__PURE__ */ jsx(
|
|
19
|
+
/* @__PURE__ */ jsx(ReportFetchComponent, {})
|
|
20
20
|
] })
|
|
21
21
|
] })
|
|
22
22
|
] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenovateDefaultOverview.esm.js","sources":["../../../src/components/RenovateDefaultOverview/RenovateDefaultOverview.tsx"],"sourcesContent":["import { ReactElement } from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"RenovateDefaultOverview.esm.js","sources":["../../../src/components/RenovateDefaultOverview/RenovateDefaultOverview.tsx"],"sourcesContent":["import { ReactElement } from 'react';\nimport { Flex } from '@backstage/ui';\nimport {\n Header,\n Page,\n Content,\n ContentHeader,\n HeaderLabel,\n SupportButton,\n} from '@backstage/core-components';\nimport { ReportFetchComponent } from '../ReportFetchComponent';\nimport { RenovateStarter } from '../RenovateStarter';\nimport { DependencyTable } from '../DependencyTable';\n\nexport interface RenovateDefaultOverviewProps {\n showStarter?: boolean;\n}\n\nexport function RenovateDefaultOverview(\n props?: RenovateDefaultOverviewProps,\n): ReactElement {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Renovate\" subtitle=\"\">\n <HeaderLabel label=\"Owner\" value=\"Developer Experience\" />\n <HeaderLabel label=\"Lifecycle\" value=\"Alpha\" />\n </Header>\n <Content>\n <ContentHeader title=\"Dependencies\">\n <SupportButton>Renovate support</SupportButton>\n </ContentHeader>\n <Flex direction=\"column\" gap=\"3\">\n <DependencyTable />\n {props?.showStarter && <RenovateStarter />}\n <ReportFetchComponent />\n </Flex>\n </Content>\n </Page>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAkBO,SAAS,wBACd,KAAA,EACc;AACd,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,MAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAM,UAAA,EAAW,QAAA,EAAS,EAAA,EAChC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,OAAA,EAAQ,KAAA,EAAM,sBAAA,EAAuB,CAAA;AAAA,sBACxD,GAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,WAAA,EAAY,OAAM,OAAA,EAAQ;AAAA,KAAA,EAC/C,CAAA;AAAA,yBACC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAc,KAAA,EAAM,cAAA,EACnB,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,8BAAgB,CAAA,EACjC,CAAA;AAAA,sBACA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAC3B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,QAChB,KAAA,EAAO,WAAA,oBAAe,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,4BACvC,oBAAA,EAAA,EAAqB;AAAA,OAAA,EACxB;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { InfoCard } from '@backstage/core-components';
|
|
3
|
-
import TextField from '@
|
|
3
|
+
import { TextField } from '@backstage/ui';
|
|
4
4
|
import { useState } from 'react';
|
|
5
5
|
import { StartRenovateButton } from '../StartRenovateButton/StartRenovateButton.esm.js';
|
|
6
6
|
|
|
@@ -11,13 +11,12 @@ const RenovateStarter = () => {
|
|
|
11
11
|
/* @__PURE__ */ jsx(
|
|
12
12
|
TextField,
|
|
13
13
|
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
helperText: inputError ? "Add a source url to run Renovate" : "",
|
|
14
|
+
style: { width: "100%", marginTop: "16px", marginBottom: "16px" },
|
|
15
|
+
description: inputError ? "Add a source url to run Renovate" : "",
|
|
17
16
|
id: "repo-url",
|
|
18
17
|
label: "RepoURL",
|
|
19
|
-
onChange: (
|
|
20
|
-
|
|
18
|
+
onChange: (value) => setRepoURL(value),
|
|
19
|
+
name: "repo-url"
|
|
21
20
|
}
|
|
22
21
|
),
|
|
23
22
|
/* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenovateStarter.esm.js","sources":["../../../src/components/RenovateStarter/RenovateStarter.tsx"],"sourcesContent":["import { InfoCard } from '@backstage/core-components';\nimport TextField from '@
|
|
1
|
+
{"version":3,"file":"RenovateStarter.esm.js","sources":["../../../src/components/RenovateStarter/RenovateStarter.tsx"],"sourcesContent":["import { InfoCard } from '@backstage/core-components';\nimport { TextField } from '@backstage/ui';\nimport { useState } from 'react';\nimport { StartRenovateButton } from '../StartRenovateButton/StartRenovateButton';\n\nexport const RenovateStarter = () => {\n const [repoURL, setRepoURL] = useState<string>('');\n const [inputError, setInputError] = useState<boolean>(false);\n\n return (\n <InfoCard title=\"Run Renovate\">\n <TextField\n style={{ width: '100%', marginTop: '16px', marginBottom: '16px' }}\n description={inputError ? 'Add a source url to run Renovate' : ''}\n id=\"repo-url\"\n label=\"RepoURL\"\n onChange={value => setRepoURL(value)}\n name=\"repo-url\"\n />\n <StartRenovateButton\n target={repoURL}\n onFailure={() => setInputError(true)}\n onSuccess={() => setInputError(false)}\n />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;AAKO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAiB,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAkB,KAAK,CAAA;AAE3D,EAAA,uBACE,IAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,cAAA,EACd,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,OAAO,EAAE,KAAA,EAAO,QAAQ,SAAA,EAAW,MAAA,EAAQ,cAAc,MAAA,EAAO;AAAA,QAChE,WAAA,EAAa,aAAa,kCAAA,GAAqC,EAAA;AAAA,QAC/D,EAAA,EAAG,UAAA;AAAA,QACH,KAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,CAAA,KAAA,KAAS,UAAA,CAAW,KAAK,CAAA;AAAA,QACnC,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,QACnC,SAAA,EAAW,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACtC,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import Button from '@
|
|
3
|
-
import Dialog from '@mui/material/Dialog';
|
|
4
|
-
import DialogActions from '@mui/material/DialogActions';
|
|
5
|
-
import DialogContent from '@mui/material/DialogContent';
|
|
6
|
-
import DialogTitle from '@mui/material/DialogTitle';
|
|
2
|
+
import { Dialog, DialogHeader, DialogBody, DialogFooter, Button } from '@backstage/ui';
|
|
7
3
|
import { JsonViewer } from '@textea/json-viewer';
|
|
8
4
|
|
|
9
5
|
function InspectReportDialog(props) {
|
|
10
|
-
return /* @__PURE__ */ jsxs(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
return /* @__PURE__ */ jsxs(
|
|
7
|
+
Dialog,
|
|
8
|
+
{
|
|
9
|
+
isOpen: props.open,
|
|
10
|
+
onOpenChange: (isOpen) => !isOpen && props.onClose(),
|
|
11
|
+
width: "90vw",
|
|
12
|
+
children: [
|
|
13
|
+
/* @__PURE__ */ jsx(DialogHeader, { children: "Report Inspector" }),
|
|
14
|
+
/* @__PURE__ */ jsx(DialogBody, { children: /* @__PURE__ */ jsx(JsonViewer, { theme: "auto", value: props.report }) }),
|
|
15
|
+
/* @__PURE__ */ jsx(DialogFooter, { children: /* @__PURE__ */ jsx(Button, { slot: "close", variant: "primary", children: "Close" }) })
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
);
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
export { InspectReportDialog };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InspectReportDialog.esm.js","sources":["../../../src/components/ReportFetchComponent/InspectReportDialog.tsx"],"sourcesContent":["import Button from '@
|
|
1
|
+
{"version":3,"file":"InspectReportDialog.esm.js","sources":["../../../src/components/ReportFetchComponent/InspectReportDialog.tsx"],"sourcesContent":["import {\n Dialog,\n DialogHeader,\n DialogBody,\n DialogFooter,\n Button,\n} from '@backstage/ui';\n\nimport { JsonViewer } from '@textea/json-viewer';\n\nexport interface InspectReportDialogProps {\n open: boolean;\n report: unknown;\n onClose: () => void;\n}\n\nexport function InspectReportDialog(props: InspectReportDialogProps) {\n return (\n <Dialog\n isOpen={props.open}\n onOpenChange={isOpen => !isOpen && props.onClose()}\n width=\"90vw\"\n >\n <DialogHeader>Report Inspector</DialogHeader>\n <DialogBody>\n <JsonViewer theme=\"auto\" value={props.report} />\n </DialogBody>\n <DialogFooter>\n <Button slot=\"close\" variant=\"primary\">\n Close\n </Button>\n </DialogFooter>\n </Dialog>\n );\n}\n"],"names":[],"mappings":";;;;AAgBO,SAAS,oBAAoB,KAAA,EAAiC;AACnE,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAQ,KAAA,CAAM,IAAA;AAAA,MACd,YAAA,EAAc,CAAA,MAAA,KAAU,CAAC,MAAA,IAAU,MAAM,OAAA,EAAQ;AAAA,MACjD,KAAA,EAAM,MAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,gBAAa,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,wBAC9B,GAAA,CAAC,cACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,MAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,CAAA,EAChD,CAAA;AAAA,wBACA,GAAA,CAAC,gBACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,MAAK,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,QAAA,EAAA,OAAA,EAEvC,CAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
import Button from '@
|
|
4
|
-
import CardActions from '@mui/material/CardActions';
|
|
3
|
+
import { Flex, Button } from '@backstage/ui';
|
|
5
4
|
import CircularProgress from '@mui/material/CircularProgress';
|
|
6
5
|
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
|
|
7
6
|
import is from '@sindresorhus/is';
|
|
@@ -46,16 +45,16 @@ function StartRenovateButton(props) {
|
|
|
46
45
|
message: result.statusText
|
|
47
46
|
});
|
|
48
47
|
};
|
|
49
|
-
return /* @__PURE__ */ jsxs(
|
|
48
|
+
return /* @__PURE__ */ jsxs(Flex, { direction: "row", gap: "2", style: { padding: "8px" }, children: [
|
|
50
49
|
loading && /* @__PURE__ */ jsx(CircularProgress, {}),
|
|
51
50
|
/* @__PURE__ */ jsx(
|
|
52
51
|
Button,
|
|
53
52
|
{
|
|
54
53
|
id: "run-renovate",
|
|
55
|
-
variant: "
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
variant: "primary",
|
|
55
|
+
iconEnd: /* @__PURE__ */ jsx(PlayArrowIcon, {}),
|
|
56
|
+
onPress: triggerRenovateRun,
|
|
57
|
+
isDisabled: loading,
|
|
59
58
|
children: title ?? "Run Renovate"
|
|
60
59
|
}
|
|
61
60
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartRenovateButton.esm.js","sources":["../../../src/components/StartRenovateButton/StartRenovateButton.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Button
|
|
1
|
+
{"version":3,"file":"StartRenovateButton.esm.js","sources":["../../../src/components/StartRenovateButton/StartRenovateButton.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Button, Flex } from '@backstage/ui';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport is from '@sindresorhus/is';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { renovateApiRef } from '../../api';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\n\nexport interface StartRenovateButtonProps {\n target: string | Entity;\n title?: string;\n onFailure?: () => void;\n onSuccess?: () => void;\n}\n\nexport function StartRenovateButton(props: StartRenovateButtonProps) {\n const { onFailure, onSuccess, target, title } = props;\n\n const alertAPI = useApi(alertApiRef);\n\n const massagedTarget = is.string(target)\n ? target\n : stringifyEntityRef(target);\n const renovateAPI = useApi(renovateApiRef);\n\n const [loading, setLoading] = useState<boolean>(false);\n\n const triggerRenovateRun = async () => {\n if (is.emptyString(massagedTarget)) {\n if (onFailure) {\n onFailure();\n }\n return;\n }\n\n if (onSuccess) {\n onSuccess();\n }\n setLoading(true);\n\n const result = await renovateAPI.runsPost({\n body: {\n target: massagedTarget,\n },\n });\n const body = await result.json();\n\n setLoading(false);\n\n if (result.ok) {\n alertAPI.post({\n severity: 'success',\n display: 'transient',\n message: `Started job ${body.taskID}`,\n });\n return;\n }\n\n alertAPI.post({\n severity: 'error',\n message: result.statusText,\n });\n };\n\n return (\n <Flex direction=\"row\" gap=\"2\" style={{ padding: '8px' }}>\n {loading && <CircularProgress />}\n <Button\n id=\"run-renovate\"\n variant=\"primary\"\n iconEnd={<PlayArrowIcon />}\n onPress={triggerRenovateRun}\n isDisabled={loading}\n >\n {title ?? 'Run Renovate'}\n </Button>\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAgBO,SAAS,oBAAoB,KAAA,EAAiC;AACnE,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAW,MAAA,EAAQ,OAAM,GAAI,KAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AAEnC,EAAA,MAAM,iBAAiB,EAAA,CAAG,MAAA,CAAO,MAAM,CAAA,GACnC,MAAA,GACA,mBAAmB,MAAM,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AAEzC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkB,KAAK,CAAA;AAErD,EAAA,MAAM,qBAAqB,YAAY;AACrC,IAAA,IAAI,EAAA,CAAG,WAAA,CAAY,cAAc,CAAA,EAAG;AAClC,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,SAAA,EAAU;AAAA,MACZ;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,EAAU;AAAA,IACZ;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AAEf,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,QAAA,CAAS;AAAA,MACxC,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ;AAAA;AACV,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,EAAK;AAE/B,IAAA,UAAA,CAAW,KAAK,CAAA;AAEhB,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,WAAA;AAAA,QACT,OAAA,EAAS,CAAA,YAAA,EAAe,IAAA,CAAK,MAAM,CAAA;AAAA,OACpC,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,QAAA,EAAU,OAAA;AAAA,MACV,SAAS,MAAA,CAAO;AAAA,KACjB,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,KAAA,EAAM,GAAA,EAAI,KAAI,KAAA,EAAO,EAAE,OAAA,EAAS,KAAA,EAAM,EACnD,QAAA,EAAA;AAAA,IAAA,OAAA,wBAAY,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAC9B,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,cAAA;AAAA,QACH,OAAA,EAAQ,SAAA;AAAA,QACR,OAAA,sBAAU,aAAA,EAAA,EAAc,CAAA;AAAA,QACxB,OAAA,EAAS,kBAAA;AAAA,QACT,UAAA,EAAY,OAAA;AAAA,QAEX,QAAA,EAAA,KAAA,IAAS;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.esm.js","sources":["../../src/tools/path.ts"],"sourcesContent":["/**\n * Extracts the directory portion from a file path.\n * For files at root (no '/'), returns undefined.\n * For files in subdirectories, returns the directory path.\n *\n * @example\n * getDirectoryFromPath('catalog.yaml') // undefined\n * getDirectoryFromPath('subdir/catalog.yaml') // 'subdir'\n * getDirectoryFromPath('a/b/c/file.yaml') // 'a/b/c'\n * getDirectoryFromPath('') // undefined\n * getDirectoryFromPath(undefined) // undefined\n */\nexport function getDirectoryFromPath(\n filepath: string | undefined,\n): string | undefined {\n if (!filepath || !filepath.includes('/')) {\n return undefined;\n }\n return filepath.substring(0, filepath.lastIndexOf('/'));\n}\n"],"names":[],"mappings":"AAYO,SAAS,qBACd,QAAA,EACoB;AACpB,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACxC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,SAAA,CAAU,CAAA,EAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AACxD;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secustor/backstage-plugin-renovate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"main": "./dist/index.esm.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"license": "LGPL-3.0-or-later",
|
|
@@ -69,15 +69,16 @@
|
|
|
69
69
|
"postpack": "backstage-cli package postpack"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@backstage/catalog-model": "^1.7.
|
|
73
|
-
"@backstage/core-compat-api": "^0.5.
|
|
74
|
-
"@backstage/core-components": "^0.18.
|
|
75
|
-
"@backstage/core-plugin-api": "^1.
|
|
72
|
+
"@backstage/catalog-model": "^1.7.6",
|
|
73
|
+
"@backstage/core-compat-api": "^0.5.5",
|
|
74
|
+
"@backstage/core-components": "^0.18.4",
|
|
75
|
+
"@backstage/core-plugin-api": "^1.12.1",
|
|
76
76
|
"@backstage/errors": "^1.2.7",
|
|
77
|
-
"@backstage/frontend-plugin-api": "^0.
|
|
78
|
-
"@backstage/integration-react": "^1.2.
|
|
79
|
-
"@backstage/plugin-catalog-react": "^1.
|
|
80
|
-
"@backstage/theme": "^0.7.
|
|
77
|
+
"@backstage/frontend-plugin-api": "^0.13.2",
|
|
78
|
+
"@backstage/integration-react": "^1.2.13",
|
|
79
|
+
"@backstage/plugin-catalog-react": "^1.21.4",
|
|
80
|
+
"@backstage/theme": "^0.7.1",
|
|
81
|
+
"@backstage/ui": "^0.10.0",
|
|
81
82
|
"@emotion/react": "^11.13.3",
|
|
82
83
|
"@emotion/styled": "^11.13.0",
|
|
83
84
|
"@mui/icons-material": "^7.0.0",
|
|
@@ -85,8 +86,8 @@
|
|
|
85
86
|
"@mui/material": "~7.2.0",
|
|
86
87
|
"@mui/styles": "^6.1.0",
|
|
87
88
|
"@mui/x-data-grid": "^8.0.0",
|
|
88
|
-
"@secustor/backstage-plugin-renovate-client": "^0.10.
|
|
89
|
-
"@secustor/backstage-plugin-renovate-common": "^0.9.
|
|
89
|
+
"@secustor/backstage-plugin-renovate-client": "^0.10.9",
|
|
90
|
+
"@secustor/backstage-plugin-renovate-common": "^0.9.5",
|
|
90
91
|
"@sindresorhus/is": "^4.6.0",
|
|
91
92
|
"@textea/json-viewer": "^4.0.0",
|
|
92
93
|
"git-url-parse": "^16.0.0",
|
|
@@ -97,11 +98,11 @@
|
|
|
97
98
|
"react-dom": "*"
|
|
98
99
|
},
|
|
99
100
|
"devDependencies": {
|
|
100
|
-
"@backstage/cli": "^0.
|
|
101
|
-
"@backstage/core-app-api": "^1.
|
|
102
|
-
"@backstage/dev-utils": "^1.1.
|
|
103
|
-
"@backstage/frontend-defaults": "^0.3.
|
|
104
|
-
"@backstage/test-utils": "^1.7.
|
|
101
|
+
"@backstage/cli": "^0.35.1",
|
|
102
|
+
"@backstage/core-app-api": "^1.19.3",
|
|
103
|
+
"@backstage/dev-utils": "^1.1.18",
|
|
104
|
+
"@backstage/frontend-defaults": "^0.3.4",
|
|
105
|
+
"@backstage/test-utils": "^1.7.14",
|
|
105
106
|
"@testing-library/jest-dom": "^6.0.0",
|
|
106
107
|
"@testing-library/react": "^16.0.0",
|
|
107
108
|
"@testing-library/user-event": "^14.0.0",
|