@secustor/backstage-plugin-renovate 0.19.1 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @secustor/backstage-plugin-renovate
2
2
 
3
+ ## 0.20.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#962](https://github.com/secustor/backstage-plugins/pull/962) [`97465c9`](https://github.com/secustor/backstage-plugins/commit/97465c9a90610544d5e2332764f3e7240c655322) Thanks [@renovate](https://github.com/apps/renovate)! - Bump Backstage to 1.47.1
8
+
9
+ ## 0.20.0
10
+
11
+ ### Minor 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)! - Move some components to @backstage/ui
14
+
15
+ - [#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
16
+
17
+ ### Patch Changes
18
+
19
+ - [#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
20
+
21
+ - [#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
22
+
23
+ - [#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
24
+
25
+ - Updated dependencies [[`bcbdf92`](https://github.com/secustor/backstage-plugins/commit/bcbdf92f8eefe66ed30cce94765247005ff529be)]:
26
+ - @secustor/backstage-plugin-renovate-client@0.10.9
27
+ - @secustor/backstage-plugin-renovate-common@0.9.5
28
+
3
29
  ## 0.19.1
4
30
 
5
31
  ### Patch 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,7 +2,6 @@ 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
6
  declare const renovateNavItem: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
8
7
  kind: "nav-item";
@@ -11,29 +10,31 @@ declare const renovateNavItem: _backstage_frontend_plugin_api.OverridableExtensi
11
10
  configInput: {};
12
11
  output: _backstage_frontend_plugin_api.ExtensionDataRef<{
13
12
  title: string;
14
- icon: _backstage_core_plugin_api.IconComponent;
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: _backstage_core_plugin_api.IconComponent;
19
+ icon: _backstage_frontend_plugin_api.IconComponent;
21
20
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
22
21
  };
23
22
  }>;
24
23
  declare const renovatePage: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
25
- kind: "page";
26
- name: undefined;
27
24
  config: {
25
+ showStarter: boolean;
28
26
  path: string | undefined;
29
27
  };
30
28
  configInput: {
31
- path?: string | undefined;
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;
@@ -84,9 +85,9 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
84
85
  name: undefined;
85
86
  config: {};
86
87
  configInput: {};
87
- output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
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: _backstage_core_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_core_plugin_api.AnyApiFactory>;
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
92
  "entity-content:renovate": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
92
93
  kind: "entity-content";
@@ -132,29 +133,31 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
132
133
  configInput: {};
133
134
  output: _backstage_frontend_plugin_api.ExtensionDataRef<{
134
135
  title: string;
135
- icon: _backstage_core_plugin_api.IconComponent;
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: _backstage_core_plugin_api.IconComponent;
142
+ icon: _backstage_frontend_plugin_api.IconComponent;
142
143
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
143
144
  };
144
145
  }>;
145
146
  "page:renovate": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
146
- kind: "page";
147
- name: undefined;
148
147
  config: {
148
+ showStarter: boolean;
149
149
  path: string | undefined;
150
150
  };
151
151
  configInput: {
152
- path?: string | undefined;
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.make({
18
- params: {
19
- path: "/renovate",
20
- routeRef: rootRouteRef,
21
- loader: () => import('./components/RenovateDefaultOverview/index.esm.js').then(
22
- (m) => compatWrapper(/* @__PURE__ */ jsx(m.RenovateDefaultOverview, {}))
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({
@@ -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 { compatWrapper } from '@backstage/core-compat-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.make({\n params: {\n path: '/renovate',\n routeRef: rootRouteRef,\n loader: () =>\n import('./components/RenovateDefaultOverview').then(m =>\n compatWrapper(<m.RenovateDefaultOverview />),\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 compatWrapper(<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":";;;;;;;;AAcA,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,IAAA,CAAK;AAAA,EAC7C,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,MACN,OAAO,mDAAsC,CAAA,CAAE,IAAA;AAAA,MAAK,OAClD,aAAA,iBAAc,GAAA,CAAC,CAAA,CAAE,uBAAA,EAAF,EAA0B,CAAE;AAAA;AAC7C;AAEN,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;AAAA,MAAK,OAChD,aAAA,iBAAc,GAAA,CAAC,CAAA,CAAE,qBAAA,EAAF,EAAwB,CAAE;AAAA;AAC3C;AAEN,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;;;;"}
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 { Progress, ResponseErrorPanel, Table, Link } from '@backstage/core-components';
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: parsed.filepath },
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
- to: scmIntegrationsApi.resolveUrl({ base: baseURL, url: file }),
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 Link,\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 } 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 return (\n <DependencyTable\n packageFiles={value.report.packageFiles}\n filter={{ path: parsed.filepath }}\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 to={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":"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"}
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":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import Grid from '@mui/material/Grid';
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(Grid, { container: true, spacing: 3, direction: "column", children: [
16
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "3", children: [
17
17
  /* @__PURE__ */ jsx(DependencyTable, {}),
18
18
  props?.showStarter && /* @__PURE__ */ jsx(RenovateStarter, {}),
19
- /* @__PURE__ */ jsx(Grid, { children: /* @__PURE__ */ jsx(ReportFetchComponent, {}) })
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 Grid from '@mui/material/Grid';\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 <Grid container spacing={3} direction=\"column\">\n <DependencyTable />\n {props?.showStarter && <RenovateStarter />}\n <Grid>\n <ReportFetchComponent />\n </Grid>\n </Grid>\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,2BACC,IAAA,EAAA,EAAK,SAAA,EAAS,MAAC,OAAA,EAAS,CAAA,EAAG,WAAU,QAAA,EACpC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,QAChB,KAAA,EAAO,WAAA,oBAAe,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,wBACxC,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,CAAA,EACxB;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
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 '@mui/material/TextField';
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
- fullWidth: true,
15
- error: inputError,
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: (e) => setRepoURL(e.target.value),
20
- margin: "normal"
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 '@mui/material/TextField';\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 fullWidth\n error={inputError}\n helperText={inputError ? 'Add a source url to run Renovate' : ''}\n id=\"repo-url\"\n label=\"RepoURL\"\n onChange={e => setRepoURL(e.target.value)}\n margin=\"normal\"\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,SAAA,EAAS,IAAA;AAAA,QACT,KAAA,EAAO,UAAA;AAAA,QACP,UAAA,EAAY,aAAa,kCAAA,GAAqC,EAAA;AAAA,QAC9D,EAAA,EAAG,UAAA;AAAA,QACH,KAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,MAAA,EAAO;AAAA;AAAA,KACT;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
+ {"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 '@mui/material/Button';
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(Dialog, { open: props.open, onClose: props.onClose, fullWidth: true, maxWidth: "xl", children: [
11
- /* @__PURE__ */ jsx(DialogTitle, { id: "report-inspector-dialog-title", children: "Report Inspector" }),
12
- /* @__PURE__ */ jsx(DialogContent, { children: /* @__PURE__ */ jsx(JsonViewer, { theme: "auto", value: props.report }) }),
13
- /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(Button, { onClick: props.onClose, color: "primary", children: "Close" }) })
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 '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\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 open={props.open} onClose={props.onClose} fullWidth maxWidth=\"xl\">\n <DialogTitle id=\"report-inspector-dialog-title\">\n Report Inspector\n </DialogTitle>\n <DialogContent>\n <JsonViewer theme=\"auto\" value={props.report} />\n </DialogContent>\n <DialogActions>\n <Button onClick={props.onClose} color=\"primary\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAcO,SAAS,oBAAoB,KAAA,EAAiC;AACnE,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,SAAA,EAAS,IAAA,EAAC,QAAA,EAAS,IAAA,EACnE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,EAAA,EAAG,+BAAA,EAAgC,QAAA,EAAA,kBAAA,EAEhD,CAAA;AAAA,oBACA,GAAA,CAAC,iBACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,MAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,CAAA,EAChD,CAAA;AAAA,oBACA,GAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,MAAM,OAAA,EAAS,KAAA,EAAM,SAAA,EAAU,QAAA,EAAA,OAAA,EAEhD,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
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 '@mui/material/Button';
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(CardActions, { children: [
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: "contained",
56
- endIcon: /* @__PURE__ */ jsx(PlayArrowIcon, {}),
57
- onClick: triggerRenovateRun,
58
- disabled: loading,
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 from '@mui/material/Button';\nimport CardActions from '@mui/material/CardActions';\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 <CardActions>\n {loading && <CircularProgress />}\n <Button\n id=\"run-renovate\"\n variant=\"contained\"\n endIcon={<PlayArrowIcon />}\n onClick={triggerRenovateRun}\n disabled={loading}\n >\n {title ?? 'Run Renovate'}\n </Button>\n </CardActions>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAiBO,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,4BACG,WAAA,EAAA,EACE,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,WAAA;AAAA,QACR,OAAA,sBAAU,aAAA,EAAA,EAAc,CAAA;AAAA,QACxB,OAAA,EAAS,kBAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QAET,QAAA,EAAA,KAAA,IAAS;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;;;;"}
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,9 @@
1
+ function getDirectoryFromPath(filepath) {
2
+ if (!filepath || !filepath.includes("/")) {
3
+ return void 0;
4
+ }
5
+ return filepath.substring(0, filepath.lastIndexOf("/"));
6
+ }
7
+
8
+ export { getDirectoryFromPath };
9
+ //# sourceMappingURL=path.esm.js.map
@@ -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.19.1",
3
+ "version": "0.20.1",
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.5",
73
- "@backstage/core-compat-api": "^0.5.1",
74
- "@backstage/core-components": "^0.18.0",
75
- "@backstage/core-plugin-api": "^1.10.9",
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.13.0",
78
- "@backstage/integration-react": "^1.2.9",
79
- "@backstage/plugin-catalog-react": "^1.20.1",
80
- "@backstage/theme": "^0.7.0",
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.11.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.8",
89
- "@secustor/backstage-plugin-renovate-common": "^0.9.4",
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.34.1",
101
- "@backstage/core-app-api": "^1.18.0",
102
- "@backstage/dev-utils": "^1.1.13",
103
- "@backstage/frontend-defaults": "^0.3.0",
104
- "@backstage/test-utils": "^1.7.11",
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",