Skip to main content

错误:“生成期间未看到任何源代码”

如果 CodeQL 找不到任何源代码,则需要解决此问题以取消阻止 code scanning 分析。

如果工作流因为 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 无法监视您的代码。 此问题有六个可能的原因:

  1. 不支持的语言: 存储库可能不包含以支持 CodeQL的语言编写的源代码。 检查支持的语言列表,如果是这种情况,请删除 CodeQL 工作流。 有关详细信息,请参阅“使用 CodeQL 扫描代码”。

  2. 检测到的语言未分析的代码: 自动语言检测发现了受支持的语言,但仓库中没有该语言的可分析代码。 一个典型的例子是,我们的语言检测服务发现了一个与特定的编程语言相关的文件,例如 .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 高级设置进行分析”中的工作流提取。

  3. 编译编译的语言失败: 工作流 code scanning 尝试编译已编译的语言(C、C++、C#、Go 或 Java),但代码未编译。 当工作流指定 build-mode: autobuild 语言或包含 autobuild 步骤时,CodeQL 尽力尝试检测合适的构建方法并构建代码。 此过程 autobuild 可能无法成功生成代码,具体取决于特定的生成环境。 如果你删除了 autobuild 步骤但没有手动添加构建步骤,编译也可能会失败。 有关定义编译步骤的详细信息,请参阅 对编译语言进行 CodeQL 代码扫描

  4. 未检测到缓存的组件: 您的工作流使用编译语言(C、C++、C#、Go 或 Java)进行构建,以创建用于分析的 CodeQL 数据库,但会缓存构建过程中的部分内容以提高性能(这很可能发生在像 Gradle 或 Bazel 这样的构建系统中)。 由于 CodeQL 观察编译器的活动来了解存储库中的数据流, CodeQL 需要进行完整的生成才能执行分析。

  5. 步骤 initanalyze 之外的编译: 您的工作流会构建一种编译语言(C、C++、C#、Go 或 Java),但编译不会在工作流的步骤 initanalyze 之间进行。 CodeQL 要求生成在这两个步骤之间发生,以便观察编译器的活动并执行分析。

  6. 编译未检测到 CodeQL: 编译的代码(在 C、C++、C#、Go 或 Java 中)已成功编译,但 CodeQL 无法检测编译器调用。 最常见原因是:

    • 在单独的容器中对 CodeQL 运行生成过程。 有关详细信息,请参阅“在容器中运行 CodeQL 代码扫描”。
    • 使用 GitHub Actions 外部的分布式构建系统,通过守护进程进行构建。
    • CodeQL 不知道正在使用的特定编译器。

如果遇到特定编译器或配置的其他问题,请联系 通过网站管理员GitHub支持门户

有关指定生成步骤的详细信息,请参阅“对编译语言进行 CodeQL 代码扫描”。