关于 CodeQL 分析工作流程 和编译语言
Code scanning 的工作原理是针对一个或多个 CodeQL 数据库运行查询。 每个数据库都包含仓库中代码的单一语言表示形式。 对于编译语言 C/C++、C#、Go、Java、Kotlin、Rust(公共预览版)、和 Swift,填充此数据库的过程通常涉及生成代码和提取数据。
启用 code scanning 时,默认和高级设置都会使用最简单的可用方法生成 CodeQL 数据库用于分析。 对于 C# 和 Java,CodeQL 数据库直接从代码库生成,而无需生成(none 生成模式)。 对于其他编译语言,CodeQL 使用 autobuild 生成模式生成代码库。 或者,也可以使用 manual 生成模式明确指定生成命令,以仅分析这些自定义命令生成的文件。
您可以在使用 CodeQL 时启用依赖缓存,以便将依赖项作为 GitHub Actions 缓存进行存储,而不是从注册表中下载它们。 请参阅本文后面关于 CodeQL 的依赖缓存 的内容。
CodeQL 生成模式
CodeQL 操作支持三种不同的编译语言生成模式:
-
`none` - CodeQL 数据库是直接从代码库创建的,无需构建代码库(支持所有解释语言,并且额外支持 C# 和 Java)。 -
`autobuild` - CodeQL 检测最可能的构建方法,并使用它尝试构建代码库并创建数据库进行分析(支持 C/C++、C#、Go、Java、Kotlin 和 Swift)。 -
`manual` - 你可以在工作流中定义用于代码库的构建步骤(支持 C/C++、C#、Go、Java、Kotlin 和 Swift)。
有关与语言相关的autobuild行为、运行程序要求和手动构建指南,请参阅编译语言的 CodeQL 生成选项和步骤。
关于 CodeQL 的依赖项缓存
您可以在使用 CodeQL 时启用依赖缓存,以便将依赖项作为 GitHub Actions 缓存进行存储,而不是从注册表中下载它们。 这降低了在第三方注册表运行不佳时丢失警报的风险,而且对于具有大量依赖项或使用速度较慢的注册表的项目而言,还可能会提高性能。 若要详细了解缓存依赖项如何加速工作流的内容,请参阅 依赖项缓存参考。
依赖项缓存适用于所有生成模式,并受 Java、Go 和 C# 支持。
注意
使用依赖项缓存将会存储特定于 CodeQL 的缓存,这些缓存将受仓库的缓存配额限制。 请参阅“依赖项缓存参考”。