diff --git a/.changeset/kind-paws-visit.md b/.changeset/kind-paws-visit.md
new file mode 100644
index 0000000000..d0b615127f
--- /dev/null
+++ b/.changeset/kind-paws-visit.md
@@ -0,0 +1,12 @@
+---
+'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch
+'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
+'@backstage/plugin-scaffolder-backend-module-github': patch
+'@backstage/plugin-scaffolder-backend-module-rails': patch
+'@backstage/plugin-scaffolder-node-test-utils': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-scaffolder-common': patch
+'@backstage/plugin-scaffolder-node': patch
+---
+
+Got rid of most `@backstage/backend-common` usages
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
index 95c592197a..73551ce8f3 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
@@ -45,7 +45,6 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@backstage/backend-common": "^0.25.0",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts
index 5cf8969b55..3a4c43c4ab 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts
@@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
import { createConfluenceToMarkdownAction } from './confluenceToMarkdown';
-import { loggerToWinstonLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import {
createMockDirectory,
- mockServices,
registerMswTestHooks,
} from '@backstage/backend-test-utils';
import { rest } from 'msw';
@@ -58,9 +57,6 @@ describe('confluence:transform:markdown examples', () => {
repoUrl: string;
}>;
- const logger = loggerToWinstonLogger(mockServices.logger.mock());
- jest.spyOn(logger, 'info');
-
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
@@ -75,8 +71,8 @@ describe('confluence:transform:markdown examples', () => {
mockContext = createMockActionContext({
input: yaml.parse(examples[0].example).steps[0].input,
workspacePath,
- logger,
});
+ jest.spyOn(mockContext.logger, 'info');
mockDir.setContent({ 'workspace/mkdocs.yml': 'File contents' });
});
@@ -139,10 +135,10 @@ describe('confluence:transform:markdown examples', () => {
await action.handler(mockContext);
- expect(logger.info).toHaveBeenCalledWith(
+ expect(mockContext.logger.info).toHaveBeenCalledWith(
`Fetching the mkdocs.yml catalog from https://github.com/organization-name/repo-name/blob/main/mkdocs.yml`,
);
- expect(logger.info).toHaveBeenCalledTimes(5);
+ expect(mockContext.logger.info).toHaveBeenCalledTimes(5);
expect(mockDir.content({ path: 'workspace/docs' })).toEqual({
img: { 'testing.pdf': Buffer.from('hello') },
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts
index a54e5dcc63..b8dd017349 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts
@@ -15,12 +15,10 @@
*/
import { createConfluenceToMarkdownAction } from './confluenceToMarkdown';
-import { loggerToWinstonLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import {
createMockDirectory,
- mockServices,
registerMswTestHooks,
} from '@backstage/backend-test-utils';
import type { ActionContext } from '@backstage/plugin-scaffolder-node';
@@ -57,9 +55,6 @@ describe('confluence:transform:markdown', () => {
repoUrl: string;
}>;
- const logger = loggerToWinstonLogger(mockServices.logger.mock());
- jest.spyOn(logger, 'info');
-
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
@@ -80,8 +75,8 @@ describe('confluence:transform:markdown', () => {
'https://notreal.github.com/space/backstage/blob/main/mkdocs.yml',
},
workspacePath,
- logger,
});
+ jest.spyOn(mockContext.logger, 'info');
mockDir.setContent({ 'workspace/mkdocs.yml': 'File contents' });
});
@@ -144,10 +139,10 @@ describe('confluence:transform:markdown', () => {
await action.handler(mockContext);
- expect(logger.info).toHaveBeenCalledWith(
+ expect(mockContext.logger.info).toHaveBeenCalledWith(
`Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/blob/main/mkdocs.yml`,
);
- expect(logger.info).toHaveBeenCalledTimes(5);
+ expect(mockContext.logger.info).toHaveBeenCalledTimes(5);
expect(mockDir.content({ path: 'workspace/docs' })).toEqual({
img: { 'testing.pdf': Buffer.from('hello') },
@@ -193,10 +188,10 @@ describe('confluence:transform:markdown', () => {
await action.handler(mockContext);
- expect(logger.info).toHaveBeenCalledWith(
+ expect(mockContext.logger.info).toHaveBeenCalledWith(
`Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/blob/main/mkdocs.yml`,
);
- expect(logger.info).toHaveBeenCalledTimes(5);
+ expect(mockContext.logger.info).toHaveBeenCalledTimes(5);
expect(mockDir.content({ path: 'workspace/docs' })).toEqual({
'mkdocs.md': 'hello world',
diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json
index cafc58d90a..fd02ea0100 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/package.json
+++ b/plugins/scaffolder-backend-module-cookiecutter/package.json
@@ -43,7 +43,6 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@backstage/backend-common": "^0.25.0",
"@backstage/backend-defaults": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/config": "workspace:^",
diff --git a/plugins/scaffolder-backend-module-cookiecutter/report.api.md b/plugins/scaffolder-backend-module-cookiecutter/report.api.md
index 19f43389dc..8321ac505c 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/report.api.md
+++ b/plugins/scaffolder-backend-module-cookiecutter/report.api.md
@@ -6,11 +6,37 @@
///
import { BackendFeature } from '@backstage/backend-plugin-api';
-import { ContainerRunner } from '@backstage/backend-common';
import { JsonObject } from '@backstage/types';
import { ScmIntegrations } from '@backstage/integration';
import { TemplateAction } from '@backstage/plugin-scaffolder-node';
import { UrlReaderService } from '@backstage/backend-plugin-api';
+import { Writable } from 'stream';
+
+// @public
+export interface ContainerRunner {
+ runContainer(opts: {
+ imageName: string;
+ command?: string | string[];
+ args: string[];
+ logStream?: Writable;
+ mountDirs?: Record;
+ workingDir?: string;
+ envVars?: Record;
+ pullImage?: boolean;
+ defaultUser?: boolean;
+ pullOptions?: {
+ authconfig?: {
+ username?: string;
+ password?: string;
+ auth?: string;
+ email?: string;
+ serveraddress?: string;
+ [key: string]: unknown;
+ };
+ [key: string]: unknown;
+ };
+ }): Promise;
+}
// @public
const cookiecutterModule: BackendFeature;
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/ContainerRunner.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/ContainerRunner.ts
new file mode 100644
index 0000000000..a0b639148f
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/ContainerRunner.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 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 { Writable } from 'stream';
+
+/**
+ * Handles the running of containers.
+ *
+ * @public
+ */
+export interface ContainerRunner {
+ /**
+ * Runs a container image to completion.
+ */
+ runContainer(opts: {
+ imageName: string;
+ command?: string | string[];
+ args: string[];
+ logStream?: Writable;
+ mountDirs?: Record;
+ workingDir?: string;
+ envVars?: Record;
+ pullImage?: boolean;
+ defaultUser?: boolean;
+ pullOptions?: {
+ authconfig?: {
+ username?: string;
+ password?: string;
+ auth?: string;
+ email?: string;
+ serveraddress?: string;
+ [key: string]: unknown;
+ };
+ [key: string]: unknown;
+ };
+ }): Promise;
+}
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.examples.test.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.examples.test.ts
index 73c17d8ac0..37615ea95b 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.examples.test.ts
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.examples.test.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { ContainerRunner } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { JsonObject } from '@backstage/types';
import { ScmIntegrations } from '@backstage/integration';
@@ -26,6 +25,7 @@ import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-
import { examples } from './cookiecutter.examples';
import yaml from 'yaml';
import { UrlReaderService } from '@backstage/backend-plugin-api';
+import { ContainerRunner } from './ContainerRunner';
const executeShellCommand = jest.fn();
const commandExists = jest.fn();
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts
index 52946ce7fd..8428536bb5 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { ContainerRunner } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { JsonObject } from '@backstage/types';
import { ScmIntegrations } from '@backstage/integration';
@@ -25,6 +24,7 @@ import type { ActionContext } from '@backstage/plugin-scaffolder-node';
import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils';
import { Writable } from 'stream';
import { UrlReaderService } from '@backstage/backend-plugin-api';
+import { ContainerRunner } from './ContainerRunner';
const executeShellCommand = jest.fn();
const commandExists = jest.fn();
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts
index 6e540d7fca..b72e25f349 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { ContainerRunner } from '@backstage/backend-common';
import {
UrlReaderService,
resolveSafeChildPath,
@@ -32,6 +31,7 @@ import {
executeShellCommand,
} from '@backstage/plugin-scaffolder-node';
import { examples } from './cookiecutter.examples';
+import { ContainerRunner } from './ContainerRunner';
export class CookiecutterRunner {
private readonly containerRunner?: ContainerRunner;
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/index.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/index.ts
index bbe5a16a04..2df0b789a0 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/index.ts
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/index.ts
@@ -13,4 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+export { type ContainerRunner } from './ContainerRunner';
export { createFetchCookiecutterAction } from './cookiecutter';
diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json
index c33b7d113b..bb38f2b7a8 100644
--- a/plugins/scaffolder-backend-module-github/package.json
+++ b/plugins/scaffolder-backend-module-github/package.json
@@ -42,7 +42,6 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@backstage/backend-common": "^0.25.0",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/catalog-client": "workspace:^",
"@backstage/catalog-model": "workspace:^",
diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts b/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts
index 9133b0d300..9d14747189 100644
--- a/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts
+++ b/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { createRootLogger } from '@backstage/backend-common';
import { Config, ConfigReader } from '@backstage/config';
import {
GithubCredentialsProvider,
@@ -29,9 +28,6 @@ import { createPublishGithubPullRequestAction } from './githubPullRequest';
import { createMockDirectory } from '@backstage/backend-test-utils';
import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils';
-// Make sure root logger is initialized ahead of FS mock
-createRootLogger();
-
type GithubPullRequestActionInput = ReturnType<
typeof createPublishGithubPullRequestAction
> extends TemplateAction
diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.examples.test.ts b/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.examples.test.ts
index 2ec4effe56..e9cc9d95de 100644
--- a/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.examples.test.ts
+++ b/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.examples.test.ts
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
jest.mock('@backstage/plugin-scaffolder-node', () => {
return {
...jest.requireActual('@backstage/plugin-scaffolder-node'),
@@ -40,28 +41,6 @@ import { createGithubRepoPushAction } from './githubRepoPush';
import { examples } from './githubRepoPush.examples';
import yaml from 'yaml';
-const mockGit = {
- init: jest.fn(),
- add: jest.fn(),
- checkout: jest.fn(),
- commit: jest
- .fn()
- .mockResolvedValue('220f19cc36b551763d157f1b5e4a4b446165dbd6'),
- fetch: jest.fn(),
- addRemote: jest.fn(),
- push: jest.fn(),
-};
-
-jest.mock('@backstage/backend-common', () => ({
- loggerToWinstonLogger: jest.requireActual('@backstage/backend-common')
- .loggerToWinstonLogger,
- Git: {
- fromAuth() {
- return mockGit;
- },
- },
-}));
-
jest.mock('./helpers', () => {
return {
...jest.requireActual('./helpers'),
diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.test.ts b/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.test.ts
index 9ff8cd123c..7fdf2e1af6 100644
--- a/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.test.ts
+++ b/plugins/scaffolder-backend-module-github/src/actions/githubRepoPush.test.ts
@@ -14,28 +14,6 @@
* limitations under the License.
*/
-const mockGit = {
- init: jest.fn(),
- add: jest.fn(),
- checkout: jest.fn(),
- commit: jest
- .fn()
- .mockResolvedValue('220f19cc36b551763d157f1b5e4a4b446165dbd6'),
- fetch: jest.fn(),
- addRemote: jest.fn(),
- push: jest.fn(),
-};
-
-jest.mock('@backstage/backend-common', () => ({
- loggerToWinstonLogger: jest.requireActual('@backstage/backend-common')
- .loggerToWinstonLogger,
- Git: {
- fromAuth() {
- return mockGit;
- },
- },
-}));
-
jest.mock('./gitHelpers', () => {
return {
...jest.requireActual('./gitHelpers'),
diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json
index 3cb8447786..53a3995a9b 100644
--- a/plugins/scaffolder-backend-module-rails/package.json
+++ b/plugins/scaffolder-backend-module-rails/package.json
@@ -43,7 +43,6 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@backstage/backend-common": "^0.25.0",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
diff --git a/plugins/scaffolder-backend-module-rails/report.api.md b/plugins/scaffolder-backend-module-rails/report.api.md
index 07b3713b15..ef45922221 100644
--- a/plugins/scaffolder-backend-module-rails/report.api.md
+++ b/plugins/scaffolder-backend-module-rails/report.api.md
@@ -3,12 +3,40 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
+///
+
import { BackendFeature } from '@backstage/backend-plugin-api';
-import { ContainerRunner } from '@backstage/backend-common';
import { JsonObject } from '@backstage/types';
import { ScmIntegrations } from '@backstage/integration';
import { TemplateAction } from '@backstage/plugin-scaffolder-node';
import { UrlReaderService } from '@backstage/backend-plugin-api';
+import { Writable } from 'stream';
+
+// @public
+export interface ContainerRunner {
+ runContainer(opts: {
+ imageName: string;
+ command?: string | string[];
+ args: string[];
+ logStream?: Writable;
+ mountDirs?: Record;
+ workingDir?: string;
+ envVars?: Record;
+ pullImage?: boolean;
+ defaultUser?: boolean;
+ pullOptions?: {
+ authconfig?: {
+ username?: string;
+ password?: string;
+ auth?: string;
+ email?: string;
+ serveraddress?: string;
+ [key: string]: unknown;
+ };
+ [key: string]: unknown;
+ };
+ }): Promise;
+}
// @public
export function createFetchRailsAction(options: {
diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/ContainerRunner.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/ContainerRunner.ts
new file mode 100644
index 0000000000..a0b639148f
--- /dev/null
+++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/ContainerRunner.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 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 { Writable } from 'stream';
+
+/**
+ * Handles the running of containers.
+ *
+ * @public
+ */
+export interface ContainerRunner {
+ /**
+ * Runs a container image to completion.
+ */
+ runContainer(opts: {
+ imageName: string;
+ command?: string | string[];
+ args: string[];
+ logStream?: Writable;
+ mountDirs?: Record;
+ workingDir?: string;
+ envVars?: Record;
+ pullImage?: boolean;
+ defaultUser?: boolean;
+ pullOptions?: {
+ authconfig?: {
+ username?: string;
+ password?: string;
+ auth?: string;
+ email?: string;
+ serveraddress?: string;
+ [key: string]: unknown;
+ };
+ [key: string]: unknown;
+ };
+ }): Promise;
+}
diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.examples.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.examples.test.ts
index 6bc84e04ad..5753c2f1ce 100644
--- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.examples.test.ts
+++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.examples.test.ts
@@ -27,7 +27,6 @@ jest.mock('./railsNewRunner', () => {
};
});
-import { ContainerRunner } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { resolve as resolvePath } from 'path';
@@ -38,6 +37,7 @@ import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-
import { examples } from './index.examples';
import yaml from 'yaml';
import { UrlReaderService } from '@backstage/backend-plugin-api';
+import { ContainerRunner } from './ContainerRunner';
describe('fetch:rails', () => {
const mockDir = createMockDirectory();
diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts
index 616c90e0de..fc9443efc0 100644
--- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts
+++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts
@@ -27,7 +27,6 @@ jest.mock('./railsNewRunner', () => {
};
});
-import { ContainerRunner } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { resolve as resolvePath } from 'path';
@@ -37,6 +36,7 @@ import { createMockDirectory } from '@backstage/backend-test-utils';
import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils';
import { Writable } from 'stream';
import { UrlReaderService } from '@backstage/backend-plugin-api';
+import { ContainerRunner } from './ContainerRunner';
describe('fetch:rails', () => {
const mockDir = createMockDirectory();
diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts
index 4d5db0f3ef..0e27810db3 100644
--- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts
+++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { ContainerRunner } from '@backstage/backend-common';
import { JsonObject } from '@backstage/types';
import { InputError } from '@backstage/errors';
import { ScmIntegrations } from '@backstage/integration';
@@ -29,6 +28,9 @@ import { RailsNewRunner } from './railsNewRunner';
import { PassThrough } from 'stream';
import { examples } from './index.examples';
import { UrlReaderService } from '@backstage/backend-plugin-api';
+import { ContainerRunner } from './ContainerRunner';
+
+export { type ContainerRunner };
/**
* Creates the `fetch:rails` Scaffolder action.
diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts
index 47104c66e1..be5da9383e 100644
--- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts
+++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts
@@ -27,11 +27,11 @@ jest.mock(
commandExists(...args),
);
-import { ContainerRunner } from '@backstage/backend-common';
import path from 'path';
import { PassThrough } from 'stream';
import { RailsNewRunner } from './railsNewRunner';
import { createMockDirectory } from '@backstage/backend-test-utils';
+import { ContainerRunner } from './ContainerRunner';
describe('Rails Templater', () => {
const containerRunner: jest.Mocked = {
diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts
index 31cfea4a76..73dd4417ad 100644
--- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts
+++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { ContainerRunner } from '@backstage/backend-common';
import fs from 'fs-extra';
import path from 'path';
import { executeShellCommand } from '@backstage/plugin-scaffolder-node';
@@ -25,6 +24,7 @@ import {
} from './railsArgumentResolver';
import { JsonObject } from '@backstage/types';
import { Writable } from 'stream';
+import { ContainerRunner } from './ContainerRunner';
export class RailsNewRunner {
private readonly containerRunner?: ContainerRunner;
diff --git a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts
index abb35d86c2..db1e38c89a 100644
--- a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts
+++ b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { loggerToWinstonLogger } from '@backstage/backend-common';
import {
coreServices,
createBackendPlugin,
@@ -52,6 +51,7 @@ import {
createWaitAction,
} from './scaffolder';
import { createRouter } from './service/router';
+import { loggerToWinstonLogger } from './util/loggerToWinstonLogger';
/**
* Scaffolder plugin
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
index 2239583cb7..8614f99388 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
@@ -38,8 +38,8 @@ import {
mockCredentials,
mockServices,
} from '@backstage/backend-test-utils';
-import { loggerToWinstonLogger } from '@backstage/backend-common';
import { LoggerService } from '@backstage/backend-plugin-api';
+import { loggerToWinstonLogger } from '../../util/loggerToWinstonLogger';
describe('NunjucksWorkflowRunner', () => {
let logger: LoggerService;
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts
index 63d4172659..906f6d1857 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts
@@ -38,7 +38,6 @@ 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,
@@ -60,6 +59,7 @@ import { createDefaultFilters } from '../../lib/templating/filters';
import { scaffolderActionRules } from '../../service/rules';
import { createCounterMetric, createHistogramMetric } from '../../util/metrics';
import { BackstageLoggerTransport, WinstonLogger } from './logger';
+import { loggerToWinstonLogger } from '../../util/loggerToWinstonLogger';
type NunjucksWorkflowRunnerOptions = {
workingDirectory: string;
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts
index c617a4a84e..dc89100b95 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts
@@ -14,10 +14,7 @@
* limitations under the License.
*/
-import {
- DatabaseManager,
- loggerToWinstonLogger,
-} from '@backstage/backend-common';
+import { DatabaseManager } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { TaskSpec } from '@backstage/plugin-scaffolder-common';
import {
@@ -27,6 +24,7 @@ import {
import { DatabaseTaskStore } from './DatabaseTaskStore';
import { StorageTaskBroker, TaskManager } from './StorageTaskBroker';
import { mockServices } from '@backstage/backend-test-utils';
+import { loggerToWinstonLogger } from '../../util/loggerToWinstonLogger';
async function createStore(): Promise {
const manager = DatabaseManager.fromConfig(
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts
index 013d5d3296..dd9233a5ee 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts
@@ -15,10 +15,7 @@
*/
import os from 'os';
-import {
- DatabaseManager,
- loggerToWinstonLogger,
-} from '@backstage/backend-common';
+import { DatabaseManager } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { DatabaseTaskStore } from './DatabaseTaskStore';
import { StorageTaskBroker } from './StorageTaskBroker';
@@ -35,6 +32,7 @@ import { WorkflowRunner } from './types';
import ObservableImpl from 'zen-observable';
import waitForExpect from 'wait-for-expect';
import { mockServices } from '@backstage/backend-test-utils';
+import { loggerToWinstonLogger } from '../../util/loggerToWinstonLogger';
jest.mock('./NunjucksWorkflowRunner');
const MockedNunjucksWorkflowRunner =
diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts
index 42a89cc7f3..0e0da1970f 100644
--- a/plugins/scaffolder-backend/src/service/router.test.ts
+++ b/plugins/scaffolder-backend/src/service/router.test.ts
@@ -14,10 +14,7 @@
* limitations under the License.
*/
-import {
- DatabaseManager,
- loggerToWinstonLogger,
-} from '@backstage/backend-common';
+import { DatabaseManager } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
import express from 'express';
@@ -52,6 +49,7 @@ import { UrlReaders } from '@backstage/backend-defaults/urlReader';
import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils';
import { EventsService } from '@backstage/plugin-events-node';
import { DatabaseService } from '@backstage/backend-plugin-api';
+import { loggerToWinstonLogger } from '../util/loggerToWinstonLogger';
const mockAccess = jest.fn();
diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts
index bd04eaad1b..ac6cfd38d0 100644
--- a/plugins/scaffolder-backend/src/service/router.ts
+++ b/plugins/scaffolder-backend/src/service/router.ts
@@ -14,10 +14,7 @@
* limitations under the License.
*/
-import {
- createLegacyAuthAdapters,
- HostDiscovery,
-} from '@backstage/backend-common';
+import { createLegacyAuthAdapters } from '@backstage/backend-common';
import {
AuditorService,
AuthService,
@@ -112,6 +109,7 @@ import {
parseStringsParam,
} from './helpers';
import { scaffolderActionRules, scaffolderTemplateRules } from './rules';
+import { HostDiscovery } from '@backstage/backend-defaults/discovery';
/**
*
diff --git a/plugins/scaffolder-backend/src/util/loggerToWinstonLogger.ts b/plugins/scaffolder-backend/src/util/loggerToWinstonLogger.ts
new file mode 100644
index 0000000000..ff76549ec3
--- /dev/null
+++ b/plugins/scaffolder-backend/src/util/loggerToWinstonLogger.ts
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 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 { LoggerService } from '@backstage/backend-plugin-api';
+import { JsonObject } from '@backstage/types';
+import { Logger as WinstonLogger, createLogger } from 'winston';
+import Transport, { TransportStreamOptions } from 'winston-transport';
+
+class BackstageLoggerTransport extends Transport {
+ constructor(
+ private readonly backstageLogger: LoggerService,
+ opts?: TransportStreamOptions,
+ ) {
+ super(opts);
+ }
+
+ log(info: unknown, callback: VoidFunction) {
+ if (typeof info !== 'object' || info === null) {
+ callback();
+ return;
+ }
+ const { level, message, ...meta } = info as JsonObject;
+ switch (level) {
+ case 'error':
+ this.backstageLogger.error(String(message), meta);
+ break;
+ case 'warn':
+ this.backstageLogger.warn(String(message), meta);
+ break;
+ case 'info':
+ this.backstageLogger.info(String(message), meta);
+ break;
+ case 'debug':
+ this.backstageLogger.debug(String(message), meta);
+ break;
+ default:
+ this.backstageLogger.info(String(message), meta);
+ }
+ callback();
+ }
+}
+
+/**
+ * A helper function to convert a Backstage LoggerService to a Winston Logger.
+ * @internal
+ */
+export function loggerToWinstonLogger(
+ logger: LoggerService,
+ opts?: TransportStreamOptions,
+): WinstonLogger {
+ return createLogger({
+ transports: [new BackstageLoggerTransport(logger, opts)],
+ });
+}
diff --git a/plugins/scaffolder-common/src/alpha.ts b/plugins/scaffolder-common/src/alpha.ts
index 9a8c021d15..82585fcf1d 100644
--- a/plugins/scaffolder-common/src/alpha.ts
+++ b/plugins/scaffolder-common/src/alpha.ts
@@ -13,4 +13,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
export * from './permissions';
diff --git a/plugins/scaffolder-node-test-utils/package.json b/plugins/scaffolder-node-test-utils/package.json
index eafa3d78f9..c178e182dd 100644
--- a/plugins/scaffolder-node-test-utils/package.json
+++ b/plugins/scaffolder-node-test-utils/package.json
@@ -40,10 +40,12 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@backstage/backend-common": "^0.25.0",
+ "@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-test-utils": "workspace:^",
"@backstage/plugin-scaffolder-node": "workspace:^",
- "@backstage/types": "workspace:^"
+ "@backstage/types": "workspace:^",
+ "winston": "^3.2.1",
+ "winston-transport": "^4.7.0"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
diff --git a/plugins/scaffolder-node-test-utils/src/actions/loggerToWinstonLogger.ts b/plugins/scaffolder-node-test-utils/src/actions/loggerToWinstonLogger.ts
new file mode 100644
index 0000000000..ff76549ec3
--- /dev/null
+++ b/plugins/scaffolder-node-test-utils/src/actions/loggerToWinstonLogger.ts
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 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 { LoggerService } from '@backstage/backend-plugin-api';
+import { JsonObject } from '@backstage/types';
+import { Logger as WinstonLogger, createLogger } from 'winston';
+import Transport, { TransportStreamOptions } from 'winston-transport';
+
+class BackstageLoggerTransport extends Transport {
+ constructor(
+ private readonly backstageLogger: LoggerService,
+ opts?: TransportStreamOptions,
+ ) {
+ super(opts);
+ }
+
+ log(info: unknown, callback: VoidFunction) {
+ if (typeof info !== 'object' || info === null) {
+ callback();
+ return;
+ }
+ const { level, message, ...meta } = info as JsonObject;
+ switch (level) {
+ case 'error':
+ this.backstageLogger.error(String(message), meta);
+ break;
+ case 'warn':
+ this.backstageLogger.warn(String(message), meta);
+ break;
+ case 'info':
+ this.backstageLogger.info(String(message), meta);
+ break;
+ case 'debug':
+ this.backstageLogger.debug(String(message), meta);
+ break;
+ default:
+ this.backstageLogger.info(String(message), meta);
+ }
+ callback();
+ }
+}
+
+/**
+ * A helper function to convert a Backstage LoggerService to a Winston Logger.
+ * @internal
+ */
+export function loggerToWinstonLogger(
+ logger: LoggerService,
+ opts?: TransportStreamOptions,
+): WinstonLogger {
+ return createLogger({
+ transports: [new BackstageLoggerTransport(logger, opts)],
+ });
+}
diff --git a/plugins/scaffolder-node-test-utils/src/actions/mockActionContext.ts b/plugins/scaffolder-node-test-utils/src/actions/mockActionContext.ts
index 076bb0ce22..eb03ac0a0f 100644
--- a/plugins/scaffolder-node-test-utils/src/actions/mockActionContext.ts
+++ b/plugins/scaffolder-node-test-utils/src/actions/mockActionContext.ts
@@ -15,7 +15,6 @@
*/
import { PassThrough } from 'stream';
-import { loggerToWinstonLogger } from '@backstage/backend-common';
import {
createMockDirectory,
mockCredentials,
@@ -23,6 +22,7 @@ import {
} from '@backstage/backend-test-utils';
import { JsonObject, JsonValue } from '@backstage/types';
import { ActionContext } from '@backstage/plugin-scaffolder-node';
+import { loggerToWinstonLogger } from './loggerToWinstonLogger';
/**
* A utility method to create a mock action context for scaffolder actions.
diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json
index 3c8c589bde..908bc97b5f 100644
--- a/plugins/scaffolder-node/package.json
+++ b/plugins/scaffolder-node/package.json
@@ -54,7 +54,6 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@backstage/backend-common": "^0.25.0",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/errors": "workspace:^",
@@ -69,6 +68,7 @@
"p-limit": "^3.1.0",
"tar": "^6.1.12",
"winston": "^3.2.1",
+ "winston-transport": "^4.7.0",
"zod": "^3.22.4",
"zod-to-json-schema": "^3.20.4"
},
diff --git a/plugins/scaffolder-node/src/actions/gitHelpers.test.ts b/plugins/scaffolder-node/src/actions/gitHelpers.test.ts
index 664cc5c893..2e8eb9366f 100644
--- a/plugins/scaffolder-node/src/actions/gitHelpers.test.ts
+++ b/plugins/scaffolder-node/src/actions/gitHelpers.test.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { loggerToWinstonLogger } from '@backstage/backend-common';
import { Git } from '../scm';
import {
commitAndPushRepo,
@@ -25,6 +24,7 @@ import {
cloneRepo,
} from './gitHelpers';
import { mockServices } from '@backstage/backend-test-utils';
+import { loggerToWinstonLogger } from './loggerToWinstonLogger';
jest.mock('../scm', () => ({
Git: {
diff --git a/plugins/scaffolder-node/src/actions/loggerToWinstonLogger.ts b/plugins/scaffolder-node/src/actions/loggerToWinstonLogger.ts
new file mode 100644
index 0000000000..ff76549ec3
--- /dev/null
+++ b/plugins/scaffolder-node/src/actions/loggerToWinstonLogger.ts
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 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 { LoggerService } from '@backstage/backend-plugin-api';
+import { JsonObject } from '@backstage/types';
+import { Logger as WinstonLogger, createLogger } from 'winston';
+import Transport, { TransportStreamOptions } from 'winston-transport';
+
+class BackstageLoggerTransport extends Transport {
+ constructor(
+ private readonly backstageLogger: LoggerService,
+ opts?: TransportStreamOptions,
+ ) {
+ super(opts);
+ }
+
+ log(info: unknown, callback: VoidFunction) {
+ if (typeof info !== 'object' || info === null) {
+ callback();
+ return;
+ }
+ const { level, message, ...meta } = info as JsonObject;
+ switch (level) {
+ case 'error':
+ this.backstageLogger.error(String(message), meta);
+ break;
+ case 'warn':
+ this.backstageLogger.warn(String(message), meta);
+ break;
+ case 'info':
+ this.backstageLogger.info(String(message), meta);
+ break;
+ case 'debug':
+ this.backstageLogger.debug(String(message), meta);
+ break;
+ default:
+ this.backstageLogger.info(String(message), meta);
+ }
+ callback();
+ }
+}
+
+/**
+ * A helper function to convert a Backstage LoggerService to a Winston Logger.
+ * @internal
+ */
+export function loggerToWinstonLogger(
+ logger: LoggerService,
+ opts?: TransportStreamOptions,
+): WinstonLogger {
+ return createLogger({
+ transports: [new BackstageLoggerTransport(logger, opts)],
+ });
+}
diff --git a/yarn.lock b/yarn.lock
index 053f8494ec..db39b2ea2c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7407,7 +7407,6 @@ __metadata:
version: 0.0.0-use.local
resolution: "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdown"
dependencies:
- "@backstage/backend-common": ^0.25.0
"@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/cli": "workspace:^"
@@ -7428,7 +7427,6 @@ __metadata:
version: 0.0.0-use.local
resolution: "@backstage/plugin-scaffolder-backend-module-cookiecutter@workspace:plugins/scaffolder-backend-module-cookiecutter"
dependencies:
- "@backstage/backend-common": ^0.25.0
"@backstage/backend-defaults": "workspace:^"
"@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
@@ -7503,7 +7501,6 @@ __metadata:
version: 0.0.0-use.local
resolution: "@backstage/plugin-scaffolder-backend-module-github@workspace:plugins/scaffolder-backend-module-github"
dependencies:
- "@backstage/backend-common": ^0.25.0
"@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/catalog-client": "workspace:^"
@@ -7566,7 +7563,6 @@ __metadata:
version: 0.0.0-use.local
resolution: "@backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails"
dependencies:
- "@backstage/backend-common": ^0.25.0
"@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/cli": "workspace:^"
@@ -7705,7 +7701,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@backstage/plugin-scaffolder-node-test-utils@workspace:plugins/scaffolder-node-test-utils"
dependencies:
- "@backstage/backend-common": ^0.25.0
+ "@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/plugin-scaffolder-node": "workspace:^"
@@ -7714,6 +7710,8 @@ __metadata:
react: ^18.0.2
react-dom: ^18.0.2
react-router-dom: ^6.3.0
+ winston: ^3.2.1
+ winston-transport: ^4.7.0
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
@@ -7729,7 +7727,6 @@ __metadata:
version: 0.0.0-use.local
resolution: "@backstage/plugin-scaffolder-node@workspace:plugins/scaffolder-node"
dependencies:
- "@backstage/backend-common": ^0.25.0
"@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/catalog-model": "workspace:^"
@@ -7747,6 +7744,7 @@ __metadata:
p-limit: ^3.1.0
tar: ^6.1.12
winston: ^3.2.1
+ winston-transport: ^4.7.0
zod: ^3.22.4
zod-to-json-schema: ^3.20.4
languageName: unknown