fix(github): collapse broad PR label groups

This commit is contained in:
t8y2 2026-07-31 13:04:12 +08:00
parent da53d207db
commit d3481193ed
No known key found for this signature in database
2 changed files with 29 additions and 2 deletions

View File

@ -22,6 +22,8 @@ export const STATIC_LABEL_SPECS = {
"area/docs": { color: "0075ca", description: "Documentation site or repository documentation" },
"area/ci": { color: "e99695", description: "GitHub Actions or repository automation" },
"area/deploy": { color: "fef2c0", description: "Deployment, packaging, or distribution" },
"area/multiple": { color: "ededed", description: "Touches more than three repository areas" },
"db/multiple": { color: "ededed", description: "Touches more than three database integrations" },
"ui-change": { color: "c5def5", description: "Changes user-visible interface, text, or visual assets" },
"dependencies/frontend": { color: "0366d6", description: "Adds a frontend dependency" },
"dependencies/backend": { color: "5319e7", description: "Adds a backend dependency" },
@ -381,14 +383,19 @@ export function evaluatePullRequestLabels({
readHeadFile = () => null,
}) {
const files = normalizeChangedFiles(changedFiles);
const labels = new Set(inferAreaLabels(files));
const areaLabels = inferAreaLabels(files);
const labels = new Set(areaLabels.length > 3 ? ["area/multiple"] : areaLabels);
const typeLabel = inferTypeLabel(title, files);
if (typeLabel) labels.add(typeLabel);
if (files.some(isUiChangeFile)) labels.add("ui-change");
if (files.length > 0 && files.every(isTestFile)) labels.add("tests-only");
const databaseTypes = inferDatabaseTypes(files, knownDatabaseTypes);
for (const databaseType of databaseTypes) labels.add(`${DATABASE_LABEL_PREFIX}${databaseType}`);
if (databaseTypes.length > 3) {
labels.add("db/multiple");
} else {
for (const databaseType of databaseTypes) labels.add(`${DATABASE_LABEL_PREFIX}${databaseType}`);
}
const addedDependencies = inferAddedDependencies(files, readBaseFile, readHeadFile);
if (addedDependencies.frontend.size > 0) labels.add("dependencies/frontend");

View File

@ -98,6 +98,26 @@ test("recognizes conventional titles with a full-width colon", () => {
assert.deepEqual(result.labels, ["area/core", "bug"]);
});
test("collapses broad area and database changes", () => {
const result = evaluatePullRequestLabels({
title: "feat: add cross-runtime geometry support",
changedFiles: [
"agents/drivers/mysql/build.gradle",
"apps/desktop/src/components/grid/GeometryViewer.vue",
"crates/dbx-core/src/db/postgres.rs",
"crates/dbx-mcp/src/main.rs",
"crates/dbx-web/src/main.rs",
"docs/content/docs/geometry.mdx",
"plugins/dialects/sqlite.yaml",
"plugins/dialects/sqlserver.yaml",
],
knownDatabaseTypes,
});
assert.deepEqual(result.labels, ["area/multiple", "db/multiple", "enhancement", "ui-change"]);
assert.deepEqual(result.databaseTypes, ["mysql", "postgres", "sqlite", "sqlserver"]);
});
test("detects only newly added package dependencies", () => {
const result = inferAddedDependencies(
["package.json"],