diff --git a/.changeset/chilly-meals-sniff.md b/.changeset/chilly-meals-sniff.md
new file mode 100644
index 0000000000..6776f93154
--- /dev/null
+++ b/.changeset/chilly-meals-sniff.md
@@ -0,0 +1,5 @@
+---
+'@backstage/frontend-test-utils': patch
+---
+
+Disable the built-in `SignInPage` in `createExtensionTester` in order to not mess with existing tests
diff --git a/.changeset/pretty-pans-exist.md b/.changeset/pretty-pans-exist.md
new file mode 100644
index 0000000000..e9ccdda0e0
--- /dev/null
+++ b/.changeset/pretty-pans-exist.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-app': patch
+---
+
+Added missing default `SignInPageExtension` which by default uses guest auth, missing `ApiExtensions` for `scmAuth`
diff --git a/packages/app-next/src/App.tsx b/packages/app-next/src/App.tsx
index 79adc13daf..1992d5b35f 100644
--- a/packages/app-next/src/App.tsx
+++ b/packages/app-next/src/App.tsx
@@ -26,7 +26,6 @@ import homePlugin, {
import {
coreExtensionData,
createExtension,
- ApiBlueprint,
createFrontendModule,
} from '@backstage/frontend-plugin-api';
import {
@@ -41,14 +40,7 @@ import { convertLegacyApp } from '@backstage/core-compat-api';
import { FlatRoutes } from '@backstage/core-app-api';
import { Route } from 'react-router';
import { CatalogImportPage } from '@backstage/plugin-catalog-import';
-import { createApiFactory, configApiRef } from '@backstage/core-plugin-api';
-import {
- ScmAuth,
- ScmIntegrationsApi,
- scmIntegrationsApiRef,
-} from '@backstage/integration-react';
import kubernetesPlugin from '@backstage/plugin-kubernetes/alpha';
-import { signInPageModule } from './overrides/SignInPage';
import { convertLegacyPlugin } from '@backstage/core-compat-api';
import { convertLegacyPageExtension } from '@backstage/core-compat-api';
import { convertLegacyEntityContentExtension } from '@backstage/plugin-catalog-react/alpha';
@@ -118,28 +110,6 @@ const customHomePageModule = createFrontendModule({
],
});
-const scmModule = createFrontendModule({
- pluginId: 'app',
- extensions: [
- ApiBlueprint.make({
- name: 'scm-auth',
- params: {
- factory: ScmAuth.createDefaultApiFactory(),
- },
- }),
- ApiBlueprint.make({
- name: 'scm-integrations',
- params: {
- factory: createApiFactory({
- api: scmIntegrationsApiRef,
- deps: { configApi: configApiRef },
- factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
- }),
- },
- }),
- ],
-});
-
const notFoundErrorPageModule = createFrontendModule({
pluginId: 'app',
extensions: [notFoundErrorPage],
@@ -159,8 +129,6 @@ const app = createApp({
homePlugin,
appVisualizerPlugin,
kubernetesPlugin,
- signInPageModule,
- scmModule,
notFoundErrorPageModule,
customHomePageModule,
...collectedLegacyPlugins,
diff --git a/packages/app-next/src/index-public-experimental.tsx b/packages/app-next/src/index-public-experimental.tsx
index f258a660e3..16535dae98 100644
--- a/packages/app-next/src/index-public-experimental.tsx
+++ b/packages/app-next/src/index-public-experimental.tsx
@@ -15,11 +15,8 @@
*/
import ReactDOM from 'react-dom/client';
-import { signInPageModule } from './overrides/SignInPage';
import { createPublicSignInApp } from '@backstage/frontend-defaults';
-const app = createPublicSignInApp({
- features: [signInPageModule],
-});
+const app = createPublicSignInApp();
ReactDOM.createRoot(document.getElementById('root')!).render(app.createRoot());
diff --git a/packages/frontend-defaults/src/createApp.test.tsx b/packages/frontend-defaults/src/createApp.test.tsx
index 06872a5691..899d5d1640 100644
--- a/packages/frontend-defaults/src/createApp.test.tsx
+++ b/packages/frontend-defaults/src/createApp.test.tsx
@@ -29,9 +29,17 @@ import { CreateAppFeatureLoader, createApp } from './createApp';
import { mockApis, renderWithEffects } from '@backstage/test-utils';
import React from 'react';
import { featureFlagsApiRef, useApi } from '@backstage/core-plugin-api';
-import appPlugin from '@backstage/plugin-app';
+import { default as appPluginOriginal } from '@backstage/plugin-app';
describe('createApp', () => {
+ const appPlugin = appPluginOriginal.withOverrides({
+ extensions: [
+ appPluginOriginal
+ .getExtension('sign-in-page:app')
+ .override({ disabled: true }),
+ ],
+ });
+
it('should allow themes to be installed', async () => {
const app = createApp({
configLoader: async () => ({
@@ -98,6 +106,7 @@ describe('createApp', () => {
}),
],
}),
+ appPlugin,
],
});
@@ -231,6 +240,7 @@ describe('createApp', () => {
const app = createApp({
configLoader: async () => ({ config: mockApis.config() }),
features: [
+ appPlugin,
createFrontendPlugin({
id: 'my-plugin',
extensions: [
@@ -277,6 +287,8 @@ describe('createApp', () => {
+
+
themes [
@@ -317,6 +329,9 @@ describe('createApp', () => {
]
+ signInPage [
+
+ ]
]
diff --git a/packages/frontend-test-utils/src/app/renderInTestApp.tsx b/packages/frontend-test-utils/src/app/renderInTestApp.tsx
index e53566a118..7f03921077 100644
--- a/packages/frontend-test-utils/src/app/renderInTestApp.tsx
+++ b/packages/frontend-test-utils/src/app/renderInTestApp.tsx
@@ -96,6 +96,9 @@ const NavItem = (props: {
const appPluginOverride = appPlugin.withOverrides({
extensions: [
+ appPlugin.getExtension('sign-in-page:app').override({
+ disabled: true,
+ }),
appPlugin.getExtension('app/nav').override({
output: [coreExtensionData.reactElement],
factory(_originalFactory, { inputs }) {
diff --git a/plugins/app/package.json b/plugins/app/package.json
index d45f08b5df..a14e1eab43 100644
--- a/plugins/app/package.json
+++ b/plugins/app/package.json
@@ -40,6 +40,7 @@
"@backstage/core-components": "workspace:^",
"@backstage/core-plugin-api": "workspace:^",
"@backstage/frontend-plugin-api": "workspace:^",
+ "@backstage/integration-react": "workspace:^",
"@backstage/plugin-permission-react": "workspace:^",
"@backstage/theme": "workspace:^",
"@material-ui/core": "^4.9.13",
diff --git a/plugins/app/report.api.md b/plugins/app/report.api.md
index 1ff398a346..208f9dcfb0 100644
--- a/plugins/app/report.api.md
+++ b/plugins/app/report.api.md
@@ -383,6 +383,21 @@ const appPlugin: FrontendPlugin<
factory: AnyApiFactory;
};
}>;
+ 'sign-in-page:app': ExtensionDefinition<{
+ kind: 'sign-in-page';
+ name: undefined;
+ config: {};
+ configInput: {};
+ output: ConfigurableExtensionDataRef<
+ ComponentType,
+ 'core.sign-in-page.component',
+ {}
+ >;
+ inputs: {};
+ params: {
+ loader: () => Promise>;
+ };
+ }>;
'app-root-element:app/oauth-request-dialog': ExtensionDefinition<{
kind: 'app-root-element';
name: 'oauth-request-dialog';
@@ -705,6 +720,36 @@ const appPlugin: FrontendPlugin<
factory: AnyApiFactory;
};
}>;
+ 'api:app/scm-auth': ExtensionDefinition<{
+ kind: 'api';
+ name: 'scm-auth';
+ config: {};
+ configInput: {};
+ output: ConfigurableExtensionDataRef<
+ AnyApiFactory,
+ 'core.api.factory',
+ {}
+ >;
+ inputs: {};
+ params: {
+ factory: AnyApiFactory;
+ };
+ }>;
+ 'api:app/scm-integrations': ExtensionDefinition<{
+ kind: 'api';
+ name: 'scm-integrations';
+ config: {};
+ configInput: {};
+ output: ConfigurableExtensionDataRef<
+ AnyApiFactory,
+ 'core.api.factory',
+ {}
+ >;
+ inputs: {};
+ params: {
+ factory: AnyApiFactory;
+ };
+ }>;
}
>;
export default appPlugin;
diff --git a/plugins/app/src/defaultApis.ts b/plugins/app/src/defaultApis.ts
index 85c89a6278..b4f6fa0b48 100644
--- a/plugins/app/src/defaultApis.ts
+++ b/plugins/app/src/defaultApis.ts
@@ -61,6 +61,11 @@ import {
vmwareCloudAuthApiRef,
} from '@backstage/core-plugin-api';
import { ApiBlueprint } from '@backstage/frontend-plugin-api';
+import {
+ ScmAuth,
+ ScmIntegrationsApi,
+ scmIntegrationsApiRef,
+} from '@backstage/integration-react';
import {
permissionApiRef,
IdentityPermissionApi,
@@ -380,4 +385,20 @@ export const apis = [
}),
},
}),
+ ApiBlueprint.make({
+ name: 'scm-auth',
+ params: {
+ factory: ScmAuth.createDefaultApiFactory(),
+ },
+ }),
+ ApiBlueprint.make({
+ name: 'scm-integrations',
+ params: {
+ factory: createApiFactory({
+ api: scmIntegrationsApiRef,
+ deps: { configApi: configApiRef },
+ factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
+ }),
+ },
+ }),
] as const;
diff --git a/packages/app-next/src/overrides/SignInPage.tsx b/plugins/app/src/extensions/DefaultSignInPage.tsx
similarity index 74%
rename from packages/app-next/src/overrides/SignInPage.tsx
rename to plugins/app/src/extensions/DefaultSignInPage.tsx
index f1e37a241b..29b384c7a2 100644
--- a/packages/app-next/src/overrides/SignInPage.tsx
+++ b/plugins/app/src/extensions/DefaultSignInPage.tsx
@@ -13,23 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
import React from 'react';
+import { SignInPageBlueprint } from '@backstage/frontend-plugin-api';
import { SignInPage } from '@backstage/core-components';
-import {
- SignInPageBlueprint,
- createFrontendModule,
-} from '@backstage/frontend-plugin-api';
-const signInPage = SignInPageBlueprint.make({
- name: 'guest',
+export const DefaultSignInPage = SignInPageBlueprint.make({
params: {
loader: async () => props =>
,
},
});
-
-export const signInPageModule = createFrontendModule({
- pluginId: 'app',
- extensions: [signInPage],
-});
diff --git a/plugins/app/src/extensions/index.ts b/plugins/app/src/extensions/index.ts
index 157f7ddb62..22b020a441 100644
--- a/plugins/app/src/extensions/index.ts
+++ b/plugins/app/src/extensions/index.ts
@@ -24,6 +24,7 @@ export { ComponentsApi } from './ComponentsApi';
export { IconsApi } from './IconsApi';
export { FeatureFlagsApi } from './FeatureFlagsApi';
export { TranslationsApi } from './TranslationsApi';
+export { DefaultSignInPage } from './DefaultSignInPage';
export {
DefaultProgressComponent,
DefaultErrorBoundaryComponent,
diff --git a/plugins/app/src/plugin.ts b/plugins/app/src/plugin.ts
index ff0c69faec..18c412bf77 100644
--- a/plugins/app/src/plugin.ts
+++ b/plugins/app/src/plugin.ts
@@ -34,6 +34,7 @@ import {
DefaultErrorBoundaryComponent,
oauthRequestDialogAppRootElement,
alertDisplayAppRootElement,
+ DefaultSignInPage,
} from './extensions';
import { apis } from './defaultApis';
@@ -58,6 +59,7 @@ export const appPlugin = createFrontendPlugin({
DefaultProgressComponent,
DefaultNotFoundErrorPageComponent,
DefaultErrorBoundaryComponent,
+ DefaultSignInPage,
oauthRequestDialogAppRootElement,
alertDisplayAppRootElement,
],
diff --git a/yarn.lock b/yarn.lock
index f8618cba94..f50c38ad17 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4978,6 +4978,7 @@ __metadata:
"@backstage/dev-utils": "workspace:^"
"@backstage/frontend-plugin-api": "workspace:^"
"@backstage/frontend-test-utils": "workspace:^"
+ "@backstage/integration-react": "workspace:^"
"@backstage/plugin-permission-react": "workspace:^"
"@backstage/theme": "workspace:^"
"@material-ui/core": ^4.9.13