Skip to content

Commit

Permalink
Merge pull request #24609 from backstage/patch-release-pr-24478-24511
Browse files Browse the repository at this point in the history
Patch release of #24478, #24511
  • Loading branch information
benjdlambert committed May 3, 2024
2 parents bc8a5c4 + 5de937b commit 7d37192
Show file tree
Hide file tree
Showing 12 changed files with 99 additions and 33 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "root",
"version": "1.26.4",
"version": "1.26.5",
"private": true,
"repository": {
"type": "git",
Expand Down
6 changes: 6 additions & 0 deletions packages/backend-app-api/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/backend-app-api

## 0.7.2

### Patch Changes

- b6b59c5: Redact `meta` fields too with the logger

## 0.7.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/backend-app-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-app-api",
"description": "Core API used by Backstage backend apps",
"version": "0.7.1",
"version": "0.7.2",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
Expand Down
22 changes: 13 additions & 9 deletions packages/backend-app-api/src/logging/WinstonLogger.ts
Expand Up @@ -85,16 +85,20 @@ export class WinstonLogger implements RootLoggerService {

let redactionPattern: RegExp | undefined = undefined;

return {
format: format(info => {
if (redactionPattern && typeof info.message === 'string') {
info.message = info.message.replace(redactionPattern, '[REDACTED]');
}
if (redactionPattern && typeof info.stack === 'string') {
info.stack = info.stack.replace(redactionPattern, '[REDACTED]');
const replace = (obj: TransformableInfo) => {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object') {
obj[key] = replace(obj[key] as TransformableInfo);
} else if (typeof obj[key] === 'string') {
obj[key] = obj[key]?.replace(redactionPattern, '[REDACTED]');
}
}
return info;
})(),
}
return obj;
};
return {
format: format(replace)(),
add(newRedactions) {
let added = 0;
for (const redactionToTrim of newRedactions) {
Expand Down
6 changes: 6 additions & 0 deletions packages/core-components/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/core-components

## 0.14.6

### Patch Changes

- 36054e3: Fixed an internal circular import that broke Jest mocks.

## 0.14.5

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/core-components/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-components",
"description": "Core components used by Backstage plugins and apps",
"version": "0.14.5",
"version": "0.14.6",
"publishConfig": {
"access": "public"
},
Expand Down
Expand Up @@ -18,7 +18,7 @@ import { makeStyles } from '@material-ui/core/styles';
import TabUI, { TabProps } from '@material-ui/core/Tab';
import Tabs from '@material-ui/core/Tabs';
import React, { useCallback, useEffect, useState } from 'react';
import { Link } from '@backstage/core-components';
import { Link } from '../../components/Link';

// TODO(blam): Remove this implementation when the Tabs are ready
// This is just a temporary solution to implementing tabs for now
Expand Down
7 changes: 7 additions & 0 deletions plugins/scaffolder-backend/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-scaffolder-backend

## 1.22.5

### Patch Changes

- b6b59c5: Fix issue with the log format not being respected when logging from actions
- b6b59c5: Redact `meta` fields too with the logger

## 1.22.4

### Patch Changes
Expand Down
3 changes: 2 additions & 1 deletion plugins/scaffolder-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend",
"version": "1.22.4",
"version": "1.22.5",
"description": "The Backstage backend plugin that helps you create new things",
"backstage": {
"role": "backend-plugin"
Expand Down Expand Up @@ -95,6 +95,7 @@
"prom-client": "^15.0.0",
"uuid": "^9.0.0",
"winston": "^3.2.1",
"winston-transport": "^4.7.0",
"yaml": "^2.0.0",
"zen-observable": "^0.10.0",
"zod": "^3.22.4"
Expand Down
Expand Up @@ -55,7 +55,7 @@ import { actionExecutePermission } from '@backstage/plugin-scaffolder-common/alp
import { TaskRecovery } from '@backstage/plugin-scaffolder-common';
import { PermissionsService } from '@backstage/backend-plugin-api';
import { loggerToWinstonLogger } from '@backstage/backend-common';
import { WinstonLogger } from './logger';
import { BackstageLoggerTransport, WinstonLogger } from './logger';

type NunjucksWorkflowRunnerOptions = {
workingDirectory: string;
Expand Down Expand Up @@ -98,9 +98,11 @@ const isValidTaskSpec = (taskSpec: TaskSpec): taskSpec is TaskSpecV1beta3 => {
const createStepLogger = ({
task,
step,
rootLogger,
}: {
task: TaskContext;
step: TaskStep;
rootLogger: winston.Logger;
}) => {
const stepLogStream = new PassThrough();
stepLogStream.on('data', async data => {
Expand All @@ -117,8 +119,8 @@ const createStepLogger = ({
winston.format.simple(),
),
transports: [
new winston.transports.Console(),
new winston.transports.Stream({ stream: stepLogStream }),
new BackstageLoggerTransport(rootLogger),
],
});

Expand Down Expand Up @@ -262,7 +264,11 @@ export class NunjucksWorkflowRunner implements WorkflowRunner {

const action: TemplateAction<JsonObject> =
this.options.actionRegistry.get(step.action);
const { taskLogger, streamLogger } = createStepLogger({ task, step });
const { taskLogger, streamLogger } = createStepLogger({
task,
step,
rootLogger: this.options.logger,
});

if (task.isDryRun) {
const redactedSecrets = Object.fromEntries(
Expand Down
67 changes: 51 additions & 16 deletions plugins/scaffolder-backend/src/scaffolder/tasks/logger.ts
Expand Up @@ -19,13 +19,8 @@ import {
} from '@backstage/backend-plugin-api';
import { JsonObject } from '@backstage/types';
import { Format, TransformableInfo } from 'logform';
import {
Logger,
format,
createLogger,
transports,
transport as Transport,
} from 'winston';
import Transport, { TransportStreamOptions } from 'winston-transport';
import { Logger, format, createLogger, transports } from 'winston';

/**
* Escapes a given string to be used inside a RegExp.
Expand All @@ -43,6 +38,42 @@ interface WinstonLoggerOptions {
transports: Transport[];
}

// This is a workaround for being able to preserve the log format of the root logger.
// Will revisit all of this implementation once we can break the router to use only `LoggerService`.
export 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();
}
}

export class WinstonLogger implements RootLoggerService {
#winston: Logger;
#addRedactions?: (redactions: Iterable<string>) => void;
Expand Down Expand Up @@ -76,16 +107,20 @@ export class WinstonLogger implements RootLoggerService {

let redactionPattern: RegExp | undefined = undefined;

return {
format: format(info => {
if (redactionPattern && typeof info.message === 'string') {
info.message = info.message.replace(redactionPattern, '[REDACTED]');
}
if (redactionPattern && typeof info.stack === 'string') {
info.stack = info.stack.replace(redactionPattern, '[REDACTED]');
const replace = (obj: TransformableInfo) => {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object') {
obj[key] = replace(obj[key] as TransformableInfo);
} else if (typeof obj[key] === 'string') {
obj[key] = obj[key]?.replace(redactionPattern, '[REDACTED]');
}
}
return info;
})(),
}
return obj;
};
return {
format: format(replace)(),
add(newRedactions) {
let added = 0;
for (const redactionToTrim of newRedactions) {
Expand Down
1 change: 1 addition & 0 deletions yarn.lock
Expand Up @@ -8651,6 +8651,7 @@ __metadata:
uuid: ^9.0.0
wait-for-expect: ^3.0.2
winston: ^3.2.1
winston-transport: ^4.7.0
yaml: ^2.0.0
zen-observable: ^0.10.0
zod: ^3.22.4
Expand Down

0 comments on commit 7d37192

Please sign in to comment.