mirror of
https://github.com/github/codeql-action.git
synced 2026-04-29 10:28:52 +00:00
Merge pull request #3117 from github/mbg/csharp/new-cache-key-calculation
Support non-lock files for C# cache key computation
This commit is contained in:
Generated
+136
-68
@@ -85234,6 +85234,7 @@ function wrapApiConfigurationError(e) {
|
||||
}
|
||||
|
||||
// src/caching-utils.ts
|
||||
var crypto = __toESM(require("crypto"));
|
||||
var core6 = __toESM(require_core());
|
||||
async function getTotalCacheSize(paths, logger, quiet = false) {
|
||||
const sizes = await Promise.all(
|
||||
@@ -85266,6 +85267,11 @@ function getCachingKind(input) {
|
||||
return "none" /* None */;
|
||||
}
|
||||
}
|
||||
var cacheKeyHashLength = 16;
|
||||
function createCacheKeyHash(components) {
|
||||
const componentsJson = JSON.stringify(components);
|
||||
return crypto.createHash("sha256").update(componentsJson).digest("hex").substring(0, cacheKeyHashLength);
|
||||
}
|
||||
function getDependencyCachingEnabled() {
|
||||
const dependencyCaching = getOptionalInput("dependency-caching") || process.env["CODEQL_ACTION_DEPENDENCY_CACHING" /* DEPENDENCY_CACHING */];
|
||||
if (dependencyCaching !== void 0) return getCachingKind(dependencyCaching);
|
||||
@@ -85632,7 +85638,6 @@ var bundleVersion = "codeql-bundle-v2.23.3";
|
||||
var cliVersion = "2.23.3";
|
||||
|
||||
// src/overlay-database-utils.ts
|
||||
var crypto = __toESM(require("crypto"));
|
||||
var fs3 = __toESM(require("fs"));
|
||||
var path4 = __toESM(require("path"));
|
||||
var actionsCache = __toESM(require_cache3());
|
||||
@@ -86034,10 +86039,6 @@ async function getCacheRestoreKeyPrefix(config, codeQlVersion) {
|
||||
const componentsHash = createCacheKeyHash(cacheKeyComponents);
|
||||
return `${CACHE_PREFIX}-${CACHE_VERSION}-${componentsHash}-${languages}-${codeQlVersion}-`;
|
||||
}
|
||||
function createCacheKeyHash(components) {
|
||||
const componentsJson = JSON.stringify(components);
|
||||
return crypto.createHash("sha256").update(componentsJson).digest("hex").substring(0, 16);
|
||||
}
|
||||
|
||||
// src/tools-features.ts
|
||||
var semver3 = __toESM(require_semver2());
|
||||
@@ -86071,6 +86072,11 @@ var featureConfig = {
|
||||
legacyApi: true,
|
||||
minimumVersion: "2.15.0"
|
||||
},
|
||||
["csharp_new_cache_key" /* CsharpNewCacheKey */]: {
|
||||
defaultValue: false,
|
||||
envVar: "CODEQL_ACTION_CSHARP_NEW_CACHE_KEY",
|
||||
minimumVersion: void 0
|
||||
},
|
||||
["diff_informed_queries" /* DiffInformedQueries */]: {
|
||||
defaultValue: true,
|
||||
envVar: "CODEQL_ACTION_DIFF_INFORMED_QUERIES",
|
||||
@@ -87240,68 +87246,105 @@ var CODEQL_DEPENDENCY_CACHE_VERSION = 1;
|
||||
function getJavaTempDependencyDir() {
|
||||
return (0, import_path.join)(getTemporaryDirectory(), "codeql_java", "repository");
|
||||
}
|
||||
function getDefaultCacheConfig() {
|
||||
return {
|
||||
java: {
|
||||
paths: [
|
||||
// Maven
|
||||
(0, import_path.join)(os2.homedir(), ".m2", "repository"),
|
||||
// Gradle
|
||||
(0, import_path.join)(os2.homedir(), ".gradle", "caches"),
|
||||
// CodeQL Java build-mode: none
|
||||
getJavaTempDependencyDir()
|
||||
],
|
||||
hash: [
|
||||
// Maven
|
||||
"**/pom.xml",
|
||||
// Gradle
|
||||
"**/*.gradle*",
|
||||
"**/gradle-wrapper.properties",
|
||||
"buildSrc/**/Versions.kt",
|
||||
"buildSrc/**/Dependencies.kt",
|
||||
"gradle/*.versions.toml",
|
||||
"**/versions.properties"
|
||||
]
|
||||
},
|
||||
csharp: {
|
||||
paths: [(0, import_path.join)(os2.homedir(), ".nuget", "packages")],
|
||||
hash: [
|
||||
// NuGet
|
||||
"**/packages.lock.json",
|
||||
// Paket
|
||||
"**/paket.lock"
|
||||
]
|
||||
},
|
||||
go: {
|
||||
paths: [(0, import_path.join)(os2.homedir(), "go", "pkg", "mod")],
|
||||
hash: ["**/go.sum"]
|
||||
}
|
||||
};
|
||||
function getJavaDependencyDirs() {
|
||||
return [
|
||||
// Maven
|
||||
(0, import_path.join)(os2.homedir(), ".m2", "repository"),
|
||||
// Gradle
|
||||
(0, import_path.join)(os2.homedir(), ".gradle", "caches"),
|
||||
// CodeQL Java build-mode: none
|
||||
getJavaTempDependencyDir()
|
||||
];
|
||||
}
|
||||
async function makePatternCheck(patterns) {
|
||||
const globber = await makeGlobber(patterns);
|
||||
if ((await globber.glob()).length === 0) {
|
||||
return void 0;
|
||||
}
|
||||
return patterns;
|
||||
}
|
||||
var CSHARP_BASE_PATTERNS = [
|
||||
// NuGet
|
||||
"**/packages.lock.json",
|
||||
// Paket
|
||||
"**/paket.lock"
|
||||
];
|
||||
var CSHARP_EXTRA_PATTERNS = [
|
||||
"**/*.csproj",
|
||||
"**/packages.config",
|
||||
"**/nuget.config"
|
||||
];
|
||||
async function getCsharpHashPatterns(codeql, features) {
|
||||
const basePatterns = await internal.makePatternCheck(CSHARP_BASE_PATTERNS);
|
||||
if (basePatterns !== void 0) {
|
||||
return basePatterns;
|
||||
}
|
||||
if (await features.getValue("csharp_new_cache_key" /* CsharpNewCacheKey */, codeql)) {
|
||||
return internal.makePatternCheck(CSHARP_EXTRA_PATTERNS);
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
var defaultCacheConfigs = {
|
||||
java: {
|
||||
getDependencyPaths: getJavaDependencyDirs,
|
||||
getHashPatterns: async () => internal.makePatternCheck([
|
||||
// Maven
|
||||
"**/pom.xml",
|
||||
// Gradle
|
||||
"**/*.gradle*",
|
||||
"**/gradle-wrapper.properties",
|
||||
"buildSrc/**/Versions.kt",
|
||||
"buildSrc/**/Dependencies.kt",
|
||||
"gradle/*.versions.toml",
|
||||
"**/versions.properties"
|
||||
])
|
||||
},
|
||||
csharp: {
|
||||
getDependencyPaths: () => [(0, import_path.join)(os2.homedir(), ".nuget", "packages")],
|
||||
getHashPatterns: getCsharpHashPatterns
|
||||
},
|
||||
go: {
|
||||
getDependencyPaths: () => [(0, import_path.join)(os2.homedir(), "go", "pkg", "mod")],
|
||||
getHashPatterns: async () => internal.makePatternCheck(["**/go.sum"])
|
||||
}
|
||||
};
|
||||
async function makeGlobber(patterns) {
|
||||
return glob.create(patterns.join("\n"));
|
||||
}
|
||||
async function downloadDependencyCaches(languages, logger, minimizeJavaJars) {
|
||||
async function checkHashPatterns(codeql, features, language, cacheConfig, checkType, logger) {
|
||||
const patterns = await cacheConfig.getHashPatterns(codeql, features);
|
||||
if (patterns === void 0) {
|
||||
logger.info(
|
||||
`Skipping ${checkType} of dependency cache for ${language} as we cannot calculate a hash for the cache key.`
|
||||
);
|
||||
}
|
||||
return patterns;
|
||||
}
|
||||
async function downloadDependencyCaches(codeql, features, languages, logger) {
|
||||
const status = [];
|
||||
for (const language of languages) {
|
||||
const cacheConfig = getDefaultCacheConfig()[language];
|
||||
const cacheConfig = defaultCacheConfigs[language];
|
||||
if (cacheConfig === void 0) {
|
||||
logger.info(
|
||||
`Skipping download of dependency cache for ${language} as we have no caching configuration for it.`
|
||||
);
|
||||
continue;
|
||||
}
|
||||
const globber = await makeGlobber(cacheConfig.hash);
|
||||
if ((await globber.glob()).length === 0) {
|
||||
const patterns = await checkHashPatterns(
|
||||
codeql,
|
||||
features,
|
||||
language,
|
||||
cacheConfig,
|
||||
"download",
|
||||
logger
|
||||
);
|
||||
if (patterns === void 0) {
|
||||
status.push({ language, hit_kind: "no-hash" /* NoHash */ });
|
||||
logger.info(
|
||||
`Skipping download of dependency cache for ${language} as we cannot calculate a hash for the cache key.`
|
||||
);
|
||||
continue;
|
||||
}
|
||||
const primaryKey = await cacheKey2(language, cacheConfig, minimizeJavaJars);
|
||||
const primaryKey = await cacheKey2(codeql, features, language, patterns);
|
||||
const restoreKeys = [
|
||||
await cachePrefix2(language, minimizeJavaJars)
|
||||
await cachePrefix2(codeql, features, language)
|
||||
];
|
||||
logger.info(
|
||||
`Downloading cache for ${language} with key ${primaryKey} and restore keys ${restoreKeys.join(
|
||||
@@ -87310,7 +87353,7 @@ async function downloadDependencyCaches(languages, logger, minimizeJavaJars) {
|
||||
);
|
||||
const start = performance.now();
|
||||
const hitKey = await actionsCache3.restoreCache(
|
||||
cacheConfig.paths,
|
||||
cacheConfig.getDependencyPaths(),
|
||||
primaryKey,
|
||||
restoreKeys
|
||||
);
|
||||
@@ -87326,22 +87369,50 @@ async function downloadDependencyCaches(languages, logger, minimizeJavaJars) {
|
||||
}
|
||||
return status;
|
||||
}
|
||||
async function cacheKey2(language, cacheConfig, minimizeJavaJars = false) {
|
||||
const hash = await glob.hashFiles(cacheConfig.hash.join("\n"));
|
||||
return `${await cachePrefix2(language, minimizeJavaJars)}${hash}`;
|
||||
async function cacheKey2(codeql, features, language, patterns) {
|
||||
const hash = await glob.hashFiles(patterns.join("\n"));
|
||||
return `${await cachePrefix2(codeql, features, language)}${hash}`;
|
||||
}
|
||||
async function cachePrefix2(language, minimizeJavaJars) {
|
||||
async function getFeaturePrefix(codeql, features, language) {
|
||||
const enabledFeatures = [];
|
||||
const addFeatureIfEnabled = async (feature) => {
|
||||
if (await features.getValue(feature, codeql)) {
|
||||
enabledFeatures.push(feature);
|
||||
}
|
||||
};
|
||||
if (language === "java" /* java */) {
|
||||
const minimizeJavaJars = await features.getValue(
|
||||
"java_minimize_dependency_jars" /* JavaMinimizeDependencyJars */,
|
||||
codeql
|
||||
);
|
||||
if (minimizeJavaJars) {
|
||||
return "minify-";
|
||||
}
|
||||
} else if (language === "csharp" /* csharp */) {
|
||||
await addFeatureIfEnabled("csharp_new_cache_key" /* CsharpNewCacheKey */);
|
||||
}
|
||||
if (enabledFeatures.length > 0) {
|
||||
return `${createCacheKeyHash(enabledFeatures)}-`;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
async function cachePrefix2(codeql, features, language) {
|
||||
const runnerOs = getRequiredEnvParam("RUNNER_OS");
|
||||
const customPrefix = process.env["CODEQL_ACTION_DEPENDENCY_CACHE_PREFIX" /* DEPENDENCY_CACHING_PREFIX */];
|
||||
let prefix = CODEQL_DEPENDENCY_CACHE_PREFIX;
|
||||
if (customPrefix !== void 0 && customPrefix.length > 0) {
|
||||
prefix = `${prefix}-${customPrefix}`;
|
||||
}
|
||||
if (language === "java" /* java */ && minimizeJavaJars) {
|
||||
prefix = `minify-${prefix}`;
|
||||
const featurePrefix = await getFeaturePrefix(codeql, features, language);
|
||||
if (featurePrefix === "minify-") {
|
||||
return `${featurePrefix}${prefix}-${CODEQL_DEPENDENCY_CACHE_VERSION}-${runnerOs}-${language}-`;
|
||||
} else {
|
||||
return `${prefix}-${featurePrefix}${CODEQL_DEPENDENCY_CACHE_VERSION}-${runnerOs}-${language}-`;
|
||||
}
|
||||
return `${prefix}-${CODEQL_DEPENDENCY_CACHE_VERSION}-${runnerOs}-${language}-`;
|
||||
}
|
||||
var internal = {
|
||||
makePatternCheck
|
||||
};
|
||||
|
||||
// src/diagnostics.ts
|
||||
var import_fs = require("fs");
|
||||
@@ -89705,7 +89776,7 @@ async function getWorkflowAbsolutePath(logger) {
|
||||
async function checkWorkflow(logger, codeql) {
|
||||
if (!isDynamicWorkflow() && process.env["CODEQL_ACTION_SKIP_WORKFLOW_VALIDATION" /* SKIP_WORKFLOW_VALIDATION */] !== "true") {
|
||||
core12.startGroup("Validating workflow");
|
||||
const validateWorkflowResult = await internal.validateWorkflow(
|
||||
const validateWorkflowResult = await internal2.validateWorkflow(
|
||||
codeql,
|
||||
logger
|
||||
);
|
||||
@@ -89719,7 +89790,7 @@ async function checkWorkflow(logger, codeql) {
|
||||
core12.endGroup();
|
||||
}
|
||||
}
|
||||
var internal = {
|
||||
var internal2 = {
|
||||
validateWorkflow
|
||||
};
|
||||
|
||||
@@ -90068,15 +90139,12 @@ exec ${goBinaryPath} "$@"`
|
||||
core13.exportVariable(envVar, "false");
|
||||
}
|
||||
}
|
||||
const minimizeJavaJars = await features.getValue(
|
||||
"java_minimize_dependency_jars" /* JavaMinimizeDependencyJars */,
|
||||
codeql
|
||||
);
|
||||
if (shouldRestoreCache(config.dependencyCachingEnabled)) {
|
||||
dependencyCachingResults = await downloadDependencyCaches(
|
||||
codeql,
|
||||
features,
|
||||
config.languages,
|
||||
logger,
|
||||
minimizeJavaJars
|
||||
logger
|
||||
);
|
||||
}
|
||||
if (await codeQlVersionAtLeast(codeql, "2.17.1")) {
|
||||
@@ -90114,7 +90182,7 @@ exec ${goBinaryPath} "$@"`
|
||||
logger.debug(
|
||||
`${"CODEQL_EXTRACTOR_JAVA_OPTION_MINIMIZE_DEPENDENCY_JARS" /* JAVA_EXTRACTOR_MINIMIZE_DEPENDENCY_JARS */} is already set to '${process.env["CODEQL_EXTRACTOR_JAVA_OPTION_MINIMIZE_DEPENDENCY_JARS" /* JAVA_EXTRACTOR_MINIMIZE_DEPENDENCY_JARS */]}', so the Action will not override it.`
|
||||
);
|
||||
} else if (minimizeJavaJars && config.dependencyCachingEnabled && config.buildMode === "none" /* None */ && config.languages.includes("java" /* java */)) {
|
||||
} else if (await features.getValue("java_minimize_dependency_jars" /* JavaMinimizeDependencyJars */, codeql) && config.dependencyCachingEnabled && config.buildMode === "none" /* None */ && config.languages.includes("java" /* java */)) {
|
||||
core13.exportVariable(
|
||||
"CODEQL_EXTRACTOR_JAVA_OPTION_MINIMIZE_DEPENDENCY_JARS" /* JAVA_EXTRACTOR_MINIMIZE_DEPENDENCY_JARS */,
|
||||
"true"
|
||||
|
||||
Reference in New Issue
Block a user