(
...restProps
} = props;
- const { getResponsiveValue } = useCanon();
-
// Get the responsive values for the variant and weight
- const responsiveVariant = getResponsiveValue(variant);
- const responsiveWeight = getResponsiveValue(weight);
+ const responsiveVariant = useResponsiveValue(variant);
+ const responsiveWeight = useResponsiveValue(weight);
return (
>,
- ) => string;
}
-const CanonContext = createContext({
- icons,
- breakpoint: 'md',
- getResponsiveValue: () => '',
-});
-
/** @public */
export interface CanonProviderProps {
children?: ReactNode;
overrides?: Partial>;
}
+const CanonContext = createContext({
+ icons,
+});
+
/** @public */
export const CanonProvider = (props: CanonProviderProps) => {
const { children, overrides } = props;
@@ -50,50 +42,8 @@ export const CanonProvider = (props: CanonProviderProps) => {
// Merge provided overrides with default icons
const combinedIcons = { ...icons, ...overrides };
- const isBreakpointSm = useMediaQuery(`(min-width: 640px)`);
- const isBreakpointMd = useMediaQuery(`(min-width: 768px)`);
- const isBreakpointLg = useMediaQuery(`(min-width: 1024px)`);
- const isBreakpointXl = useMediaQuery(`(min-width: 1280px)`);
- const isBreakpoint2xl = useMediaQuery(`(min-width: 1536px)`);
-
- // Determine the current breakpoint
- const breakpoint = (() => {
- if (isBreakpoint2xl) return '2xl';
- if (isBreakpointXl) return 'xl';
- if (isBreakpointLg) return 'lg';
- if (isBreakpointMd) return 'md';
- if (isBreakpointSm) return 'sm';
- return 'xs';
- })();
-
- const getResponsiveValue = (
- value: string | Partial>,
- ) => {
- if (typeof value === 'object') {
- const breakpointsOrder: Breakpoint[] = [
- 'xs',
- 'sm',
- 'md',
- 'lg',
- 'xl',
- '2xl',
- ];
- const index = breakpointsOrder.indexOf(breakpoint);
-
- for (let i = index; i >= 0; i--) {
- if (value[breakpointsOrder[i]]) {
- return value[breakpointsOrder[i]] as string;
- }
- }
- return value['xs'] as string;
- }
- return value;
- };
-
return (
-
+
{children}
);
diff --git a/packages/canon/src/css/core.css b/packages/canon/src/css/core.css
index abba9f3d9c..bd03d4d906 100644
--- a/packages/canon/src/css/core.css
+++ b/packages/canon/src/css/core.css
@@ -31,22 +31,19 @@
--canon-font-weight-bold: 600;
/* Font sizes */
- --canon-font-size-label: 0.625rem; /* 10px */
- --canon-font-size-caption: 0.75rem; /* 12px */
- --canon-font-size-body: 0.875rem; /* 14px */
- --canon-font-size-subtitle: 1rem; /* 16px */
- --canon-font-size-title5: 1.25rem; /* 20px */
- --canon-font-size-title4: 1.5rem; /* 24px */
- --canon-font-size-title3: 2rem; /* 32px */
- --canon-font-size-title2: 3rem; /* 48px */
- --canon-font-size-title1: 4rem; /* 64px */
- --canon-font-size-display: 5.75rem; /* 92px */
+ --canon-font-size-1: 0.625rem; /* 10px */
+ --canon-font-size-2: 0.75rem; /* 12px */
+ --canon-font-size-3: 0.875rem; /* 14px */
+ --canon-font-size-4: 1rem; /* 16px */
+ --canon-font-size-5: 1.25rem; /* 20px */
+ --canon-font-size-6: 1.5rem; /* 24px */
+ --canon-font-size-7: 2rem; /* 32px */
+ --canon-font-size-8: 3rem; /* 48px */
+ --canon-font-size-9: 4rem; /* 64px */
+ --canon-font-size-10: 5.75rem; /* 92px */
/* Spacing */
- /* This is the spacing multiplier */
- --canon-space: 0.25rem; /* 4px */
-
- /* These are the spacing scale */
+ --canon-space: 0.25rem; /* This is the spacing multiplier */
--canon-space-0_5: calc(var(--canon-space) * 0.5); /* 2px */
--canon-space-1: var(--canon-space); /* 4px */
--canon-space-1_5: calc(var(--canon-space) * 1.5); /* 6px */
@@ -64,58 +61,81 @@
--canon-space-13: calc(var(--canon-space) * 13); /* 52px */
--canon-space-14: calc(var(--canon-space) * 14); /* 56px */
- /* Border radius */
- --canon-border-radius-2xs: 0.125rem; /* 2px */
- --canon-border-radius-xs: 0.25rem; /* 4px */
- --canon-border-radius-sm: 0.5rem; /* 8px */
- --canon-border-radius-md: 0.75rem; /* 12px */
- --canon-border-radius-lg: 1rem; /* 16px */
- --canon-border-radius-xl: 1.25rem; /* 20px */
- --canon-border-radius-2xl: 1.5rem; /* 24px */
+ /* Radius */
+ --canon-radius-factor: 1.5;
+ --canon-radius-1: calc(3px * var(--canon-radius-factor));
+ --canon-radius-2: calc(4px * var(--canon-radius-factor));
+ --canon-radius-3: calc(6px * var(--canon-radius-factor));
+ --canon-radius-4: calc(8px * var(--canon-radius-factor));
+ --canon-radius-5: calc(12px * var(--canon-radius-factor));
+ --canon-radius-6: calc(16px * var(--canon-radius-factor));
+ --canon-radius-full: 9999px;
/* Colors */
- --canon-accent: #000;
- --canon-background: #f8f8f8;
- --canon-surface-1: #fff;
- --canon-surface-2: #f4f4f4;
- --canon-surface-3: #f1f1f1;
-
- /* Borders */
- --canon-border-base: rgba(0, 0, 0, 0.1);
+ --canon-bg: #f8f8f8;
+ --canon-bg-elevated: #fff;
+ --canon-bg-accent: #000;
+ --canon-bg-accent-active: #000;
+ --canon-bg-accent-disabled: #000;
+ --canon-bg-accent-hover: #000;
+ --canon-bg-tint: #edf2fe;
+ --canon-bg-tint-active: #c7d7ff;
+ --canon-bg-tint-disabled: #f8f8f8;
+ --canon-bg-tint-hover: #dbe4ff;
+ --canon-bg-danger: #f8f8f8;
+ --canon-bg-elevated: #fff;
+ --canon-bg-success: #f8f8f8;
+ --canon-bg-warning: #f8f8f8;
+ --canon-border: rgba(0, 0, 0, 0.1);
+ --canon-border-accent: #000;
+ --canon-border-accent-focus: #000;
+ --canon-border-accent-hover: #000;
+ --canon-border-danger: #e22b2b;
+ --canon-border-focus: rgba(0, 0, 0, 0.4);
--canon-border-hover: rgba(0, 0, 0, 0.2);
+ --canon-border-success: #008000;
--canon-border-warning: #e36d05;
- --canon-border-error: #e22b2b;
- --canon-border-selected: rgba(0, 0, 0, 0.4);
-
- /* States - Add more states */
- --canon-error: #f50000;
-
- /* Text colors */
+ --canon-fg-accent: #fff;
+ --canon-fg-danger: #e22b2b;
+ --canon-fg-success: #008000;
+ --canon-fg-warning: #e36d05;
+ --canon-text-link: #fff;
+ --canon-text-link-hover: #fff;
--canon-text-primary: #000;
- --canon-text-primary-on-accent: #fff;
--canon-text-secondary: #646464;
}
/* Dark theme tokens */
[data-theme='dark'] {
- /* Colors */
- --canon-accent: #fff;
- --canon-background: #000;
- --canon-surface-1: #121212;
- --canon-surface-2: #1a1a1a;
-
- /* Borders */
- --canon-border-base: rgba(255, 255, 255, 0.2);
- --canon-border-hover: rgba(255, 255, 255, 0.3);
- --canon-border-warning: #f50000;
- --canon-border-error: #f87503;
- --canon-border-selected: rgba(255, 255, 255, 0.4);
-
- /* States - Add more states */
- --canon-error: #f50000;
-
- /* Text colors */
- --canon-text-primary: #fff;
- --canon-text-primary-on-accent: #000;
- --canon-text-secondary: #b3b3b3;
+ --canon-bg: #f8f8f8;
+ --canon-bg-elevated: #fff;
+ --canon-bg-accent: #000;
+ --canon-bg-accent-active: #000;
+ --canon-bg-accent-disabled: #000;
+ --canon-bg-accent-hover: #000;
+ --canon-bg-tint: #edf2fe;
+ --canon-bg-tint-active: #c7d7ff;
+ --canon-bg-tint-disabled: #f8f8f8;
+ --canon-bg-tint-hover: #dbe4ff;
+ --canon-bg-danger: #f8f8f8;
+ --canon-bg-elevated: #fff;
+ --canon-bg-success: #f8f8f8;
+ --canon-bg-warning: #f8f8f8;
+ --canon-border: rgba(0, 0, 0, 0.1);
+ --canon-border-accent: #000;
+ --canon-border-accent-focus: #000;
+ --canon-border-accent-hover: #000;
+ --canon-border-danger: #e22b2b;
+ --canon-border-focus: rgba(0, 0, 0, 0.4);
+ --canon-border-hover: rgba(0, 0, 0, 0.2);
+ --canon-border-success: #008000;
+ --canon-border-warning: #e36d05;
+ --canon-fg-accent: #000;
+ --canon-fg-danger: #e22b2b;
+ --canon-fg-success: #008000;
+ --canon-fg-warning: #e36d05;
+ --canon-text-link: #fff;
+ --canon-text-link-hover: #fff;
+ --canon-text-primary: #000;
+ --canon-text-secondary: #646464;
}
diff --git a/packages/canon/src/css/utilities/2xl.css b/packages/canon/src/css/utilities/2xl.css
index bbf51c3af6..0252fefaf7 100644
--- a/packages/canon/src/css/utilities/2xl.css
+++ b/packages/canon/src/css/utilities/2xl.css
@@ -21,13 +21,13 @@
}
.cu-2xl-border-base {
- border-color: var(--canon-border-base);
+ border-color: var(--canon-border);
border-width: 1px;
border-style: solid;
}
.cu-2xl-border-error {
- border-color: var(--canon-border-error);
+ border-color: var(--canon-border-danger);
border-width: 1px;
border-style: solid;
}
@@ -38,7 +38,7 @@
}
.cu-2xl-border-selected {
- border-color: var(--canon-border-selected);
+ border-color: var(--canon-border-focus);
border-width: 1px;
border-style: solid;
}
@@ -854,19 +854,19 @@
}
.cu-2xl-rounded-2xl {
- border-radius: var(--canon-border-radius-2xl);
+ border-radius: var(--canon-radius-full);
}
.cu-2xl-rounded-2xs {
- border-radius: var(--canon-border-radius-2xs);
+ border-radius: var(--canon-radius-1);
}
.cu-2xl-rounded-lg {
- border-radius: var(--canon-border-radius-lg);
+ border-radius: var(--canon-radius-5);
}
.cu-2xl-rounded-md {
- border-radius: var(--canon-border-radius-md);
+ border-radius: var(--canon-radius-4);
}
.cu-2xl-rounded-none {
@@ -874,15 +874,15 @@
}
.cu-2xl-rounded-sm {
- border-radius: var(--canon-border-radius-sm);
+ border-radius: var(--canon-radius-3);
}
.cu-2xl-rounded-xl {
- border-radius: var(--canon-border-radius-xl);
+ border-radius: var(--canon-radius-6);
}
.cu-2xl-rounded-xs {
- border-radius: var(--canon-border-radius-xs);
+ border-radius: var(--canon-radius-2);
}
.cu-2xl-row-span-1 {
diff --git a/packages/canon/src/css/utilities/lg.css b/packages/canon/src/css/utilities/lg.css
index e2bb93a355..a69dae1df3 100644
--- a/packages/canon/src/css/utilities/lg.css
+++ b/packages/canon/src/css/utilities/lg.css
@@ -21,13 +21,13 @@
}
.cu-lg-border-base {
- border-color: var(--canon-border-base);
+ border-color: var(--canon-border);
border-width: 1px;
border-style: solid;
}
.cu-lg-border-error {
- border-color: var(--canon-border-error);
+ border-color: var(--canon-border-danger);
border-width: 1px;
border-style: solid;
}
@@ -38,7 +38,7 @@
}
.cu-lg-border-selected {
- border-color: var(--canon-border-selected);
+ border-color: var(--canon-border-focus);
border-width: 1px;
border-style: solid;
}
@@ -854,19 +854,19 @@
}
.cu-lg-rounded-2xl {
- border-radius: var(--canon-border-radius-2xl);
+ border-radius: var(--canon-radius-full);
}
.cu-lg-rounded-2xs {
- border-radius: var(--canon-border-radius-2xs);
+ border-radius: var(--canon-radius-1);
}
.cu-lg-rounded-lg {
- border-radius: var(--canon-border-radius-lg);
+ border-radius: var(--canon-radius-5);
}
.cu-lg-rounded-md {
- border-radius: var(--canon-border-radius-md);
+ border-radius: var(--canon-radius-4);
}
.cu-lg-rounded-none {
@@ -874,15 +874,15 @@
}
.cu-lg-rounded-sm {
- border-radius: var(--canon-border-radius-sm);
+ border-radius: var(--canon-radius-3);
}
.cu-lg-rounded-xl {
- border-radius: var(--canon-border-radius-xl);
+ border-radius: var(--canon-radius-6);
}
.cu-lg-rounded-xs {
- border-radius: var(--canon-border-radius-xs);
+ border-radius: var(--canon-radius-2);
}
.cu-lg-row-span-1 {
diff --git a/packages/canon/src/css/utilities/md.css b/packages/canon/src/css/utilities/md.css
index 19842e2eab..2230865466 100644
--- a/packages/canon/src/css/utilities/md.css
+++ b/packages/canon/src/css/utilities/md.css
@@ -21,13 +21,13 @@
}
.cu-md-border-base {
- border-color: var(--canon-border-base);
+ border-color: var(--canon-border);
border-width: 1px;
border-style: solid;
}
.cu-md-border-error {
- border-color: var(--canon-border-error);
+ border-color: var(--canon-border-danger);
border-width: 1px;
border-style: solid;
}
@@ -38,7 +38,7 @@
}
.cu-md-border-selected {
- border-color: var(--canon-border-selected);
+ border-color: var(--canon-border-focus);
border-width: 1px;
border-style: solid;
}
@@ -854,19 +854,19 @@
}
.cu-md-rounded-2xl {
- border-radius: var(--canon-border-radius-2xl);
+ border-radius: var(--canon-radius-full);
}
.cu-md-rounded-2xs {
- border-radius: var(--canon-border-radius-2xs);
+ border-radius: var(--canon-radius-1);
}
.cu-md-rounded-lg {
- border-radius: var(--canon-border-radius-lg);
+ border-radius: var(--canon-radius-5);
}
.cu-md-rounded-md {
- border-radius: var(--canon-border-radius-md);
+ border-radius: var(--canon-radius-4);
}
.cu-md-rounded-none {
@@ -874,15 +874,15 @@
}
.cu-md-rounded-sm {
- border-radius: var(--canon-border-radius-sm);
+ border-radius: var(--canon-radius-3);
}
.cu-md-rounded-xl {
- border-radius: var(--canon-border-radius-xl);
+ border-radius: var(--canon-radius-6);
}
.cu-md-rounded-xs {
- border-radius: var(--canon-border-radius-xs);
+ border-radius: var(--canon-radius-2);
}
.cu-md-row-span-1 {
diff --git a/packages/canon/src/css/utilities/sm.css b/packages/canon/src/css/utilities/sm.css
index 7a4e9a0cc7..c8fe35cb42 100644
--- a/packages/canon/src/css/utilities/sm.css
+++ b/packages/canon/src/css/utilities/sm.css
@@ -21,13 +21,13 @@
}
.cu-sm-border-base {
- border-color: var(--canon-border-base);
+ border-color: var(--canon-border);
border-width: 1px;
border-style: solid;
}
.cu-sm-border-error {
- border-color: var(--canon-border-error);
+ border-color: var(--canon-border-danger);
border-width: 1px;
border-style: solid;
}
@@ -38,7 +38,7 @@
}
.cu-sm-border-selected {
- border-color: var(--canon-border-selected);
+ border-color: var(--canon-border-focus);
border-width: 1px;
border-style: solid;
}
@@ -854,19 +854,19 @@
}
.cu-sm-rounded-2xl {
- border-radius: var(--canon-border-radius-2xl);
+ border-radius: var(--canon-radius-full);
}
.cu-sm-rounded-2xs {
- border-radius: var(--canon-border-radius-2xs);
+ border-radius: var(--canon-radius-1);
}
.cu-sm-rounded-lg {
- border-radius: var(--canon-border-radius-lg);
+ border-radius: var(--canon-radius-5);
}
.cu-sm-rounded-md {
- border-radius: var(--canon-border-radius-md);
+ border-radius: var(--canon-radius-4);
}
.cu-sm-rounded-none {
@@ -874,15 +874,15 @@
}
.cu-sm-rounded-sm {
- border-radius: var(--canon-border-radius-sm);
+ border-radius: var(--canon-radius-3);
}
.cu-sm-rounded-xl {
- border-radius: var(--canon-border-radius-xl);
+ border-radius: var(--canon-radius-6);
}
.cu-sm-rounded-xs {
- border-radius: var(--canon-border-radius-xs);
+ border-radius: var(--canon-radius-2);
}
.cu-sm-row-span-1 {
diff --git a/packages/canon/src/css/utilities/xl.css b/packages/canon/src/css/utilities/xl.css
index b4d0b3b3d3..218bd37217 100644
--- a/packages/canon/src/css/utilities/xl.css
+++ b/packages/canon/src/css/utilities/xl.css
@@ -21,13 +21,13 @@
}
.cu-xl-border-base {
- border-color: var(--canon-border-base);
+ border-color: var(--canon-border);
border-width: 1px;
border-style: solid;
}
.cu-xl-border-error {
- border-color: var(--canon-border-error);
+ border-color: var(--canon-border-danger);
border-width: 1px;
border-style: solid;
}
@@ -38,7 +38,7 @@
}
.cu-xl-border-selected {
- border-color: var(--canon-border-selected);
+ border-color: var(--canon-border-focus);
border-width: 1px;
border-style: solid;
}
@@ -854,19 +854,19 @@
}
.cu-xl-rounded-2xl {
- border-radius: var(--canon-border-radius-2xl);
+ border-radius: var(--canon-radius-full);
}
.cu-xl-rounded-2xs {
- border-radius: var(--canon-border-radius-2xs);
+ border-radius: var(--canon-radius-1);
}
.cu-xl-rounded-lg {
- border-radius: var(--canon-border-radius-lg);
+ border-radius: var(--canon-radius-5);
}
.cu-xl-rounded-md {
- border-radius: var(--canon-border-radius-md);
+ border-radius: var(--canon-radius-4);
}
.cu-xl-rounded-none {
@@ -874,15 +874,15 @@
}
.cu-xl-rounded-sm {
- border-radius: var(--canon-border-radius-sm);
+ border-radius: var(--canon-radius-3);
}
.cu-xl-rounded-xl {
- border-radius: var(--canon-border-radius-xl);
+ border-radius: var(--canon-radius-6);
}
.cu-xl-rounded-xs {
- border-radius: var(--canon-border-radius-xs);
+ border-radius: var(--canon-radius-2);
}
.cu-xl-row-span-1 {
diff --git a/packages/canon/src/css/utilities/xs.css b/packages/canon/src/css/utilities/xs.css
index 37a56a54c4..fa64c1d624 100644
--- a/packages/canon/src/css/utilities/xs.css
+++ b/packages/canon/src/css/utilities/xs.css
@@ -20,13 +20,13 @@
}
.cu-border-base {
- border-color: var(--canon-border-base);
+ border-color: var(--canon-border);
border-width: 1px;
border-style: solid;
}
.cu-border-error {
- border-color: var(--canon-border-error);
+ border-color: var(--canon-border-danger);
border-width: 1px;
border-style: solid;
}
@@ -37,7 +37,7 @@
}
.cu-border-selected {
- border-color: var(--canon-border-selected);
+ border-color: var(--canon-border-focus);
border-width: 1px;
border-style: solid;
}
@@ -853,19 +853,19 @@
}
.cu-rounded-2xl {
- border-radius: var(--canon-border-radius-2xl);
+ border-radius: var(--canon-radius-full);
}
.cu-rounded-2xs {
- border-radius: var(--canon-border-radius-2xs);
+ border-radius: var(--canon-radius-1);
}
.cu-rounded-lg {
- border-radius: var(--canon-border-radius-lg);
+ border-radius: var(--canon-radius-5);
}
.cu-rounded-md {
- border-radius: var(--canon-border-radius-md);
+ border-radius: var(--canon-radius-4);
}
.cu-rounded-none {
@@ -873,15 +873,15 @@
}
.cu-rounded-sm {
- border-radius: var(--canon-border-radius-sm);
+ border-radius: var(--canon-radius-3);
}
.cu-rounded-xl {
- border-radius: var(--canon-border-radius-xl);
+ border-radius: var(--canon-radius-6);
}
.cu-rounded-xs {
- border-radius: var(--canon-border-radius-xs);
+ border-radius: var(--canon-radius-2);
}
.cu-row-span-1 {
diff --git a/packages/canon/src/hooks/useBreakpoint.ts b/packages/canon/src/hooks/useBreakpoint.ts
new file mode 100644
index 0000000000..a6dacde525
--- /dev/null
+++ b/packages/canon/src/hooks/useBreakpoint.ts
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2025 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { useMediaQuery } from './useMediaQuery';
+import type { Breakpoint } from '../types';
+
+export const breakpoints: { name: string; id: Breakpoint; value: number }[] = [
+ { name: 'Initial', id: 'initial', value: 0 },
+ { name: 'Extra Small', id: 'xs', value: 640 },
+ { name: 'Small', id: 'sm', value: 768 },
+ { name: 'Medium', id: 'md', value: 1024 },
+ { name: 'Large', id: 'lg', value: 1280 },
+ { name: 'Extra Large', id: 'xl', value: 1536 },
+];
+
+export const useBreakpoint = (): Breakpoint => {
+ // TODO: Perhaps refactor for useMediaQuery to accept an array of queries
+ const matches = breakpoints.map(breakpoint => {
+ const match = useMediaQuery(`(min-width: ${breakpoint.value}px)`);
+ return match;
+ });
+
+ for (let i = matches.length - 1; i >= 0; i--) {
+ if (matches[i]) {
+ return breakpoints[i].id;
+ }
+ }
+
+ return breakpoints[0].id;
+};
diff --git a/packages/canon/src/hooks/useResponsiveValue.ts b/packages/canon/src/hooks/useResponsiveValue.ts
new file mode 100644
index 0000000000..3ef5b99d47
--- /dev/null
+++ b/packages/canon/src/hooks/useResponsiveValue.ts
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2025 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import type { Breakpoint } from '../types';
+import { useBreakpoint, breakpoints } from './useBreakpoint';
+
+type ResponsiveValue = string | Partial>;
+
+export const useResponsiveValue = (value: ResponsiveValue) => {
+ const currentBreakpoint = useBreakpoint();
+
+ if (typeof value === 'object') {
+ const index = breakpoints.findIndex(
+ breakpoint => breakpoint.id === currentBreakpoint,
+ );
+
+ for (let i = index; i >= 0; i--) {
+ if (value[breakpoints[i].id]) {
+ return value[breakpoints[i].id] as string;
+ }
+ }
+
+ // If no value is found for the current or smaller breakpoints, check from the smallest
+ for (let i = 0; i < breakpoints.length; i++) {
+ if (value[breakpoints[i].id]) {
+ return value[breakpoints[i].id] as string;
+ }
+ }
+ }
+
+ return value;
+};
diff --git a/packages/canon/src/types.ts b/packages/canon/src/types.ts
index 1211b1be4d..3a6b55f13b 100644
--- a/packages/canon/src/types.ts
+++ b/packages/canon/src/types.ts
@@ -34,7 +34,7 @@ export type AsProps =
| 'dt';
/** @public */
-export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
+export type Breakpoint = 'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
/** @public */
export type Space = 'none' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
diff --git a/packages/cli-node/CHANGELOG.md b/packages/cli-node/CHANGELOG.md
index 054cfb6758..adf2f327c5 100644
--- a/packages/cli-node/CHANGELOG.md
+++ b/packages/cli-node/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/cli-node
+## 0.2.13-next.0
+
+### Patch Changes
+
+- cb76663: Added `type` field to `BackstagePackageJson` type.
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
## 0.2.12
### Patch Changes
diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json
index b2439a9b27..690108943f 100644
--- a/packages/cli-node/package.json
+++ b/packages/cli-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/cli-node",
- "version": "0.2.12",
+ "version": "0.2.13-next.0",
"description": "Node.js library for Backstage CLIs",
"backstage": {
"role": "node-library"
diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md
index 8a99ad689b..6b7471ba3a 100644
--- a/packages/cli/CHANGELOG.md
+++ b/packages/cli/CHANGELOG.md
@@ -1,5 +1,39 @@
# @backstage/cli
+## 0.30.0-next.0
+
+### Minor Changes
+
+- cb76663: **BREAKING**: Add support for native ESM in Node.js code. This changes the behavior of dynamic import expressions in Node.js code. Typically this can be fixed by replacing `import(...)` with `require(...)`, with an `as typeof import(...)` cast if needed for types. This is because dynamic imports will no longer be transformed to `require(...)` calls, but instead be left as-is. This in turn allows you to load ESM modules from CommonJS code using `import(...)`.
+
+ This change adds support for the following in Node.js packages, across type checking, package builds, runtime transforms and Jest tests:
+
+ - Dynamic imports that load ESM modules from CommonJS code.
+ - Both `.mjs` and `.mts` files as explicit ESM files, as well as `.cjs` and `.cts` as explicit CommonJS files.
+ - Support for the `"type": "module"` field in `package.json` to indicate that the package is an ESM package.
+
+ There are a few caveats to be aware of:
+
+ - To enable support for native ESM in tests, you need to run the tests with the `--experimental-vm-modules` flag enabled, typically via `NODE_OPTIONS='--experimental-vm-modules'`.
+ - Declaring a package as `"type": "module"` in `package.json` is supported, but in tests it will cause all local transitive dependencies to also be treated as ESM, regardless of whether they declare `"type": "module"` or not.
+ - Node.js has an [ESM interoperability layer with CommonJS](https://nodejs.org/docs/latest-v22.x/api/esm.html#interoperability-with-commonjs) that allows for imports from ESM to identify named exports in CommonJS packages. This interoperability layer is **only** enabled when importing packages with a `.cts` or `.cjs` extension. This is because the interoperability layer is not fully compatible with the NPM ecosystem, and would break package if it was enabled for `.js` files.
+ - Dynamic imports of CommonJS packages will vary in shape depending on the runtime, i.e. test vs local development, etc. It is therefore recommended to avoid dynamic imports of CommonJS packages and instead use `require`, or to use the explicit CommonJS extensions as mentioned above. If you do need to dynamically import CommonJS packages, avoid using `default` exports, as the shape of them vary across different environments and you would otherwise need to manually unwrap the import based on the shape of the module object.
+
+### Patch Changes
+
+- f21b125: Ensure that both global-agent and undici agents are enabled when proxying is enabled.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/eslint-plugin@0.1.10
+ - @backstage/integration@1.16.1
+ - @backstage/release-manifests@0.0.12
+ - @backstage/types@1.2.1
+
## 0.29.5
### Patch Changes
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 4ebf78ec6f..37ce3665a1 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/cli",
- "version": "0.29.5",
+ "version": "0.30.0-next.0",
"description": "CLI for developing Backstage plugins and apps",
"backstage": {
"role": "cli"
@@ -41,6 +41,11 @@
"ext": "ts",
"watch": "./src"
},
+ "jest": {
+ "coveragePathIgnorePatterns": [
+ "/__fixtures__/"
+ ]
+ },
"dependencies": {
"@backstage/catalog-model": "workspace:^",
"@backstage/cli-common": "workspace:^",
diff --git a/packages/cli/src/lib/bundler/transforms.ts b/packages/cli/src/lib/bundler/transforms.ts
index addefacd6e..f0a8a9d01d 100644
--- a/packages/cli/src/lib/bundler/transforms.ts
+++ b/packages/cli/src/lib/bundler/transforms.ts
@@ -154,7 +154,7 @@ export const transforms = (options: TransformOptions): Transforms => {
],
type: 'asset/resource',
generator: {
- filename: 'static/[name].[hash:8].[ext]',
+ filename: 'static/[name].[hash:8][ext]',
},
},
{
diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md
index 8a6d14c7e6..5043a5e2d6 100644
--- a/packages/config-loader/CHANGELOG.md
+++ b/packages/config-loader/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/config-loader
+## 1.9.6-next.0
+
+### Patch Changes
+
+- f866b86: Internal refactor to use explicit `require` for lazy-loading dependency.
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
## 1.9.5
### Patch Changes
diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json
index 30b8d28145..0965311af0 100644
--- a/packages/config-loader/package.json
+++ b/packages/config-loader/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/config-loader",
- "version": "1.9.5",
+ "version": "1.9.6-next.0",
"description": "Config loading functionality used by Backstage backend, and CLI",
"backstage": {
"role": "node-library"
diff --git a/packages/core-compat-api/CHANGELOG.md b/packages/core-compat-api/CHANGELOG.md
index c9fb596a0e..ea398c520e 100644
--- a/packages/core-compat-api/CHANGELOG.md
+++ b/packages/core-compat-api/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/core-compat-api
+## 0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/version-bridge@1.0.10
+
## 0.3.5
### Patch Changes
diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json
index 9233f3dddc..ea939bb7df 100644
--- a/packages/core-compat-api/package.json
+++ b/packages/core-compat-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/core-compat-api",
- "version": "0.3.5",
+ "version": "0.3.6-next.0",
"backstage": {
"role": "web-library"
},
diff --git a/packages/core-components/package.json b/packages/core-components/package.json
index 13d3785c4d..add79c01f5 100644
--- a/packages/core-components/package.json
+++ b/packages/core-components/package.json
@@ -73,6 +73,7 @@
"d3-shape": "^3.0.0",
"d3-zoom": "^3.0.0",
"dagre": "^0.8.5",
+ "js-yaml": "^4.1.0",
"linkify-react": "4.1.3",
"linkifyjs": "4.1.3",
"lodash": "^4.17.21",
diff --git a/packages/core-components/report.api.md b/packages/core-components/report.api.md
index c3f7cf9a6a..c706eef2bb 100644
--- a/packages/core-components/report.api.md
+++ b/packages/core-components/report.api.md
@@ -1307,6 +1307,7 @@ export interface StructuredMetadataTableProps {
// (undocumented)
options?: {
titleFormat?: (key: string) => string;
+ nestedValuesAsYaml?: boolean;
};
}
diff --git a/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.test.tsx b/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.test.tsx
index 4eb05e715e..8e6c4bbff0 100644
--- a/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.test.tsx
+++ b/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.test.tsx
@@ -66,7 +66,7 @@ describe('', () => {
expect(getByText(startCase(value))).toBeInTheDocument();
});
metadata.arrayField.forEach(value => {
- expect(getByText(value)).toBeInTheDocument();
+ expect(getByText(new RegExp(value))).toBeInTheDocument();
});
});
@@ -124,12 +124,19 @@ describe('', () => {
};
it('should make keys human readable', async () => {
- const rendered = render();
+ const rendered = render(
+ ,
+ );
expect(rendered.queryByText(/^Test A/)).toBeInTheDocument();
expect(rendered.queryByText(/^Test B/)).toBeInTheDocument();
- expect(rendered.queryByText(/^Test C/)).toBeInTheDocument();
expect(rendered.queryByText(/^Test D/)).toBeInTheDocument();
- expect(rendered.queryByText(/^Test E/)).toBeInTheDocument();
+
+ // nested content is displayed as yaml, so not affected by formatting
+ expect(rendered.queryByText(/^testC/)).toBeInTheDocument();
+ expect(rendered.queryByText(/testE: stuff/)).toBeInTheDocument();
});
it('should be possible to disable it', async () => {
@@ -161,14 +168,16 @@ describe('', () => {
const rendered = render(
,
);
expect(rendered.queryByText(/^tEsTa/)).toBeInTheDocument();
expect(rendered.queryByText(/^tEsTb/)).toBeInTheDocument();
- expect(rendered.queryByText(/^tEsTc/)).toBeInTheDocument();
expect(rendered.queryByText(/^tEsTd/)).toBeInTheDocument();
- expect(rendered.queryByText(/^tEsTe/)).toBeInTheDocument();
+
+ // nested content is displayed as yaml, so not affected by formatting
+ expect(rendered.queryByText(/^testC/)).toBeInTheDocument();
+ expect(rendered.queryByText(/^testE/)).toBeInTheDocument();
});
});
});
diff --git a/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.tsx b/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.tsx
index 3099edf9d8..b839280cdd 100644
--- a/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.tsx
+++ b/packages/core-components/src/components/StructuredMetadataTable/StructuredMetadataTable.tsx
@@ -15,21 +15,23 @@
*/
import React, { Fragment, ReactElement } from 'react';
-import {
- withStyles,
- createStyles,
- WithStyles,
- Theme,
-} from '@material-ui/core/styles';
import startCase from 'lodash/startCase';
import Typography from '@material-ui/core/Typography';
import {
- MetadataTable,
- MetadataTableItem,
MetadataList,
MetadataListItem,
+ MetadataTable,
+ MetadataTableItem,
} from './MetadataTable';
+import { CodeSnippet } from '../CodeSnippet';
+import jsyaml from 'js-yaml';
+import {
+ Theme,
+ createStyles,
+ WithStyles,
+ withStyles,
+} from '@material-ui/core/styles';
export type StructuredMetadataTableListClassKey = 'root';
@@ -41,7 +43,6 @@ const listStyle = createStyles({
});
export type StructuredMetadataTableNestedListClassKey = 'root';
-
const nestedListStyle = (theme: Theme) =>
createStyles({
root: {
@@ -110,9 +111,24 @@ function toValue(
if (React.isValidElement(value)) {
return {value};
}
-
- if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
- return renderMap(value, options, nested);
+ if (value !== null && typeof value === 'object') {
+ if (options.nestedValuesAsYaml) {
+ return (
+
+ );
+ }
+ if (!Array.isArray(value)) {
+ return renderMap(value, options, nested);
+ }
}
if (Array.isArray(value)) {
@@ -122,7 +138,6 @@ function toValue(
if (typeof value === 'boolean') {
return {value ? 'β
' : 'β'};
}
-
return (
{value}
@@ -167,6 +182,7 @@ export interface StructuredMetadataTableProps {
* @returns Formatted key
*/
titleFormat?: (key: string) => string;
+ nestedValuesAsYaml?: boolean;
};
}
@@ -174,9 +190,10 @@ type Options = Required>;
/** @public */
export function StructuredMetadataTable(props: StructuredMetadataTableProps) {
- const { metadata, dense = true, options = {} } = props;
+ const { metadata, dense = true, options } = props;
const metadataItems = mapToItems(metadata, {
titleFormat: startCase,
+ nestedValuesAsYaml: options?.nestedValuesAsYaml ?? false,
...options,
});
return {metadataItems};
diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md
index dace3d49f0..d8ece113f6 100644
--- a/packages/create-app/CHANGELOG.md
+++ b/packages/create-app/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/create-app
+## 0.5.25-next.0
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+
## 0.5.24
### Patch Changes
diff --git a/packages/create-app/package.json b/packages/create-app/package.json
index ddcc526e0b..ca6c052f3c 100644
--- a/packages/create-app/package.json
+++ b/packages/create-app/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/create-app",
- "version": "0.5.24",
+ "version": "0.5.25-next.0",
"description": "A CLI that helps you create your own Backstage app",
"backstage": {
"role": "cli"
diff --git a/packages/create-app/seed-yarn.lock b/packages/create-app/seed-yarn.lock
index 21b2aa543d..ebb1fb1e0b 100644
--- a/packages/create-app/seed-yarn.lock
+++ b/packages/create-app/seed-yarn.lock
@@ -41,3 +41,18 @@
version "22.2.0"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e"
integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==
+
+"@types/node@*":
+ version "22.10.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.8.tgz#e7e2602c83d27d483c056302d76b86321c4e8697"
+ integrity sha512-rk+QvAEGsbX/ZPiiyel6hJHNUS9cnSbPWVaZLvE+Er3tLqQFzWMz9JOfWW7XUmKvRPfxJfbl3qYWve+RGXncFw==
+
+"@types/node@>=13.7.0":
+ version "22.10.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.8.tgz#e7e2602c83d27d483c056302d76b86321c4e8697"
+ integrity sha512-rk+QvAEGsbX/ZPiiyel6hJHNUS9cnSbPWVaZLvE+Er3tLqQFzWMz9JOfWW7XUmKvRPfxJfbl3qYWve+RGXncFw==
+
+"@types/node@^22.0.0":
+ version "22.10.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.8.tgz#e7e2602c83d27d483c056302d76b86321c4e8697"
+ integrity sha512-rk+QvAEGsbX/ZPiiyel6hJHNUS9cnSbPWVaZLvE+Er3tLqQFzWMz9JOfWW7XUmKvRPfxJfbl3qYWve+RGXncFw==
diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md
index ba7ba1ca6d..4d80f2bef2 100644
--- a/packages/dev-utils/CHANGELOG.md
+++ b/packages/dev-utils/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/dev-utils
+## 1.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
## 1.1.6
### Patch Changes
diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json
index 0dcb7a182f..6d36fa7782 100644
--- a/packages/dev-utils/package.json
+++ b/packages/dev-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/dev-utils",
- "version": "1.1.6",
+ "version": "1.1.7-next.0",
"description": "Utilities for developing Backstage plugins.",
"backstage": {
"role": "web-library"
diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md
index e933205e09..aa37b33dae 100644
--- a/packages/e2e-test/CHANGELOG.md
+++ b/packages/e2e-test/CHANGELOG.md
@@ -1,5 +1,14 @@
# e2e-test
+## 0.2.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.25-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+
## 0.2.24
### Patch Changes
diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json
index 358b42962f..c1c514ddee 100644
--- a/packages/e2e-test/package.json
+++ b/packages/e2e-test/package.json
@@ -1,6 +1,6 @@
{
"name": "e2e-test",
- "version": "0.2.24",
+ "version": "0.2.25-next.0",
"description": "E2E test for verifying Backstage packages",
"backstage": {
"role": "cli"
diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md
index 8e0e696242..565765ecfe 100644
--- a/packages/frontend-app-api/CHANGELOG.md
+++ b/packages/frontend-app-api/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/frontend-app-api
+## 0.10.5-next.0
+
+### Patch Changes
+
+- 3e21b8d: Added `getNodesByRoutePath` method to the `AppTreeApi`.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/frontend-defaults@0.1.6-next.0
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+
## 0.10.4
### Patch Changes
diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json
index 7df0489c2c..73e699b77f 100644
--- a/packages/frontend-app-api/package.json
+++ b/packages/frontend-app-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-app-api",
- "version": "0.10.4",
+ "version": "0.10.5-next.0",
"backstage": {
"role": "web-library"
},
diff --git a/packages/frontend-defaults/CHANGELOG.md b/packages/frontend-defaults/CHANGELOG.md
index 5dbbac9e0a..131ed56136 100644
--- a/packages/frontend-defaults/CHANGELOG.md
+++ b/packages/frontend-defaults/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/frontend-defaults
+## 0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-app@0.1.6-next.0
+
## 0.1.5
### Patch Changes
diff --git a/packages/frontend-defaults/package.json b/packages/frontend-defaults/package.json
index c12fedf1c1..c9b038178f 100644
--- a/packages/frontend-defaults/package.json
+++ b/packages/frontend-defaults/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-defaults",
- "version": "0.1.5",
+ "version": "0.1.6-next.0",
"backstage": {
"role": "web-library"
},
diff --git a/packages/frontend-internal/CHANGELOG.md b/packages/frontend-internal/CHANGELOG.md
index c1e2445ca9..ab96c1b5e4 100644
--- a/packages/frontend-internal/CHANGELOG.md
+++ b/packages/frontend-internal/CHANGELOG.md
@@ -1,5 +1,14 @@
# @internal/frontend
+## 0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+
## 0.0.5
### Patch Changes
diff --git a/packages/frontend-internal/package.json b/packages/frontend-internal/package.json
index 454cc86b8f..d9ce64ee42 100644
--- a/packages/frontend-internal/package.json
+++ b/packages/frontend-internal/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/frontend",
- "version": "0.0.5",
+ "version": "0.0.6-next.0",
"backstage": {
"role": "web-library",
"inline": true
diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md
index ab820da3a8..c2b865a2e7 100644
--- a/packages/frontend-plugin-api/CHANGELOG.md
+++ b/packages/frontend-plugin-api/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/frontend-plugin-api
+## 0.9.5-next.0
+
+### Patch Changes
+
+- 3e21b8d: Added `getNodesByRoutePath` method to the `AppTreeApi`.
+- Updated dependencies
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+
## 0.9.4
### Patch Changes
diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json
index 06b676ff7d..375e181b4d 100644
--- a/packages/frontend-plugin-api/package.json
+++ b/packages/frontend-plugin-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-plugin-api",
- "version": "0.9.4",
+ "version": "0.9.5-next.0",
"backstage": {
"role": "web-library"
},
diff --git a/packages/frontend-plugin-api/src/routing/RouteRef.test.ts b/packages/frontend-plugin-api/src/routing/RouteRef.test.ts
index de7a3de887..570723df9a 100644
--- a/packages/frontend-plugin-api/src/routing/RouteRef.test.ts
+++ b/packages/frontend-plugin-api/src/routing/RouteRef.test.ts
@@ -35,6 +35,7 @@ describe('RouteRef', () => {
internal.setId('some-id');
expect(String(internal)).toBe('RouteRef{some-id}');
+ internal.setId('some-id'); // Should allow same ID
expect(() => internal.setId('some-other-id')).toThrow(
"RouteRef was referenced twice as both 'some-id' and 'some-other-id'",
diff --git a/packages/frontend-plugin-api/src/routing/RouteRef.ts b/packages/frontend-plugin-api/src/routing/RouteRef.ts
index da562e5273..1678e14cd4 100644
--- a/packages/frontend-plugin-api/src/routing/RouteRef.ts
+++ b/packages/frontend-plugin-api/src/routing/RouteRef.ts
@@ -95,7 +95,7 @@ export class RouteRefImpl implements InternalRouteRef {
if (!id) {
throw new Error(`${this.#name} id must be a non-empty string`);
}
- if (this.#id) {
+ if (this.#id && this.#id !== id) {
throw new Error(
`${this.#name} was referenced twice as both '${this.#id}' and '${id}'`,
);
diff --git a/packages/frontend-test-utils/CHANGELOG.md b/packages/frontend-test-utils/CHANGELOG.md
index 7519df4559..e5516fa44b 100644
--- a/packages/frontend-test-utils/CHANGELOG.md
+++ b/packages/frontend-test-utils/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/frontend-test-utils
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/config@1.3.2
+ - @backstage/test-utils@1.7.4
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-app@0.1.6-next.0
+
## 0.2.5
### Patch Changes
diff --git a/packages/frontend-test-utils/package.json b/packages/frontend-test-utils/package.json
index f2c4226568..0351625d72 100644
--- a/packages/frontend-test-utils/package.json
+++ b/packages/frontend-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-test-utils",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"backstage": {
"role": "web-library"
},
diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md
index 23c4e3135b..45d73b85b2 100644
--- a/packages/repo-tools/CHANGELOG.md
+++ b/packages/repo-tools/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/repo-tools
+## 0.12.2-next.0
+
+### Patch Changes
+
+- 98ddf05: The `api-reports` command is now also able to generate SQL reports, enabled by the `--sql-reports` flag.
+- cb76663: Internal refactor to support native ESM.
+- ecd01a9: Internal refactor of API report generation.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+
## 0.12.1
### Patch Changes
diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json
index f5c6a0c060..0bdb5a0981 100644
--- a/packages/repo-tools/package.json
+++ b/packages/repo-tools/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/repo-tools",
- "version": "0.12.1",
+ "version": "0.12.2-next.0",
"description": "CLI for Backstage repo tooling ",
"backstage": {
"role": "cli"
diff --git a/packages/repo-tools/src/commands/package/schema/openapi/generate/index.test.ts b/packages/repo-tools/src/commands/package/schema/openapi/generate/index.test.ts
index 73d26924be..20de746b25 100644
--- a/packages/repo-tools/src/commands/package/schema/openapi/generate/index.test.ts
+++ b/packages/repo-tools/src/commands/package/schema/openapi/generate/index.test.ts
@@ -82,7 +82,12 @@ describe('generateOpenApiSchema', () => {
}),
} as any);
- const { command } = await import('./index');
+ // Same logic as https://github.com/backstage/backstage/blob/547e41da5ac497e5a606c08c8fb57b429687d5f7/packages/repo-tools/src/commands/index.ts#L278-L297
+ const {
+ default: { command },
+ } = (await import('./index')) as unknown as {
+ default: typeof import('./index');
+ };
const actions = async () => {
while (!mockOn.ready) {
diff --git a/packages/scaffolder-internal/CHANGELOG.md b/packages/scaffolder-internal/CHANGELOG.md
index 16e7d83f1e..dfaf1933fd 100644
--- a/packages/scaffolder-internal/CHANGELOG.md
+++ b/packages/scaffolder-internal/CHANGELOG.md
@@ -1,5 +1,13 @@
# @internal/scaffolder
+## 0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+
## 0.0.5
### Patch Changes
diff --git a/packages/scaffolder-internal/package.json b/packages/scaffolder-internal/package.json
index 2426c3548b..185fff4fee 100644
--- a/packages/scaffolder-internal/package.json
+++ b/packages/scaffolder-internal/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/scaffolder",
- "version": "0.0.5",
+ "version": "0.0.6-next.0",
"backstage": {
"role": "web-library",
"inline": true
diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md
index edba52c2c0..162799ea26 100644
--- a/packages/techdocs-cli-embedded-app/CHANGELOG.md
+++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md
@@ -1,5 +1,24 @@
# techdocs-cli-embedded-app
+## 0.2.105-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.30.0-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/test-utils@1.7.4
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-techdocs-react@1.2.13
+
## 0.2.104
### Patch Changes
diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json
index 8c8cde75f0..b483e931cc 100644
--- a/packages/techdocs-cli-embedded-app/package.json
+++ b/packages/techdocs-cli-embedded-app/package.json
@@ -1,6 +1,6 @@
{
"name": "techdocs-cli-embedded-app",
- "version": "0.2.104",
+ "version": "0.2.105-next.0",
"backstage": {
"role": "frontend"
},
diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md
index 94fb6b9e9d..672598086e 100644
--- a/packages/techdocs-cli/CHANGELOG.md
+++ b/packages/techdocs-cli/CHANGELOG.md
@@ -1,5 +1,21 @@
# @techdocs/cli
+## 1.9.0-next.0
+
+### Minor Changes
+
+- 8de3d2d: Allow configurable optional retries for publisher AWS S3 operations.
+
+### Patch Changes
+
+- 69f84ac: Internal update to work with dynamic imports.
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-techdocs-node@1.13.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+
## 1.8.25
### Patch Changes
diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json
index a38e7b5965..b8b17ffedd 100644
--- a/packages/techdocs-cli/package.json
+++ b/packages/techdocs-cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@techdocs/cli",
- "version": "1.8.25",
+ "version": "1.9.0-next.0",
"description": "Utility CLI for managing TechDocs sites in Backstage.",
"backstage": {
"role": "cli"
diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md
index fe890e9b08..a8784885c9 100644
--- a/plugins/api-docs/CHANGELOG.md
+++ b/plugins/api-docs/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-api-docs
+## 0.12.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+
## 0.12.3
### Patch Changes
diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json
index 9ceb3c2bb6..776caff68e 100644
--- a/plugins/api-docs/package.json
+++ b/plugins/api-docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-api-docs",
- "version": "0.12.3",
+ "version": "0.12.4-next.0",
"description": "A Backstage plugin that helps represent API entities in the frontend",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md
index ddd4c15ba8..c836677086 100644
--- a/plugins/app-backend/CHANGELOG.md
+++ b/plugins/app-backend/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-app-backend
+## 0.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-app-node@0.1.30-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.4.4
### Patch Changes
diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json
index 04670d24a7..43d78f708a 100644
--- a/plugins/app-backend/package.json
+++ b/plugins/app-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app-backend",
- "version": "0.4.4",
+ "version": "0.4.5-next.0",
"description": "A Backstage backend plugin that serves the Backstage frontend app",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md
index e2e000ac51..29075999f4 100644
--- a/plugins/app-node/CHANGELOG.md
+++ b/plugins/app-node/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-app-node
+## 0.1.30-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+
## 0.1.29
### Patch Changes
diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json
index 5418d51e29..3403c3dd25 100644
--- a/plugins/app-node/package.json
+++ b/plugins/app-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app-node",
- "version": "0.1.29",
+ "version": "0.1.30-next.0",
"description": "Node.js library for the app plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/app-visualizer/CHANGELOG.md b/plugins/app-visualizer/CHANGELOG.md
index e0786e6aad..1b7e27973a 100644
--- a/plugins/app-visualizer/CHANGELOG.md
+++ b/plugins/app-visualizer/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-app-visualizer
+## 0.1.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+
## 0.1.15
### Patch Changes
diff --git a/plugins/app-visualizer/package.json b/plugins/app-visualizer/package.json
index ce0c6fbe48..a23beb796b 100644
--- a/plugins/app-visualizer/package.json
+++ b/plugins/app-visualizer/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app-visualizer",
- "version": "0.1.15",
+ "version": "0.1.16-next.0",
"description": "Visualizes the Backstage app structure",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/app/CHANGELOG.md b/plugins/app/CHANGELOG.md
index 8302c86dc0..b9557ed564 100644
--- a/plugins/app/CHANGELOG.md
+++ b/plugins/app/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-app
+## 0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-permission-react@0.4.30
+
## 0.1.5
### Patch Changes
diff --git a/plugins/app/package.json b/plugins/app/package.json
index 771856f996..6c964733de 100644
--- a/plugins/app/package.json
+++ b/plugins/app/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app",
- "version": "0.1.5",
+ "version": "0.1.6-next.0",
"backstage": {
"role": "frontend-plugin",
"pluginId": "app",
diff --git a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md
index 9c2a7277f1..92f4d7aade 100644
--- a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-atlassian-provider
+## 0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.3.4
### Patch Changes
diff --git a/plugins/auth-backend-module-atlassian-provider/package.json b/plugins/auth-backend-module-atlassian-provider/package.json
index 21f1c28b1b..784e4b141f 100644
--- a/plugins/auth-backend-module-atlassian-provider/package.json
+++ b/plugins/auth-backend-module-atlassian-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-atlassian-provider",
- "version": "0.3.4",
+ "version": "0.3.5-next.0",
"description": "The atlassian-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md
index 8096dc64a1..8c94f01ec8 100644
--- a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-auth0-provider
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.1.4
### Patch Changes
diff --git a/plugins/auth-backend-module-auth0-provider/package.json b/plugins/auth-backend-module-auth0-provider/package.json
index 2e5ce6e970..5e1031e9e2 100644
--- a/plugins/auth-backend-module-auth0-provider/package.json
+++ b/plugins/auth-backend-module-auth0-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-auth0-provider",
- "version": "0.1.4",
+ "version": "0.1.5-next.0",
"description": "The auth0-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md
index 77d1c4d691..bdfb50afb9 100644
--- a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-aws-alb-provider
+## 0.3.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.3.2
### Patch Changes
diff --git a/plugins/auth-backend-module-aws-alb-provider/package.json b/plugins/auth-backend-module-aws-alb-provider/package.json
index 52676e32a1..56924cb276 100644
--- a/plugins/auth-backend-module-aws-alb-provider/package.json
+++ b/plugins/auth-backend-module-aws-alb-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-aws-alb-provider",
- "version": "0.3.2",
+ "version": "0.3.3-next.0",
"description": "The aws-alb provider module for the Backstage auth backend.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md
index 5111a8a614..4eca5287d6 100644
--- a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-azure-easyauth-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-azure-easyauth-provider/package.json b/plugins/auth-backend-module-azure-easyauth-provider/package.json
index 4a73f21613..aa96685e48 100644
--- a/plugins/auth-backend-module-azure-easyauth-provider/package.json
+++ b/plugins/auth-backend-module-azure-easyauth-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-azure-easyauth-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The azure-easyauth-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md
index 4cad2b9b60..e16a8f8b17 100644
--- a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-bitbucket-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-bitbucket-provider/package.json b/plugins/auth-backend-module-bitbucket-provider/package.json
index 0a3d320592..0bc5de61ca 100644
--- a/plugins/auth-backend-module-bitbucket-provider/package.json
+++ b/plugins/auth-backend-module-bitbucket-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-bitbucket-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The bitbucket-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md
index d3cc8a9e6c..3b1dc8f49e 100644
--- a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-bitbucket-server-provider
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.1.4
### Patch Changes
diff --git a/plugins/auth-backend-module-bitbucket-server-provider/package.json b/plugins/auth-backend-module-bitbucket-server-provider/package.json
index fa6d85e4f3..e79bc5dca8 100644
--- a/plugins/auth-backend-module-bitbucket-server-provider/package.json
+++ b/plugins/auth-backend-module-bitbucket-server-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-bitbucket-server-provider",
- "version": "0.1.4",
+ "version": "0.1.5-next.0",
"description": "The bitbucket-server-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md
index b14a9b39b3..8155ecc7cb 100644
--- a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-cloudflare-access-provider
+## 0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.3.4
### Patch Changes
diff --git a/plugins/auth-backend-module-cloudflare-access-provider/package.json b/plugins/auth-backend-module-cloudflare-access-provider/package.json
index 29e8872c25..c86012ebc0 100644
--- a/plugins/auth-backend-module-cloudflare-access-provider/package.json
+++ b/plugins/auth-backend-module-cloudflare-access-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-cloudflare-access-provider",
- "version": "0.3.4",
+ "version": "0.3.5-next.0",
"description": "The cloudflare-access-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
index 6828d0d5a9..8fc3632690 100644
--- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-gcp-iap-provider
+## 0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.3.4
### Patch Changes
diff --git a/plugins/auth-backend-module-gcp-iap-provider/package.json b/plugins/auth-backend-module-gcp-iap-provider/package.json
index 86e9cbb9f1..8869c36a51 100644
--- a/plugins/auth-backend-module-gcp-iap-provider/package.json
+++ b/plugins/auth-backend-module-gcp-iap-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-gcp-iap-provider",
- "version": "0.3.4",
+ "version": "0.3.5-next.0",
"description": "A GCP IAP auth provider module for the Backstage auth backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md
index 9cebbe56fa..e42961c029 100644
--- a/plugins/auth-backend-module-github-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-github-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json
index c116314478..035bbd8076 100644
--- a/plugins/auth-backend-module-github-provider/package.json
+++ b/plugins/auth-backend-module-github-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-github-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The github-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
index ded0adf21f..aeea965e0b 100644
--- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-gitlab-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json
index b8f4ddd945..c14d9a2e7a 100644
--- a/plugins/auth-backend-module-gitlab-provider/package.json
+++ b/plugins/auth-backend-module-gitlab-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-gitlab-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The gitlab-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-google-provider/CHANGELOG.md b/plugins/auth-backend-module-google-provider/CHANGELOG.md
index 855fcea2f5..7c658d3dff 100644
--- a/plugins/auth-backend-module-google-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-google-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json
index 49918d476f..c4c3130bbf 100644
--- a/plugins/auth-backend-module-google-provider/package.json
+++ b/plugins/auth-backend-module-google-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-google-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "A Google auth provider module for the Backstage auth backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-guest-provider/CHANGELOG.md b/plugins/auth-backend-module-guest-provider/CHANGELOG.md
index 9264609f48..2c3a380564 100644
--- a/plugins/auth-backend-module-guest-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-guest-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-guest-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-guest-provider/package.json b/plugins/auth-backend-module-guest-provider/package.json
index 6e546d2c25..4f3a618923 100644
--- a/plugins/auth-backend-module-guest-provider/package.json
+++ b/plugins/auth-backend-module-guest-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-guest-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The guest-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md
index b1dc28f7d7..7d80c5bdd2 100644
--- a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-microsoft-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json
index 8d7f76658e..b578ee4428 100644
--- a/plugins/auth-backend-module-microsoft-provider/package.json
+++ b/plugins/auth-backend-module-microsoft-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-microsoft-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The microsoft-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
index 59bbb22ed9..e57fa36c6d 100644
--- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-oauth2-provider
+## 0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.3.4
### Patch Changes
diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json
index 0207763e5f..ba498c34e8 100644
--- a/plugins/auth-backend-module-oauth2-provider/package.json
+++ b/plugins/auth-backend-module-oauth2-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-oauth2-provider",
- "version": "0.3.4",
+ "version": "0.3.5-next.0",
"description": "The oauth2-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md
index e75beb6c82..fc1c9c791a 100644
--- a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-oauth2-proxy-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/package.json b/plugins/auth-backend-module-oauth2-proxy-provider/package.json
index 1c794a1886..e3b145057e 100644
--- a/plugins/auth-backend-module-oauth2-proxy-provider/package.json
+++ b/plugins/auth-backend-module-oauth2-proxy-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-oauth2-proxy-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The oauth2-proxy-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md
index 3280a5d13f..39a32b6146 100644
--- a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-oidc-provider
+## 0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.3.4
### Patch Changes
diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json
index 69ac5d266d..a7be701f8d 100644
--- a/plugins/auth-backend-module-oidc-provider/package.json
+++ b/plugins/auth-backend-module-oidc-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-oidc-provider",
- "version": "0.3.4",
+ "version": "0.3.5-next.0",
"description": "The oidc-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-okta-provider/CHANGELOG.md b/plugins/auth-backend-module-okta-provider/CHANGELOG.md
index 51a2832553..eabc2b1ea5 100644
--- a/plugins/auth-backend-module-okta-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-okta-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-okta-provider
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.1.4
### Patch Changes
diff --git a/plugins/auth-backend-module-okta-provider/package.json b/plugins/auth-backend-module-okta-provider/package.json
index 67d79489c0..3850cf0e78 100644
--- a/plugins/auth-backend-module-okta-provider/package.json
+++ b/plugins/auth-backend-module-okta-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-okta-provider",
- "version": "0.1.4",
+ "version": "0.1.5-next.0",
"description": "The okta-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md
index c9cdfe7253..341641864d 100644
--- a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-onelogin-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-onelogin-provider/package.json b/plugins/auth-backend-module-onelogin-provider/package.json
index 3b7efb4ff4..0d0a395e11 100644
--- a/plugins/auth-backend-module-onelogin-provider/package.json
+++ b/plugins/auth-backend-module-onelogin-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-onelogin-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The onelogin-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md
index 1a4ca1e7c8..f5b9453ce0 100644
--- a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-pinniped-provider
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.2.4
### Patch Changes
diff --git a/plugins/auth-backend-module-pinniped-provider/package.json b/plugins/auth-backend-module-pinniped-provider/package.json
index 155b63e582..f382ddae29 100644
--- a/plugins/auth-backend-module-pinniped-provider/package.json
+++ b/plugins/auth-backend-module-pinniped-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-pinniped-provider",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "The pinniped-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md
index 759e9e99d4..e4095c137c 100644
--- a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-vmware-cloud-provider
+## 0.4.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.4.3
### Patch Changes
diff --git a/plugins/auth-backend-module-vmware-cloud-provider/package.json b/plugins/auth-backend-module-vmware-cloud-provider/package.json
index 40380492f5..9611b84cab 100644
--- a/plugins/auth-backend-module-vmware-cloud-provider/package.json
+++ b/plugins/auth-backend-module-vmware-cloud-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-vmware-cloud-provider",
- "version": "0.4.3",
+ "version": "0.4.4-next.0",
"description": "The vmware-cloud-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md
index 28e341e990..c9e09e99bd 100644
--- a/plugins/auth-backend/CHANGELOG.md
+++ b/plugins/auth-backend/CHANGELOG.md
@@ -1,5 +1,36 @@
# @backstage/plugin-auth-backend
+## 0.24.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.5-next.0
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.3-next.0
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.5-next.0
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.5-next.0
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.5-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 0.24.2
### Patch Changes
diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json
index 23189802a5..c9e55ac4da 100644
--- a/plugins/auth-backend/package.json
+++ b/plugins/auth-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend",
- "version": "0.24.2",
+ "version": "0.24.3-next.0",
"description": "A Backstage backend plugin that handles authentication",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md
index 66c1c3ec52..cafa246fdf 100644
--- a/plugins/auth-node/CHANGELOG.md
+++ b/plugins/auth-node/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-auth-node
+## 0.5.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
## 0.5.6
### Patch Changes
diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json
index 6ecb2178f8..6f9f71c2e7 100644
--- a/plugins/auth-node/package.json
+++ b/plugins/auth-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-node",
- "version": "0.5.6",
+ "version": "0.5.7-next.0",
"backstage": {
"role": "node-library",
"pluginId": "auth",
diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md
index 2452c8ae0f..2e5255e3cf 100644
--- a/plugins/catalog-backend-module-aws/CHANGELOG.md
+++ b/plugins/catalog-backend-module-aws/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-aws
+## 0.4.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-catalog-common@1.1.3
+
## 0.4.7
### Patch Changes
diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json
index cae37c6d80..5a0b02f91e 100644
--- a/plugins/catalog-backend-module-aws/package.json
+++ b/plugins/catalog-backend-module-aws/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-aws",
- "version": "0.4.7",
+ "version": "0.4.8-next.0",
"description": "A Backstage catalog backend module that helps integrate towards AWS",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md
index a435ee2350..31dba4169e 100644
--- a/plugins/catalog-backend-module-azure/CHANGELOG.md
+++ b/plugins/catalog-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-azure
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+
## 0.3.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json
index 9e46d44772..a1fe99b788 100644
--- a/plugins/catalog-backend-module-azure/package.json
+++ b/plugins/catalog-backend-module-azure/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-azure",
- "version": "0.3.1",
+ "version": "0.3.2-next.0",
"description": "A Backstage catalog backend module that helps integrate towards Azure",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md
index 439126a158..9750d106f8 100644
--- a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md
+++ b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-backend-module-backstage-openapi
+## 0.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
## 0.4.4
### Patch Changes
diff --git a/plugins/catalog-backend-module-backstage-openapi/package.json b/plugins/catalog-backend-module-backstage-openapi/package.json
index b9a1adcc76..129a9ef27d 100644
--- a/plugins/catalog-backend-module-backstage-openapi/package.json
+++ b/plugins/catalog-backend-module-backstage-openapi/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-backstage-openapi",
- "version": "0.4.4",
+ "version": "0.4.5-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "catalog",
diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
index 6598596478..f92a981f18 100644
--- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-bitbucket-cloud
+## 0.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.4.4
### Patch Changes
diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json
index 1af3779249..837db0d899 100644
--- a/plugins/catalog-backend-module-bitbucket-cloud/package.json
+++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud",
- "version": "0.4.4",
+ "version": "0.4.5-next.0",
"description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
index 7d73a8fd25..6424cae5c1 100644
--- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
+++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-backend-module-bitbucket-server
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.3.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json
index c5826422c2..8bebf10708 100644
--- a/plugins/catalog-backend-module-bitbucket-server/package.json
+++ b/plugins/catalog-backend-module-bitbucket-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-bitbucket-server",
- "version": "0.3.1",
+ "version": "0.3.2-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "catalog",
diff --git a/plugins/catalog-backend-module-gcp/CHANGELOG.md b/plugins/catalog-backend-module-gcp/CHANGELOG.md
index f674f8219d..fdb4fa4a51 100644
--- a/plugins/catalog-backend-module-gcp/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-gcp
+## 0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+
## 0.3.4
### Patch Changes
diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json
index 81d2704af1..ef81112f0c 100644
--- a/plugins/catalog-backend-module-gcp/package.json
+++ b/plugins/catalog-backend-module-gcp/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gcp",
- "version": "0.3.4",
+ "version": "0.3.5-next.0",
"description": "A Backstage catalog backend module that helps integrate towards GCP",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md
index 845fbe4be8..d5c51835f5 100644
--- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-gerrit
+## 0.2.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.2.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json
index bd37137caa..5a0decf56f 100644
--- a/plugins/catalog-backend-module-gerrit/package.json
+++ b/plugins/catalog-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gerrit",
- "version": "0.2.6",
+ "version": "0.2.7-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "catalog",
diff --git a/plugins/catalog-backend-module-github-org/CHANGELOG.md b/plugins/catalog-backend-module-github-org/CHANGELOG.md
index f3ab093d1f..67dd10a8d0 100644
--- a/plugins/catalog-backend-module-github-org/CHANGELOG.md
+++ b/plugins/catalog-backend-module-github-org/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-github-org
+## 0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-backend-module-github@0.7.10-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.3.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-github-org/package.json b/plugins/catalog-backend-module-github-org/package.json
index b4de0b2f06..ab879819aa 100644
--- a/plugins/catalog-backend-module-github-org/package.json
+++ b/plugins/catalog-backend-module-github-org/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-github-org",
- "version": "0.3.6",
+ "version": "0.3.7-next.0",
"description": "The github-org backend module for the catalog plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md
index 2b6fa26cfd..71375b34e8 100644
--- a/plugins/catalog-backend-module-github/CHANGELOG.md
+++ b/plugins/catalog-backend-module-github/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-github
+## 0.7.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.7.9
### Patch Changes
diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json
index eaf25b16fe..61d6c5420f 100644
--- a/plugins/catalog-backend-module-github/package.json
+++ b/plugins/catalog-backend-module-github/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-github",
- "version": "0.7.9",
+ "version": "0.7.10-next.0",
"description": "A Backstage catalog backend module that helps integrate towards GitHub",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md
index 66247522ac..89409e808f 100644
--- a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-catalog-backend-module-gitlab-org
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-catalog-backend-module-gitlab@0.6.3-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.2.5
### Patch Changes
diff --git a/plugins/catalog-backend-module-gitlab-org/package.json b/plugins/catalog-backend-module-gitlab-org/package.json
index 78073b21b3..b0e321e88f 100644
--- a/plugins/catalog-backend-module-gitlab-org/package.json
+++ b/plugins/catalog-backend-module-gitlab-org/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gitlab-org",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"description": "The gitlab-org backend module for the catalog plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md
index 5d90834bf4..4f22554ddc 100644
--- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-backend-module-gitlab
+## 0.6.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.6.2
### Patch Changes
diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json
index 366d238f1e..69d4e7bb26 100644
--- a/plugins/catalog-backend-module-gitlab/package.json
+++ b/plugins/catalog-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gitlab",
- "version": "0.6.2",
+ "version": "0.6.3-next.0",
"description": "A Backstage catalog backend module that helps integrate towards GitLab",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
index 3f652ce58b..01e33f992c 100644
--- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
+++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-incremental-ingestion
+## 0.6.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.6.2
### Patch Changes
diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json
index b8dbc4617d..64a476b72b 100644
--- a/plugins/catalog-backend-module-incremental-ingestion/package.json
+++ b/plugins/catalog-backend-module-incremental-ingestion/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-incremental-ingestion",
- "version": "0.6.2",
+ "version": "0.6.3-next.0",
"description": "An entity provider for streaming large asset sources into the catalog",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md
index 8c26175e58..00030b0a0d 100644
--- a/plugins/catalog-backend-module-ldap/CHANGELOG.md
+++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-catalog-backend-module-ldap
+## 0.11.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+
## 0.11.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-ldap/config.d.ts b/plugins/catalog-backend-module-ldap/config.d.ts
index e30aaab5d5..b04e9194d2 100644
--- a/plugins/catalog-backend-module-ldap/config.d.ts
+++ b/plugins/catalog-backend-module-ldap/config.d.ts
@@ -437,7 +437,7 @@ export interface Config {
/**
* LdapOrg provider key
*/
- ldapOrg: {
+ ldapOrg?: {
/**
* Id of the LdapOrg provider
*/
diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json
index 138f7488de..4fcbffd4b3 100644
--- a/plugins/catalog-backend-module-ldap/package.json
+++ b/plugins/catalog-backend-module-ldap/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-ldap",
- "version": "0.11.1",
+ "version": "0.11.2-next.0",
"description": "A Backstage catalog backend module that helps integrate towards LDAP",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-logs/CHANGELOG.md b/plugins/catalog-backend-module-logs/CHANGELOG.md
index b333559b50..96319ff213 100644
--- a/plugins/catalog-backend-module-logs/CHANGELOG.md
+++ b/plugins/catalog-backend-module-logs/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-catalog-backend-module-logs
+## 0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.1.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-logs/package.json b/plugins/catalog-backend-module-logs/package.json
index c8b7c8b11d..b281a63afa 100644
--- a/plugins/catalog-backend-module-logs/package.json
+++ b/plugins/catalog-backend-module-logs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-logs",
- "version": "0.1.6",
+ "version": "0.1.7-next.0",
"description": "A module that subscribes to catalog releated events and logs them.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
index a4b99ba710..2e2aefd8fb 100644
--- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md
+++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-msgraph
+## 0.6.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+
## 0.6.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json
index fed0232491..861a471274 100644
--- a/plugins/catalog-backend-module-msgraph/package.json
+++ b/plugins/catalog-backend-module-msgraph/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-msgraph",
- "version": "0.6.6",
+ "version": "0.6.7-next.0",
"description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md
index c8b088e946..2c4e1830a5 100644
--- a/plugins/catalog-backend-module-openapi/CHANGELOG.md
+++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-catalog-backend-module-openapi
+## 0.2.7-next.0
+
+### Patch Changes
+
+- 7fc6f7c: Fix `resolveUrl` for split openapi definition relative path
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+
## 0.2.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json
index c4683710aa..1badd0106b 100644
--- a/plugins/catalog-backend-module-openapi/package.json
+++ b/plugins/catalog-backend-module-openapi/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-openapi",
- "version": "0.2.6",
+ "version": "0.2.7-next.0",
"description": "A Backstage catalog backend module that helps with OpenAPI specifications",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
index 7feb528eac..9494ff587e 100644
--- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
+++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-backend-module-puppetdb
+## 0.2.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
## 0.2.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json
index 3b4d1e7f54..1caef5f8fe 100644
--- a/plugins/catalog-backend-module-puppetdb/package.json
+++ b/plugins/catalog-backend-module-puppetdb/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-puppetdb",
- "version": "0.2.6",
+ "version": "0.2.7-next.0",
"description": "A Backstage catalog backend module that helps integrate towards PuppetDB",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
index 8c3a9f0dec..d85388c322 100644
--- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
+++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-scaffolder-entity-model
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-scaffolder-common@1.5.9
+
## 0.2.4
### Patch Changes
diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json
index 48d34a5a5a..57b701469c 100644
--- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json
+++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
index 4fc201705e..2471f8f5bd 100644
--- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
+++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-backend-module-unprocessed
+## 0.5.5-next.0
+
+### Patch Changes
+
+- 4e073c7: Use new `PermissionsRegistryService` instead of the deprecated `catalogPermissionExtensionPoint`.
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.7
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.5.4
### Patch Changes
diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json
index 968eab6a66..96a2d836f0 100644
--- a/plugins/catalog-backend-module-unprocessed/package.json
+++ b/plugins/catalog-backend-module-unprocessed/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-unprocessed",
- "version": "0.5.4",
+ "version": "0.5.5-next.0",
"description": "Backstage Catalog module to view unprocessed entities",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md
index 5aad85c40a..dc42d618c1 100644
--- a/plugins/catalog-backend/CHANGELOG.md
+++ b/plugins/catalog-backend/CHANGELOG.md
@@ -1,5 +1,33 @@
# @backstage/plugin-catalog-backend
+## 1.31.0-next.0
+
+### Minor Changes
+
+- 8805f93: The catalog backend now supports the new `PermissionsRegistryService`, which can be used to add custom permission rules.
+- a4aa244: This change integrates the `auditor` service into the Catalog plugin.
+
+### Patch Changes
+
+- c9139e1: Ignore benign database conflict errors during stitching, now logged with debug level instead.
+- f178b12: Cleanup `refresh_state_references` for entity processors and providers that are no longer in control of a `refresh_state` row for entity
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.3.1-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-common@1.2.17
+
## 1.30.0
### Patch Changes
diff --git a/plugins/catalog-backend/README.md b/plugins/catalog-backend/README.md
index 3d42d90252..680adc0bcd 100644
--- a/plugins/catalog-backend/README.md
+++ b/plugins/catalog-backend/README.md
@@ -87,6 +87,51 @@ yarn start
This will launch both frontend and backend in the same window, populated with
some example entities.
+## Audit Events
+
+The Catalog backend emits audit events for various operations. Events are grouped logically by `eventId`, with `subEventId` providing further distinction within an operation group.
+
+**Entity Events:**
+
+- **`entity-fetch`**: Retrieves entities.
+
+ Filter on `queryType`.
+
+ - **`all`**: Fetching all entities. (GET `/entities`)
+ - **`by-id`**: Fetching a single entity using its UID. (GET `/entities/by-uid/:uid`)
+ - **`by-name`**: Fetching a single entity using its kind, namespace, and name. (GET `/entities/by-name/:kind/:namespace/:name`)
+ - **`by-query`**: Fetching multiple entities using a filter query. (GET `/entities/by-query`)
+ - **`by-refs`**: Fetching a batch of entities by their entity refs. (POST `/entities/by-refs`)
+ - **`ancestry`**: Fetching the ancestry of an entity. (GET `/entities/by-name/:kind/:namespace/:name/ancestry`)
+
+- **`entity-mutate`**: Modifies entities.
+
+ Filter on `actionType`.
+
+ - **`delete`**: Deleting a single entity. Note: this will not be a permanent deletion and the entity will be restored if the parent location is still present in the catalog. (DELETE `/entities/by-uid/:uid`)
+ - **`refresh`**: Scheduling an entity refresh. (POST `/entities/refresh`)
+
+- **`entity-validate`**: Validates an entity. (POST `/entities/validate`)
+
+- **`entity-facets`**: Retrieves entity facets. (GET `/entity-facets`)
+
+**Location Events:**
+
+- **`location-fetch`**: Retrieves locations.
+
+ Filter on `actionType`.
+
+ - **`all`**: Fetching all locations. (GET `/locations`)
+ - **`by-id`**: Fetching a single location by ID. (GET `/locations/:id`)
+ - **`by-entity`**: Fetching locations associated with an entity ref. (GET `/locations/by-entity`)
+
+- **`location-mutate`**: Modifies locations.
+
+ - **`create`**: Creating a new location. (POST `/locations`)
+ - **`delete`**: Deleting a location and its associated entities. (DELETE `/locations/:id`)
+
+- **`location-analyze`**: Analyzes a location. (POST `/locations/analyze`)
+
## Links
- [catalog](https://github.com/backstage/backstage/tree/master/plugins/catalog)
diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json
index 99f5e2ed87..32b1d1147b 100644
--- a/plugins/catalog-backend/package.json
+++ b/plugins/catalog-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend",
- "version": "1.30.0",
+ "version": "1.31.0-next.0",
"description": "The Backstage backend plugin that provides the Backstage catalog",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/catalog-backend/report.api.md b/plugins/catalog-backend/report.api.md
index f4bd1bae1f..a1391e9b44 100644
--- a/plugins/catalog-backend/report.api.md
+++ b/plugins/catalog-backend/report.api.md
@@ -11,6 +11,7 @@ import { AnalyzeLocationGenerateEntity as AnalyzeLocationGenerateEntity_2 } from
import { AnalyzeLocationRequest as AnalyzeLocationRequest_2 } from '@backstage/plugin-catalog-common';
import { AnalyzeLocationResponse as AnalyzeLocationResponse_2 } from '@backstage/plugin-catalog-common';
import { AnalyzeOptions as AnalyzeOptions_2 } from '@backstage/plugin-catalog-node';
+import { AuditorService } from '@backstage/backend-plugin-api';
import { AuthService } from '@backstage/backend-plugin-api';
import { BackendFeature } from '@backstage/backend-plugin-api';
import { CatalogApi } from '@backstage/catalog-client';
@@ -206,6 +207,7 @@ export type CatalogEnvironment = {
discovery?: DiscoveryService;
auth?: AuthService;
httpAuth?: HttpAuthService;
+ auditor?: AuditorService;
};
// @public
diff --git a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.test.ts b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.test.ts
index 4b12a9bf28..1021862c12 100644
--- a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.test.ts
+++ b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.test.ts
@@ -294,4 +294,73 @@ describe('performStitching', () => {
);
},
);
+
+ it.each(databases.eachSupportedId())(
+ 'handles conflicts with past stitches %p',
+ async databaseId => {
+ if (databaseId === 'MYSQL_8') {
+ // MySQL doesn't handle conflicts in the same way as the other two, most
+ // likely due to the conflict probably being handled with a merged even
+ // if it's for the entity_ref. This probably means that MySQL will have
+ // inconsistencies in the final_entities table in some cases, but they
+ // should heal fairly quickly.
+ return;
+ }
+ const knex = await databases.init(databaseId);
+ await applyDatabaseMigrations(knex);
+
+ // Drop the foreign key constraint so we can insert a conflicting entity
+ // where the ID is inconsistent with the entity ref across refresh_state
+ // and final_entities
+ await knex.schema.alterTable('final_entities', table => {
+ table.dropForeign('entity_id');
+ });
+
+ await knex('refresh_state').insert([
+ {
+ entity_id: 'other-id',
+ entity_ref: 'k:ns/n',
+ unprocessed_entity: JSON.stringify({}),
+ processed_entity: JSON.stringify({
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: {
+ name: 'n',
+ namespace: 'ns',
+ },
+ spec: {
+ k: 'v',
+ },
+ }),
+ errors: '[]',
+ next_update_at: knex.fn.now(),
+ last_discovery_at: knex.fn.now(),
+ },
+ ]);
+ await knex('final_entities').insert([
+ {
+ entity_id: 'my-id',
+ entity_ref: 'k:ns/n',
+ hash: '',
+ stitch_ticket: 'old-ticket',
+ final_entity: JSON.stringify({}),
+ },
+ ]);
+
+ const stitchLogger = mockServices.logger.mock();
+ await expect(
+ performStitching({
+ knex,
+ logger: stitchLogger,
+ strategy: { mode: 'immediate' },
+ entityRef: 'k:ns/n',
+ }),
+ ).resolves.toBe('abandoned');
+
+ expect(stitchLogger.debug).toHaveBeenCalledWith(
+ 'Skipping stitching of k:ns/n, conflict',
+ expect.anything(),
+ );
+ },
+ );
});
diff --git a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts
index 2ed65d3903..32c0d4ccb3 100644
--- a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts
+++ b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts
@@ -33,7 +33,10 @@ import {
import { buildEntitySearch } from './buildEntitySearch';
import { markDeferredStitchCompleted } from './markDeferredStitchCompleted';
import { BATCH_SIZE, generateStableHash } from './util';
-import { LoggerService } from '@backstage/backend-plugin-api';
+import {
+ LoggerService,
+ isDatabaseConflictError,
+} from '@backstage/backend-plugin-api';
// See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js
const scriptProtocolPattern =
@@ -71,15 +74,29 @@ export async function performStitching(options: {
}
// Insert stitching ticket that will be compared before inserting the final entity.
- await knex('final_entities')
- .insert({
- entity_id: entityResult[0].entity_id,
- hash: '',
- entity_ref: entityRef,
- stitch_ticket: stitchTicket,
- })
- .onConflict('entity_id')
- .merge(['stitch_ticket']);
+ try {
+ await knex('final_entities')
+ .insert({
+ entity_id: entityResult[0].entity_id,
+ hash: '',
+ entity_ref: entityRef,
+ stitch_ticket: stitchTicket,
+ })
+ .onConflict('entity_id')
+ .merge(['stitch_ticket']);
+ } catch (error) {
+ // It's possible to hit a race where a refresh_state table delete + insert
+ // is done just after we read the entity_id from it. This conflict is safe
+ // to ignore because the current stitching operation will be triggered by
+ // the old entry, and the new entry will trigger it's own stitching that
+ // will update the entity.
+ if (isDatabaseConflictError(error)) {
+ logger.debug(`Skipping stitching of ${entityRef}, conflict`, error);
+ return 'abandoned';
+ }
+
+ throw error;
+ }
// Selecting from refresh_state and final_entities should yield exactly
// one row (except in abnormal cases where the stitch was invoked for
diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts
index 13347edf7c..bf7f31919c 100644
--- a/plugins/catalog-backend/src/service/CatalogBuilder.ts
+++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts
@@ -36,15 +36,61 @@ import { createHash } from 'crypto';
import { Router } from 'express';
import lodash, { keyBy } from 'lodash';
+import {
+ AuditorService,
+ AuthService,
+ DatabaseService,
+ DiscoveryService,
+ HttpAuthService,
+ LoggerService,
+ PermissionsRegistryService,
+ PermissionsService,
+ RootConfigService,
+ SchedulerService,
+ UrlReaderService,
+} from '@backstage/backend-plugin-api';
+import { Config, readDurationFromConfig } from '@backstage/config';
+import {
+ catalogPermissions,
+ RESOURCE_TYPE_CATALOG_ENTITY,
+} from '@backstage/plugin-catalog-common/alpha';
import {
CatalogProcessor,
CatalogProcessorParser,
EntitiesSearchFilter,
EntityProvider,
- PlaceholderResolver,
LocationAnalyzer,
+ PlaceholderResolver,
ScmLocationAnalyzer,
} from '@backstage/plugin-catalog-node';
+import { EventBroker, EventsService } from '@backstage/plugin-events-node';
+import {
+ Permission,
+ PermissionAuthorizer,
+ PermissionRuleParams,
+ toPermissionEvaluator,
+} from '@backstage/plugin-permission-common';
+import {
+ createConditionTransformer,
+ createPermissionIntegrationRouter,
+ PermissionRule,
+} from '@backstage/plugin-permission-node';
+import { durationToMilliseconds } from '@backstage/types';
+import { DefaultCatalogDatabase } from '../database/DefaultCatalogDatabase';
+import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase';
+import { DefaultProviderDatabase } from '../database/DefaultProviderDatabase';
+import { applyDatabaseMigrations } from '../database/migrations';
+import { DefaultCatalogRulesEnforcer } from '../ingestion/CatalogRules';
+import { RepoLocationAnalyzer } from '../ingestion/LocationAnalyzer';
+import { permissionRules as catalogPermissionRules } from '../permissions/rules';
+import {
+ CatalogProcessingEngine,
+ createRandomProcessingInterval,
+ ProcessingIntervalFunction,
+} from '../processing';
+import { connectEntityProviders } from '../processing/connectEntityProviders';
+import { DefaultCatalogProcessingEngine } from '../processing/DefaultCatalogProcessingEngine';
+import { DefaultCatalogProcessingOrchestrator } from '../processing/DefaultCatalogProcessingOrchestrator';
import {
AnnotateLocationEntityProcessor,
BuiltinKindsEntityProcessor,
@@ -53,69 +99,24 @@ import {
PlaceholderProcessor,
UrlReaderProcessor,
} from '../processors';
-import { ConfigLocationEntityProvider } from '../providers/ConfigLocationEntityProvider';
-import { DefaultLocationStore } from '../providers/DefaultLocationStore';
-import { RepoLocationAnalyzer } from '../ingestion/LocationAnalyzer';
-import { AuthorizedLocationAnalyzer } from './AuthorizedLocationAnalyzer';
import {
jsonPlaceholderResolver,
textPlaceholderResolver,
yamlPlaceholderResolver,
} from '../processors/PlaceholderProcessor';
-import { defaultEntityDataParser } from '../util/parse';
-import {
- CatalogProcessingEngine,
- createRandomProcessingInterval,
- ProcessingIntervalFunction,
-} from '../processing';
-import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase';
-import { applyDatabaseMigrations } from '../database/migrations';
-import { DefaultCatalogProcessingEngine } from '../processing/DefaultCatalogProcessingEngine';
-import { DefaultLocationService } from './DefaultLocationService';
-import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog';
-import { DefaultCatalogProcessingOrchestrator } from '../processing/DefaultCatalogProcessingOrchestrator';
+import { ConfigLocationEntityProvider } from '../providers/ConfigLocationEntityProvider';
+import { DefaultLocationStore } from '../providers/DefaultLocationStore';
import { DefaultStitcher } from '../stitching/DefaultStitcher';
-import { createRouter } from './createRouter';
-import { DefaultRefreshService } from './DefaultRefreshService';
-import { AuthorizedRefreshService } from './AuthorizedRefreshService';
-import { DefaultCatalogRulesEnforcer } from '../ingestion/CatalogRules';
-import { Config, readDurationFromConfig } from '@backstage/config';
-import { connectEntityProviders } from '../processing/connectEntityProviders';
-import {
- Permission,
- PermissionAuthorizer,
- PermissionRuleParams,
- toPermissionEvaluator,
-} from '@backstage/plugin-permission-common';
-import { permissionRules as catalogPermissionRules } from '../permissions/rules';
-import {
- createConditionTransformer,
- createPermissionIntegrationRouter,
- PermissionRule,
-} from '@backstage/plugin-permission-node';
+import { defaultEntityDataParser } from '../util/parse';
import { AuthorizedEntitiesCatalog } from './AuthorizedEntitiesCatalog';
-import { basicEntityFilter } from './request';
-import {
- catalogPermissions,
- RESOURCE_TYPE_CATALOG_ENTITY,
-} from '@backstage/plugin-catalog-common/alpha';
+import { AuthorizedLocationAnalyzer } from './AuthorizedLocationAnalyzer';
import { AuthorizedLocationService } from './AuthorizedLocationService';
-import { DefaultProviderDatabase } from '../database/DefaultProviderDatabase';
-import { DefaultCatalogDatabase } from '../database/DefaultCatalogDatabase';
-import { EventBroker, EventsService } from '@backstage/plugin-events-node';
-import { durationToMilliseconds } from '@backstage/types';
-import {
- AuthService,
- DatabaseService,
- DiscoveryService,
- HttpAuthService,
- LoggerService,
- PermissionsService,
- RootConfigService,
- UrlReaderService,
- SchedulerService,
- PermissionsRegistryService,
-} from '@backstage/backend-plugin-api';
+import { AuthorizedRefreshService } from './AuthorizedRefreshService';
+import { createRouter } from './createRouter';
+import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog';
+import { DefaultLocationService } from './DefaultLocationService';
+import { DefaultRefreshService } from './DefaultRefreshService';
+import { basicEntityFilter } from './request';
import { entitiesResponseToObjects } from './response';
/**
@@ -142,6 +143,7 @@ export type CatalogEnvironment = {
discovery?: DiscoveryService;
auth?: AuthService;
httpAuth?: HttpAuthService;
+ auditor?: AuditorService;
};
/**
@@ -482,6 +484,7 @@ export class CatalogBuilder {
scheduler,
permissionsRegistry,
discovery = HostDiscovery.fromConfig(config),
+ auditor,
} = this.env;
const { auth, httpAuth } = createLegacyAuthAdapters({
@@ -653,6 +656,7 @@ export class CatalogBuilder {
auth,
httpAuth,
permissionsService,
+ auditor,
disableRelationsCompatibility,
});
diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts
index ffa9a2f1b9..13be6eea31 100644
--- a/plugins/catalog-backend/src/service/CatalogPlugin.ts
+++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts
@@ -17,20 +17,8 @@ import {
coreServices,
createBackendPlugin,
} from '@backstage/backend-plugin-api';
-import { eventsServiceRef } from '@backstage/plugin-events-node';
import { Entity, Validators } from '@backstage/catalog-model';
-import { CatalogBuilder, CatalogPermissionRuleInput } from './CatalogBuilder';
-import {
- catalogAnalysisExtensionPoint,
- CatalogModelExtensionPoint,
- catalogModelExtensionPoint,
- CatalogPermissionExtensionPoint,
- catalogPermissionExtensionPoint,
- CatalogProcessingExtensionPoint,
- catalogProcessingExtensionPoint,
- CatalogLocationsExtensionPoint,
- catalogLocationsExtensionPoint,
-} from '@backstage/plugin-catalog-node/alpha';
+import { ForwardedError } from '@backstage/errors';
import {
CatalogProcessor,
CatalogProcessorParser,
@@ -39,9 +27,21 @@ import {
PlaceholderResolver,
ScmLocationAnalyzer,
} from '@backstage/plugin-catalog-node';
-import { merge } from 'lodash';
+import {
+ catalogAnalysisExtensionPoint,
+ CatalogLocationsExtensionPoint,
+ catalogLocationsExtensionPoint,
+ CatalogModelExtensionPoint,
+ catalogModelExtensionPoint,
+ CatalogPermissionExtensionPoint,
+ catalogPermissionExtensionPoint,
+ CatalogProcessingExtensionPoint,
+ catalogProcessingExtensionPoint,
+} from '@backstage/plugin-catalog-node/alpha';
+import { eventsServiceRef } from '@backstage/plugin-events-node';
import { Permission } from '@backstage/plugin-permission-common';
-import { ForwardedError } from '@backstage/errors';
+import { merge } from 'lodash';
+import { CatalogBuilder, CatalogPermissionRuleInput } from './CatalogBuilder';
class CatalogLocationsExtensionPointImpl
implements CatalogLocationsExtensionPoint
@@ -235,6 +235,7 @@ export const catalogPlugin = createBackendPlugin({
discovery: coreServices.discovery,
auth: coreServices.auth,
httpAuth: coreServices.httpAuth,
+ auditor: coreServices.auditor,
events: eventsServiceRef,
},
async init({
@@ -250,6 +251,7 @@ export const catalogPlugin = createBackendPlugin({
discovery,
auth,
httpAuth,
+ auditor,
events,
}) {
const builder = await CatalogBuilder.create({
@@ -263,6 +265,7 @@ export const catalogPlugin = createBackendPlugin({
discovery,
auth,
httpAuth,
+ auditor,
});
builder.setEventBroker(events);
diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts
index aa068a2122..16970ce7a6 100644
--- a/plugins/catalog-backend/src/service/createRouter.test.ts
+++ b/plugins/catalog-backend/src/service/createRouter.test.ts
@@ -14,8 +14,9 @@
* limitations under the License.
*/
-import { ConfigReader } from '@backstage/config';
-import { NotFoundError } from '@backstage/errors';
+import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';
+import { wrapServer } from '@backstage/backend-openapi-utils';
+import { mockCredentials, mockServices } from '@backstage/backend-test-utils';
import type { Location } from '@backstage/catalog-client';
import {
ANNOTATION_LOCATION,
@@ -23,26 +24,25 @@ import {
Entity,
stringifyEntityRef,
} from '@backstage/catalog-model';
-import express from 'express';
-import request from 'supertest';
-import { Cursor, EntitiesCatalog } from '../catalog/types';
-import { LocationInput, LocationService, RefreshService } from './types';
-import { basicEntityFilter } from './request';
-import { createRouter } from './createRouter';
+import { ConfigReader } from '@backstage/config';
+import { NotFoundError } from '@backstage/errors';
+import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common/alpha';
+import { LocationAnalyzer } from '@backstage/plugin-catalog-node';
import { AuthorizeResult } from '@backstage/plugin-permission-common';
import {
createPermissionIntegrationRouter,
createPermissionRule,
} from '@backstage/plugin-permission-node';
-import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common/alpha';
-import { CatalogProcessingOrchestrator } from '../processing/types';
-import { z } from 'zod';
-import { decodeCursor, encodeCursor } from './util';
-import { wrapServer } from '@backstage/backend-openapi-utils';
+import express from 'express';
import { Server } from 'http';
-import { mockCredentials, mockServices } from '@backstage/backend-test-utils';
-import { LocationAnalyzer } from '@backstage/plugin-catalog-node';
-import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';
+import request from 'supertest';
+import { z } from 'zod';
+import { Cursor, EntitiesCatalog } from '../catalog/types';
+import { CatalogProcessingOrchestrator } from '../processing/types';
+import { createRouter } from './createRouter';
+import { basicEntityFilter } from './request';
+import { LocationInput, LocationService, RefreshService } from './types';
+import { decodeCursor, encodeCursor } from './util';
const middleware = MiddlewareFactory.create({
logger: mockServices.logger.mock(),
@@ -91,6 +91,7 @@ describe('createRouter readonly disabled', () => {
httpAuth: mockServices.httpAuth(),
locationAnalyzer,
permissionsService,
+ auditor: mockServices.auditor.mock(),
});
router.use(middleware.error());
app = await wrapServer(express().use(router));
@@ -971,6 +972,7 @@ describe('createRouter readonly and raw json enabled', () => {
auth: mockServices.auth(),
httpAuth: mockServices.httpAuth(),
permissionsService,
+ auditor: mockServices.auditor.mock(),
});
router.use(middleware.error());
app = express().use(router);
@@ -1190,6 +1192,7 @@ describe('NextRouter permissioning', () => {
auth: mockServices.auth(),
httpAuth: mockServices.httpAuth(),
permissionsService,
+ auditor: mockServices.auditor.mock(),
});
app = express().use(router);
});
diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts
index be5b650e6a..08e98d0548 100644
--- a/plugins/catalog-backend/src/service/createRouter.ts
+++ b/plugins/catalog-backend/src/service/createRouter.ts
@@ -14,6 +14,14 @@
* limitations under the License.
*/
+import {
+ AuditorService,
+ AuthService,
+ HttpAuthService,
+ LoggerService,
+ PermissionsService,
+ SchedulerService,
+} from '@backstage/backend-plugin-api';
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
@@ -23,12 +31,15 @@ import {
} from '@backstage/catalog-model';
import { Config } from '@backstage/config';
import { InputError, serializeError } from '@backstage/errors';
+import { LocationAnalyzer } from '@backstage/plugin-catalog-node';
import express from 'express';
import yn from 'yn';
import { z } from 'zod';
import { Cursor, EntitiesCatalog } from '../catalog/types';
import { CatalogProcessingOrchestrator } from '../processing/types';
import { validateEntityEnvelope } from '../processing/util';
+import { createOpenApiRouter } from '../schema/openapi';
+import { AuthorizedValidationService } from './AuthorizedValidationService';
import {
basicEntityFilter,
entitiesBatchRequest,
@@ -38,6 +49,12 @@ import {
} from './request';
import { parseEntityFacetParams } from './request/parseEntityFacetParams';
import { parseEntityOrderParams } from './request/parseEntityOrderParams';
+import { parseEntityPaginationParams } from './request/parseEntityPaginationParams';
+import {
+ createEntityArrayJsonStream,
+ writeEntitiesResponse,
+ writeSingleEntityResponse,
+} from './response';
import { LocationService, RefreshService } from './types';
import {
disallowReadonlyMode,
@@ -45,22 +62,6 @@ import {
locationInput,
validateRequestBody,
} from './util';
-import { createOpenApiRouter } from '../schema/openapi';
-import { parseEntityPaginationParams } from './request/parseEntityPaginationParams';
-import {
- AuthService,
- HttpAuthService,
- LoggerService,
- SchedulerService,
- PermissionsService,
-} from '@backstage/backend-plugin-api';
-import { LocationAnalyzer } from '@backstage/plugin-catalog-node';
-import { AuthorizedValidationService } from './AuthorizedValidationService';
-import {
- createEntityArrayJsonStream,
- writeEntitiesResponse,
- writeSingleEntityResponse,
-} from './response';
/**
* Options used by {@link createRouter}.
@@ -81,6 +82,8 @@ export interface RouterOptions {
auth: AuthService;
httpAuth: HttpAuthService;
permissionsService: PermissionsService;
+ // TODO: Require AuditorService once `backend-legacy` is removed
+ auditor?: AuditorService;
disableRelationsCompatibility?: boolean;
}
@@ -109,6 +112,7 @@ export async function createRouter(
permissionsService,
auth,
httpAuth,
+ auditor,
disableRelationsCompatibility = false,
} = options;
@@ -119,18 +123,36 @@ export async function createRouter(
}
if (refreshService) {
+ // TODO: Potentially find a way to track the ancestor that gets refreshed to refresh this entity (as well as the child of that ancestor?)
router.post('/refresh', async (req, res) => {
const { authorizationToken, ...restBody } = req.body;
- const credentials = authorizationToken
- ? await auth.authenticate(authorizationToken)
- : await httpAuth.credentials(req);
-
- await refreshService.refresh({
- ...restBody,
- credentials,
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-mutate',
+ severityLevel: 'medium',
+ meta: {
+ queryType: 'refresh',
+ entityRef: restBody.entityRef,
+ },
+ request: req,
});
- res.status(200).end();
+
+ try {
+ const credentials = authorizationToken
+ ? await auth.authenticate(authorizationToken)
+ : await httpAuth.credentials(req);
+
+ await refreshService.refresh({
+ ...restBody,
+ credentials,
+ });
+
+ await auditorEvent?.success();
+ res.status(200).end();
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
});
}
@@ -141,95 +163,122 @@ export async function createRouter(
if (entitiesCatalog) {
router
.get('/entities', async (req, res) => {
- const filter = parseEntityFilterParams(req.query);
- const fields = parseEntityTransformParams(req.query);
- const order = parseEntityOrderParams(req.query);
- const pagination = parseEntityPaginationParams(req.query);
- const credentials = await httpAuth.credentials(req);
-
- // When pagination parameters are passed in, use the legacy slow path
- // that loads all entities into memory
-
- if (pagination || disableRelationsCompatibility !== true) {
- const { entities, pageInfo } = await entitiesCatalog.entities({
- filter,
- fields,
- order,
- pagination,
- credentials,
- });
-
- // Add a Link header to the next page
- if (pageInfo.hasNextPage) {
- const url = new URL(`http://ignored${req.url}`);
- url.searchParams.delete('offset');
- url.searchParams.set('after', pageInfo.endCursor);
- res.setHeader('link', `<${url.pathname}${url.search}>; rel="next"`);
- }
-
- await writeEntitiesResponse({
- res,
- items: entities,
- alwaysUseObjectMode: !disableRelationsCompatibility,
- });
- return;
- }
-
- const responseStream = createEntityArrayJsonStream(res);
- const limit = 10000;
- let cursor: Cursor | undefined;
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-fetch',
+ request: req,
+ meta: {
+ queryType: 'all',
+ query: req.query,
+ },
+ });
try {
- let currentWrite: Promise | undefined = undefined;
- do {
- const result = await entitiesCatalog.queryEntities(
- !cursor
- ? {
- credentials,
- fields,
- limit,
- filter,
- orderFields: order,
- skipTotalItems: true,
- }
- : { credentials, fields, limit, cursor },
- );
+ const filter = parseEntityFilterParams(req.query);
+ const fields = parseEntityTransformParams(req.query);
+ const order = parseEntityOrderParams(req.query);
+ const pagination = parseEntityPaginationParams(req.query);
+ const credentials = await httpAuth.credentials(req);
- // Wait for previous write to complete
- if (await currentWrite) {
- return; // Client closed connection
+ // When pagination parameters are passed in, use the legacy slow path
+ // that loads all entities into memory
+
+ if (pagination || disableRelationsCompatibility !== true) {
+ const { entities, pageInfo } = await entitiesCatalog.entities({
+ filter,
+ fields,
+ order,
+ pagination,
+ credentials,
+ });
+
+ // Add a Link header to the next page
+ if (pageInfo.hasNextPage) {
+ const url = new URL(`http://ignored${req.url}`);
+ url.searchParams.delete('offset');
+ url.searchParams.set('after', pageInfo.endCursor);
+ res.setHeader(
+ 'link',
+ `<${url.pathname}${url.search}>; rel="next"`,
+ );
}
- if (result.items.entities.length) {
- currentWrite = responseStream.send(result.items);
- }
+ await auditorEvent?.success();
- cursor = result.pageInfo?.nextCursor;
- } while (cursor);
+ await writeEntitiesResponse({
+ res,
+ items: entities,
+ alwaysUseObjectMode: !disableRelationsCompatibility,
+ });
+ return;
+ }
- // Wait for last write to complete
- await currentWrite;
+ const responseStream = createEntityArrayJsonStream(res);
+ const limit = 10000;
+ let cursor: Cursor | undefined;
- responseStream.complete();
- } finally {
- responseStream.close();
+ try {
+ let currentWrite: Promise | undefined = undefined;
+ do {
+ const result = await entitiesCatalog.queryEntities(
+ !cursor
+ ? {
+ credentials,
+ fields,
+ limit,
+ filter,
+ orderFields: order,
+ skipTotalItems: true,
+ }
+ : { credentials, fields, limit, cursor },
+ );
+
+ // Wait for previous write to complete
+ if (await currentWrite) {
+ return; // Client closed connection
+ }
+
+ if (result.items.entities.length) {
+ currentWrite = responseStream.send(result.items);
+ }
+
+ cursor = result.pageInfo?.nextCursor;
+ } while (cursor);
+
+ // Wait for last write to complete
+ await currentWrite;
+
+ await auditorEvent?.success();
+
+ responseStream.complete();
+ } finally {
+ responseStream.close();
+ }
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
}
})
.get('/entities/by-query', async (req, res) => {
- const { items, pageInfo, totalItems } =
- await entitiesCatalog.queryEntities({
- limit: req.query.limit,
- offset: req.query.offset,
- ...parseQueryEntitiesParams(req.query),
- credentials: await httpAuth.credentials(req),
- });
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-fetch',
+ request: req,
+ meta: {
+ queryType: 'by-query',
+ },
+ });
- await writeEntitiesResponse({
- res,
- items,
- alwaysUseObjectMode: !disableRelationsCompatibility,
- responseWrapper: entities => ({
- items: entities,
+ try {
+ const { items, pageInfo, totalItems } =
+ await entitiesCatalog.queryEntities({
+ limit: req.query.limit,
+ offset: req.query.offset,
+ ...parseQueryEntitiesParams(req.query),
+ credentials: await httpAuth.credentials(req),
+ });
+
+ const meta = {
totalItems,
pageInfo: {
...(pageInfo.nextCursor && {
@@ -239,71 +288,237 @@ export async function createRouter(
prevCursor: encodeCursor(pageInfo.prevCursor),
}),
},
- }),
- });
+ };
+
+ await auditorEvent?.success({
+ // Let's not log out the entities since this can make the log very big
+ meta,
+ });
+
+ await writeEntitiesResponse({
+ res,
+ items,
+ alwaysUseObjectMode: !disableRelationsCompatibility,
+ responseWrapper: entities => ({
+ items: entities,
+ ...meta,
+ }),
+ });
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.get('/entities/by-uid/:uid', async (req, res) => {
const { uid } = req.params;
- const { entities } = await entitiesCatalog.entities({
- filter: basicEntityFilter({ 'metadata.uid': uid }),
- credentials: await httpAuth.credentials(req),
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-fetch',
+ request: req,
+ meta: {
+ queryType: 'by-uid',
+ uid: uid,
+ },
});
- writeSingleEntityResponse(res, entities, `No entity with uid ${uid}`);
+
+ try {
+ const { entities } = await entitiesCatalog.entities({
+ filter: basicEntityFilter({ 'metadata.uid': uid }),
+ credentials: await httpAuth.credentials(req),
+ });
+
+ writeSingleEntityResponse(res, entities, `No entity with uid ${uid}`);
+
+ await auditorEvent?.success({
+ meta: {
+ // stringify to entity refs
+ entities: entities.entities.reduce((arr, element) => {
+ if (!element) {
+ return arr;
+ }
+
+ if (typeof element === 'string') {
+ arr.push(element);
+ return arr;
+ }
+
+ arr.push(stringifyEntityRef(element));
+ return arr;
+ }, [] as string[]),
+ },
+ });
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.delete('/entities/by-uid/:uid', async (req, res) => {
const { uid } = req.params;
- await entitiesCatalog.removeEntityByUid(uid, {
- credentials: await httpAuth.credentials(req),
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-mutate',
+ severityLevel: 'medium',
+ request: req,
+ meta: {
+ actionType: 'delete',
+ uid: uid,
+ },
});
- res.status(204).end();
+
+ try {
+ await entitiesCatalog.removeEntityByUid(uid, {
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success();
+
+ res.status(204).end();
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.get('/entities/by-name/:kind/:namespace/:name', async (req, res) => {
const { kind, namespace, name } = req.params;
- const { items } = await entitiesCatalog.entitiesBatch({
- entityRefs: [stringifyEntityRef({ kind, namespace, name })],
- credentials: await httpAuth.credentials(req),
+ const entityRef = stringifyEntityRef({ kind, namespace, name });
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-fetch',
+ request: req,
+ meta: {
+ queryType: 'by-name',
+ entityRef: entityRef,
+ },
});
- writeSingleEntityResponse(
- res,
- items,
- `No entity named '${name}' found, with kind '${kind}' in namespace '${namespace}'`,
- );
+
+ try {
+ const { items } = await entitiesCatalog.entitiesBatch({
+ entityRefs: [stringifyEntityRef({ kind, namespace, name })],
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success();
+
+ writeSingleEntityResponse(
+ res,
+ items,
+ `No entity named '${name}' found, with kind '${kind}' in namespace '${namespace}'`,
+ );
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.get(
'/entities/by-name/:kind/:namespace/:name/ancestry',
async (req, res) => {
const { kind, namespace, name } = req.params;
const entityRef = stringifyEntityRef({ kind, namespace, name });
- const response = await entitiesCatalog.entityAncestry(entityRef, {
- credentials: await httpAuth.credentials(req),
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-fetch',
+ request: req,
+ meta: {
+ actionType: 'ancestry',
+ entityRef: entityRef,
+ },
});
- res.status(200).json(response);
+
+ try {
+ const response = await entitiesCatalog.entityAncestry(entityRef, {
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success({
+ meta: {
+ rootEntityRef: response.rootEntityRef,
+ ancestry: response.items.map(ancestryLink => {
+ return {
+ entityRef: stringifyEntityRef(ancestryLink.entity),
+ parentEntityRefs: ancestryLink.parentEntityRefs,
+ };
+ }),
+ },
+ });
+
+ res.status(200).json(response);
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
},
)
.post('/entities/by-refs', async (req, res) => {
- const request = entitiesBatchRequest(req);
- const { items } = await entitiesCatalog.entitiesBatch({
- entityRefs: request.entityRefs,
- filter: parseEntityFilterParams(req.query),
- fields: parseEntityTransformParams(req.query, request.fields),
- credentials: await httpAuth.credentials(req),
- });
- await writeEntitiesResponse({
- res,
- items,
- alwaysUseObjectMode: !disableRelationsCompatibility,
- responseWrapper: entities => ({
- items: entities,
- }),
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-fetch',
+ request: req,
+ meta: {
+ queryType: 'by-refs',
+ },
});
+
+ try {
+ const request = entitiesBatchRequest(req);
+ const { items } = await entitiesCatalog.entitiesBatch({
+ entityRefs: request.entityRefs,
+ filter: parseEntityFilterParams(req.query),
+ fields: parseEntityTransformParams(req.query, request.fields),
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success({
+ meta: {
+ ...request,
+ },
+ });
+
+ await writeEntitiesResponse({
+ res,
+ items,
+ alwaysUseObjectMode: !disableRelationsCompatibility,
+ responseWrapper: entities => ({
+ items: entities,
+ }),
+ });
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.get('/entity-facets', async (req, res) => {
- const response = await entitiesCatalog.facets({
- filter: parseEntityFilterParams(req.query),
- facets: parseEntityFacetParams(req.query),
- credentials: await httpAuth.credentials(req),
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-facets',
+ request: req,
});
- res.status(200).json(response);
+
+ try {
+ const response = await entitiesCatalog.facets({
+ filter: parseEntityFilterParams(req.query),
+ facets: parseEntityFacetParams(req.query),
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success();
+
+ res.status(200).json(response);
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
});
}
@@ -313,79 +528,219 @@ export async function createRouter(
const location = await validateRequestBody(req, locationInput);
const dryRun = yn(req.query.dryRun, { default: false });
- // when in dryRun addLocation is effectively a read operation so we don't
- // need to disallow readonly
- if (!dryRun) {
- disallowReadonlyMode(readonlyEnabled);
- }
-
- const output = await locationService.createLocation(location, dryRun, {
- credentials: await httpAuth.credentials(req),
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'location-mutate',
+ severityLevel: dryRun ? 'low' : 'medium',
+ request: req,
+ meta: {
+ actionType: 'create',
+ location: location,
+ isDryRun: dryRun,
+ },
});
- res.status(201).json(output);
+
+ try {
+ // when in dryRun addLocation is effectively a read operation so we don't
+ // need to disallow readonly
+ if (!dryRun) {
+ disallowReadonlyMode(readonlyEnabled);
+ }
+
+ const output = await locationService.createLocation(
+ location,
+ dryRun,
+ {
+ credentials: await httpAuth.credentials(req),
+ },
+ );
+
+ await auditorEvent?.success({
+ meta: {
+ location: output.location,
+ },
+ });
+
+ res.status(201).json(output);
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ meta: {
+ location: location,
+ isDryRun: dryRun,
+ },
+ });
+ throw err;
+ }
})
.get('/locations', async (req, res) => {
- const locations = await locationService.listLocations({
- credentials: await httpAuth.credentials(req),
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'location-fetch',
+ request: req,
+ meta: {
+ queryType: 'all',
+ },
});
- res.status(200).json(locations.map(l => ({ data: l })));
+
+ try {
+ const locations = await locationService.listLocations({
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success();
+
+ res.status(200).json(locations.map(l => ({ data: l })));
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.get('/locations/:id', async (req, res) => {
const { id } = req.params;
- const output = await locationService.getLocation(id, {
- credentials: await httpAuth.credentials(req),
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'location-fetch',
+ request: req,
+ meta: {
+ queryType: 'by-id',
+ id: id,
+ },
});
- res.status(200).json(output);
+
+ try {
+ const output = await locationService.getLocation(id, {
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success({
+ meta: {
+ output: output,
+ },
+ });
+
+ res.status(200).json(output);
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.delete('/locations/:id', async (req, res) => {
+ const { id } = req.params;
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'location-mutate',
+ severityLevel: 'medium',
+ request: req,
+ meta: {
+ actionType: 'delete',
+ id: id,
+ },
+ });
+
disallowReadonlyMode(readonlyEnabled);
- const { id } = req.params;
- await locationService.deleteLocation(id, {
- credentials: await httpAuth.credentials(req),
- });
- res.status(204).end();
+ try {
+ await locationService.deleteLocation(id, {
+ credentials: await httpAuth.credentials(req),
+ });
+
+ await auditorEvent?.success();
+
+ res.status(204).end();
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
})
.get('/locations/by-entity/:kind/:namespace/:name', async (req, res) => {
const { kind, namespace, name } = req.params;
- const output = await locationService.getLocationByEntity(
- { kind, namespace, name },
- { credentials: await httpAuth.credentials(req) },
- );
- res.status(200).json(output);
+ const locationRef = `${kind}:${namespace}/${name}`;
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'location-fetch',
+ request: req,
+ meta: {
+ queryType: 'by-entity',
+ locationRef: locationRef,
+ },
+ });
+
+ try {
+ const output = await locationService.getLocationByEntity(
+ { kind, namespace, name },
+ { credentials: await httpAuth.credentials(req) },
+ );
+
+ await auditorEvent?.success({
+ meta: {
+ output: output,
+ },
+ });
+
+ res.status(200).json(output);
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+ throw err;
+ }
});
}
if (locationAnalyzer) {
router.post('/analyze-location', async (req, res) => {
- const body = await validateRequestBody(
- req,
- z.object({
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'location-analyze',
+ request: req,
+ });
+
+ try {
+ const body = await validateRequestBody(
+ req,
+ z.object({
+ location: locationInput,
+ catalogFilename: z.string().optional(),
+ }),
+ );
+ const schema = z.object({
location: locationInput,
catalogFilename: z.string().optional(),
- }),
- );
- const schema = z.object({
- location: locationInput,
- catalogFilename: z.string().optional(),
- });
- const credentials = await httpAuth.credentials(req);
- const parsedBody = schema.parse(body);
- try {
- const output = await locationAnalyzer.analyzeLocation(
- parsedBody,
- credentials,
- );
- res.status(200).json(output);
- } catch (err) {
- if (
- // Catch errors from parse-url library.
- err.name === 'Error' &&
- 'subject_url' in err
- ) {
- throw new InputError('The given location.target is not a URL');
+ });
+ const credentials = await httpAuth.credentials(req);
+ const parsedBody = schema.parse(body);
+ try {
+ const output = await locationAnalyzer.analyzeLocation(
+ parsedBody,
+ credentials,
+ );
+
+ await auditorEvent?.success({
+ meta: {
+ output: output,
+ },
+ });
+
+ res.status(200).json(output);
+ } catch (err) {
+ if (
+ // Catch errors from parse-url library.
+ err.name === 'Error' &&
+ 'subject_url' in err
+ ) {
+ throw new InputError('The given location.target is not a URL');
+ }
+ throw err;
}
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
throw err;
}
});
@@ -393,55 +748,82 @@ export async function createRouter(
if (orchestrator) {
router.post('/validate-entity', async (req, res) => {
- const bodySchema = z.object({
- entity: z.unknown(),
- location: z.string(),
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'entity-validate',
+ request: req,
});
- let body: z.infer;
- let entity: Entity;
- let location: { type: string; target: string };
try {
- body = await validateRequestBody(req, bodySchema);
- entity = validateEntityEnvelope(body.entity);
- location = parseLocationRef(body.location);
- if (location.type !== 'url')
- throw new TypeError(
- `Invalid location ref ${body.location}, only 'url:' is supported, e.g. url:https://host/path`,
- );
- } catch (err) {
- return res.status(400).json({
- errors: [serializeError(err)],
+ const bodySchema = z.object({
+ entity: z.unknown(),
+ location: z.string(),
});
- }
- const credentials = await httpAuth.credentials(req);
- const authorizedValidationService = new AuthorizedValidationService(
- orchestrator,
- permissionsService,
- );
- const processingResult = await authorizedValidationService.process(
- {
- entity: {
- ...entity,
- metadata: {
- ...entity.metadata,
- annotations: {
- [ANNOTATION_LOCATION]: body.location,
- [ANNOTATION_ORIGIN_LOCATION]: body.location,
- ...entity.metadata.annotations,
+ let body: z.infer;
+ let entity: Entity;
+ let location: { type: string; target: string };
+ try {
+ body = await validateRequestBody(req, bodySchema);
+ entity = validateEntityEnvelope(body.entity);
+ location = parseLocationRef(body.location);
+ if (location.type !== 'url')
+ throw new TypeError(
+ `Invalid location ref ${body.location}, only 'url:' is supported, e.g. url:https://host/path`,
+ );
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
+ });
+
+ return res.status(400).json({
+ errors: [serializeError(err)],
+ });
+ }
+
+ const credentials = await httpAuth.credentials(req);
+ const authorizedValidationService = new AuthorizedValidationService(
+ orchestrator,
+ permissionsService,
+ );
+ const processingResult = await authorizedValidationService.process(
+ {
+ entity: {
+ ...entity,
+ metadata: {
+ ...entity.metadata,
+ annotations: {
+ [ANNOTATION_LOCATION]: body.location,
+ [ANNOTATION_ORIGIN_LOCATION]: body.location,
+ ...entity.metadata.annotations,
+ },
},
},
},
- },
- credentials,
- );
+ credentials,
+ );
- if (!processingResult.ok)
- res.status(400).json({
- errors: processingResult.errors.map(e => serializeError(e)),
+ if (!processingResult.ok) {
+ const errors = processingResult.errors.map(e => serializeError(e));
+
+ await auditorEvent?.fail({
+ // TODO(Rugvip): Seems like there aren't proper types for AggregateError yet
+ error: (AggregateError as any)(errors, 'Could not validate entity'),
+ });
+
+ res.status(400).json({
+ errors,
+ });
+ }
+
+ await auditorEvent?.success();
+
+ return res.status(200).end();
+ } catch (err) {
+ await auditorEvent?.fail({
+ error: err,
});
- return res.status(200).end();
+ throw err;
+ }
});
}
diff --git a/plugins/catalog-backend/src/tests/integration.test.ts b/plugins/catalog-backend/src/tests/integration.test.ts
index 0c8e475b39..1c134d4c60 100644
--- a/plugins/catalog-backend/src/tests/integration.test.ts
+++ b/plugins/catalog-backend/src/tests/integration.test.ts
@@ -65,10 +65,15 @@ type ProgressTrackerWithErrorReports = ProgressTracker & {
};
class TestProvider implements EntityProvider {
+ readonly #name: string;
#connection?: EntityProviderConnection;
+ constructor(name: string = 'test') {
+ this.#name = name;
+ }
+
getProviderName(): string {
- return 'test';
+ return this.#name;
}
async connect(connection: EntityProviderConnection): Promise {
@@ -901,11 +906,8 @@ describe('Catalog Backend Integration', () => {
});
it('should replace any refresh_state_references that are dangling after claiming an entityRef with locationKey', async () => {
- const firstProvider = new TestProvider();
- firstProvider.getProviderName = () => 'first';
-
- const secondProvider = new TestProvider();
- secondProvider.getProviderName = () => 'second';
+ const firstProvider = new TestProvider('first');
+ const secondProvider = new TestProvider('second');
const harness = await TestHarness.create({
additionalProviders: [firstProvider, secondProvider],
diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md
index 20c2826a03..942b689ad4 100644
--- a/plugins/catalog-graph/CHANGELOG.md
+++ b/plugins/catalog-graph/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-graph
+## 0.4.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
## 0.4.15
### Patch Changes
diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json
index 38f0d1cca4..20dc022ea0 100644
--- a/plugins/catalog-graph/package.json
+++ b/plugins/catalog-graph/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-graph",
- "version": "0.4.15",
+ "version": "0.4.16-next.0",
"backstage": {
"role": "frontend-plugin",
"pluginId": "catalog-graph",
diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md
index 95ed8313d3..1216b5e0b1 100644
--- a/plugins/catalog-import/CHANGELOG.md
+++ b/plugins/catalog-import/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-catalog-import
+## 0.12.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-react@1.2.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
## 0.12.9
### Patch Changes
diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json
index fe397509fe..c91667a419 100644
--- a/plugins/catalog-import/package.json
+++ b/plugins/catalog-import/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-import",
- "version": "0.12.9",
+ "version": "0.12.10-next.0",
"description": "A Backstage plugin the helps you import entities into your catalog",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md
index a2969ac69d..0ac315a6a6 100644
--- a/plugins/catalog-node/CHANGELOG.md
+++ b/plugins/catalog-node/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-node
+## 1.15.2-next.0
+
+### Patch Changes
+
+- 4a941e7: Deprecated the alpha `catalogPermissionExtensionPoint` and related types, since the same functionality is now available via the new `PermissionsRegistryService`.
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+
## 1.15.1
### Patch Changes
diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json
index 81c22a0d52..7d92b73bca 100644
--- a/plugins/catalog-node/package.json
+++ b/plugins/catalog-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-node",
- "version": "1.15.1",
+ "version": "1.15.2-next.0",
"description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend",
"backstage": {
"role": "node-library",
diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md
index fd82078b81..e91c5de54f 100644
--- a/plugins/catalog-react/CHANGELOG.md
+++ b/plugins/catalog-react/CHANGELOG.md
@@ -1,5 +1,25 @@
# @backstage/plugin-catalog-react
+## 1.15.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/frontend-test-utils@0.2.6-next.0
+ - @backstage/integration-react@1.2.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-permission-react@0.4.30
+
## 1.15.1
### Patch Changes
diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json
index 4f748fcfb6..20d66ad962 100644
--- a/plugins/catalog-react/package.json
+++ b/plugins/catalog-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-react",
- "version": "1.15.1",
+ "version": "1.15.2-next.0",
"description": "A frontend library that helps other Backstage plugins interact with the catalog",
"backstage": {
"role": "web-library",
diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md
index b4edb00720..8965c35503 100644
--- a/plugins/catalog/CHANGELOG.md
+++ b/plugins/catalog/CHANGELOG.md
@@ -1,5 +1,26 @@
# @backstage/plugin-catalog
+## 1.26.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration-react@1.2.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+ - @backstage/plugin-search-common@1.2.17
+
## 1.26.1
### Patch Changes
diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json
index 233a99fc6f..c4e6b557df 100644
--- a/plugins/catalog/package.json
+++ b/plugins/catalog/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog",
- "version": "1.26.1",
+ "version": "1.26.2-next.0",
"description": "The Backstage plugin for browsing the Backstage catalog",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md
index f63126ae16..5779a7153a 100644
--- a/plugins/devtools-backend/CHANGELOG.md
+++ b/plugins/devtools-backend/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-devtools-backend
+## 0.5.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-devtools-common@0.1.15
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.5.1
### Patch Changes
diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json
index cdbf9efd73..1d9106bcaf 100644
--- a/plugins/devtools-backend/package.json
+++ b/plugins/devtools-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-devtools-backend",
- "version": "0.5.1",
+ "version": "0.5.2-next.0",
"backstage": {
"role": "backend-plugin",
"pluginId": "devtools",
diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md
index f11f12046d..e025062b70 100644
--- a/plugins/devtools/CHANGELOG.md
+++ b/plugins/devtools/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-devtools
+## 0.1.24-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-devtools-common@0.1.15
+ - @backstage/plugin-permission-react@0.4.30
+
## 0.1.23
### Patch Changes
diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json
index 5976b8c908..7999ac993c 100644
--- a/plugins/devtools/package.json
+++ b/plugins/devtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-devtools",
- "version": "0.1.23",
+ "version": "0.1.24-next.0",
"backstage": {
"role": "frontend-plugin",
"pluginId": "devtools",
diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md
index c8169305cb..6d0b38f791 100644
--- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md
+++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-events-backend-module-aws-sqs
+## 0.4.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.4.7
### Patch Changes
diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json
index 3c356578e2..077dba39a3 100644
--- a/plugins/events-backend-module-aws-sqs/package.json
+++ b/plugins/events-backend-module-aws-sqs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-aws-sqs",
- "version": "0.4.7",
+ "version": "0.4.8-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md
index 71b98cfde7..bd6c5405c3 100644
--- a/plugins/events-backend-module-azure/CHANGELOG.md
+++ b/plugins/events-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-azure
+## 0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.2.16
### Patch Changes
diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json
index cd781e5e9f..05b5775b73 100644
--- a/plugins/events-backend-module-azure/package.json
+++ b/plugins/events-backend-module-azure/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-azure",
- "version": "0.2.16",
+ "version": "0.2.17-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
index b2fac5c648..f5512f8a64 100644
--- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-bitbucket-cloud
+## 0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.2.16
### Patch Changes
diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json
index 96277b10da..65ce4a019b 100644
--- a/plugins/events-backend-module-bitbucket-cloud/package.json
+++ b/plugins/events-backend-module-bitbucket-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-bitbucket-cloud",
- "version": "0.2.16",
+ "version": "0.2.17-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md
index f952b02e40..38da965d66 100644
--- a/plugins/events-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/events-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-gerrit
+## 0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.2.16
### Patch Changes
diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json
index f285e4dd29..087404392c 100644
--- a/plugins/events-backend-module-gerrit/package.json
+++ b/plugins/events-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-gerrit",
- "version": "0.2.16",
+ "version": "0.2.17-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md
index e27647ed53..f554b03aba 100644
--- a/plugins/events-backend-module-github/CHANGELOG.md
+++ b/plugins/events-backend-module-github/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-backend-module-github
+## 0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.2.16
### Patch Changes
diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json
index c4d6f8322e..305f1dbbdd 100644
--- a/plugins/events-backend-module-github/package.json
+++ b/plugins/events-backend-module-github/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-github",
- "version": "0.2.16",
+ "version": "0.2.17-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md
index 3b7656ee9b..c2eb1536cb 100644
--- a/plugins/events-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/events-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-backend-module-gitlab
+## 0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.2.16
### Patch Changes
diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json
index 5daec2e4ef..bb6183cd77 100644
--- a/plugins/events-backend-module-gitlab/package.json
+++ b/plugins/events-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-gitlab",
- "version": "0.2.16",
+ "version": "0.2.17-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md
index 251419e45d..85f6bf151d 100644
--- a/plugins/events-backend-test-utils/CHANGELOG.md
+++ b/plugins/events-backend-test-utils/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-events-backend-test-utils
+## 0.1.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.1.40
### Patch Changes
diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json
index 40e8527d8c..bb2fddffdf 100644
--- a/plugins/events-backend-test-utils/package.json
+++ b/plugins/events-backend-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-test-utils",
- "version": "0.1.40",
+ "version": "0.1.41-next.0",
"description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node",
"backstage": {
"role": "node-library",
diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md
index 81c08e4da1..d0d064575f 100644
--- a/plugins/events-backend/CHANGELOG.md
+++ b/plugins/events-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-events-backend
+## 0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.4.1
### Patch Changes
diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json
index 8365b591aa..25401d0d33 100644
--- a/plugins/events-backend/package.json
+++ b/plugins/events-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend",
- "version": "0.4.1",
+ "version": "0.4.2-next.0",
"backstage": {
"role": "backend-plugin",
"pluginId": "events",
diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md
index 7b8935c83a..1bf2f5e485 100644
--- a/plugins/events-node/CHANGELOG.md
+++ b/plugins/events-node/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-node
+## 0.4.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
## 0.4.7
### Patch Changes
diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json
index 9586ad65e9..0d42815e0b 100644
--- a/plugins/events-node/package.json
+++ b/plugins/events-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-node",
- "version": "0.4.7",
+ "version": "0.4.8-next.0",
"description": "The plugin-events-node module for @backstage/plugin-events-backend",
"backstage": {
"role": "node-library",
diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md
index 2a503ccf89..79cb5e957f 100644
--- a/plugins/example-todo-list-backend/CHANGELOG.md
+++ b/plugins/example-todo-list-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @internal/plugin-todo-list-backend
+## 1.0.36-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
## 1.0.35
### Patch Changes
diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json
index 1f86e71516..5421176db2 100644
--- a/plugins/example-todo-list-backend/package.json
+++ b/plugins/example-todo-list-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/plugin-todo-list-backend",
- "version": "1.0.35",
+ "version": "1.0.36-next.0",
"backstage": {
"role": "backend-plugin",
"pluginId": "todo-list",
diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md
index 579c6e4089..ea39d10f2e 100644
--- a/plugins/home/CHANGELOG.md
+++ b/plugins/home/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-home
+## 0.8.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-home-react@0.1.22
+
## 0.8.4
### Patch Changes
diff --git a/plugins/home/package.json b/plugins/home/package.json
index 0ee2bff69f..245e71c141 100644
--- a/plugins/home/package.json
+++ b/plugins/home/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-home",
- "version": "0.8.4",
+ "version": "0.8.5-next.0",
"description": "A Backstage plugin that helps you build a home page",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md
index 0c14c5f013..8d8142f11c 100644
--- a/plugins/kubernetes-backend/CHANGELOG.md
+++ b/plugins/kubernetes-backend/CHANGELOG.md
@@ -1,5 +1,25 @@
# @backstage/plugin-kubernetes-backend
+## 0.19.3-next.0
+
+### Patch Changes
+
+- ac0e1ac: Fixed the lack of `secrets` to fetch from the kubernetes api by adding option to specify additional Objects which are not part of Default Objects
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/plugin-kubernetes-node@0.2.3-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.19.2
### Patch Changes
diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json
index 531b0110cb..cb4b9ca049 100644
--- a/plugins/kubernetes-backend/package.json
+++ b/plugins/kubernetes-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-backend",
- "version": "0.19.2",
+ "version": "0.19.3-next.0",
"description": "A Backstage backend plugin that integrates towards Kubernetes",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/kubernetes-cluster/CHANGELOG.md b/plugins/kubernetes-cluster/CHANGELOG.md
index 22212fca9d..34d9497239 100644
--- a/plugins/kubernetes-cluster/CHANGELOG.md
+++ b/plugins/kubernetes-cluster/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-kubernetes-cluster
+## 0.0.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-react@0.5.4-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
## 0.0.21
### Patch Changes
diff --git a/plugins/kubernetes-cluster/package.json b/plugins/kubernetes-cluster/package.json
index 1dcaee3e40..12b7dcad21 100644
--- a/plugins/kubernetes-cluster/package.json
+++ b/plugins/kubernetes-cluster/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-cluster",
- "version": "0.0.21",
+ "version": "0.0.22-next.0",
"description": "A Backstage plugin that shows details of Kubernetes clusters",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/kubernetes-cluster/src/components/ClusterOverview/ClusterOverview.tsx b/plugins/kubernetes-cluster/src/components/ClusterOverview/ClusterOverview.tsx
index b77b2dff88..af741239e5 100644
--- a/plugins/kubernetes-cluster/src/components/ClusterOverview/ClusterOverview.tsx
+++ b/plugins/kubernetes-cluster/src/components/ClusterOverview/ClusterOverview.tsx
@@ -58,6 +58,7 @@ export const ClusterOverview = () => {
'OIDC Token Provider': value.oidcTokenProvider ?? 'N/A',
'Dashboard Link': value.dashboardUrl ?? 'N/A',
}}
+ options={{ nestedValuesAsYaml: true }}
/>
)}
diff --git a/plugins/kubernetes-cluster/src/components/Nodes/Nodes.tsx b/plugins/kubernetes-cluster/src/components/Nodes/Nodes.tsx
index 0b3f7ddb60..9307b11a6e 100644
--- a/plugins/kubernetes-cluster/src/components/Nodes/Nodes.tsx
+++ b/plugins/kubernetes-cluster/src/components/Nodes/Nodes.tsx
@@ -50,7 +50,10 @@ const defaultColumns: TableColumn[] = [
Node Info
-
+
Addresses
@@ -61,6 +64,7 @@ const defaultColumns: TableColumn[] = [
return accum;
}, {} as any) ?? {}
}
+ options={{ nestedValuesAsYaml: true }}
/>
@@ -72,6 +76,7 @@ const defaultColumns: TableColumn[] = [
return accum;
}, {} as any) ?? {}
}
+ options={{ nestedValuesAsYaml: true }}
/>
diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md
index b83c79753b..c4b08f3fd4 100644
--- a/plugins/kubernetes-common/CHANGELOG.md
+++ b/plugins/kubernetes-common/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-kubernetes-common
+## 0.9.3-next.0
+
+### Patch Changes
+
+- ac0e1ac: Fixed the lack of `secrets` to fetch from the kubernetes api by adding option to specify additional Objects which are not part of Default Objects
+- Updated dependencies
+ - @backstage/catalog-model@1.7.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.9.2
### Patch Changes
diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json
index 703ebfc5a8..53f55e3194 100644
--- a/plugins/kubernetes-common/package.json
+++ b/plugins/kubernetes-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-common",
- "version": "0.9.2",
+ "version": "0.9.3-next.0",
"description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin",
"backstage": {
"role": "common-library",
diff --git a/plugins/kubernetes-node/CHANGELOG.md b/plugins/kubernetes-node/CHANGELOG.md
index cb87f4bbf3..b917742ba5 100644
--- a/plugins/kubernetes-node/CHANGELOG.md
+++ b/plugins/kubernetes-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-kubernetes-node
+## 0.2.3-next.0
+
+### Patch Changes
+
+- ac0e1ac: Fixed the lack of `secrets` to fetch from the kubernetes api by adding option to specify additional Objects which are not part of Default Objects
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/types@1.2.1
+
## 0.2.2
### Patch Changes
diff --git a/plugins/kubernetes-node/package.json b/plugins/kubernetes-node/package.json
index b24a25cb30..61daf19262 100644
--- a/plugins/kubernetes-node/package.json
+++ b/plugins/kubernetes-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-node",
- "version": "0.2.2",
+ "version": "0.2.3-next.0",
"description": "Node.js library for the kubernetes plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md
index 03ca5c2b60..a3689773dc 100644
--- a/plugins/kubernetes-react/CHANGELOG.md
+++ b/plugins/kubernetes-react/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-kubernetes-react
+## 0.5.4-next.0
+
+### Patch Changes
+
+- f35a754: Fixed bug in string-to-integer conversion to properly handle decimal values with BigInt.
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
## 0.5.3
### Patch Changes
diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json
index ce63d3efdc..67678d5dac 100644
--- a/plugins/kubernetes-react/package.json
+++ b/plugins/kubernetes-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-react",
- "version": "0.5.3",
+ "version": "0.5.4-next.0",
"description": "Web library for the kubernetes-react plugin",
"backstage": {
"role": "web-library",
diff --git a/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx
index ee484ecda8..d34ba23f7b 100644
--- a/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx
+++ b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx
@@ -84,7 +84,10 @@ const DefaultCustomResourceAccordion = ({
{Object.prototype.hasOwnProperty.call(customResource, 'status') && (
-
+
)}
diff --git a/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx
index 1e8515f81a..002c4c8ff4 100644
--- a/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx
+++ b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx
@@ -40,13 +40,13 @@ describe('DeploymentDrawer', () => {
expect(getAllByText('Deployment')).toHaveLength(2);
expect(getByText('YAML')).toBeInTheDocument();
expect(getByText('Strategy')).toBeInTheDocument();
- expect(getByText('Rolling Update:')).toBeInTheDocument();
- expect(getByText(textContentMatcher('Max Surge: 25%'))).toBeInTheDocument();
+ expect(getByText('rollingUpdate:')).toBeInTheDocument();
+ expect(getByText(textContentMatcher('maxSurge: 25%'))).toBeInTheDocument();
expect(
- getByText(textContentMatcher('Max Unavailable: 25%')),
+ getByText(textContentMatcher('maxUnavailable: 25%')),
).toBeInTheDocument();
expect(
- getByText(textContentMatcher('Type: RollingUpdate')),
+ getByText(textContentMatcher('type: RollingUpdate')),
).toBeInTheDocument();
expect(getByText('Min Ready Seconds')).toBeInTheDocument();
expect(getByText('???')).toBeInTheDocument();
diff --git a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.test.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.test.tsx
index cfacb24ee4..e504aefbb9 100644
--- a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.test.tsx
+++ b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.test.tsx
@@ -37,13 +37,13 @@ describe('IngressDrawer', () => {
expect(screen.getByText('YAML')).toBeInTheDocument();
expect(screen.getByText('Rules')).toBeInTheDocument();
expect(
- screen.getByText(textContentMatcher('Host: api.awesome-host.io')),
+ screen.getByText(textContentMatcher('host: api.awesome-host.io')),
).toBeInTheDocument();
expect(
- screen.getAllByText(textContentMatcher('Service Port: 80')),
+ screen.getAllByText(textContentMatcher('servicePort: 80')),
).toHaveLength(2);
expect(
- screen.getAllByText(textContentMatcher('Service Name: awesome-service')),
+ screen.getAllByText(textContentMatcher('serviceName: awesome-service')),
).toHaveLength(2);
});
});
diff --git a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx
index 5962e78f59..d2d674042b 100644
--- a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx
+++ b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx
@@ -65,6 +65,9 @@ const IngressCard = ({ ingress }: IngressCardProps) => {
metadata={{
...ingress.spec,
}}
+ options={{
+ nestedValuesAsYaml: true,
+ }}
/>
);
};
diff --git a/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
index b31d3f9aa7..0a5802ddc8 100644
--- a/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
+++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
@@ -237,6 +237,7 @@ const KubernetesStructuredMetadataTableDrawerContent = <
{!isYaml && (
)}
diff --git a/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx
index 1919bc112d..6aed2c75d7 100644
--- a/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx
+++ b/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx
@@ -176,6 +176,7 @@ export const ContainerCard: React.FC = ({
containerSpec,
containerStatus,
)}
+ options={{ nestedValuesAsYaml: true }}
/>
{containerMetrics && (
diff --git a/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.test.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.test.tsx
index 7eec2926c4..692c0a7c8c 100644
--- a/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.test.tsx
+++ b/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.test.tsx
@@ -39,10 +39,10 @@ describe('ServiceDrawer', () => {
expect(screen.getByText('Cluster IP')).toBeInTheDocument();
expect(screen.getByText('Ports')).toBeInTheDocument();
expect(
- screen.getByText(textContentMatcher('Target Port: 1997')),
+ screen.getByText(textContentMatcher('targetPort: 1997')),
).toBeInTheDocument();
expect(
- screen.getByText(textContentMatcher('App: awesome-service')),
+ screen.getByText(textContentMatcher('app: awesome-service')),
).toBeInTheDocument();
});
});
diff --git a/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx
index 71832fd35c..c44a1d158c 100644
--- a/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx
+++ b/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx
@@ -77,6 +77,7 @@ const ServiceCard = ({ service }: ServiceCardProps) => {
ports: service.spec?.ports,
...metadata,
}}
+ options={{ nestedValuesAsYaml: true }}
/>
);
};
diff --git a/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx
index d69ab15f1a..3e4ff56a35 100644
--- a/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx
+++ b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx
@@ -40,20 +40,20 @@ describe('StatefulSetDrawer', () => {
expect(getByText('StatefulSet')).toBeInTheDocument();
expect(getByText('YAML')).toBeInTheDocument();
expect(
- getByText(textContentMatcher('Type: RollingUpdate')),
+ getByText(textContentMatcher('type: RollingUpdate')),
).toBeInTheDocument();
- expect(getByText('Rolling Update:')).toBeInTheDocument();
- expect(getByText(textContentMatcher('Max Surge: 25%'))).toBeInTheDocument();
+ expect(getByText('rollingUpdate:')).toBeInTheDocument();
+ expect(getByText(textContentMatcher('maxSurge: 25%'))).toBeInTheDocument();
expect(
- getByText(textContentMatcher('Max Unavailable: 25%')),
+ getByText(textContentMatcher('maxUnavailable: 25%')),
).toBeInTheDocument();
expect(getByText('Pod Management Policy')).toBeInTheDocument();
expect(getByText('Parallel')).toBeInTheDocument();
expect(getByText('Service Name')).toBeInTheDocument();
expect(getByText('Selector')).toBeInTheDocument();
- expect(getByText('Match Labels:')).toBeInTheDocument();
+ expect(getByText('matchLabels:')).toBeInTheDocument();
expect(
- getByText(textContentMatcher('App: dice-roller')),
+ getByText(textContentMatcher('app: dice-roller')),
).toBeInTheDocument();
expect(getByText('Revision History Limit')).toBeInTheDocument();
expect(getByText('10')).toBeInTheDocument();
diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md
index ed8339886b..73a8e0733f 100644
--- a/plugins/kubernetes/CHANGELOG.md
+++ b/plugins/kubernetes/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-kubernetes
+## 0.12.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-react@0.5.4-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
## 0.12.3
### Patch Changes
diff --git a/plugins/kubernetes/dev/index.tsx b/plugins/kubernetes/dev/index.tsx
index 2de5a17f25..91b97cbfc5 100644
--- a/plugins/kubernetes/dev/index.tsx
+++ b/plugins/kubernetes/dev/index.tsx
@@ -34,7 +34,10 @@ import fixture2 from '../src/__fixtures__/2-deployments.json';
import fixture3 from '../src/__fixtures__/1-cronjobs.json';
import fixture4 from '../src/__fixtures__/2-cronjobs.json';
import fixture5 from '../src/__fixtures__/1-rollouts.json';
+import fixture6 from '../src/__fixtures__/3-ingresses.json';
+import fixture7 from '../src/__fixtures__/2-statefulsets.json';
import { TestApiProvider } from '@backstage/test-utils';
+import { StructuredMetadataTable } from '@backstage/core-components';
const mockEntity: Entity = {
apiVersion: 'backstage.io/v1alpha1',
@@ -134,6 +137,12 @@ class MockKubernetesClient implements KubernetesApi {
}
}
+const metadata = {
+ testA: 'stuff',
+ testB: { testC: 'stuff' },
+ testD: [{ testE: 'stuff' }],
+};
+
createDevApp()
.addPage({
path: '/fixture-1',
@@ -200,5 +209,35 @@ createDevApp()
),
})
+ .addPage({
+ path: '/fixture-6',
+ title: 'Fixture 6',
+ element: (
+
+
+
+
+
+ ),
+ })
+ .addPage({
+ path: '/fixture-7',
+ title: 'Fixture 7',
+ element: (
+
+
+
+
+
+
+ ),
+ })
.registerPlugin(kubernetesPlugin)
.render();
diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json
index c55b777201..c42471e331 100644
--- a/plugins/kubernetes/package.json
+++ b/plugins/kubernetes/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes",
- "version": "0.12.3",
+ "version": "0.12.4-next.0",
"description": "A Backstage plugin that integrates towards Kubernetes",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/kubernetes/src/__fixtures__/3-ingresses.json b/plugins/kubernetes/src/__fixtures__/3-ingresses.json
new file mode 100644
index 0000000000..94359c8239
--- /dev/null
+++ b/plugins/kubernetes/src/__fixtures__/3-ingresses.json
@@ -0,0 +1,372 @@
+{
+ "ingresses": [
+ {
+ "metadata": {
+ "name": "app-service-endpoint.dice-roller.backstage.io",
+ "namespace": "dice-roller",
+ "uid": "00000000-0000-0000-0000-000000000000",
+ "resourceVersion": "4749260703",
+ "generation": 1,
+ "creationTimestamp": "2023-08-16T14:52:16Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "ingress-class": "istio-internal"
+ },
+ "annotations": {
+ "kubectl.kubernetes.io/last-applied-configuration": "spec",
+ "metacontroller.k8s.io/last-applied-configuration": "spec",
+ "nginx.ingress.kubernetes.io/auth-signin": "https://backstage.io/authenticate",
+ "nginx.ingress.kubernetes.io/configuration-snippet": "config",
+ "nginx.ingress.kubernetes.io/service-upstream": "true",
+ "nginx.ingress.kubernetes.io/upstream-vhost": "app-service-endpoint.dice-roller.backstage.services"
+ },
+ "ownerReferences": [
+ {
+ "apiVersion": "networking.backstage.com/v1beta1",
+ "kind": "MeshIntegration",
+ "name": "app-service-endpoint",
+ "uid": "00000000-0000-0000-0000-000000000000",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ],
+ "managedFields": [
+ {
+ "manager": "nginx-ingress-controller",
+ "operation": "Update",
+ "apiVersion": "networking.k8s.io/v1",
+ "time": "2023-08-16T14:52:56Z",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:loadBalancer": {
+ "f:ingress": {}
+ }
+ }
+ },
+ "subresource": "status"
+ },
+ {
+ "manager": "kubectl-client-side-apply",
+ "operation": "Update",
+ "apiVersion": "networking.k8s.io/v1",
+ "time": "2023-12-15T16:33:17Z",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {},
+ "f:nginx.ingress.kubernetes.io/auth-signin": {},
+ "f:nginx.ingress.kubernetes.io/configuration-snippet": {},
+ "f:nginx.ingress.kubernetes.io/service-upstream": {},
+ "f:nginx.ingress.kubernetes.io/upstream-vhost": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:ingress-class": {}
+ }
+ },
+ "f:spec": {
+ "f:ingressClassName": {},
+ "f:rules": {},
+ "f:tls": {}
+ }
+ }
+ },
+ {
+ "manager": "kubectl-label",
+ "operation": "Update",
+ "apiVersion": "networking.k8s.io/v1",
+ "time": "2024-02-21T15:00:44Z",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:labels": {
+ "f:controller-uid": {}
+ }
+ }
+ }
+ },
+ {
+ "manager": "metacontroller",
+ "operation": "Update",
+ "apiVersion": "networking.k8s.io/v1",
+ "time": "2024-02-21T15:01:01Z",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:metacontroller.k8s.io/last-applied-configuration": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"00000000-0000-0000-0000-000000000000\"}": {}
+ }
+ }
+ }
+ }
+ ]
+ },
+ "spec": {
+ "ingressClassName": "istio-internal",
+ "tls": {
+ "hosts": ["app-service-endpoint.dice-roller.backstage.io"],
+ "secretName": "dice-roller-wildcard-certificate"
+ },
+ "rules": [
+ {
+ "host": "app-service-endpoint.dice-roller.backstage.io",
+ "http": {
+ "paths": [
+ {
+ "pathType": "ImplementationSpecific",
+ "backend": {
+ "service": {
+ "name": "app-service-endpoint",
+ "port": {
+ "number": 8080
+ }
+ }
+ }
+ },
+ {
+ "pathType": "Second item in the list",
+ "backend": {
+ "service": {
+ "name": "app-service-endpoint",
+ "port": {
+ "number": 8080
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "status": {
+ "loadBalancer": {
+ "ingress": [
+ {
+ "ip": "1.2.3.4"
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "deployments": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/revision": "2",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"replicas\":10,\"selector\":{\"matchLabels\":{\"app\":\"dice-roller\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"dice-roller\",\"backstage.io/kubernetes-id\":\"dice-roller\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}}}\n"
+ },
+ "creationTimestamp": "2020-09-23T12:00:55.000Z",
+ "generation": 3,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:progressDeadlineSeconds": {},
+ "f:replicas": {},
+ "f:revisionHistoryLimit": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {}
+ }
+ },
+ "f:strategy": {
+ "f:rollingUpdate": {
+ ".": {},
+ "f:maxSurge": {},
+ "f:maxUnavailable": {}
+ },
+ "f:type": {}
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:deployment.kubernetes.io/revision": {}
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:conditions": {
+ ".": {},
+ "k:{\"type\":\"Available\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Progressing\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {},
+ "f:updatedReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "593230",
+ "selfLink": "/apis/apps/v1/namespaces/default/deployments/dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ },
+ "spec": {
+ "progressDeadlineSeconds": 600,
+ "replicas": 10,
+ "revisionHistoryLimit": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller"
+ }
+ },
+ "strategy": {
+ "rollingUpdate": {
+ "maxSurge": "25%",
+ "maxUnavailable": "25%"
+ },
+ "type": "RollingUpdate"
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "conditions": [
+ {
+ "lastTransitionTime": "2020-09-23T12:00:55.000Z",
+ "lastUpdateTime": "2020-09-24T11:39:28.000Z",
+ "message": "ReplicaSet \"dice-roller-6c8646bfd\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ },
+ {
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "lastUpdateTime": "2020-09-25T09:58:55.000Z",
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ }
+ ],
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10,
+ "updatedReplicas": 10
+ }
+ }
+ ]
+}
diff --git a/plugins/notifications-backend-module-email/CHANGELOG.md b/plugins/notifications-backend-module-email/CHANGELOG.md
index f9ce208d8e..7331675d87 100644
--- a/plugins/notifications-backend-module-email/CHANGELOG.md
+++ b/plugins/notifications-backend-module-email/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-notifications-backend-module-email
+## 0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/types@1.2.1
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.12-next.0
+
## 0.3.5
### Patch Changes
diff --git a/plugins/notifications-backend-module-email/package.json b/plugins/notifications-backend-module-email/package.json
index 291314475a..f3f82d4f90 100644
--- a/plugins/notifications-backend-module-email/package.json
+++ b/plugins/notifications-backend-module-email/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications-backend-module-email",
- "version": "0.3.5",
+ "version": "0.3.6-next.0",
"description": "The email backend module for the notifications plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/notifications-backend/CHANGELOG.md b/plugins/notifications-backend/CHANGELOG.md
index 20b5d819e3..2b1e3aaea7 100644
--- a/plugins/notifications-backend/CHANGELOG.md
+++ b/plugins/notifications-backend/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-notifications-backend
+## 0.5.2-next.0
+
+### Patch Changes
+
+- 438c36c: added topic filter for notifications
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.12-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+
## 0.5.1
### Patch Changes
diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json
index 302d417527..26f3634c9e 100644
--- a/plugins/notifications-backend/package.json
+++ b/plugins/notifications-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications-backend",
- "version": "0.5.1",
+ "version": "0.5.2-next.0",
"backstage": {
"role": "backend-plugin",
"pluginId": "notifications",
diff --git a/plugins/notifications-node/CHANGELOG.md b/plugins/notifications-node/CHANGELOG.md
index 270e4f6ab6..4199b8723c 100644
--- a/plugins/notifications-node/CHANGELOG.md
+++ b/plugins/notifications-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-notifications-node
+## 0.2.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-signals-node@0.1.17-next.0
+
## 0.2.11
### Patch Changes
diff --git a/plugins/notifications-node/package.json b/plugins/notifications-node/package.json
index bc31e0c3ca..e4ae288d62 100644
--- a/plugins/notifications-node/package.json
+++ b/plugins/notifications-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications-node",
- "version": "0.2.11",
+ "version": "0.2.12-next.0",
"description": "Node.js library for the notifications plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/notifications/CHANGELOG.md b/plugins/notifications/CHANGELOG.md
index 330866ad55..44adb872c0 100644
--- a/plugins/notifications/CHANGELOG.md
+++ b/plugins/notifications/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-notifications
+## 0.5.2-next.0
+
+### Patch Changes
+
+- 438c36c: added topic filter for notifications
+- Updated dependencies
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-signals-react@0.0.9
+
## 0.5.1
### Patch Changes
diff --git a/plugins/notifications/package.json b/plugins/notifications/package.json
index 7e089f580b..6ce188f89e 100644
--- a/plugins/notifications/package.json
+++ b/plugins/notifications/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications",
- "version": "0.5.1",
+ "version": "0.5.2-next.0",
"backstage": {
"role": "frontend-plugin",
"pluginId": "notifications",
diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md
index 18b9ded344..e0f596813c 100644
--- a/plugins/org-react/CHANGELOG.md
+++ b/plugins/org-react/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-org-react
+## 0.1.35-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
## 0.1.34
### Patch Changes
diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json
index 7c4bd27e68..fa415877bb 100644
--- a/plugins/org-react/package.json
+++ b/plugins/org-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-org-react",
- "version": "0.1.34",
+ "version": "0.1.35-next.0",
"backstage": {
"role": "web-library",
"pluginId": "org",
diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md
index 461598da7d..9859dce6b3 100644
--- a/plugins/org/CHANGELOG.md
+++ b/plugins/org/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-org
+## 0.6.36-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
## 0.6.35
### Patch Changes
diff --git a/plugins/org/package.json b/plugins/org/package.json
index ea0f3dd681..820587537b 100644
--- a/plugins/org/package.json
+++ b/plugins/org/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-org",
- "version": "0.6.35",
+ "version": "0.6.36-next.0",
"description": "A Backstage plugin that helps you create entity pages for your organization",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
index f65f638b20..06d74ec7d4 100644
--- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
+++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-permission-backend-module-allow-all-policy
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.2.4
### Patch Changes
diff --git a/plugins/permission-backend-module-policy-allow-all/package.json b/plugins/permission-backend-module-policy-allow-all/package.json
index 9c039e33da..a0f4ecee19 100644
--- a/plugins/permission-backend-module-policy-allow-all/package.json
+++ b/plugins/permission-backend-module-policy-allow-all/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-backend-module-allow-all-policy",
- "version": "0.2.4",
+ "version": "0.2.5-next.0",
"description": "Allow all policy backend module for the permission plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md
index aba726e6d8..f8a11f9b38 100644
--- a/plugins/permission-backend/CHANGELOG.md
+++ b/plugins/permission-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-permission-backend
+## 0.5.54-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.5.53
### Patch Changes
diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json
index d7eb969fce..45dc5d0559 100644
--- a/plugins/permission-backend/package.json
+++ b/plugins/permission-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-backend",
- "version": "0.5.53",
+ "version": "0.5.54-next.0",
"backstage": {
"role": "backend-plugin",
"pluginId": "permission",
diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md
index fa0d5084c8..46c5e76cb8 100644
--- a/plugins/permission-node/CHANGELOG.md
+++ b/plugins/permission-node/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-permission-node
+## 0.8.8-next.0
+
+### Patch Changes
+
+- 049d5d4: The returned router from `createPermissionIntegrationRouter` is now mutable, allowing for permissions and resources to be added after creation of the router.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
## 0.8.7
### Patch Changes
diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json
index 8ccc95d125..4b3ef1e8e7 100644
--- a/plugins/permission-node/package.json
+++ b/plugins/permission-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-node",
- "version": "0.8.7",
+ "version": "0.8.8-next.0",
"description": "Common permission and authorization utilities for backend plugins",
"backstage": {
"role": "node-library",
diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md
index 05e99bc2fe..62fafcaa58 100644
--- a/plugins/proxy-backend/CHANGELOG.md
+++ b/plugins/proxy-backend/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-proxy-backend
+## 0.5.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-proxy-node@0.1.1-next.0
+
## 0.5.10
### Patch Changes
diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json
index e6c761d12e..3ae01b550a 100644
--- a/plugins/proxy-backend/package.json
+++ b/plugins/proxy-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-proxy-backend",
- "version": "0.5.10",
+ "version": "0.5.11-next.0",
"description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/proxy-node/CHANGELOG.md b/plugins/proxy-node/CHANGELOG.md
index e9c34f7e19..f74eb5c0ff 100644
--- a/plugins/proxy-node/CHANGELOG.md
+++ b/plugins/proxy-node/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-proxy-node
+## 0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+
## 0.1.0
### Minor Changes
diff --git a/plugins/proxy-node/package.json b/plugins/proxy-node/package.json
index 3de54711d0..30647e385c 100644
--- a/plugins/proxy-node/package.json
+++ b/plugins/proxy-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-proxy-node",
- "version": "0.1.0",
+ "version": "0.1.1-next.0",
"description": "The plugin-proxy-node module for @backstage/plugin-proxy-backend",
"backstage": {
"role": "node-library",
diff --git a/plugins/scaffolder-backend-module-azure/CHANGELOG.md b/plugins/scaffolder-backend-module-azure/CHANGELOG.md
index dc69c4eba2..402dd06a9d 100644
--- a/plugins/scaffolder-backend-module-azure/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-azure
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.2.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-azure/package.json b/plugins/scaffolder-backend-module-azure/package.json
index edac0e6d57..3f33d31f7f 100644
--- a/plugins/scaffolder-backend-module-azure/package.json
+++ b/plugins/scaffolder-backend-module-azure/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-azure",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"description": "The azure module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md
index 82a0a76b9b..e409864d6a 100644
--- a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder-backend-module-bitbucket-cloud
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+
## 0.2.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json
index fa63b109ae..05657d4489 100644
--- a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json
+++ b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"description": "The Bitbucket Cloud module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md
index 548039b354..28dbca280b 100644
--- a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-bitbucket-server
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.2.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-bitbucket-server/package.json b/plugins/scaffolder-backend-module-bitbucket-server/package.json
index 641e0cd32e..a029f329c0 100644
--- a/plugins/scaffolder-backend-module-bitbucket-server/package.json
+++ b/plugins/scaffolder-backend-module-bitbucket-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-bitbucket-server",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"description": "The Bitbucket Server module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md
index 922b2dba31..d259b3282f 100644
--- a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-scaffolder-backend-module-bitbucket
+## 0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.6-next.0
+
## 0.3.6
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json
index 1d8833552b..54395f1c35 100644
--- a/plugins/scaffolder-backend-module-bitbucket/package.json
+++ b/plugins/scaffolder-backend-module-bitbucket/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-bitbucket",
- "version": "0.3.6",
+ "version": "0.3.7-next.0",
"description": "The bitbucket module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
index 920b49d5e1..18229c4151 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-confluence-to-markdown
+## 0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.3.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
index 29343f738c..3e562885b3 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown",
- "version": "0.3.5",
+ "version": "0.3.6-next.0",
"description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
index ab86814820..710ba63f7c 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-scaffolder-backend-module-cookiecutter
+## 0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+
## 0.3.6
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json
index f3799ad476..ffafbdbc85 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/package.json
+++ b/plugins/scaffolder-backend-module-cookiecutter/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-cookiecutter",
- "version": "0.3.6",
+ "version": "0.3.7-next.0",
"description": "A module for the scaffolder backend that lets you template projects using cookiecutter",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md
index 75f3b34b82..a5e5532733 100644
--- a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gcp
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.2.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gcp/package.json b/plugins/scaffolder-backend-module-gcp/package.json
index cab391bad0..64a8779451 100644
--- a/plugins/scaffolder-backend-module-gcp/package.json
+++ b/plugins/scaffolder-backend-module-gcp/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gcp",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"description": "The GCP Bucket module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md
index de5220725c..6f55a0f720 100644
--- a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gerrit
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.2.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gerrit/package.json b/plugins/scaffolder-backend-module-gerrit/package.json
index e47453c876..38d5210557 100644
--- a/plugins/scaffolder-backend-module-gerrit/package.json
+++ b/plugins/scaffolder-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gerrit",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"description": "The gerrit module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md
index 7a4c444534..b2e0f45403 100644
--- a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gitea
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.2.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gitea/package.json b/plugins/scaffolder-backend-module-gitea/package.json
index 57af602174..7614384251 100644
--- a/plugins/scaffolder-backend-module-gitea/package.json
+++ b/plugins/scaffolder-backend-module-gitea/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gitea",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"description": "The gitea module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-github/CHANGELOG.md b/plugins/scaffolder-backend-module-github/CHANGELOG.md
index 18e5704bd2..eb1c2e1614 100644
--- a/plugins/scaffolder-backend-module-github/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-github/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-scaffolder-backend-module-github
+## 0.5.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.5.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json
index 0a77ae1883..179591019c 100644
--- a/plugins/scaffolder-backend-module-github/package.json
+++ b/plugins/scaffolder-backend-module-github/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-github",
- "version": "0.5.5",
+ "version": "0.5.6-next.0",
"description": "The github module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
index 693ee59a91..a8d4ee5a59 100644
--- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gitlab
+## 0.7.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
## 0.7.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json
index ca5d7eebbd..d883cc4b98 100644
--- a/plugins/scaffolder-backend-module-gitlab/package.json
+++ b/plugins/scaffolder-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gitlab",
- "version": "0.7.1",
+ "version": "0.7.2-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md
index 2f69b6295f..2b380fcf44 100644
--- a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-scaffolder-backend-module-notifications
+## 0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.12-next.0
+
## 0.1.6
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-notifications/package.json b/plugins/scaffolder-backend-module-notifications/package.json
index 8480397887..6fc89a6773 100644
--- a/plugins/scaffolder-backend-module-notifications/package.json
+++ b/plugins/scaffolder-backend-module-notifications/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-notifications",
- "version": "0.1.6",
+ "version": "0.1.7-next.0",
"description": "The notifications backend module for the scaffolder plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md
index 771681a958..8d07eeed0c 100644
--- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder-backend-module-rails
+## 0.5.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+
## 0.5.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json
index 59a909baee..e13b0e7d3f 100644
--- a/plugins/scaffolder-backend-module-rails/package.json
+++ b/plugins/scaffolder-backend-module-rails/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-rails",
- "version": "0.5.5",
+ "version": "0.5.6-next.0",
"description": "A module for the scaffolder backend that lets you template projects using Rails",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
index 99f414e4e4..4df1fa5549 100644
--- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-scaffolder-backend-module-sentry
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
## 0.2.5
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json
index 2b79e2efee..1f4c9ab341 100644
--- a/plugins/scaffolder-backend-module-sentry/package.json
+++ b/plugins/scaffolder-backend-module-sentry/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-sentry",
- "version": "0.2.5",
+ "version": "0.2.6-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
index 2b8f121d7c..8214b44665 100644
--- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-scaffolder-backend-module-yeoman
+## 0.4.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/types@1.2.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.19-next.0
+
## 0.4.6
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json
index dd5c66813b..36e4db395e 100644
--- a/plugins/scaffolder-backend-module-yeoman/package.json
+++ b/plugins/scaffolder-backend-module-yeoman/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-yeoman",
- "version": "0.4.6",
+ "version": "0.4.7-next.0",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md
index 1e3a8a133a..9ffa642345 100644
--- a/plugins/scaffolder-backend/CHANGELOG.md
+++ b/plugins/scaffolder-backend/CHANGELOG.md
@@ -1,5 +1,40 @@
# @backstage/plugin-scaffolder-backend
+## 1.30.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change integrates the `auditor` service into the Scaffolder plugin.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.7-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.2-next.0
+ - @backstage/plugin-scaffolder-common@1.5.9
+
## 1.29.0
### Minor Changes
diff --git a/plugins/scaffolder-backend/README.md b/plugins/scaffolder-backend/README.md
index 6f51f81117..34a378ba44 100644
--- a/plugins/scaffolder-backend/README.md
+++ b/plugins/scaffolder-backend/README.md
@@ -63,3 +63,32 @@ you will not have any templates available to use. These need to be [added to the
To get up and running and try out some templates quickly, you can or copy the
catalog locations from the [create-app template](https://github.com/backstage/backstage/blob/master/packages/create-app/templates/default-app/app-config.yaml.hbs).
+
+## Audit Events
+
+The Scaffolder backend emits audit events for various operations. Events are grouped logically by `eventId`, with `subEventId` providing further distinction when needed.
+
+**Template Events:**
+
+- **`template-parameter-schema`**: Retrieves template parameter schemas. (GET `/v2/templates/:namespace/:kind/:name/parameter-schema`)
+
+**Action Events:**
+
+- **`action-fetch`**: Retrieves installed actions. (GET `/v2/actions`)
+
+**Task Events:**
+
+- **`task`**: Operations related to Scaffolder tasks.
+
+ Filter on `actionType`.
+
+ - **`create`**: Creates a new task. (POST `/v2/tasks`)
+ - **`list`**: Fetches details of all tasks. (GET `/v2/tasks`)
+ - **`get`**: Fetches details of a specific task. (GET `/v2/tasks/:taskId`)
+ - **`cancel`**: Cancels a running task. (POST `/v2/tasks/:taskId/cancel`)
+ - **`retry`**: Retries a failed task. (POST `/v2/tasks/:taskId/retry`)
+ - **`stream`**: Retrieves a stream of task logs. (GET `/v2/tasks/:taskId/eventstream`)
+ - **`events`**: Retrieves a snapshot of task logs. (GET `/v2/tasks/:taskId/events`)
+ - **`dry-run`**: Creates a dry-run task. (POST `/v2/dry-run`) All audit logs for events associated with dry runs have the `meta.isDryLog` flag set to `true`.
+ - **`stale-cancel`**: Automated cancellation of stale tasks.
+ - **`execute`**: Tracks the initiation and completion of a real scaffolder task execution. This event will not occur during dry runs.
diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json
index 8dc033f9d2..4399b37e2d 100644
--- a/plugins/scaffolder-backend/package.json
+++ b/plugins/scaffolder-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend",
- "version": "1.29.0",
+ "version": "1.30.0-next.0",
"description": "The Backstage backend plugin that helps you create new things",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/scaffolder-backend/report.api.md b/plugins/scaffolder-backend/report.api.md
index d2bb6f1bb1..b542cb1c94 100644
--- a/plugins/scaffolder-backend/report.api.md
+++ b/plugins/scaffolder-backend/report.api.md
@@ -6,6 +6,7 @@
///
import { ActionContext as ActionContext_2 } from '@backstage/plugin-scaffolder-node';
+import { AuditorService } from '@backstage/backend-plugin-api';
import { AuthService } from '@backstage/backend-plugin-api';
import { AutocompleteHandler } from '@backstage/plugin-scaffolder-node/alpha';
import * as azure from '@backstage/plugin-scaffolder-backend-module-azure';
@@ -407,6 +408,7 @@ export type CreateWorkerOptions = {
integrations: ScmIntegrations;
workingDirectory: string;
logger: Logger;
+ auditor?: AuditorService;
additionalTemplateFilters?: Record;
concurrentTasksLimit?: number;
additionalTemplateGlobals?: Record;
@@ -541,6 +543,8 @@ export interface RouterOptions {
// (undocumented)
additionalWorkspaceProviders?: Record;
// (undocumented)
+ auditor?: AuditorService;
+ // (undocumented)
auth?: AuthService;
// (undocumented)
autocompleteHandlers?: Record;
diff --git a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts
index 1ee0634d45..a670c1a1c8 100644
--- a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts
+++ b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts
@@ -14,13 +14,14 @@
* limitations under the License.
*/
+import { loggerToWinstonLogger } from '@backstage/backend-common';
import {
coreServices,
createBackendPlugin,
} from '@backstage/backend-plugin-api';
-import { loggerToWinstonLogger } from '@backstage/backend-common';
import { ScmIntegrations } from '@backstage/integration';
import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';
+import { eventsServiceRef } from '@backstage/plugin-events-node';
import {
TaskBroker,
TemplateAction,
@@ -46,12 +47,11 @@ import {
createFetchTemplateAction,
createFetchTemplateFileAction,
createFilesystemDeleteAction,
- createFilesystemRenameAction,
createFilesystemReadDirAction,
+ createFilesystemRenameAction,
createWaitAction,
} from './scaffolder';
import { createRouter } from './service/router';
-import { eventsServiceRef } from '@backstage/plugin-events-node';
/**
* Scaffolder plugin
@@ -115,6 +115,7 @@ export const scaffolderPlugin = createBackendPlugin({
discovery: coreServices.discovery,
httpRouter: coreServices.httpRouter,
httpAuth: coreServices.httpAuth,
+ auditor: coreServices.auditor,
catalogClient: catalogServiceRef,
events: eventsServiceRef,
},
@@ -131,6 +132,7 @@ export const scaffolderPlugin = createBackendPlugin({
catalogClient,
permissions,
events,
+ auditor,
}) {
const log = loggerToWinstonLogger(logger);
const integrations = ScmIntegrations.fromConfig(config);
@@ -195,6 +197,7 @@ export const scaffolderPlugin = createBackendPlugin({
autocompleteHandlers,
additionalWorkspaceProviders,
events,
+ auditor,
});
httpRouter.use(router);
},
diff --git a/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts b/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts
index 5fab0a80c7..aa5a3f5119 100644
--- a/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts
@@ -14,29 +14,32 @@
* limitations under the License.
*/
+import {
+ AuditorService,
+ BackstageCredentials,
+} from '@backstage/backend-plugin-api';
+import type { UserEntity } from '@backstage/catalog-model';
import { ScmIntegrations } from '@backstage/integration';
+import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import { TaskSpec, TemplateInfo } from '@backstage/plugin-scaffolder-common';
-import { JsonObject } from '@backstage/types';
-import { fileURLToPath } from 'url';
-import { Logger } from 'winston';
import {
createTemplateAction,
- TaskSecrets,
- TemplateFilter,
- TemplateGlobal,
deserializeDirectoryContents,
SerializedFile,
serializeDirectoryContents,
+ TaskSecrets,
+ TemplateFilter,
+ TemplateGlobal,
} from '@backstage/plugin-scaffolder-node';
+import { JsonObject } from '@backstage/types';
+import fs from 'fs-extra';
import path from 'path';
+import { fileURLToPath } from 'url';
+import { v4 as uuid } from 'uuid';
+import { Logger } from 'winston';
import { TemplateActionRegistry } from '../actions';
import { NunjucksWorkflowRunner } from '../tasks/NunjucksWorkflowRunner';
import { DecoratedActionsRegistry } from './DecoratedActionsRegistry';
-import fs from 'fs-extra';
-import { PermissionEvaluator } from '@backstage/plugin-permission-common';
-import { BackstageCredentials } from '@backstage/backend-plugin-api';
-import type { UserEntity } from '@backstage/catalog-model';
-import { v4 as uuid } from 'uuid';
interface DryRunInput {
spec: TaskSpec;
@@ -59,6 +62,7 @@ interface DryRunResult {
/** @internal */
export type TemplateTesterCreateOptions = {
logger: Logger;
+ auditor?: AuditorService;
integrations: ScmIntegrations;
actionRegistry: TemplateActionRegistry;
workingDirectory: string;
@@ -109,6 +113,7 @@ export function createDryRunner(options: TemplateTesterCreateOptions) {
const abortSignal = new AbortController().signal;
const result = await workflowRunner.execute({
+ taskId: dryRunId,
spec: {
...input.spec,
steps: [
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
index e368bfb07d..2239583cb7 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
@@ -991,6 +991,27 @@ describe('NunjucksWorkflowRunner', () => {
);
expect(fakeActionHandler).not.toHaveBeenCalled();
});
+
+ it('should validate each parameter renders to a valid value', async () => {
+ const task = createMockTaskWithSpec({
+ apiVersion: 'scaffolder.backstage.io/v1beta3',
+ steps: [
+ {
+ id: 'test',
+ name: 'name',
+ each: '${{parameters.data}}',
+ action: 'jest-validated-action',
+ input: { foo: '${{each.value}}' },
+ },
+ ],
+ output: {},
+ parameters: {},
+ });
+ await expect(runner.execute(task)).rejects.toThrow(
+ 'Invalid value on action jest-validated-action.each parameter, "${{parameters.data}}" cannot be resolved to a value',
+ );
+ expect(fakeActionHandler).not.toHaveBeenCalled();
+ });
});
describe('secrets', () => {
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts
index ad9d85cb2d..63d4172659 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts
@@ -14,48 +14,51 @@
* limitations under the License.
*/
-import { ScmIntegrations } from '@backstage/integration';
-import { TaskTrackType, WorkflowResponse, WorkflowRunner } from './types';
-import * as winston from 'winston';
-import fs from 'fs-extra';
-import path from 'path';
-import nunjucks from 'nunjucks';
-import { JsonArray, JsonObject, JsonValue } from '@backstage/types';
import { InputError, NotAllowedError, stringifyError } from '@backstage/errors';
-import { PassThrough } from 'stream';
-import { generateExampleOutput, isTruthy } from './helper';
-import { validate as validateJsonSchema } from 'jsonschema';
-import { TemplateActionRegistry } from '../actions';
-import { metrics } from '@opentelemetry/api';
-import {
- SecureTemplater,
- SecureTemplateRenderer,
-} from '../../lib/templating/SecureTemplater';
+import { ScmIntegrations } from '@backstage/integration';
import {
TaskRecovery,
TaskSpec,
TaskSpecV1beta3,
TaskStep,
} from '@backstage/plugin-scaffolder-common';
-
+import { JsonArray, JsonObject, JsonValue } from '@backstage/types';
+import { metrics } from '@opentelemetry/api';
+import fs from 'fs-extra';
+import { validate as validateJsonSchema } from 'jsonschema';
+import nunjucks from 'nunjucks';
+import path from 'path';
+import { PassThrough } from 'stream';
+import * as winston from 'winston';
import {
- TemplateAction,
- TemplateFilter,
- TemplateGlobal,
- TaskContext,
-} from '@backstage/plugin-scaffolder-node';
-import { createConditionAuthorizer } from '@backstage/plugin-permission-node';
+ SecureTemplater,
+ SecureTemplateRenderer,
+} from '../../lib/templating/SecureTemplater';
+import { TemplateActionRegistry } from '../actions';
+import { generateExampleOutput, isTruthy } from './helper';
+import { TaskTrackType, WorkflowResponse, WorkflowRunner } from './types';
+
+import { loggerToWinstonLogger } from '@backstage/backend-common';
+import type {
+ AuditorService,
+ PermissionsService,
+} from '@backstage/backend-plugin-api';
import { UserEntity } from '@backstage/catalog-model';
-import { createCounterMetric, createHistogramMetric } from '../../util/metrics';
-import { createDefaultFilters } from '../../lib/templating/filters';
import {
AuthorizeResult,
PolicyDecision,
} from '@backstage/plugin-permission-common';
-import { scaffolderActionRules } from '../../service/rules';
+import { createConditionAuthorizer } from '@backstage/plugin-permission-node';
import { actionExecutePermission } from '@backstage/plugin-scaffolder-common/alpha';
-import { PermissionsService } from '@backstage/backend-plugin-api';
-import { loggerToWinstonLogger } from '@backstage/backend-common';
+import {
+ TaskContext,
+ TemplateAction,
+ TemplateFilter,
+ TemplateGlobal,
+} from '@backstage/plugin-scaffolder-node';
+import { createDefaultFilters } from '../../lib/templating/filters';
+import { scaffolderActionRules } from '../../service/rules';
+import { createCounterMetric, createHistogramMetric } from '../../util/metrics';
import { BackstageLoggerTransport, WinstonLogger } from './logger';
type NunjucksWorkflowRunnerOptions = {
@@ -63,6 +66,7 @@ type NunjucksWorkflowRunnerOptions = {
actionRegistry: TemplateActionRegistry;
integrations: ScmIntegrations;
logger: winston.Logger;
+ auditor?: AuditorService;
additionalTemplateFilters?: Record;
additionalTemplateGlobals?: Record;
permissions?: PermissionsService;
@@ -127,7 +131,7 @@ const createStepLogger = ({
// Initially this stream used to be the only way to write to the client logs, but that
// has changed over time, there's not really a need for this anymore.
// You can just create a simple wrapper like the below in your action to write to the main logger.
- // This way we also get recactions for free.
+ // This way we also get redactions for free.
const streamLogger = new PassThrough();
streamLogger.on('data', async data => {
const message = data.toString().trim();
@@ -245,7 +249,9 @@ export class NunjucksWorkflowRunner implements WorkflowRunner {
const stepTrack = await this.tracker.stepStart(task, step);
if (task.cancelSignal.aborted) {
- throw new Error(`Step ${step.name} has been cancelled.`);
+ throw new Error(
+ `Step ${step.id} (${step.name}) of task ${task.taskId} has been cancelled.`,
+ );
}
try {
@@ -304,13 +310,21 @@ export class NunjucksWorkflowRunner implements WorkflowRunner {
return;
}
}
+
+ const resolvedEach =
+ step.each && this.render(step.each, context, renderTemplate);
+
+ if (step.each && !resolvedEach) {
+ throw new InputError(
+ `Invalid value on action ${action.id}.each parameter, "${step.each}" cannot be resolved to a value`,
+ );
+ }
+
const iterations = (
- step.each
- ? Object.entries(this.render(step.each, context, renderTemplate)).map(
- ([key, value]) => ({
- each: { key, value },
- }),
- )
+ resolvedEach
+ ? Object.entries(resolvedEach).map(([key, value]) => ({
+ each: { key, value },
+ }))
: [{}]
).map(i => ({
...i,
@@ -454,7 +468,9 @@ export class NunjucksWorkflowRunner implements WorkflowRunner {
context.steps[step.id] = { output: stepOutput };
if (task.cancelSignal.aborted) {
- throw new Error(`Step ${step.name} has been cancelled.`);
+ throw new Error(
+ `Step ${step.id} (${step.name}) of task ${task.taskId} has been cancelled.`,
+ );
}
await stepTrack.markSuccessful();
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts
index 2d65488218..0fd18a9ee5 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts
@@ -14,16 +14,13 @@
* limitations under the License.
*/
+import {
+ AuditorService,
+ AuthService,
+ BackstageCredentials,
+} from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { TaskSpec } from '@backstage/plugin-scaffolder-common';
-import {
- JsonObject,
- JsonValue,
- Observable,
- createDeferred,
-} from '@backstage/types';
-import { Logger } from 'winston';
-import ObservableImpl from 'zen-observable';
import {
SerializedTask,
SerializedTaskEvent,
@@ -34,14 +31,18 @@ import {
TaskSecrets,
TaskStatus,
} from '@backstage/plugin-scaffolder-node';
-import { InternalTaskSecrets, TaskStore } from './types';
-import { readDuration } from './helper';
-import {
- AuthService,
- BackstageCredentials,
-} from '@backstage/backend-plugin-api';
-import { DefaultWorkspaceService, WorkspaceService } from './WorkspaceService';
import { WorkspaceProvider } from '@backstage/plugin-scaffolder-node/alpha';
+import {
+ JsonObject,
+ JsonValue,
+ Observable,
+ createDeferred,
+} from '@backstage/types';
+import { Logger } from 'winston';
+import ObservableImpl from 'zen-observable';
+import { DefaultWorkspaceService, WorkspaceService } from './WorkspaceService';
+import { readDuration } from './helper';
+import { InternalTaskSecrets, TaskStore } from './types';
type TaskState = {
checkpoints: {
@@ -275,6 +276,7 @@ export class StorageTaskBroker implements TaskBroker {
string,
WorkspaceProvider
>,
+ private readonly auditor?: AuditorService,
) {}
async list(options?: {
@@ -329,10 +331,7 @@ export class StorageTaskBroker implements TaskBroker {
public async recoverTasks(): Promise {
const enabled =
- (this.config &&
- this.config.getOptionalBoolean(
- 'scaffolder.EXPERIMENTAL_recoverTasks',
- )) ??
+ this.config?.getOptionalBoolean('scaffolder.EXPERIMENTAL_recoverTasks') ??
false;
if (enabled) {
@@ -449,6 +448,14 @@ export class StorageTaskBroker implements TaskBroker {
const { tasks } = await this.storage.listStaleTasks(options);
await Promise.all(
tasks.map(async task => {
+ const auditorEvent = await this.auditor?.createEvent({
+ eventId: 'task',
+ severityLevel: 'medium',
+ meta: {
+ actionType: 'stale-cancel',
+ taskId: task.taskId,
+ },
+ });
try {
await this.storage.completeTask({
taskId: task.taskId,
@@ -458,8 +465,10 @@ export class StorageTaskBroker implements TaskBroker {
'The task was cancelled because the task worker lost connection to the task broker',
},
});
+ await auditorEvent?.success();
} catch (error) {
this.logger.warn(`Failed to cancel task '${task.taskId}', ${error}`);
+ await auditorEvent?.fail({ error: error });
}
}),
);
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts
index 0f0ee2ad68..6c77ef3413 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts
@@ -14,20 +14,21 @@
* limitations under the License.
*/
-import { WorkflowRunner } from './types';
+import { AuditorService } from '@backstage/backend-plugin-api';
+import { assertError, stringifyError } from '@backstage/errors';
+import { ScmIntegrations } from '@backstage/integration';
+import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import {
- TaskContext,
TaskBroker,
+ TaskContext,
TemplateFilter,
TemplateGlobal,
} from '@backstage/plugin-scaffolder-node';
import PQueue from 'p-queue';
-import { NunjucksWorkflowRunner } from './NunjucksWorkflowRunner';
import { Logger } from 'winston';
import { TemplateActionRegistry } from '../actions';
-import { ScmIntegrations } from '@backstage/integration';
-import { assertError, stringifyError } from '@backstage/errors';
-import { PermissionEvaluator } from '@backstage/plugin-permission-common';
+import { NunjucksWorkflowRunner } from './NunjucksWorkflowRunner';
+import { WorkflowRunner } from './types';
/**
* TaskWorkerOptions
@@ -42,6 +43,7 @@ export type TaskWorkerOptions = {
concurrentTasksLimit: number;
permissions?: PermissionEvaluator;
logger?: Logger;
+ auditor?: AuditorService;
};
/**
@@ -55,6 +57,7 @@ export type CreateWorkerOptions = {
integrations: ScmIntegrations;
workingDirectory: string;
logger: Logger;
+ auditor?: AuditorService;
additionalTemplateFilters?: Record;
/**
* The number of tasks that can be executed at the same time by the worker
@@ -81,11 +84,13 @@ export type CreateWorkerOptions = {
export class TaskWorker {
private taskQueue: PQueue;
private logger: Logger | undefined;
+ private auditor: AuditorService | undefined;
private stopWorkers: boolean;
private constructor(private readonly options: TaskWorkerOptions) {
this.stopWorkers = false;
this.logger = options.logger;
+ this.auditor = options.auditor;
this.taskQueue = new PQueue({
concurrency: options.concurrentTasksLimit,
});
@@ -95,6 +100,7 @@ export class TaskWorker {
const {
taskBroker,
logger,
+ auditor,
actionRegistry,
integrations,
workingDirectory,
@@ -108,6 +114,7 @@ export class TaskWorker {
actionRegistry,
integrations,
logger,
+ auditor,
workingDirectory,
additionalTemplateFilters,
additionalTemplateGlobals,
@@ -119,6 +126,7 @@ export class TaskWorker {
runners: { workflowRunner },
concurrentTasksLimit,
permissions,
+ auditor,
});
}
@@ -166,6 +174,17 @@ export class TaskWorker {
}
async runOneTask(task: TaskContext) {
+ const auditorEvent = await this.auditor?.createEvent({
+ eventId: 'task',
+ severityLevel: 'medium',
+ meta: {
+ actionType: 'execution',
+ taskId: task.taskId,
+ taskParameters: task.spec.parameters,
+ templateRef: task.spec.templateInfo?.entityRef,
+ },
+ });
+
try {
if (task.spec.apiVersion !== 'scaffolder.backstage.io/v1beta3') {
throw new Error(
@@ -178,8 +197,12 @@ export class TaskWorker {
);
await task.complete('completed', { output });
+ await auditorEvent?.success();
} catch (error) {
assertError(error);
+ await auditorEvent?.fail({
+ error,
+ });
await task.complete('failed', {
error: { name: error.name, message: error.message },
});
diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts
index 1758eb3fba..a12e43615e 100644
--- a/plugins/scaffolder-backend/src/service/router.ts
+++ b/plugins/scaffolder-backend/src/service/router.ts
@@ -18,6 +18,19 @@ import {
createLegacyAuthAdapters,
HostDiscovery,
} from '@backstage/backend-common';
+import {
+ AuditorService,
+ AuthService,
+ BackstageCredentials,
+ DatabaseService,
+ DiscoveryService,
+ HttpAuthService,
+ LifecycleService,
+ PermissionsService,
+ resolveSafeChildPath,
+ SchedulerService,
+ UrlReaderService,
+} from '@backstage/backend-plugin-api';
import { CatalogApi } from '@backstage/catalog-client';
import {
CompoundEntityRef,
@@ -29,7 +42,17 @@ import {
import { Config, readDurationFromConfig } from '@backstage/config';
import { InputError, NotFoundError, stringifyError } from '@backstage/errors';
import { ScmIntegrations } from '@backstage/integration';
-import { HumanDuration, JsonObject, JsonValue } from '@backstage/types';
+import {
+ IdentityApi,
+ IdentityApiGetIdentityRequest,
+} from '@backstage/plugin-auth-node';
+import { EventsService } from '@backstage/plugin-events-node';
+import { PermissionRuleParams } from '@backstage/plugin-permission-common';
+import {
+ createConditionAuthorizer,
+ createPermissionIntegrationRouter,
+ PermissionRule,
+} from '@backstage/plugin-permission-node';
import {
TaskSpec,
TemplateEntityStepV1beta3,
@@ -49,11 +72,6 @@ import {
templateParameterReadPermission,
templateStepReadPermission,
} from '@backstage/plugin-scaffolder-common/alpha';
-import express from 'express';
-import Router from 'express-promise-router';
-import { validate } from 'jsonschema';
-import { Logger } from 'winston';
-import { z } from 'zod';
import {
TaskBroker,
TaskStatus,
@@ -61,6 +79,19 @@ import {
TemplateFilter,
TemplateGlobal,
} from '@backstage/plugin-scaffolder-node';
+import {
+ AutocompleteHandler,
+ WorkspaceProvider,
+} from '@backstage/plugin-scaffolder-node/alpha';
+import { HumanDuration, JsonObject, JsonValue } from '@backstage/types';
+import express from 'express';
+import Router from 'express-promise-router';
+import { validate } from 'jsonschema';
+import { Duration } from 'luxon';
+import { pathToFileURL } from 'url';
+import { v4 as uuid } from 'uuid';
+import { Logger } from 'winston';
+import { z } from 'zod';
import {
createBuiltinActions,
DatabaseTaskStore,
@@ -69,6 +100,8 @@ import {
} from '../scaffolder';
import { createDryRunner } from '../scaffolder/dryrun';
import { StorageTaskBroker } from '../scaffolder/tasks/StorageTaskBroker';
+import { InternalTaskSecrets } from '../scaffolder/tasks/types';
+import { checkPermission } from '../util/checkPermissions';
import {
findTemplate,
getEntityBaseUrl,
@@ -76,39 +109,7 @@ import {
parseNumberParam,
parseStringsParam,
} from './helpers';
-import { PermissionRuleParams } from '@backstage/plugin-permission-common';
-import {
- createConditionAuthorizer,
- createPermissionIntegrationRouter,
- PermissionRule,
-} from '@backstage/plugin-permission-node';
import { scaffolderActionRules, scaffolderTemplateRules } from './rules';
-import { Duration } from 'luxon';
-import {
- AuthService,
- BackstageCredentials,
- DatabaseService,
- DiscoveryService,
- HttpAuthService,
- LifecycleService,
- PermissionsService,
- resolveSafeChildPath,
- SchedulerService,
- UrlReaderService,
-} from '@backstage/backend-plugin-api';
-import {
- IdentityApi,
- IdentityApiGetIdentityRequest,
-} from '@backstage/plugin-auth-node';
-import { InternalTaskSecrets } from '../scaffolder/tasks/types';
-import { checkPermission } from '../util/checkPermissions';
-import {
- AutocompleteHandler,
- WorkspaceProvider,
-} from '@backstage/plugin-scaffolder-node/alpha';
-import { pathToFileURL } from 'url';
-import { v4 as uuid } from 'uuid';
-import { EventsService } from '@backstage/plugin-events-node';
/**
*
@@ -184,7 +185,7 @@ export interface RouterOptions {
identity?: IdentityApi;
discovery?: DiscoveryService;
events?: EventsService;
-
+ auditor?: AuditorService;
autocompleteHandlers?: Record;
}
@@ -297,6 +298,7 @@ export async function createRouter(
identity = buildDefaultIdentityClient(options),
autocompleteHandlers = {},
events: eventsService,
+ auditor,
} = options;
const { auth, httpAuth } = createLegacyAuthAdapters({
@@ -326,6 +328,7 @@ export async function createRouter(
config,
auth,
additionalWorkspaceProviders,
+ auditor,
);
if (scheduler && databaseTaskStore.listStaleTasks) {
@@ -369,6 +372,7 @@ export async function createRouter(
actionRegistry,
integrations,
logger,
+ auditor,
workingDirectory,
additionalTemplateFilters,
additionalTemplateGlobals,
@@ -410,6 +414,7 @@ export async function createRouter(
actionRegistry,
integrations,
logger,
+ auditor,
workingDirectory,
additionalTemplateFilters,
additionalTemplateGlobals,
@@ -454,48 +459,80 @@ export async function createRouter(
.get(
'/v2/templates/:namespace/:kind/:name/parameter-schema',
async (req, res) => {
- const credentials = await httpAuth.credentials(req);
+ const requestedTemplateRef = `${req.params.kind}:${req.params.namespace}/${req.params.name}`;
- const { token } = await auth.getPluginRequestToken({
- onBehalfOf: credentials,
- targetPluginId: 'catalog',
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'template-parameter-schema',
+ request: req,
+ meta: { templateRef: requestedTemplateRef },
});
- const template = await authorizeTemplate(
- req.params,
- token,
- credentials,
- );
+ try {
+ const credentials = await httpAuth.credentials(req);
- const parameters = [template.spec.parameters ?? []].flat();
+ const { token } = await auth.getPluginRequestToken({
+ onBehalfOf: credentials,
+ targetPluginId: 'catalog',
+ });
- const presentation = template.spec.presentation;
+ const template = await authorizeTemplate(
+ req.params,
+ token,
+ credentials,
+ );
- res.json({
- title: template.metadata.title ?? template.metadata.name,
- ...(presentation ? { presentation } : {}),
- description: template.metadata.description,
- 'ui:options': template.metadata['ui:options'],
- steps: parameters.map(schema => ({
- title: schema.title ?? 'Please enter the following information',
- description: schema.description,
- schema,
- })),
- EXPERIMENTAL_formDecorators:
- template.spec.EXPERIMENTAL_formDecorators,
- });
+ const parameters = [template.spec.parameters ?? []].flat();
+
+ const presentation = template.spec.presentation;
+
+ const templateRef = `${template.kind}:${
+ template.metadata.namespace || 'default'
+ }/${template.metadata.name}`;
+
+ await auditorEvent?.success({ meta: { templateRef: templateRef } });
+
+ res.json({
+ title: template.metadata.title ?? template.metadata.name,
+ ...(presentation ? { presentation } : {}),
+ description: template.metadata.description,
+ 'ui:options': template.metadata['ui:options'],
+ steps: parameters.map(schema => ({
+ title: schema.title ?? 'Please enter the following information',
+ description: schema.description,
+ schema,
+ })),
+ EXPERIMENTAL_formDecorators:
+ template.spec.EXPERIMENTAL_formDecorators,
+ });
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
},
)
- .get('/v2/actions', async (_req, res) => {
- const actionsList = actionRegistry.list().map(action => {
- return {
- id: action.id,
- description: action.description,
- examples: action.examples,
- schema: action.schema,
- };
+ .get('/v2/actions', async (req, res) => {
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'action-fetch',
+ request: req,
});
- res.json(actionsList);
+
+ try {
+ const actionsList = actionRegistry.list().map(action => {
+ return {
+ id: action.id,
+ description: action.description,
+ examples: action.examples,
+ schema: action.schema,
+ };
+ });
+
+ await auditorEvent?.success();
+
+ res.json(actionsList);
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
})
.post('/v2/tasks', async (req, res) => {
const templateRef: string = req.body.templateRef;
@@ -503,376 +540,539 @@ export async function createRouter(
defaultKind: 'template',
});
- const credentials = await httpAuth.credentials(req);
-
- await checkPermission({
- credentials,
- permissions: [taskCreatePermission],
- permissionService: permissions,
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ severityLevel: 'medium',
+ request: req,
+ meta: {
+ actionType: 'create',
+ templateRef: templateRef,
+ },
});
- const { token } = await auth.getPluginRequestToken({
- onBehalfOf: credentials,
- targetPluginId: 'catalog',
- });
+ try {
+ const credentials = await httpAuth.credentials(req);
+ await checkPermission({
+ credentials,
+ permissions: [taskCreatePermission],
+ permissionService: permissions,
+ });
- const userEntityRef = auth.isPrincipal(credentials, 'user')
- ? credentials.principal.userEntityRef
- : undefined;
+ const { token } = await auth.getPluginRequestToken({
+ onBehalfOf: credentials,
+ targetPluginId: 'catalog',
+ });
- const userEntity = userEntityRef
- ? await catalogClient.getEntityByRef(userEntityRef, { token })
- : undefined;
+ const userEntityRef = auth.isPrincipal(credentials, 'user')
+ ? credentials.principal.userEntityRef
+ : undefined;
- let auditLog = `Scaffolding task for ${templateRef}`;
- if (userEntityRef) {
- auditLog += ` created by ${userEntityRef}`;
- }
- logger.info(auditLog);
+ const userEntity = userEntityRef
+ ? await catalogClient.getEntityByRef(userEntityRef, { token })
+ : undefined;
- const values = req.body.values;
-
- const template = await authorizeTemplate(
- { kind, namespace, name },
- token,
- credentials,
- );
-
- for (const parameters of [template.spec.parameters ?? []].flat()) {
- const result = validate(values, parameters);
-
- if (!result.valid) {
- res.status(400).json({ errors: result.errors });
- return;
+ let auditLog = `Scaffolding task for ${templateRef}`;
+ if (userEntityRef) {
+ auditLog += ` created by ${userEntityRef}`;
}
- }
+ logger.info(auditLog);
- const baseUrl = getEntityBaseUrl(template);
+ const values = req.body.values;
- const taskSpec: TaskSpec = {
- apiVersion: template.apiVersion,
- steps: template.spec.steps.map((step, index) => ({
- ...step,
- id: step.id ?? `step-${index + 1}`,
- name: step.name ?? step.action,
- })),
- EXPERIMENTAL_recovery: template.spec.EXPERIMENTAL_recovery,
- output: template.spec.output ?? {},
- parameters: values,
- user: {
- entity: userEntity as UserEntity,
- ref: userEntityRef,
- },
- templateInfo: {
- entityRef: stringifyEntityRef({ kind, name, namespace }),
- baseUrl,
- entity: {
- metadata: template.metadata,
- },
- },
- };
-
- const secrets: InternalTaskSecrets = {
- ...req.body.secrets,
- backstageToken: token,
- __initiatorCredentials: JSON.stringify({
- ...credentials,
- // credentials.token is nonenumerable and will not be serialized, so we need to add it explicitly
- token: (credentials as any).token,
- }),
- };
-
- const result = await taskBroker.dispatch({
- spec: taskSpec,
- createdBy: userEntityRef,
- secrets,
- });
-
- res.status(201).json({ id: result.taskId });
- })
- .get('/v2/tasks', async (req, res) => {
- const credentials = await httpAuth.credentials(req);
- await checkPermission({
- credentials,
- permissions: [taskReadPermission],
- permissionService: permissions,
- });
-
- if (!taskBroker.list) {
- throw new Error(
- 'TaskBroker does not support listing tasks, please implement the list method on the TaskBroker.',
+ const template = await authorizeTemplate(
+ { kind, namespace, name },
+ token,
+ credentials,
);
- }
- const createdBy = parseStringsParam(req.query.createdBy, 'createdBy');
- const status = parseStringsParam(req.query.status, 'status');
+ for (const parameters of [template.spec.parameters ?? []].flat()) {
+ const result = validate(values, parameters);
- const order = parseStringsParam(req.query.order, 'order')?.map(item => {
- const match = item.match(/^(asc|desc):(.+)$/);
- if (!match) {
- throw new InputError(
- `Invalid order parameter "${item}", expected ":"`,
- );
+ if (!result.valid) {
+ await auditorEvent?.fail({
+ // TODO(Rugvip): Seems like there aren't proper types for AggregateError yet
+ error: (AggregateError as any)(
+ result.errors,
+ 'Could not create entity',
+ ),
+ });
+
+ res.status(400).json({ errors: result.errors });
+ return;
+ }
}
- return {
- order: match[1] as 'asc' | 'desc',
- field: match[2],
- };
- });
+ const baseUrl = getEntityBaseUrl(template);
- const limit = parseNumberParam(req.query.limit, 'limit');
- const offset = parseNumberParam(req.query.offset, 'offset');
-
- const tasks = await taskBroker.list({
- filters: {
- createdBy,
- status: status ? (status as TaskStatus[]) : undefined,
- },
- order,
- pagination: {
- limit: limit ? limit[0] : undefined,
- offset: offset ? offset[0] : undefined,
- },
- });
-
- res.status(200).json(tasks);
- })
- .get('/v2/tasks/:taskId', async (req, res) => {
- const credentials = await httpAuth.credentials(req);
- await checkPermission({
- credentials,
- permissions: [taskReadPermission],
- permissionService: permissions,
- });
-
- const { taskId } = req.params;
- const task = await taskBroker.get(taskId);
- if (!task) {
- throw new NotFoundError(`Task with id ${taskId} does not exist`);
- }
- // Do not disclose secrets
- delete task.secrets;
- res.status(200).json(task);
- })
- .post('/v2/tasks/:taskId/cancel', async (req, res) => {
- const credentials = await httpAuth.credentials(req);
- // Requires both read and cancel permissions
- await checkPermission({
- credentials,
- permissions: [taskCancelPermission, taskReadPermission],
- permissionService: permissions,
- });
-
- const { taskId } = req.params;
- await taskBroker.cancel?.(taskId);
- res.status(200).json({ status: 'cancelled' });
- })
- .post('/v2/tasks/:taskId/retry', async (req, res) => {
- const credentials = await httpAuth.credentials(req);
- // Requires both read and cancel permissions
- await checkPermission({
- credentials,
- permissions: [taskCreatePermission, taskReadPermission],
- permissionService: permissions,
- });
-
- const { taskId } = req.params;
- await taskBroker.retry?.(taskId);
- res.status(201).json({ id: taskId });
- })
- .get('/v2/tasks/:taskId/eventstream', async (req, res) => {
- const credentials = await httpAuth.credentials(req);
- await checkPermission({
- credentials,
- permissions: [taskReadPermission],
- permissionService: permissions,
- });
-
- const { taskId } = req.params;
- const after =
- req.query.after !== undefined ? Number(req.query.after) : undefined;
-
- logger.debug(`Event stream observing taskId '${taskId}' opened`);
-
- // Mandatory headers and http status to keep connection open
- res.writeHead(200, {
- Connection: 'keep-alive',
- 'Cache-Control': 'no-cache',
- 'Content-Type': 'text/event-stream',
- });
-
- // After client opens connection send all events as string
- const subscription = taskBroker.event$({ taskId, after }).subscribe({
- error: error => {
- logger.error(
- `Received error from event stream when observing taskId '${taskId}', ${error}`,
- );
- res.end();
- },
- next: ({ events }) => {
- let shouldUnsubscribe = false;
- for (const event of events) {
- res.write(
- `event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`,
- );
- if (event.type === 'completion' && !event.isTaskRecoverable) {
- shouldUnsubscribe = true;
- }
- }
- // res.flush() is only available with the compression middleware
- res.flush?.();
- if (shouldUnsubscribe) {
- subscription.unsubscribe();
- res.end();
- }
- },
- });
-
- // When client closes connection we update the clients list
- // avoiding the disconnected one
- req.on('close', () => {
- subscription.unsubscribe();
- logger.debug(`Event stream observing taskId '${taskId}' closed`);
- });
- })
- .get('/v2/tasks/:taskId/events', async (req, res) => {
- const credentials = await httpAuth.credentials(req);
- await checkPermission({
- credentials,
- permissions: [taskReadPermission],
- permissionService: permissions,
- });
-
- const { taskId } = req.params;
- const after = Number(req.query.after) || undefined;
-
- // cancel the request after 30 seconds. this aligns with the recommendations of RFC 6202.
- const timeout = setTimeout(() => {
- res.json([]);
- }, 30_000);
-
- // Get all known events after an id (always includes the completion event) and return the first callback
- const subscription = taskBroker.event$({ taskId, after }).subscribe({
- error: error => {
- logger.error(
- `Received error from event stream when observing taskId '${taskId}', ${error}`,
- );
- },
- next: ({ events }) => {
- clearTimeout(timeout);
- subscription.unsubscribe();
- res.json(events);
- },
- });
-
- // When client closes connection we update the clients list
- // avoiding the disconnected one
- req.on('close', () => {
- subscription.unsubscribe();
- clearTimeout(timeout);
- });
- })
- .post('/v2/dry-run', async (req, res) => {
- const credentials = await httpAuth.credentials(req);
- await checkPermission({
- credentials,
- permissions: [taskCreatePermission],
- permissionService: permissions,
- });
-
- const bodySchema = z.object({
- template: z.unknown(),
- values: z.record(z.unknown()),
- secrets: z.record(z.string()).optional(),
- directoryContents: z.array(
- z.object({ path: z.string(), base64Content: z.string() }),
- ),
- });
- const body = await bodySchema.parseAsync(req.body).catch(e => {
- throw new InputError(`Malformed request: ${e}`);
- });
-
- const template = body.template as TemplateEntityV1beta3;
- if (!(await templateEntityV1beta3Validator.check(template))) {
- throw new InputError('Input template is not a template');
- }
-
- const { token } = await auth.getPluginRequestToken({
- onBehalfOf: credentials,
- targetPluginId: 'catalog',
- });
-
- const userEntityRef = auth.isPrincipal(credentials, 'user')
- ? credentials.principal.userEntityRef
- : undefined;
-
- const userEntity = userEntityRef
- ? await catalogClient.getEntityByRef(userEntityRef, { token })
- : undefined;
-
- for (const parameters of [template.spec.parameters ?? []].flat()) {
- const result = validate(body.values, parameters);
- if (!result.valid) {
- res.status(400).json({ errors: result.errors });
- return;
- }
- }
-
- const steps = template.spec.steps.map((step, index) => ({
- ...step,
- id: step.id ?? `step-${index + 1}`,
- name: step.name ?? step.action,
- }));
-
- const dryRunId = uuid();
- const contentsPath = resolveSafeChildPath(
- workingDirectory,
- `dry-run-content-${dryRunId}`,
- );
-
- const templateInfo = {
- entityRef: stringifyEntityRef(template),
- entity: {
- metadata: template.metadata,
- },
- baseUrl: pathToFileURL(
- resolveSafeChildPath(contentsPath, 'template.yaml'),
- ).toString(),
- };
-
- const result = await dryRunner({
- spec: {
+ const taskSpec: TaskSpec = {
apiVersion: template.apiVersion,
- steps,
+ steps: template.spec.steps.map((step, index) => ({
+ ...step,
+ id: step.id ?? `step-${index + 1}`,
+ name: step.name ?? step.action,
+ })),
+ EXPERIMENTAL_recovery: template.spec.EXPERIMENTAL_recovery,
output: template.spec.output ?? {},
- parameters: body.values as JsonObject,
+ parameters: values,
user: {
entity: userEntity as UserEntity,
ref: userEntityRef,
},
+ templateInfo: {
+ entityRef: stringifyEntityRef({ kind, name, namespace }),
+ baseUrl,
+ entity: {
+ metadata: template.metadata,
+ },
+ },
+ };
+
+ const secrets: InternalTaskSecrets = {
+ ...req.body.secrets,
+ backstageToken: token,
+ __initiatorCredentials: JSON.stringify({
+ ...credentials,
+ // credentials.token is nonenumerable and will not be serialized, so we need to add it explicitly
+ token: (credentials as any).token,
+ }),
+ };
+
+ const result = await taskBroker.dispatch({
+ spec: taskSpec,
+ createdBy: userEntityRef,
+ secrets,
+ });
+
+ await auditorEvent?.success({ meta: { taskId: result.taskId } });
+
+ res.status(201).json({ id: result.taskId });
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
+ })
+ .get('/v2/tasks', async (req, res) => {
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ request: req,
+ meta: {
+ actionType: 'list',
},
- templateInfo: templateInfo,
- directoryContents: (body.directoryContents ?? []).map(file => ({
- path: file.path,
- content: Buffer.from(file.base64Content, 'base64'),
- })),
- secrets: {
- ...body.secrets,
- ...(token && { backstageToken: token }),
- },
- credentials,
});
- res.status(200).json({
- ...result,
- steps,
- directoryContents: result.directoryContents.map(file => ({
- path: file.path,
- executable: file.executable,
- base64Content: file.content.toString('base64'),
- })),
+ try {
+ const credentials = await httpAuth.credentials(req);
+ await checkPermission({
+ credentials,
+ permissions: [taskReadPermission],
+ permissionService: permissions,
+ });
+
+ if (!taskBroker.list) {
+ throw new Error(
+ 'TaskBroker does not support listing tasks, please implement the list method on the TaskBroker.',
+ );
+ }
+
+ const createdBy = parseStringsParam(req.query.createdBy, 'createdBy');
+ const status = parseStringsParam(req.query.status, 'status');
+
+ const order = parseStringsParam(req.query.order, 'order')?.map(item => {
+ const match = item.match(/^(asc|desc):(.+)$/);
+ if (!match) {
+ throw new InputError(
+ `Invalid order parameter "${item}", expected ":"`,
+ );
+ }
+
+ return {
+ order: match[1] as 'asc' | 'desc',
+ field: match[2],
+ };
+ });
+
+ const limit = parseNumberParam(req.query.limit, 'limit');
+ const offset = parseNumberParam(req.query.offset, 'offset');
+
+ const tasks = await taskBroker.list({
+ filters: {
+ createdBy,
+ status: status ? (status as TaskStatus[]) : undefined,
+ },
+ order,
+ pagination: {
+ limit: limit ? limit[0] : undefined,
+ offset: offset ? offset[0] : undefined,
+ },
+ });
+
+ await auditorEvent?.success();
+
+ res.status(200).json(tasks);
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
+ })
+ .get('/v2/tasks/:taskId', async (req, res) => {
+ const { taskId } = req.params;
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ request: req,
+ meta: {
+ actionType: 'get',
+ taskId: taskId,
+ },
});
+
+ try {
+ const credentials = await httpAuth.credentials(req);
+ await checkPermission({
+ credentials,
+ permissions: [taskReadPermission],
+ permissionService: permissions,
+ });
+
+ const task = await taskBroker.get(taskId);
+ if (!task) {
+ throw new NotFoundError(`Task with id ${taskId} does not exist`);
+ }
+
+ await auditorEvent?.success();
+
+ // Do not disclose secrets
+ delete task.secrets;
+ res.status(200).json(task);
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
+ })
+ .post('/v2/tasks/:taskId/cancel', async (req, res) => {
+ const { taskId } = req.params;
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ severityLevel: 'medium',
+ request: req,
+ meta: {
+ actionType: 'cancel',
+ taskId: taskId,
+ },
+ });
+
+ try {
+ const credentials = await httpAuth.credentials(req);
+ // Requires both read and cancel permissions
+ await checkPermission({
+ credentials,
+ permissions: [taskCancelPermission, taskReadPermission],
+ permissionService: permissions,
+ });
+
+ await taskBroker.cancel?.(taskId);
+
+ await auditorEvent?.success();
+
+ res.status(200).json({ status: 'cancelled' });
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
+ })
+ .post('/v2/tasks/:taskId/retry', async (req, res) => {
+ const { taskId } = req.params;
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ severityLevel: 'medium',
+ request: req,
+ meta: {
+ actionType: 'retry',
+ taskId: taskId,
+ },
+ });
+
+ try {
+ const credentials = await httpAuth.credentials(req);
+ // Requires both read and cancel permissions
+ await checkPermission({
+ credentials,
+ permissions: [taskCreatePermission, taskReadPermission],
+ permissionService: permissions,
+ });
+
+ await auditorEvent?.success();
+
+ await taskBroker.retry?.(taskId);
+ res.status(201).json({ id: taskId });
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
+ })
+ .get('/v2/tasks/:taskId/eventstream', async (req, res) => {
+ const { taskId } = req.params;
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ request: req,
+ meta: {
+ actionType: 'stream',
+ taskId: taskId,
+ },
+ });
+
+ try {
+ const credentials = await httpAuth.credentials(req);
+ await checkPermission({
+ credentials,
+ permissions: [taskReadPermission],
+ permissionService: permissions,
+ });
+
+ const after =
+ req.query.after !== undefined ? Number(req.query.after) : undefined;
+
+ logger.debug(`Event stream observing taskId '${taskId}' opened`);
+
+ // Mandatory headers and http status to keep connection open
+ res.writeHead(200, {
+ Connection: 'keep-alive',
+ 'Cache-Control': 'no-cache',
+ 'Content-Type': 'text/event-stream',
+ });
+
+ // After client opens connection send all events as string
+ const subscription = taskBroker.event$({ taskId, after }).subscribe({
+ error: async error => {
+ logger.error(
+ `Received error from event stream when observing taskId '${taskId}', ${error}`,
+ );
+ await auditorEvent?.fail({ error: error });
+ res.end();
+ },
+ next: ({ events }) => {
+ let shouldUnsubscribe = false;
+ for (const event of events) {
+ res.write(
+ `event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`,
+ );
+ if (event.type === 'completion' && !event.isTaskRecoverable) {
+ shouldUnsubscribe = true;
+ }
+ }
+ // res.flush() is only available with the compression middleware
+ res.flush?.();
+ if (shouldUnsubscribe) {
+ subscription.unsubscribe();
+ res.end();
+ }
+ },
+ });
+
+ // When client closes connection we update the clients list
+ // avoiding the disconnected one
+ req.on('close', async () => {
+ subscription.unsubscribe();
+ logger.debug(`Event stream observing taskId '${taskId}' closed`);
+ await auditorEvent?.success();
+ });
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
+ })
+ .get('/v2/tasks/:taskId/events', async (req, res) => {
+ const { taskId } = req.params;
+
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ request: req,
+ meta: {
+ actionType: 'events',
+ taskId: taskId,
+ },
+ });
+
+ try {
+ const credentials = await httpAuth.credentials(req);
+ await checkPermission({
+ credentials,
+ permissions: [taskReadPermission],
+ permissionService: permissions,
+ });
+
+ const after = Number(req.query.after) || undefined;
+
+ // cancel the request after 30 seconds. this aligns with the recommendations of RFC 6202.
+ const timeout = setTimeout(() => {
+ res.json([]);
+ }, 30_000);
+
+ // Get all known events after an id (always includes the completion event) and return the first callback
+ const subscription = taskBroker.event$({ taskId, after }).subscribe({
+ error: async error => {
+ logger.error(
+ `Received error from event stream when observing taskId '${taskId}', ${error}`,
+ );
+ await auditorEvent?.fail({ error: error });
+ },
+ next: async ({ events }) => {
+ clearTimeout(timeout);
+ subscription.unsubscribe();
+ await auditorEvent?.success();
+ res.json(events);
+ },
+ });
+
+ // When client closes connection we update the clients list
+ // avoiding the disconnected one
+ req.on('close', () => {
+ subscription.unsubscribe();
+ clearTimeout(timeout);
+ });
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
+ })
+ .post('/v2/dry-run', async (req, res) => {
+ const auditorEvent = await auditor?.createEvent({
+ eventId: 'task',
+ request: req,
+ meta: {
+ actionType: 'dry-run',
+ },
+ });
+
+ try {
+ const credentials = await httpAuth.credentials(req);
+ await checkPermission({
+ credentials,
+ permissions: [taskCreatePermission],
+ permissionService: permissions,
+ });
+
+ const bodySchema = z.object({
+ template: z.unknown(),
+ values: z.record(z.unknown()),
+ secrets: z.record(z.string()).optional(),
+ directoryContents: z.array(
+ z.object({ path: z.string(), base64Content: z.string() }),
+ ),
+ });
+ const body = await bodySchema.parseAsync(req.body).catch(e => {
+ throw new InputError(`Malformed request: ${e}`);
+ });
+
+ const template = body.template as TemplateEntityV1beta3;
+ if (!(await templateEntityV1beta3Validator.check(template))) {
+ throw new InputError('Input template is not a template');
+ }
+
+ const { token } = await auth.getPluginRequestToken({
+ onBehalfOf: credentials,
+ targetPluginId: 'catalog',
+ });
+
+ const userEntityRef = auth.isPrincipal(credentials, 'user')
+ ? credentials.principal.userEntityRef
+ : undefined;
+
+ const userEntity = userEntityRef
+ ? await catalogClient.getEntityByRef(userEntityRef, { token })
+ : undefined;
+
+ const templateRef: string = `${template.kind}:${
+ template.metadata.namespace || 'default'
+ }/${template.metadata.name}`;
+
+ for (const parameters of [template.spec.parameters ?? []].flat()) {
+ const result = validate(body.values, parameters);
+ if (!result.valid) {
+ await auditorEvent?.fail({
+ // TODO(Rugvip): Seems like there aren't proper types for AggregateError yet
+ error: (AggregateError as any)(
+ result.errors,
+ 'Could not execute dry run',
+ ),
+ meta: {
+ templateRef: templateRef,
+ parameters: template.spec.parameters,
+ },
+ });
+
+ res.status(400).json({ errors: result.errors });
+ return;
+ }
+ }
+
+ const steps = template.spec.steps.map((step, index) => ({
+ ...step,
+ id: step.id ?? `step-${index + 1}`,
+ name: step.name ?? step.action,
+ }));
+
+ const dryRunId = uuid();
+ const contentsPath = resolveSafeChildPath(
+ workingDirectory,
+ `dry-run-content-${dryRunId}`,
+ );
+ const templateInfo = {
+ entityRef: 'template:default/dry-run',
+ entity: {
+ metadata: template.metadata,
+ },
+ baseUrl: pathToFileURL(
+ resolveSafeChildPath(contentsPath, 'template.yaml'),
+ ).toString(),
+ };
+
+ const result = await dryRunner({
+ spec: {
+ apiVersion: template.apiVersion,
+ steps,
+ output: template.spec.output ?? {},
+ parameters: body.values as JsonObject,
+ user: {
+ entity: userEntity as UserEntity,
+ ref: userEntityRef,
+ },
+ },
+ templateInfo: templateInfo,
+ directoryContents: (body.directoryContents ?? []).map(file => ({
+ path: file.path,
+ content: Buffer.from(file.base64Content, 'base64'),
+ })),
+ secrets: {
+ ...body.secrets,
+ ...(token && { backstageToken: token }),
+ },
+ credentials,
+ });
+
+ await auditorEvent?.success({
+ meta: {
+ templateRef: templateRef,
+ parameters: template.spec.parameters,
+ },
+ });
+
+ res.status(200).json({
+ ...result,
+ steps,
+ directoryContents: result.directoryContents.map(file => ({
+ path: file.path,
+ executable: file.executable,
+ base64Content: file.content.toString('base64'),
+ })),
+ });
+ } catch (err) {
+ await auditorEvent?.fail({ error: err });
+ throw err;
+ }
})
.post('/v2/autocomplete/:provider/:resource', async (req, res) => {
const { token, context } = req.body;
diff --git a/plugins/scaffolder-node-test-utils/CHANGELOG.md b/plugins/scaffolder-node-test-utils/CHANGELOG.md
index a6462410e0..75fa046404 100644
--- a/plugins/scaffolder-node-test-utils/CHANGELOG.md
+++ b/plugins/scaffolder-node-test-utils/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-scaffolder-node-test-utils
+## 0.1.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-test-utils@1.3.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/types@1.2.1
+
## 0.1.18
### Patch Changes
diff --git a/plugins/scaffolder-node-test-utils/package.json b/plugins/scaffolder-node-test-utils/package.json
index 72b61dbd64..3ce9bf92b0 100644
--- a/plugins/scaffolder-node-test-utils/package.json
+++ b/plugins/scaffolder-node-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-node-test-utils",
- "version": "0.1.18",
+ "version": "0.1.19-next.0",
"backstage": {
"role": "node-library",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md
index 46e658df86..5cc235681f 100644
--- a/plugins/scaffolder-node/CHANGELOG.md
+++ b/plugins/scaffolder-node/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-scaffolder-node
+## 0.7.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change introduces an optional `taskId` property to `TaskContext`.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-scaffolder-common@1.5.9
+
## 0.6.3
### Patch Changes
diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json
index e8af5015c5..83bb4ca160 100644
--- a/plugins/scaffolder-node/package.json
+++ b/plugins/scaffolder-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-node",
- "version": "0.6.3",
+ "version": "0.7.0-next.0",
"description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "node-library",
diff --git a/plugins/scaffolder-node/report.api.md b/plugins/scaffolder-node/report.api.md
index 0afd6dc202..c02d36eb54 100644
--- a/plugins/scaffolder-node/report.api.md
+++ b/plugins/scaffolder-node/report.api.md
@@ -405,6 +405,8 @@ export interface TaskContext {
// (undocumented)
spec: TaskSpec;
// (undocumented)
+ taskId?: string;
+ // (undocumented)
updateCheckpoint?(
options:
| {
diff --git a/plugins/scaffolder-node/src/tasks/types.ts b/plugins/scaffolder-node/src/tasks/types.ts
index b830c0633a..fdfeb49a0b 100644
--- a/plugins/scaffolder-node/src/tasks/types.ts
+++ b/plugins/scaffolder-node/src/tasks/types.ts
@@ -110,6 +110,7 @@ export type TaskBrokerDispatchOptions = {
* @public
*/
export interface TaskContext {
+ taskId?: string;
cancelSignal: AbortSignal;
spec: TaskSpec;
secrets?: TaskSecrets;
diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md
index 7173eb5a32..b033f708e2 100644
--- a/plugins/scaffolder-react/CHANGELOG.md
+++ b/plugins/scaffolder-react/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-scaffolder-react
+## 1.14.4-next.0
+
+### Patch Changes
+
+- 3edf7e7: Add schema output return type to the `makeFieldSchema` function return
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+
## 1.14.3
### Patch Changes
diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json
index d5aaac11ed..8271656348 100644
--- a/plugins/scaffolder-react/package.json
+++ b/plugins/scaffolder-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-react",
- "version": "1.14.3",
+ "version": "1.14.4-next.0",
"description": "A frontend library that helps other Backstage plugins interact with the Scaffolder",
"backstage": {
"role": "web-library",
diff --git a/plugins/scaffolder-react/report.api.md b/plugins/scaffolder-react/report.api.md
index 8a6b4739a4..a357ff3176 100644
--- a/plugins/scaffolder-react/report.api.md
+++ b/plugins/scaffolder-react/report.api.md
@@ -131,6 +131,8 @@ export interface FieldSchema {
// (undocumented)
readonly schema: CustomFieldExtensionSchema;
// (undocumented)
+ readonly TOutput: TReturn;
+ // (undocumented)
readonly TProps: FieldExtensionComponentProps;
// @deprecated (undocumented)
readonly type: FieldExtensionComponentProps;
diff --git a/plugins/scaffolder-react/src/utils.ts b/plugins/scaffolder-react/src/utils.ts
index 63a62fe3fc..dc24df759d 100644
--- a/plugins/scaffolder-react/src/utils.ts
+++ b/plugins/scaffolder-react/src/utils.ts
@@ -33,6 +33,7 @@ export function makeFieldSchema<
const { output, uiOptions } = options;
return {
TProps: undefined as any,
+ TOutput: undefined as any,
schema: {
returnValue: zodToJsonSchema(output(z)) as JSONSchema7,
uiOptions: uiOptions && (zodToJsonSchema(uiOptions(z)) as JSONSchema7),
@@ -57,4 +58,5 @@ export interface FieldSchema {
readonly schema: CustomFieldExtensionSchema;
readonly TProps: FieldExtensionComponentProps;
+ readonly TOutput: TReturn;
}
diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md
index d3a181f07c..e3df28837e 100644
--- a/plugins/scaffolder/CHANGELOG.md
+++ b/plugins/scaffolder/CHANGELOG.md
@@ -1,5 +1,28 @@
# @backstage/plugin-scaffolder
+## 1.27.5-next.0
+
+### Patch Changes
+
+- 3107f1f: Fixed a bug in the BitbucketRepoBranchPicker component that crashed the scaffolder
+- 3edf7e7: Add schema output return type to the `makeFieldSchema` function return
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-react@1.2.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+
## 1.27.4
### Patch Changes
diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json
index 4cbbb1dbc7..9bab5fb0de 100644
--- a/plugins/scaffolder/package.json
+++ b/plugins/scaffolder/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder",
- "version": "1.27.4",
+ "version": "1.27.5-next.0",
"description": "The Backstage plugin that helps you create new things",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/scaffolder/src/components/fields/utils.ts b/plugins/scaffolder/src/components/fields/utils.ts
index 4ec9de2d99..2fa6aab1b3 100644
--- a/plugins/scaffolder/src/components/fields/utils.ts
+++ b/plugins/scaffolder/src/components/fields/utils.ts
@@ -53,5 +53,6 @@ export function makeFieldSchemaFromZod<
type: null as any,
uiOptionsType: null as any,
TProps: undefined as any,
+ TOutput: undefined as any,
};
}
diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md
index 21bd8bb154..3355885cf3 100644
--- a/plugins/search-backend-module-catalog/CHANGELOG.md
+++ b/plugins/search-backend-module-catalog/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-search-backend-module-catalog
+## 0.3.1-next.0
+
+### Patch Changes
+
+- eee8d76: Modified the logic for generating the location URL by encoding the entity property values with `encodeURIComponent`. This enhancement improves the safety and reliability of the URL.
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 0.3.0
### Minor Changes
diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json
index 75b50e877c..0537405df0 100644
--- a/plugins/search-backend-module-catalog/package.json
+++ b/plugins/search-backend-module-catalog/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-catalog",
- "version": "0.3.0",
+ "version": "0.3.1-next.0",
"description": "A module for the search backend that exports catalog modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md
index e71fcaed34..02d9e4e8da 100644
--- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md
+++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-search-backend-module-elasticsearch
+## 1.6.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 1.6.4
### Patch Changes
diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json
index f2ac25c690..8727b19ab2 100644
--- a/plugins/search-backend-module-elasticsearch/package.json
+++ b/plugins/search-backend-module-elasticsearch/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-elasticsearch",
- "version": "1.6.4",
+ "version": "1.6.5-next.0",
"description": "A module for the search backend that implements search using ElasticSearch",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md
index 46b99a756b..e19ef7c992 100644
--- a/plugins/search-backend-module-explore/CHANGELOG.md
+++ b/plugins/search-backend-module-explore/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-search-backend-module-explore
+## 0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 0.2.7
### Patch Changes
diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json
index 17edbc7bee..24626dee6a 100644
--- a/plugins/search-backend-module-explore/package.json
+++ b/plugins/search-backend-module-explore/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-explore",
- "version": "0.2.7",
+ "version": "0.2.8-next.0",
"description": "A module for the search backend that exports explore modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md
index 77ddc810b2..f2581e4e2a 100644
--- a/plugins/search-backend-module-pg/CHANGELOG.md
+++ b/plugins/search-backend-module-pg/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-search-backend-module-pg
+## 0.5.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 0.5.40
### Patch Changes
diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json
index 621191d904..8bbdb6e965 100644
--- a/plugins/search-backend-module-pg/package.json
+++ b/plugins/search-backend-module-pg/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-pg",
- "version": "0.5.40",
+ "version": "0.5.41-next.0",
"description": "A module for the search backend that implements search using PostgreSQL",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md
index df1ad26b6b..b06737229b 100644
--- a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md
+++ b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-search-backend-module-stack-overflow-collator
+## 0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 0.3.5
### Patch Changes
diff --git a/plugins/search-backend-module-stack-overflow-collator/package.json b/plugins/search-backend-module-stack-overflow-collator/package.json
index 01bb8fabdd..40f29ba8d3 100644
--- a/plugins/search-backend-module-stack-overflow-collator/package.json
+++ b/plugins/search-backend-module-stack-overflow-collator/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-stack-overflow-collator",
- "version": "0.3.5",
+ "version": "0.3.6-next.0",
"description": "A module for the search backend that exports stack overflow modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md
index 418258ba86..4dcfc12aa3 100644
--- a/plugins/search-backend-module-techdocs/CHANGELOG.md
+++ b/plugins/search-backend-module-techdocs/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-search-backend-module-techdocs
+## 0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/plugin-techdocs-node@1.13.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 0.3.5
### Patch Changes
diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json
index 54fb5fdf86..9c30ff5e27 100644
--- a/plugins/search-backend-module-techdocs/package.json
+++ b/plugins/search-backend-module-techdocs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-techdocs",
- "version": "0.3.5",
+ "version": "0.3.6-next.0",
"description": "A module for the search backend that exports techdocs modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md
index 9b37fafddc..6d2c604211 100644
--- a/plugins/search-backend-node/CHANGELOG.md
+++ b/plugins/search-backend-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-search-backend-node
+## 1.3.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-common@1.2.17
+
## 1.3.7
### Patch Changes
diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json
index e6fe3053b7..409cdbbd9d 100644
--- a/plugins/search-backend-node/package.json
+++ b/plugins/search-backend-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-node",
- "version": "1.3.7",
+ "version": "1.3.8-next.0",
"description": "A library for Backstage backend plugins that want to interact with the search backend plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md
index c4cc2dc9a9..d534e1c957 100644
--- a/plugins/search-backend/CHANGELOG.md
+++ b/plugins/search-backend/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-search-backend
+## 1.8.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 1.8.1
### Patch Changes
diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json
index 8d8be17eb5..b6599de825 100644
--- a/plugins/search-backend/package.json
+++ b/plugins/search-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend",
- "version": "1.8.1",
+ "version": "1.8.2-next.0",
"description": "The Backstage backend plugin that provides your backstage app with search",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md
index 6b25fb5a52..19fc4b3518 100644
--- a/plugins/search-react/CHANGELOG.md
+++ b/plugins/search-react/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-search-react
+## 1.8.6-next.0
+
+### Patch Changes
+
+- 63e1012: Added new extension points to extend search filters `SearchFilterBlueprint` and `SearchFilterResultTypeBlueprint`
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-search-common@1.2.17
+
## 1.8.5
### Patch Changes
diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json
index 33cf345cad..f2277d36eb 100644
--- a/plugins/search-react/package.json
+++ b/plugins/search-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-react",
- "version": "1.8.5",
+ "version": "1.8.6-next.0",
"backstage": {
"role": "web-library",
"pluginId": "search",
diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md
index 6d066ab5b2..3a9581ef7d 100644
--- a/plugins/search/CHANGELOG.md
+++ b/plugins/search/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-search
+## 1.4.23-next.0
+
+### Patch Changes
+
+- 63e1012: Added new extension points to extend search filters `SearchFilterBlueprint` and `SearchFilterResultTypeBlueprint`
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-search-common@1.2.17
+
## 1.4.22
### Patch Changes
diff --git a/plugins/search/package.json b/plugins/search/package.json
index 486ad5f690..83403bfbd6 100644
--- a/plugins/search/package.json
+++ b/plugins/search/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search",
- "version": "1.4.22",
+ "version": "1.4.23-next.0",
"description": "The Backstage plugin that provides your backstage app with search",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/signals-backend/CHANGELOG.md b/plugins/signals-backend/CHANGELOG.md
index 307884aa9c..a053ef02b9 100644
--- a/plugins/signals-backend/CHANGELOG.md
+++ b/plugins/signals-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-signals-backend
+## 0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+
## 0.3.0
### Minor Changes
diff --git a/plugins/signals-backend/package.json b/plugins/signals-backend/package.json
index 6bda99f086..49582f2d3c 100644
--- a/plugins/signals-backend/package.json
+++ b/plugins/signals-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-signals-backend",
- "version": "0.3.0",
+ "version": "0.3.1-next.0",
"backstage": {
"role": "backend-plugin",
"pluginId": "signals",
diff --git a/plugins/signals-node/CHANGELOG.md b/plugins/signals-node/CHANGELOG.md
index 2253b22bab..26044cb34b 100644
--- a/plugins/signals-node/CHANGELOG.md
+++ b/plugins/signals-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-signals-node
+## 0.1.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
## 0.1.16
### Patch Changes
diff --git a/plugins/signals-node/package.json b/plugins/signals-node/package.json
index 80248ea70e..4e840b9c3f 100644
--- a/plugins/signals-node/package.json
+++ b/plugins/signals-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-signals-node",
- "version": "0.1.16",
+ "version": "0.1.17-next.0",
"description": "Node.js library for the signals plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md
index 36b7d2b131..81f924cfa8 100644
--- a/plugins/techdocs-addons-test-utils/CHANGELOG.md
+++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-techdocs-addons-test-utils
+## 1.0.45-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/test-utils@1.7.4
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-techdocs-react@1.2.13
+
## 1.0.44
### Patch Changes
diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json
index da66b52d66..69cb170915 100644
--- a/plugins/techdocs-addons-test-utils/package.json
+++ b/plugins/techdocs-addons-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-addons-test-utils",
- "version": "1.0.44",
+ "version": "1.0.45-next.0",
"backstage": {
"role": "web-library",
"pluginId": "techdocs-addons",
diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md
index b66d62b1d8..39653085fd 100644
--- a/plugins/techdocs-backend/CHANGELOG.md
+++ b/plugins/techdocs-backend/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-techdocs-backend
+## 1.11.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/plugin-techdocs-node@1.13.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0
+ - @backstage/plugin-techdocs-common@0.1.0
+
## 1.11.5
### Patch Changes
diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json
index 5b35768877..8276d1cecc 100644
--- a/plugins/techdocs-backend/package.json
+++ b/plugins/techdocs-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-backend",
- "version": "1.11.5",
+ "version": "1.11.6-next.0",
"description": "The Backstage backend plugin that renders technical documentation for your components",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md
index cdd4358ca1..1394e3e6aa 100644
--- a/plugins/techdocs-node/CHANGELOG.md
+++ b/plugins/techdocs-node/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-techdocs-node
+## 1.13.0-next.0
+
+### Minor Changes
+
+- 8de3d2d: Allow configurable optional retries for publisher AWS S3 operations.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-techdocs-common@0.1.0
+
## 1.12.16
### Patch Changes
diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json
index aa1d0158bc..fe6dd5d0dd 100644
--- a/plugins/techdocs-node/package.json
+++ b/plugins/techdocs-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-node",
- "version": "1.12.16",
+ "version": "1.13.0-next.0",
"description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli",
"backstage": {
"role": "node-library",
diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md
index e09b4752fe..2ad421c9fe 100644
--- a/plugins/techdocs/CHANGELOG.md
+++ b/plugins/techdocs/CHANGELOG.md
@@ -1,5 +1,140 @@
# @backstage/plugin-techdocs
+## 1.12.2-next.0
+
+### Patch Changes
+
+- f4be934: Changed the base URL in addLinkClickListener from window.location.origin to app.baseUrl for improved path handling. This fixes an issue where Backstage, when running on a subpath, was unable to handle non-Backstage URLs of the same origin correctly.
+- 1f40e6b: Add optional props to `TechDocCustomHome` to allow for more flexibility:
+
+ ```tsx
+ import { TechDocsCustomHome } from '@backstage/plugin-techdocs';
+ //...
+
+ const options = { emptyRowsWhenPaging: false };
+ const linkDestination = (entity: Entity): string | undefined => {
+ return entity.metadata.annotations?.['external-docs'];
+ };
+ const techDocsTabsConfig = [
+ {
+ label: 'Recommended Documentation',
+ panels: [
+ {
+ title: 'Golden Path',
+ description: 'Documentation about standards to follow',
+ panelType: 'DocsCardGrid',
+ panelProps: { CustomHeader: () => },
+ filterPredicate: entity =>
+ entity?.metadata?.tags?.includes('golden-path') ?? false,
+ },
+ {
+ title: 'Recommended',
+ description: 'Useful documentation',
+ panelType: 'InfoCardGrid',
+ panelProps: {
+ CustomHeader: () =>
+ linkDestination: linkDestination,
+ },
+ filterPredicate: entity =>
+ entity?.metadata?.tags?.includes('recommended') ?? false,
+ },
+ ],
+ },
+ {
+ label: 'Browse All',
+ panels: [
+ {
+ description: 'Browse all docs',
+ filterPredicate: filterEntity,
+ panelType: 'TechDocsIndexPage',
+ title: 'All',
+ panelProps: { PageWrapper: React.Fragment, CustomHeader: React.Fragment, options: options },
+ },
+ ],
+ },
+ ];
+
+ const AppRoutes = () => {
+
+ ) => ({children})}
+ />
+ }
+ />
+ ;
+ };
+ ```
+
+ Add new Grid option called `InfoCardGrid` which is a more customizable card option for the Docs grid.
+
+ ```tsx
+ entity.metadata['external-docs']}
+ />
+ ```
+
+ Expose existing `CustomDocsPanel` so that it can be used independently if desired.
+
+ ```tsx
+ const panels: PanelConfig[] = [
+ {
+ description: '',
+ filterPredicate: entity => {},
+ panelType: 'InfoCardGrid',
+ title: 'Standards',
+ panelProps: {
+ CustomHeader: () =>
+ linkDestination: linkDestination,
+ },
+ },
+ {
+ description: '',
+ filterPredicate: entity => {},
+ panelType: 'DocsCardGrid',
+ title: 'Contribute',
+ },
+ ];
+ {
+ panels.map((config, index) => (
+
+ ));
+ }
+ ```
+
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-react@1.2.13
+
## 1.12.1
### Patch Changes
diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json
index d0279dd61d..35ffa0fd11 100644
--- a/plugins/techdocs/package.json
+++ b/plugins/techdocs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs",
- "version": "1.12.1",
+ "version": "1.12.2-next.0",
"description": "The Backstage plugin that renders technical documentation for your components",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/techdocs/src/alpha.tsx b/plugins/techdocs/src/alpha.tsx
index e0e1c1761e..a9ac353753 100644
--- a/plugins/techdocs/src/alpha.tsx
+++ b/plugins/techdocs/src/alpha.tsx
@@ -170,6 +170,7 @@ const techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({
{
defaultPath: 'docs',
defaultTitle: 'TechDocs',
+ routeRef: convertLegacyRouteRef(rootCatalogDocsRouteRef),
loader: () =>
import('./Router').then(({ EmbeddedDocsRouter }) =>
compatWrapper(
diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md
index 684f2fa108..47fb183bd5 100644
--- a/plugins/user-settings-backend/CHANGELOG.md
+++ b/plugins/user-settings-backend/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-user-settings-backend
+## 0.2.30-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+ - @backstage/plugin-user-settings-common@0.0.1
+
## 0.2.29
### Patch Changes
diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json
index 25f3f6fb42..670353c729 100644
--- a/plugins/user-settings-backend/package.json
+++ b/plugins/user-settings-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-user-settings-backend",
- "version": "0.2.29",
+ "version": "0.2.30-next.0",
"description": "The Backstage backend plugin to manage user settings",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md
index 21966ef273..08ba9f428a 100644
--- a/plugins/user-settings/CHANGELOG.md
+++ b/plugins/user-settings/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-user-settings
+## 0.8.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-signals-react@0.0.9
+ - @backstage/plugin-user-settings-common@0.0.1
+
## 0.8.18
### Patch Changes
diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json
index d28da76fa0..a224d455a3 100644
--- a/plugins/user-settings/package.json
+++ b/plugins/user-settings/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-user-settings",
- "version": "0.8.18",
+ "version": "0.8.19-next.0",
"description": "A Backstage plugin that provides a settings page",
"backstage": {
"role": "frontend-plugin",
diff --git a/yarn.lock b/yarn.lock
index cf388516b3..e212f245b1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3723,7 +3723,25 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/backend-plugin-api@^1.0.0, @backstage/backend-plugin-api@workspace:^, @backstage/backend-plugin-api@workspace:packages/backend-plugin-api":
+"@backstage/backend-plugin-api@npm:^1.0.0, @backstage/backend-plugin-api@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "@backstage/backend-plugin-api@npm:1.1.1"
+ dependencies:
+ "@backstage/cli-common": ^0.1.15
+ "@backstage/config": ^1.3.2
+ "@backstage/errors": ^1.2.7
+ "@backstage/plugin-auth-node": ^0.5.6
+ "@backstage/plugin-permission-common": ^0.8.4
+ "@backstage/types": ^1.2.1
+ "@types/express": ^4.17.6
+ "@types/luxon": ^3.0.0
+ knex: ^3.0.0
+ luxon: ^3.0.0
+ checksum: f697e0bfe2741f04a8d08feb72efbc4d5fd23a53b94c1f6f44bfd759b04062c8d4d4d384421c8960967ac713d2af4af3f88e197afc9c13b81dfe7aa15bfcc89b
+ languageName: node
+ linkType: hard
+
+"@backstage/backend-plugin-api@workspace:^, @backstage/backend-plugin-api@workspace:packages/backend-plugin-api":
version: 0.0.0-use.local
resolution: "@backstage/backend-plugin-api@workspace:packages/backend-plugin-api"
dependencies:
@@ -3824,7 +3842,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client":
+"@backstage/catalog-client@^1.9.1, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client":
version: 0.0.0-use.local
resolution: "@backstage/catalog-client@workspace:packages/catalog-client"
dependencies:
@@ -3837,7 +3855,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/catalog-model@^1.4.3, @backstage/catalog-model@^1.7.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model":
+"@backstage/catalog-model@^1.4.3, @backstage/catalog-model@^1.7.0, @backstage/catalog-model@^1.7.3, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model":
version: 0.0.0-use.local
resolution: "@backstage/catalog-model@workspace:packages/catalog-model"
dependencies:
@@ -3852,7 +3870,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/cli-common@^0.1.14, @backstage/cli-common@workspace:^, @backstage/cli-common@workspace:packages/cli-common":
+"@backstage/cli-common@^0.1.14, @backstage/cli-common@^0.1.15, @backstage/cli-common@workspace:^, @backstage/cli-common@workspace:packages/cli-common":
version: 0.0.0-use.local
resolution: "@backstage/cli-common@workspace:packages/cli-common"
dependencies:
@@ -4066,7 +4084,30 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/config-loader@^1.9.1, @backstage/config-loader@workspace:^, @backstage/config-loader@workspace:packages/config-loader":
+"@backstage/config-loader@npm:^1.9.1":
+ version: 1.9.5
+ resolution: "@backstage/config-loader@npm:1.9.5"
+ dependencies:
+ "@backstage/cli-common": ^0.1.15
+ "@backstage/config": ^1.3.2
+ "@backstage/errors": ^1.2.7
+ "@backstage/types": ^1.2.1
+ "@types/json-schema": ^7.0.6
+ ajv: ^8.10.0
+ chokidar: ^3.5.2
+ fs-extra: ^11.2.0
+ json-schema: ^0.4.0
+ json-schema-merge-allof: ^0.8.1
+ json-schema-traverse: ^1.0.0
+ lodash: ^4.17.21
+ minimist: ^1.2.5
+ typescript-json-schema: ^0.65.0
+ yaml: ^2.0.0
+ checksum: a676f478c2e7e07ed6857833a271176da1d0af38a04b6a4f77b59a2e83e4f879d81d5a042b7592b6999e23871a31804d7bb46d87bcc5b330c2b80ea4a99a5961
+ languageName: node
+ linkType: hard
+
+"@backstage/config-loader@workspace:^, @backstage/config-loader@workspace:packages/config-loader":
version: 0.0.0-use.local
resolution: "@backstage/config-loader@workspace:packages/config-loader"
dependencies:
@@ -4093,7 +4134,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/config@^1.1.1, @backstage/config@^1.2.0, @backstage/config@workspace:^, @backstage/config@workspace:packages/config":
+"@backstage/config@^1.1.1, @backstage/config@^1.2.0, @backstage/config@^1.3.2, @backstage/config@workspace:^, @backstage/config@workspace:packages/config":
version: 0.0.0-use.local
resolution: "@backstage/config@workspace:packages/config"
dependencies:
@@ -4105,7 +4146,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/core-app-api@workspace:^, @backstage/core-app-api@workspace:packages/core-app-api":
+"@backstage/core-app-api@^1.15.4, @backstage/core-app-api@workspace:^, @backstage/core-app-api@workspace:packages/core-app-api":
version: 0.0.0-use.local
resolution: "@backstage/core-app-api@workspace:packages/core-app-api"
dependencies:
@@ -4149,6 +4190,26 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/core-compat-api@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "@backstage/core-compat-api@npm:0.3.5"
+ dependencies:
+ "@backstage/core-plugin-api": ^1.10.3
+ "@backstage/frontend-plugin-api": ^0.9.4
+ "@backstage/version-bridge": ^1.0.10
+ lodash: ^4.17.21
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 1460c00d8429b574e4570c2b745777775bfb8ceb1bf2e7aec590806246c40df3898449c31627e425200a1681df67098c54955e312162e123f713a5804ed747b7
+ languageName: node
+ linkType: hard
+
"@backstage/core-compat-api@workspace:^, @backstage/core-compat-api@workspace:packages/core-compat-api":
version: 0.0.0-use.local
resolution: "@backstage/core-compat-api@workspace:packages/core-compat-api"
@@ -4185,6 +4246,85 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/core-components@^0.16.3, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components":
+ version: 0.0.0-use.local
+ resolution: "@backstage/core-components@workspace:packages/core-components"
+ dependencies:
+ "@backstage/app-defaults": "workspace:^"
+ "@backstage/cli": "workspace:^"
+ "@backstage/config": "workspace:^"
+ "@backstage/core-app-api": "workspace:^"
+ "@backstage/core-plugin-api": "workspace:^"
+ "@backstage/errors": "workspace:^"
+ "@backstage/test-utils": "workspace:^"
+ "@backstage/theme": "workspace:^"
+ "@backstage/version-bridge": "workspace:^"
+ "@date-io/core": ^1.3.13
+ "@material-table/core": ^3.1.0
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": 4.0.0-alpha.61
+ "@react-hookz/web": ^24.0.0
+ "@testing-library/dom": ^10.0.0
+ "@testing-library/jest-dom": ^6.0.0
+ "@testing-library/react": ^16.0.0
+ "@testing-library/user-event": ^14.0.0
+ "@types/ansi-regex": ^5.0.0
+ "@types/classnames": ^2.2.9
+ "@types/d3-selection": ^3.0.1
+ "@types/d3-shape": ^3.0.1
+ "@types/d3-zoom": ^3.0.1
+ "@types/dagre": ^0.7.44
+ "@types/google-protobuf": ^3.7.2
+ "@types/react": ^18.0.0
+ "@types/react-helmet": ^6.1.0
+ "@types/react-sparklines": ^1.7.0
+ "@types/react-syntax-highlighter": ^15.0.0
+ "@types/react-virtualized-auto-sizer": ^1.0.1
+ "@types/react-window": ^1.8.5
+ "@types/zen-observable": ^0.8.0
+ ansi-regex: ^6.0.1
+ classnames: ^2.2.6
+ cross-fetch: ^4.0.0
+ d3-selection: ^3.0.0
+ d3-shape: ^3.0.0
+ d3-zoom: ^3.0.0
+ dagre: ^0.8.5
+ history: ^5.0.0
+ js-yaml: ^4.1.0
+ linkify-react: 4.1.3
+ linkifyjs: 4.1.3
+ lodash: ^4.17.21
+ msw: ^1.0.0
+ pluralize: ^8.0.0
+ qs: ^6.9.4
+ rc-progress: 3.5.1
+ react: ^18.0.2
+ react-dom: ^18.0.2
+ react-helmet: 6.1.0
+ react-hook-form: ^7.12.2
+ react-idle-timer: 5.7.2
+ react-markdown: ^8.0.0
+ react-router-dom: ^6.3.0
+ react-sparklines: ^1.7.0
+ react-syntax-highlighter: ^15.4.5
+ react-use: ^17.3.2
+ react-virtualized-auto-sizer: ^1.0.11
+ react-window: ^1.8.6
+ remark-gfm: ^3.0.1
+ zen-observable: ^0.10.0
+ zod: ^3.22.4
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ languageName: unknown
+ linkType: soft
+
"@backstage/core-components@npm:^0.13.10":
version: 0.13.10
resolution: "@backstage/core-components@npm:0.13.10"
@@ -4288,85 +4428,7 @@ __metadata:
languageName: node
linkType: hard
-"@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components":
- version: 0.0.0-use.local
- resolution: "@backstage/core-components@workspace:packages/core-components"
- dependencies:
- "@backstage/app-defaults": "workspace:^"
- "@backstage/cli": "workspace:^"
- "@backstage/config": "workspace:^"
- "@backstage/core-app-api": "workspace:^"
- "@backstage/core-plugin-api": "workspace:^"
- "@backstage/errors": "workspace:^"
- "@backstage/test-utils": "workspace:^"
- "@backstage/theme": "workspace:^"
- "@backstage/version-bridge": "workspace:^"
- "@date-io/core": ^1.3.13
- "@material-table/core": ^3.1.0
- "@material-ui/core": ^4.12.2
- "@material-ui/icons": ^4.9.1
- "@material-ui/lab": 4.0.0-alpha.61
- "@react-hookz/web": ^24.0.0
- "@testing-library/dom": ^10.0.0
- "@testing-library/jest-dom": ^6.0.0
- "@testing-library/react": ^16.0.0
- "@testing-library/user-event": ^14.0.0
- "@types/ansi-regex": ^5.0.0
- "@types/classnames": ^2.2.9
- "@types/d3-selection": ^3.0.1
- "@types/d3-shape": ^3.0.1
- "@types/d3-zoom": ^3.0.1
- "@types/dagre": ^0.7.44
- "@types/google-protobuf": ^3.7.2
- "@types/react": ^18.0.0
- "@types/react-helmet": ^6.1.0
- "@types/react-sparklines": ^1.7.0
- "@types/react-syntax-highlighter": ^15.0.0
- "@types/react-virtualized-auto-sizer": ^1.0.1
- "@types/react-window": ^1.8.5
- "@types/zen-observable": ^0.8.0
- ansi-regex: ^6.0.1
- classnames: ^2.2.6
- cross-fetch: ^4.0.0
- d3-selection: ^3.0.0
- d3-shape: ^3.0.0
- d3-zoom: ^3.0.0
- dagre: ^0.8.5
- history: ^5.0.0
- linkify-react: 4.1.3
- linkifyjs: 4.1.3
- lodash: ^4.17.21
- msw: ^1.0.0
- pluralize: ^8.0.0
- qs: ^6.9.4
- rc-progress: 3.5.1
- react: ^18.0.2
- react-dom: ^18.0.2
- react-helmet: 6.1.0
- react-hook-form: ^7.12.2
- react-idle-timer: 5.7.2
- react-markdown: ^8.0.0
- react-router-dom: ^6.3.0
- react-sparklines: ^1.7.0
- react-syntax-highlighter: ^15.4.5
- react-use: ^17.3.2
- react-virtualized-auto-sizer: ^1.0.11
- react-window: ^1.8.6
- remark-gfm: ^3.0.1
- zen-observable: ^0.10.0
- zod: ^3.22.4
- peerDependencies:
- "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
- react: ^16.13.1 || ^17.0.0 || ^18.0.0
- react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
- react-router-dom: 6.0.0-beta.0 || ^6.3.0
- peerDependenciesMeta:
- "@types/react":
- optional: true
- languageName: unknown
- linkType: soft
-
-"@backstage/core-plugin-api@^1.10.0, @backstage/core-plugin-api@^1.8.2, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api":
+"@backstage/core-plugin-api@^1.10.0, @backstage/core-plugin-api@^1.10.3, @backstage/core-plugin-api@^1.8.2, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api":
version: 0.0.0-use.local
resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api"
dependencies:
@@ -4477,7 +4539,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/errors@^1.2.3, @backstage/errors@^1.2.4, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors":
+"@backstage/errors@^1.2.3, @backstage/errors@^1.2.4, @backstage/errors@^1.2.7, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors":
version: 0.0.0-use.local
resolution: "@backstage/errors@workspace:packages/errors"
dependencies:
@@ -4499,6 +4561,32 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/frontend-app-api@npm:^0.10.4":
+ version: 0.10.4
+ resolution: "@backstage/frontend-app-api@npm:0.10.4"
+ dependencies:
+ "@backstage/config": ^1.3.2
+ "@backstage/core-app-api": ^1.15.4
+ "@backstage/core-plugin-api": ^1.10.3
+ "@backstage/errors": ^1.2.7
+ "@backstage/frontend-defaults": ^0.1.5
+ "@backstage/frontend-plugin-api": ^0.9.4
+ "@backstage/types": ^1.2.1
+ "@backstage/version-bridge": ^1.0.10
+ lodash: ^4.17.21
+ zod: ^3.22.4
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: cfc432d6c78fdfd93c72a79dab655cf69e33cd042809a5973afbf1e9fd2684864f2d4d00595646f2dca46044eeab4fbb537d61d4feda1f614b451c174ec7abfc
+ languageName: node
+ linkType: hard
+
"@backstage/frontend-app-api@workspace:^, @backstage/frontend-app-api@workspace:packages/frontend-app-api":
version: 0.0.0-use.local
resolution: "@backstage/frontend-app-api@workspace:packages/frontend-app-api"
@@ -4533,6 +4621,28 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/frontend-defaults@npm:^0.1.5":
+ version: 0.1.5
+ resolution: "@backstage/frontend-defaults@npm:0.1.5"
+ dependencies:
+ "@backstage/config": ^1.3.2
+ "@backstage/errors": ^1.2.7
+ "@backstage/frontend-app-api": ^0.10.4
+ "@backstage/frontend-plugin-api": ^0.9.4
+ "@backstage/plugin-app": ^0.1.5
+ "@react-hookz/web": ^24.0.0
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 877d995d2e0b629ec61700da5c145a072780c033fe62eade2a34172c9e6fadf5695d57ca49fa58d7e5e557205e2b7c70ca8b7c984c82f9a4e03e1f22e6fae9cd
+ languageName: node
+ linkType: hard
+
"@backstage/frontend-defaults@workspace:^, @backstage/frontend-defaults@workspace:packages/frontend-defaults":
version: 0.0.0-use.local
resolution: "@backstage/frontend-defaults@workspace:packages/frontend-defaults"
@@ -4563,6 +4673,30 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/frontend-plugin-api@npm:^0.9.4":
+ version: 0.9.4
+ resolution: "@backstage/frontend-plugin-api@npm:0.9.4"
+ dependencies:
+ "@backstage/core-components": ^0.16.3
+ "@backstage/core-plugin-api": ^1.10.3
+ "@backstage/types": ^1.2.1
+ "@backstage/version-bridge": ^1.0.10
+ "@material-ui/core": ^4.12.4
+ lodash: ^4.17.21
+ zod: ^3.22.4
+ zod-to-json-schema: ^3.21.4
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 5c8391d0fab237812bbbd9970749023a1f0faa528ce1f6337df6618197fa91f967239f17d5875a74fe6626c2dccf5f2aefb5957d0d514dcb0f51883a1cbbd53f
+ languageName: node
+ linkType: hard
+
"@backstage/frontend-plugin-api@workspace:^, @backstage/frontend-plugin-api@workspace:packages/frontend-plugin-api":
version: 0.0.0-use.local
resolution: "@backstage/frontend-plugin-api@workspace:packages/frontend-plugin-api"
@@ -4597,6 +4731,31 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/frontend-test-utils@npm:^0.2.5":
+ version: 0.2.5
+ resolution: "@backstage/frontend-test-utils@npm:0.2.5"
+ dependencies:
+ "@backstage/config": ^1.3.2
+ "@backstage/frontend-app-api": ^0.10.4
+ "@backstage/frontend-plugin-api": ^0.9.4
+ "@backstage/plugin-app": ^0.1.5
+ "@backstage/test-utils": ^1.7.4
+ "@backstage/types": ^1.2.1
+ "@backstage/version-bridge": ^1.0.10
+ zod: ^3.22.4
+ peerDependencies:
+ "@testing-library/react": ^16.0.0
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 411c88a6a2b96ef15131f3c18fb2bc8153c75736be9888134c6324f29df6354181c4a1ce2efdc721e7b288e0cd2a94e01408d1499ecee357041637df0ebdc793
+ languageName: node
+ linkType: hard
+
"@backstage/frontend-test-utils@workspace:^, @backstage/frontend-test-utils@workspace:packages/frontend-test-utils":
version: 0.0.0-use.local
resolution: "@backstage/frontend-test-utils@workspace:packages/frontend-test-utils"
@@ -4646,7 +4805,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/integration-react@^1.1.24, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react":
+"@backstage/integration-react@^1.1.24, @backstage/integration-react@^1.2.3, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react":
version: 0.0.0-use.local
resolution: "@backstage/integration-react@workspace:packages/integration-react"
dependencies:
@@ -4838,6 +4997,32 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/plugin-app@npm:^0.1.5":
+ version: 0.1.5
+ resolution: "@backstage/plugin-app@npm:0.1.5"
+ dependencies:
+ "@backstage/core-components": ^0.16.3
+ "@backstage/core-plugin-api": ^1.10.3
+ "@backstage/frontend-plugin-api": ^0.9.4
+ "@backstage/integration-react": ^1.2.3
+ "@backstage/plugin-permission-react": ^0.4.30
+ "@backstage/theme": ^0.6.3
+ "@material-ui/core": ^4.9.13
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": ^4.0.0-alpha.61
+ react-use: ^17.2.4
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: d41d437959b6ae2d88e52855dc8e3f5069273e39e9fe63c49955ed3fce57e29b5c6d66b82d4a11d084f5c1774f792675abb3991d56f75b103e358429cd705b48
+ languageName: node
+ linkType: hard
+
"@backstage/plugin-app@workspace:^, @backstage/plugin-app@workspace:plugins/app":
version: 0.0.0-use.local
resolution: "@backstage/plugin-app@workspace:plugins/app"
@@ -5309,7 +5494,32 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-auth-node@^0.5.2, @backstage/plugin-auth-node@workspace:^, @backstage/plugin-auth-node@workspace:plugins/auth-node":
+"@backstage/plugin-auth-node@npm:^0.5.2, @backstage/plugin-auth-node@npm:^0.5.6":
+ version: 0.5.6
+ resolution: "@backstage/plugin-auth-node@npm:0.5.6"
+ dependencies:
+ "@backstage/backend-common": ^0.25.0
+ "@backstage/backend-plugin-api": ^1.1.1
+ "@backstage/catalog-client": ^1.9.1
+ "@backstage/catalog-model": ^1.7.3
+ "@backstage/config": ^1.3.2
+ "@backstage/errors": ^1.2.7
+ "@backstage/types": ^1.2.1
+ "@types/express": ^4.17.6
+ "@types/passport": ^1.0.3
+ express: ^4.17.1
+ jose: ^5.0.0
+ lodash: ^4.17.21
+ passport: ^0.7.0
+ winston: ^3.2.1
+ zod: ^3.22.4
+ zod-to-json-schema: ^3.21.4
+ zod-validation-error: ^3.4.0
+ checksum: 575f2fecf2bf5b6885ac195d37e123bcb243f617dd115bbfcbc5b9195cdea1a9a7c17d8f79a389d601c04022fade7a2465c8dcdba7626049c5aa9dfb3a65fc10
+ languageName: node
+ linkType: hard
+
+"@backstage/plugin-auth-node@workspace:^, @backstage/plugin-auth-node@workspace:plugins/auth-node":
version: 0.0.0-use.local
resolution: "@backstage/plugin-auth-node@workspace:plugins/auth-node"
dependencies:
@@ -5825,7 +6035,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-catalog-common@^1.0.20, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common":
+"@backstage/plugin-catalog-common@^1.0.20, @backstage/plugin-catalog-common@^1.1.3, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common"
dependencies:
@@ -5949,7 +6159,48 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-catalog-react@^1.14.0, @backstage/plugin-catalog-react@^1.9.3, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react":
+"@backstage/plugin-catalog-react@npm:^1.14.0, @backstage/plugin-catalog-react@npm:^1.9.3":
+ version: 1.15.1
+ resolution: "@backstage/plugin-catalog-react@npm:1.15.1"
+ dependencies:
+ "@backstage/catalog-client": ^1.9.1
+ "@backstage/catalog-model": ^1.7.3
+ "@backstage/core-compat-api": ^0.3.5
+ "@backstage/core-components": ^0.16.3
+ "@backstage/core-plugin-api": ^1.10.3
+ "@backstage/errors": ^1.2.7
+ "@backstage/frontend-plugin-api": ^0.9.4
+ "@backstage/frontend-test-utils": ^0.2.5
+ "@backstage/integration-react": ^1.2.3
+ "@backstage/plugin-catalog-common": ^1.1.3
+ "@backstage/plugin-permission-common": ^0.8.4
+ "@backstage/plugin-permission-react": ^0.4.30
+ "@backstage/types": ^1.2.1
+ "@backstage/version-bridge": ^1.0.10
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": 4.0.0-alpha.61
+ "@react-hookz/web": ^24.0.0
+ classnames: ^2.2.6
+ lodash: ^4.17.21
+ material-ui-popup-state: ^1.9.3
+ qs: ^6.9.4
+ react-use: ^17.2.4
+ yaml: ^2.0.0
+ zen-observable: ^0.10.0
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ react: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 109ec48f65194dc831ee1e2b0b5c34c8c26bc262e4c121fe5bb02a9fc37a396e0ff5f5d34a342c2e8dc5b980fc2455fab88f4996acfa0febdf6d8b7304bf1fb9
+ languageName: node
+ linkType: hard
+
+"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react"
dependencies:
@@ -6901,7 +7152,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common":
+"@backstage/plugin-permission-common@^0.8.4, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common":
version: 0.0.0-use.local
resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common"
dependencies:
@@ -6941,7 +7192,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react":
+"@backstage/plugin-permission-react@^0.4.30, @backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react":
version: 0.0.0-use.local
resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react"
dependencies:
@@ -8351,7 +8602,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/test-utils@workspace:^, @backstage/test-utils@workspace:packages/test-utils":
+"@backstage/test-utils@^1.7.4, @backstage/test-utils@workspace:^, @backstage/test-utils@workspace:packages/test-utils":
version: 0.0.0-use.local
resolution: "@backstage/test-utils@workspace:packages/test-utils"
dependencies:
@@ -8390,7 +8641,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/theme@^0.6.0, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme":
+"@backstage/theme@^0.6.0, @backstage/theme@^0.6.3, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme":
version: 0.0.0-use.local
resolution: "@backstage/theme@workspace:packages/theme"
dependencies:
@@ -8433,7 +8684,7 @@ __metadata:
languageName: node
linkType: hard
-"@backstage/types@^1.1.1, @backstage/types@workspace:^, @backstage/types@workspace:packages/types":
+"@backstage/types@^1.1.1, @backstage/types@^1.2.1, @backstage/types@workspace:^, @backstage/types@workspace:packages/types":
version: 0.0.0-use.local
resolution: "@backstage/types@workspace:packages/types"
dependencies:
@@ -19063,13 +19314,13 @@ __metadata:
linkType: hard
"@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.29":
- version: 3.3.33
- resolution: "@types/dockerode@npm:3.3.33"
+ version: 3.3.34
+ resolution: "@types/dockerode@npm:3.3.34"
dependencies:
"@types/docker-modem": "*"
"@types/node": "*"
"@types/ssh2": "*"
- checksum: 4e3ed41f3b89a213c9ba923862b653f54ee7232b2c95553410d0c3846396efb592d0291fa2f50d4b47d42a2ae0b49f422e72efcdd845d0ebb60da2e8990e9293
+ checksum: 0cb35276fc76ee8ae9d6db7054198e23370f753894d06aa56efbf232032009c6f63a3bfce9d71e6272f3240040d9da2d2a56671d24f34e598ff2000df946ecbd
languageName: node
linkType: hard
@@ -20484,11 +20735,11 @@ __metadata:
linkType: hard
"@types/ws@npm:*, @types/ws@npm:^8.0.0, @types/ws@npm:^8.5.10, @types/ws@npm:^8.5.3, @types/ws@npm:^8.5.4":
- version: 8.5.13
- resolution: "@types/ws@npm:8.5.13"
+ version: 8.5.14
+ resolution: "@types/ws@npm:8.5.14"
dependencies:
"@types/node": "*"
- checksum: f17023ce7b89c6124249c90211803a4aaa02886e12bc2d0d2cd47fa665eeb058db4d871ce4397d8e423f6beea97dd56835dd3fdbb921030fe4d887601e37d609
+ checksum: b63d25146a0d2ebb9cb35e4b68c5a01d81b8f4657d62b0a0d9470df6a357798349a44064b2f84b8f98a553ba84d9a5ee302d3053feef02c7771010c55d290ca6
languageName: node
linkType: hard
@@ -24244,7 +24495,7 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:^5.4.1, chalk@npm:~5.4.1":
+"chalk@npm:^5.4.1":
version: 5.4.1
resolution: "chalk@npm:5.4.1"
checksum: 0c656f30b782fed4d99198825c0860158901f449a6b12b818b0aabad27ec970389e7e8767d0e00762175b23620c812e70c4fd92c0210e55fc2d993638b74e86e
@@ -24916,10 +25167,10 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:*, commander@npm:^12.0.0, commander@npm:^12.1.0, commander@npm:~12.1.0":
- version: 12.1.0
- resolution: "commander@npm:12.1.0"
- checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514
+"commander@npm:*, commander@npm:^13.1.0":
+ version: 13.1.0
+ resolution: "commander@npm:13.1.0"
+ checksum: 8ca2fcb33caf2aa06fba3722d7a9440921331d54019dabf906f3603313e7bf334b009b862257b44083ff65d5a3ab19e83ad73af282bd5319f01dc228bdf87ef0
languageName: node
linkType: hard
@@ -24958,6 +25209,13 @@ __metadata:
languageName: node
linkType: hard
+"commander@npm:^12.0.0, commander@npm:^12.1.0":
+ version: 12.1.0
+ resolution: "commander@npm:12.1.0"
+ checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514
+ languageName: node
+ linkType: hard
+
"commander@npm:^2.19.0, commander@npm:^2.20.0":
version: 2.20.3
resolution: "commander@npm:2.20.3"
@@ -26208,7 +26466,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.4.0":
+"debug@npm:4, debug@npm:^4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.4.0":
version: 4.4.0
resolution: "debug@npm:4.4.0"
dependencies:
@@ -28585,7 +28843,7 @@ __metadata:
languageName: node
linkType: hard
-"execa@npm:~8.0.1":
+"execa@npm:^8.0.1":
version: 8.0.1
resolution: "execa@npm:8.0.1"
dependencies:
@@ -34462,7 +34720,7 @@ __metadata:
languageName: node
linkType: hard
-"lilconfig@npm:~3.1.3":
+"lilconfig@npm:^3.1.3":
version: 3.1.3
resolution: "lilconfig@npm:3.1.3"
checksum: 644eb10830350f9cdc88610f71a921f510574ed02424b57b0b3abb66ea725d7a082559552524a842f4e0272c196b88dfe1ff7d35ffcc6f45736777185cd67c9a
@@ -34512,22 +34770,22 @@ __metadata:
linkType: hard
"lint-staged@npm:^15.0.0":
- version: 15.4.1
- resolution: "lint-staged@npm:15.4.1"
+ version: 15.4.2
+ resolution: "lint-staged@npm:15.4.2"
dependencies:
- chalk: ~5.4.1
- commander: ~12.1.0
- debug: ~4.4.0
- execa: ~8.0.1
- lilconfig: ~3.1.3
- listr2: ~8.2.5
- micromatch: ~4.0.8
- pidtree: ~0.6.0
- string-argv: ~0.3.2
- yaml: ~2.6.1
+ chalk: ^5.4.1
+ commander: ^13.1.0
+ debug: ^4.4.0
+ execa: ^8.0.1
+ lilconfig: ^3.1.3
+ listr2: ^8.2.5
+ micromatch: ^4.0.8
+ pidtree: ^0.6.0
+ string-argv: ^0.3.2
+ yaml: ^2.7.0
bin:
lint-staged: bin/lint-staged.js
- checksum: 6c17747e9379a08ad3d15aab869a362c750d357182c76ca88121f01143910a2a2d5b1673536f3ba9db2331bf2102ffee115532736dd9c3fa2696344732a47d3d
+ checksum: bdb031d64f388aea166b3beaaff8a0a1503e50433959805985b43fcd788c9bfaf1e3a6c0852d830a6c75345b9c0809c5e6dab80d48460e3d6317b7ca0f842df8
languageName: node
linkType: hard
@@ -34538,7 +34796,7 @@ __metadata:
languageName: node
linkType: hard
-"listr2@npm:~8.2.5":
+"listr2@npm:^8.2.5":
version: 8.2.5
resolution: "listr2@npm:8.2.5"
dependencies:
@@ -36015,7 +36273,7 @@ __metadata:
languageName: node
linkType: hard
-"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.7, micromatch@npm:^4.0.8, micromatch@npm:~4.0.8":
+"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.7, micromatch@npm:^4.0.8":
version: 4.0.8
resolution: "micromatch@npm:4.0.8"
dependencies:
@@ -38961,7 +39219,7 @@ __metadata:
languageName: node
linkType: hard
-"pidtree@npm:~0.6.0":
+"pidtree@npm:^0.6.0":
version: 0.6.0
resolution: "pidtree@npm:0.6.0"
bin:
@@ -43708,7 +43966,7 @@ __metadata:
languageName: node
linkType: hard
-"string-argv@npm:~0.3.1, string-argv@npm:~0.3.2":
+"string-argv@npm:^0.3.2, string-argv@npm:~0.3.1":
version: 0.3.2
resolution: "string-argv@npm:0.3.2"
checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f
@@ -47406,12 +47664,12 @@ __metadata:
languageName: node
linkType: hard
-"yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2, yaml@npm:^2.3.3, yaml@npm:^2.3.4, yaml@npm:~2.6.1":
- version: 2.6.1
- resolution: "yaml@npm:2.6.1"
+"yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2, yaml@npm:^2.3.3, yaml@npm:^2.3.4, yaml@npm:^2.7.0":
+ version: 2.7.0
+ resolution: "yaml@npm:2.7.0"
bin:
yaml: bin.mjs
- checksum: 5cf2627f121dcf04ccdebce8e6cbac7c9983d465c4eab314f6fbdc13cda8a07f4e8f9c2252a382b30bcabe05ee3c683647293afd52eb37cbcefbdc7b6ebde9ee
+ checksum: 6e8b2f9b9d1b18b10274d58eb3a47ec223d9a93245a890dcb34d62865f7e744747190a9b9177d5f0ef4ea2e44ad2c0214993deb42e0800766203ac46f00a12dd
languageName: node
linkType: hard