fix(core/dashboard): GitHub error "maximum is 65536 characters" (#16208)

This commit is contained in:
Gabriel-Ladzaretti 2022-06-23 17:25:55 +03:00 committed by GitHub
parent 84228b1b12
commit ee52021a9d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 1 deletions

View file

@ -10,23 +10,54 @@ import {
} from '../../../test/util'; } from '../../../test/util';
import { GlobalConfig } from '../../config/global'; import { GlobalConfig } from '../../config/global';
import { PlatformId } from '../../constants'; import { PlatformId } from '../../constants';
import type {
PackageDependency,
PackageFile,
} from '../../modules/manager/types';
import type { Platform } from '../../modules/platform'; import type { Platform } from '../../modules/platform';
import { massageMarkdown } from '../../modules/platform/github';
import { BranchConfig, BranchResult, BranchUpgradeConfig } from '../types'; import { BranchConfig, BranchResult, BranchUpgradeConfig } from '../types';
import * as dependencyDashboard from './dependency-dashboard'; import * as dependencyDashboard from './dependency-dashboard';
import { PackageFiles } from './package-files'; import { PackageFiles } from './package-files';
type PrUpgrade = BranchUpgradeConfig; type PrUpgrade = BranchUpgradeConfig;
const massageMdSpy = jest.spyOn(platform, 'massageMarkdown');
let config: RenovateConfig; let config: RenovateConfig;
beforeEach(() => { beforeEach(() => {
jest.clearAllMocks(); jest.clearAllMocks();
massageMdSpy.mockImplementation(massageMarkdown);
config = getConfig(); config = getConfig();
config.platform = PlatformId.Github; config.platform = PlatformId.Github;
config.errors = []; config.errors = [];
config.warnings = []; config.warnings = [];
}); });
function genRandString(length: number): string {
let result = '';
const chars = 'abcdefghijklmnopqrstuvwxyz';
const charsLen = chars.length;
for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * charsLen));
}
return result;
}
function genRandPackageFile(
depsNum: number,
depNameLen: number
): Record<string, PackageFile[]> {
const deps: PackageDependency[] = [];
for (let i = 0; i < depsNum; i++) {
deps.push({
depName: genRandString(depNameLen),
currentVersion: '1.0.0',
});
}
return { npm: [{ packageFile: 'package.json', deps }] };
}
async function dryRun( async function dryRun(
branches: BranchConfig[], branches: BranchConfig[],
platform: jest.Mocked<Platform>, platform: jest.Mocked<Platform>,
@ -666,6 +697,21 @@ describe('workers/repository/dependency-dashboard', () => {
// same with dry run // same with dry run
await dryRun(branches, platform); await dryRun(branches, platform);
}); });
it('truncates the body of a really big repo', async () => {
const branches: BranchConfig[] = [];
const truncatedLength = 60000;
const packageFilesBigRepo = genRandPackageFile(100, 700);
PackageFiles.add('main', packageFilesBigRepo);
await dependencyDashboard.ensureDependencyDashboard(config, branches);
expect(platform.ensureIssue).toHaveBeenCalledTimes(1);
expect(platform.ensureIssue.mock.calls[0][0].body).toHaveLength(
truncatedLength
);
// same with dry run
await dryRun(branches, platform);
});
}); });
}); });
}); });

View file

@ -358,7 +358,7 @@ export async function ensureDependencyDashboard(
await platform.ensureIssue({ await platform.ensureIssue({
title: config.dependencyDashboardTitle!, title: config.dependencyDashboardTitle!,
reuseTitle, reuseTitle,
body: issueBody, body: platform.massageMarkdown(issueBody),
labels: config.dependencyDashboardLabels, labels: config.dependencyDashboardLabels,
confidential: config.confidential, confidential: config.confidential,
}); });