如果工作流因为 Error: "No source code was seen during the build" 或 The process '/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/codeql' failed with exit code 32 失败,这表明 CodeQL 无法监视您的代码。 此问题有六个可能的原因:
-
不支持的语言: 存储库可能不包含以支持 CodeQL的语言编写的源代码。 检查支持的语言列表,如果是这种情况,请删除 CodeQL 工作流。 有关详细信息,请参阅“使用 CodeQL 扫描代码”。
-
检测到的语言未分析的代码: 自动语言检测发现了受支持的语言,但仓库中没有该语言的可分析代码。 一个典型的例子是,我们的语言检测服务发现了一个与特定的编程语言相关的文件,例如
.h或.gyp文件,但存储库中没有相应的可执行代码。 要解决此问题,可通过更新language矩阵中的语言列表来手动定义要分析的语言。 例如,以下配置将仅分析 Go 和 JavaScript。strategy: fail-fast: false matrix: # Override automatic language detection by changing the list below. # Supported options are listed in a comment in the default workflow. language: ['go', 'javascript-typescript']有关详细信息,请参阅“某些语言未使用 CodeQL 高级设置进行分析”中的工作流提取。
-
编译编译的语言失败: 工作流 code scanning 尝试编译已编译的语言(C、C++、C#、Go 或 Java),但代码未编译。 当工作流指定
build-mode: autobuild语言或包含autobuild步骤时,CodeQL 尽力尝试检测合适的构建方法并构建代码。 此过程autobuild可能无法成功生成代码,具体取决于特定的生成环境。 如果你删除了autobuild步骤但没有手动添加构建步骤,编译也可能会失败。 有关定义编译步骤的详细信息,请参阅 对编译语言进行 CodeQL 代码扫描。 -
未检测到缓存的组件: 您的工作流使用编译语言(C、C++、C#、Go 或 Java)进行构建,以创建用于分析的 CodeQL 数据库,但会缓存构建过程中的部分内容以提高性能(这很可能发生在像 Gradle 或 Bazel 这样的构建系统中)。 由于 CodeQL 观察编译器的活动来了解存储库中的数据流, CodeQL 需要进行完整的生成才能执行分析。
-
步骤
init和analyze之外的编译: 您的工作流会构建一种编译语言(C、C++、C#、Go 或 Java),但编译不会在工作流的步骤init和analyze之间进行。 CodeQL 要求生成在这两个步骤之间发生,以便观察编译器的活动并执行分析。 -
编译未检测到 CodeQL: 编译的代码(在 C、C++、C#、Go 或 Java 中)已成功编译,但 CodeQL 无法检测编译器调用。 最常见原因是:
- 在单独的容器中对 CodeQL 运行生成过程。 有关详细信息,请参阅“在容器中运行 CodeQL 代码扫描”。
- 使用 GitHub Actions 外部的分布式构建系统,通过守护进程进行构建。
- CodeQL 不知道正在使用的特定编译器。
如果遇到特定编译器或配置的其他问题,请联系 。
有关指定生成步骤的详细信息,请参阅“对编译语言进行 CodeQL 代码扫描”。