Add generated files to paths-ignore, if FF is enabled

This commit is contained in:
Michael B. Gale
2025-11-19 19:20:54 +00:00
parent 846f8590dc
commit b4db38273c
2 changed files with 102 additions and 45 deletions
+78 -43
View File
@@ -98,11 +98,11 @@ var require_command = __commonJS({
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.issue = exports2.issueCommand = void 0;
var os5 = __importStar4(require("os"));
var os6 = __importStar4(require("os"));
var utils_1 = require_utils();
function issueCommand(command, properties, message) {
const cmd = new Command(command, properties, message);
process.stdout.write(cmd.toString() + os5.EOL);
process.stdout.write(cmd.toString() + os6.EOL);
}
exports2.issueCommand = issueCommand;
function issue(name, message = "") {
@@ -186,7 +186,7 @@ var require_file_command = __commonJS({
exports2.prepareKeyValueMessage = exports2.issueFileCommand = void 0;
var crypto2 = __importStar4(require("crypto"));
var fs15 = __importStar4(require("fs"));
var os5 = __importStar4(require("os"));
var os6 = __importStar4(require("os"));
var utils_1 = require_utils();
function issueFileCommand(command, message) {
const filePath = process.env[`GITHUB_${command}`];
@@ -196,7 +196,7 @@ var require_file_command = __commonJS({
if (!fs15.existsSync(filePath)) {
throw new Error(`Missing file at path: ${filePath}`);
}
fs15.appendFileSync(filePath, `${(0, utils_1.toCommandValue)(message)}${os5.EOL}`, {
fs15.appendFileSync(filePath, `${(0, utils_1.toCommandValue)(message)}${os6.EOL}`, {
encoding: "utf8"
});
}
@@ -210,7 +210,7 @@ var require_file_command = __commonJS({
if (convertedValue.includes(delimiter)) {
throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`);
}
return `${key}<<${delimiter}${os5.EOL}${convertedValue}${os5.EOL}${delimiter}`;
return `${key}<<${delimiter}${os6.EOL}${convertedValue}${os6.EOL}${delimiter}`;
}
exports2.prepareKeyValueMessage = prepareKeyValueMessage;
}
@@ -18933,7 +18933,7 @@ var require_toolrunner = __commonJS({
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.argStringToArray = exports2.ToolRunner = void 0;
var os5 = __importStar4(require("os"));
var os6 = __importStar4(require("os"));
var events = __importStar4(require("events"));
var child = __importStar4(require("child_process"));
var path16 = __importStar4(require("path"));
@@ -18988,12 +18988,12 @@ var require_toolrunner = __commonJS({
_processLineBuffer(data, strBuffer, onLine) {
try {
let s = strBuffer + data.toString();
let n = s.indexOf(os5.EOL);
let n = s.indexOf(os6.EOL);
while (n > -1) {
const line = s.substring(0, n);
onLine(line);
s = s.substring(n + os5.EOL.length);
n = s.indexOf(os5.EOL);
s = s.substring(n + os6.EOL.length);
n = s.indexOf(os6.EOL);
}
return s;
} catch (err) {
@@ -19162,7 +19162,7 @@ var require_toolrunner = __commonJS({
}
const optionsNonNull = this._cloneExecOptions(this.options);
if (!optionsNonNull.silent && optionsNonNull.outStream) {
optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os5.EOL);
optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os6.EOL);
}
const state = new ExecState(optionsNonNull, this.toolPath);
state.on("debug", (message) => {
@@ -19650,7 +19650,7 @@ var require_core = __commonJS({
var command_1 = require_command();
var file_command_1 = require_file_command();
var utils_1 = require_utils();
var os5 = __importStar4(require("os"));
var os6 = __importStar4(require("os"));
var path16 = __importStar4(require("path"));
var oidc_utils_1 = require_oidc_utils();
var ExitCode;
@@ -19718,7 +19718,7 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
if (filePath) {
return (0, file_command_1.issueFileCommand)("OUTPUT", (0, file_command_1.prepareKeyValueMessage)(name, value));
}
process.stdout.write(os5.EOL);
process.stdout.write(os6.EOL);
(0, command_1.issueCommand)("set-output", { name }, (0, utils_1.toCommandValue)(value));
}
exports2.setOutput = setOutput2;
@@ -19752,7 +19752,7 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
}
exports2.notice = notice;
function info6(message) {
process.stdout.write(message + os5.EOL);
process.stdout.write(message + os6.EOL);
}
exports2.info = info6;
function startGroup4(name) {
@@ -31906,7 +31906,7 @@ var require_internal_pattern = __commonJS({
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.Pattern = void 0;
var os5 = __importStar4(require("os"));
var os6 = __importStar4(require("os"));
var path16 = __importStar4(require("path"));
var pathHelper = __importStar4(require_internal_path_helper());
var assert_1 = __importDefault4(require("assert"));
@@ -31999,7 +31999,7 @@ var require_internal_pattern = __commonJS({
if (pattern === "." || pattern.startsWith(`.${path16.sep}`)) {
pattern = _Pattern.globEscape(process.cwd()) + pattern.substr(1);
} else if (pattern === "~" || pattern.startsWith(`~${path16.sep}`)) {
homedir2 = homedir2 || os5.homedir();
homedir2 = homedir2 || os6.homedir();
assert_1.default(homedir2, "Unable to determine HOME directory");
assert_1.default(pathHelper.hasAbsoluteRoot(homedir2), `Expected HOME directory to be a rooted path. Actual '${homedir2}'`);
pattern = _Pattern.globEscape(homedir2) + pattern.substr(1);
@@ -35242,14 +35242,14 @@ var require_dist = __commonJS({
"node_modules/@azure/logger/dist/index.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
var os5 = require("os");
var os6 = require("os");
var util = require("util");
function _interopDefaultLegacy(e) {
return e && typeof e === "object" && "default" in e ? e : { "default": e };
}
var util__default = /* @__PURE__ */ _interopDefaultLegacy(util);
function log(message, ...args) {
process.stderr.write(`${util__default["default"].format(message, ...args)}${os5.EOL}`);
process.stderr.write(`${util__default["default"].format(message, ...args)}${os6.EOL}`);
}
var debugEnvVariable = typeof process !== "undefined" && process.env && process.env.DEBUG || void 0;
var enabledString;
@@ -36516,7 +36516,7 @@ var require_userAgentPlatform = __commonJS({
exports2.getHeaderName = getHeaderName;
exports2.setPlatformSpecificData = setPlatformSpecificData;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
var os5 = tslib_1.__importStar(require("node:os"));
var os6 = tslib_1.__importStar(require("node:os"));
var process2 = tslib_1.__importStar(require("node:process"));
function getHeaderName() {
return "User-Agent";
@@ -36532,7 +36532,7 @@ var require_userAgentPlatform = __commonJS({
map2.set("Node", versions.node);
}
}
map2.set("OS", `(${os5.arch()}-${os5.type()}-${os5.release()})`);
map2.set("OS", `(${os6.arch()}-${os6.type()}-${os6.release()})`);
}
}
});
@@ -37854,7 +37854,7 @@ var require_has_flag = __commonJS({
var require_supports_color = __commonJS({
"node_modules/supports-color/index.js"(exports2, module2) {
"use strict";
var os5 = require("os");
var os6 = require("os");
var tty = require("tty");
var hasFlag = require_has_flag();
var { env } = process;
@@ -37902,7 +37902,7 @@ var require_supports_color = __commonJS({
return min;
}
if (process.platform === "win32") {
const osRelease = os5.release().split(".");
const osRelease = os6.release().split(".");
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
return Number(osRelease[2]) >= 14931 ? 3 : 2;
}
@@ -45124,11 +45124,11 @@ var require_XMLParser = __commonJS({
// node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js
var require_orderedJs2Xml = __commonJS({
"node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js"(exports2, module2) {
var EOL = "\n";
var EOL2 = "\n";
function toXml(jArray, options) {
let indentation = "";
if (options.format && options.indentBy.length > 0) {
indentation = EOL;
indentation = EOL2;
}
return arrToStr(jArray, options, "", indentation);
}
@@ -77691,7 +77691,7 @@ var require_internal_pattern2 = __commonJS({
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.Pattern = void 0;
var os5 = __importStar4(require("os"));
var os6 = __importStar4(require("os"));
var path16 = __importStar4(require("path"));
var pathHelper = __importStar4(require_internal_path_helper2());
var assert_1 = __importDefault4(require("assert"));
@@ -77784,7 +77784,7 @@ var require_internal_pattern2 = __commonJS({
if (pattern === "." || pattern.startsWith(`.${path16.sep}`)) {
pattern = _Pattern.globEscape(process.cwd()) + pattern.substr(1);
} else if (pattern === "~" || pattern.startsWith(`~${path16.sep}`)) {
homedir2 = homedir2 || os5.homedir();
homedir2 = homedir2 || os6.homedir();
(0, assert_1.default)(homedir2, "Unable to determine HOME directory");
(0, assert_1.default)(pathHelper.hasAbsoluteRoot(homedir2), `Expected HOME directory to be a rooted path. Actual '${homedir2}'`);
pattern = _Pattern.globEscape(homedir2) + pattern.substr(1);
@@ -78826,12 +78826,12 @@ var require_manifest = __commonJS({
exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0;
var semver9 = __importStar4(require_semver2());
var core_1 = require_core();
var os5 = require("os");
var os6 = require("os");
var cp = require("child_process");
var fs15 = require("fs");
function _findMatch(versionSpec, stable, candidates, archFilter) {
return __awaiter4(this, void 0, void 0, function* () {
const platFilter = os5.platform();
const platFilter = os6.platform();
let result;
let match;
let file;
@@ -78868,7 +78868,7 @@ var require_manifest = __commonJS({
}
exports2._findMatch = _findMatch;
function _getOsVersion() {
const plat = os5.platform();
const plat = os6.platform();
let version = "";
if (plat === "darwin") {
version = cp.execSync("sw_vers -productVersion").toString();
@@ -79775,7 +79775,7 @@ var require_tool_cache = __commonJS({
var crypto2 = __importStar4(require("crypto"));
var fs15 = __importStar4(require("fs"));
var mm = __importStar4(require_manifest());
var os5 = __importStar4(require("os"));
var os6 = __importStar4(require("os"));
var path16 = __importStar4(require("path"));
var httpm = __importStar4(require_lib5());
var semver9 = __importStar4(require_semver2());
@@ -80053,7 +80053,7 @@ var require_tool_cache = __commonJS({
function cacheDir(sourceDir, tool, version, arch2) {
return __awaiter4(this, void 0, void 0, function* () {
version = semver9.clean(version) || version;
arch2 = arch2 || os5.arch();
arch2 = arch2 || os6.arch();
core14.debug(`Caching tool ${tool} ${version} ${arch2}`);
core14.debug(`source dir: ${sourceDir}`);
if (!fs15.statSync(sourceDir).isDirectory()) {
@@ -80072,7 +80072,7 @@ var require_tool_cache = __commonJS({
function cacheFile(sourceFile, targetFile, tool, version, arch2) {
return __awaiter4(this, void 0, void 0, function* () {
version = semver9.clean(version) || version;
arch2 = arch2 || os5.arch();
arch2 = arch2 || os6.arch();
core14.debug(`Caching tool ${tool} ${version} ${arch2}`);
core14.debug(`source file: ${sourceFile}`);
if (!fs15.statSync(sourceFile).isFile()) {
@@ -80094,7 +80094,7 @@ var require_tool_cache = __commonJS({
if (!versionSpec) {
throw new Error("versionSpec parameter is required");
}
arch2 = arch2 || os5.arch();
arch2 = arch2 || os6.arch();
if (!isExplicitVersion(versionSpec)) {
const localVersions = findAllVersions2(toolName, arch2);
const match = evaluateVersions(localVersions, versionSpec);
@@ -80117,7 +80117,7 @@ var require_tool_cache = __commonJS({
exports2.find = find2;
function findAllVersions2(toolName, arch2) {
const versions = [];
arch2 = arch2 || os5.arch();
arch2 = arch2 || os6.arch();
const toolPath = path16.join(_getCacheDirectory(), toolName);
if (fs15.existsSync(toolPath)) {
const children = fs15.readdirSync(toolPath);
@@ -80168,7 +80168,7 @@ var require_tool_cache = __commonJS({
});
}
exports2.getManifestFromRepo = getManifestFromRepo;
function findFromManifest(versionSpec, stable, manifest, archFilter = os5.arch()) {
function findFromManifest(versionSpec, stable, manifest, archFilter = os6.arch()) {
return __awaiter4(this, void 0, void 0, function* () {
const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter);
return match;
@@ -85652,6 +85652,7 @@ var path4 = __toESM(require("path"));
var actionsCache = __toESM(require_cache3());
// src/git-utils.ts
var os2 = __toESM(require("os"));
var core7 = __toESM(require_core());
var toolrunner2 = __toESM(require_toolrunner());
var io3 = __toESM(require_io2());
@@ -85825,6 +85826,31 @@ async function isAnalyzingDefaultBranch() {
}
return currentRef === defaultBranch;
}
async function listFiles(workingDirectory) {
const stdout = await runGitCommand(
workingDirectory,
["ls-files"],
"Unable to list tracked files."
);
return stdout.split(os2.EOL);
}
async function getGeneratedFiles(workingDirectory) {
const files = await listFiles(workingDirectory);
const stdout = await runGitCommand(
workingDirectory,
["check-attr", "linguist-generated", "--", ...files],
"Unable to check attributes of files."
);
const generatedFiles = [];
const regex = /^([^:]+): linguist-generated: true$/;
for (const result of stdout.split(os2.EOL)) {
const match = result.match(regex);
if (match) {
generatedFiles.push(match[1]);
}
}
return generatedFiles;
}
// src/logging.ts
var core8 = __toESM(require_core());
@@ -87042,6 +87068,15 @@ async function initConfig(features, inputs) {
);
}
const config = await initActionState(inputs, userConfig);
if (await features.getValue("ignore_generated_files" /* IgnoreGeneratedFiles */) || isCCR()) {
try {
const generatedFiles = await getGeneratedFiles(inputs.sourceRoot);
config.computedConfig["paths-ignore"] ??= [];
config.computedConfig["paths-ignore"].push(...generatedFiles);
} catch (error3) {
logger.info(`Cannot ignore generated files: ${getErrorMessage(error3)}`);
}
}
if (config.analysisKinds.length === 1 && isCodeQualityEnabled(config)) {
if (hasQueryCustomisation(config.computedConfig)) {
throw new ConfigurationError(
@@ -87264,7 +87299,7 @@ function isCodeQualityEnabled(config) {
}
// src/dependency-caching.ts
var os2 = __toESM(require("os"));
var os3 = __toESM(require("os"));
var import_path = require("path");
var actionsCache3 = __toESM(require_cache3());
var glob = __toESM(require_glob2());
@@ -87276,9 +87311,9 @@ function getJavaTempDependencyDir() {
function getJavaDependencyDirs() {
return [
// Maven
(0, import_path.join)(os2.homedir(), ".m2", "repository"),
(0, import_path.join)(os3.homedir(), ".m2", "repository"),
// Gradle
(0, import_path.join)(os2.homedir(), ".gradle", "caches"),
(0, import_path.join)(os3.homedir(), ".gradle", "caches"),
// CodeQL Java build-mode: none
getJavaTempDependencyDir()
];
@@ -87327,11 +87362,11 @@ var defaultCacheConfigs = {
])
},
csharp: {
getDependencyPaths: () => [(0, import_path.join)(os2.homedir(), ".nuget", "packages")],
getDependencyPaths: () => [(0, import_path.join)(os3.homedir(), ".nuget", "packages")],
getHashPatterns: getCsharpHashPatterns
},
go: {
getDependencyPaths: () => [(0, import_path.join)(os2.homedir(), "go", "pkg", "mod")],
getDependencyPaths: () => [(0, import_path.join)(os3.homedir(), "go", "pkg", "mod")],
getHashPatterns: async () => internal.makePatternCheck(["**/go.sum"])
}
};
@@ -87936,7 +87971,7 @@ function inferCompressionMethod(tarPath) {
// src/tools-download.ts
var fs8 = __toESM(require("fs"));
var os3 = __toESM(require("os"));
var os4 = __toESM(require("os"));
var path9 = __toESM(require("path"));
var import_perf_hooks2 = require("perf_hooks");
var core9 = __toESM(require_core());
@@ -88074,7 +88109,7 @@ function getToolcacheDirectory(version) {
getRequiredEnvParam("RUNNER_TOOL_CACHE"),
TOOLCACHE_TOOL_NAME,
semver6.clean(version) || version,
os3.arch() || ""
os4.arch() || ""
);
}
function writeToolcacheMarkerFile(extractedPath, logger) {
@@ -89412,7 +89447,7 @@ function cleanupDatabaseClusterDirectory(config, logger, options = {}, rmSync2 =
}
// src/status-report.ts
var os4 = __toESM(require("os"));
var os5 = __toESM(require("os"));
var core11 = __toESM(require_core());
function isFirstPartyAnalysis(actionName) {
if (actionName !== "upload-sarif" /* UploadSarif */) {
@@ -89516,7 +89551,7 @@ async function createStatusReportBase(actionName, status, actionStartedAt, confi
statusReport.runner_arch = process.env["RUNNER_ARCH"];
}
if (!(runnerOs === "Linux" && isSelfHostedRunner())) {
statusReport.runner_os_release = os4.release();
statusReport.runner_os_release = os5.release();
}
if (codeQlCliVersion !== void 0) {
statusReport.codeql_version = codeQlCliVersion.version;
+24 -2
View File
@@ -4,7 +4,11 @@ import { performance } from "perf_hooks";
import * as yaml from "js-yaml";
import { getActionVersion, isAnalyzingPullRequest } from "./actions-util";
import {
getActionVersion,
isAnalyzingPullRequest,
isCCR,
} from "./actions-util";
import {
AnalysisConfig,
AnalysisKind,
@@ -26,7 +30,11 @@ import { shouldPerformDiffInformedAnalysis } from "./diff-informed-analysis-util
import * as errorMessages from "./error-messages";
import { Feature, FeatureEnablement } from "./feature-flags";
import { RepositoryProperties } from "./feature-flags/properties";
import { getGitRoot, isAnalyzingDefaultBranch } from "./git-utils";
import {
getGeneratedFiles,
getGitRoot,
isAnalyzingDefaultBranch,
} from "./git-utils";
import { KnownLanguage, Language } from "./languages";
import { Logger } from "./logging";
import {
@@ -44,6 +52,7 @@ import {
cloneObject,
isDefined,
checkDiskUsage,
getErrorMessage,
} from "./util";
export * from "./config/db-config";
@@ -845,6 +854,19 @@ export async function initConfig(
const config = await initActionState(inputs, userConfig);
// If we are in CCR or the corresponding FF is enabled, try to determine
// which files in the repository are marked as generated and add them to
// the `paths-ignore` configuration.
if ((await features.getValue(Feature.IgnoreGeneratedFiles)) || isCCR()) {
try {
const generatedFiles = await getGeneratedFiles(inputs.sourceRoot);
config.computedConfig["paths-ignore"] ??= [];
config.computedConfig["paths-ignore"].push(...generatedFiles);
} catch (error) {
logger.info(`Cannot ignore generated files: ${getErrorMessage(error)}`);
}
}
// If Code Quality analysis is the only enabled analysis kind, then we will initialise
// the database for Code Quality. That entails disabling the default queries and only
// running quality queries. We do not currently support query customisations in that case.