github_logo GitHub

警告

此功能是实验性的,可能会发生重大更改。 有关更多信息,请参见 Conan 稳定性 部分。

Conan GitHub Actions 集成允许您以简单有效的方式在 GitHub Actions 工作流程中设置 Conan 客户端。

该项目可以在其 GitHub marketplace 页面或其 GitHub 源代码页面上找到。

要使用此集成,请在工作流程 YAML 文件中添加一个步骤。 该集成将安装 Conan 客户端并为您设置环境。

您可以自定义以下参数

  • Conan 版本:指定要安装的 Conan 版本(例如,2.15.1)。 默认值:最新的稳定版本。

  • 配置 URL:要在 Conan 主目录中下载和安装的配置 URL 列表。 默认情况下,不安装任何配置。

  • Conan 审计令牌:用于审计命令的 审计 令牌,用于扫描软件包中的漏洞。 默认情况下,不使用任何令牌。

  • Conan 主目录路径:为 Conan 主文件夹设置自定义位置。 默认情况下,不使用自定义路径。

  • 缓存 Conan 软件包:自动缓存 Conan 缓存中的所有软件包,并在下一次构建中重复使用它们。 默认情况下,不使用缓存。

  • Python 版本:您可以指定要与 Conan 一起安装的 Python 版本,该版本将在环境中可用。 默认情况下,安装 Python 3.10。

该集成适用于 GitHub Actions 支持的所有平台,包括 Linux、Windows 和 macOS。

示例

本节提供了一些如何在 GitHub Actions 工作流程中使用此集成的示例。

在夜间构建中扫描软件包漏洞

警告

请勿共享您的 Conan 审计令牌或在代码中公开它。 始终对敏感数据使用 GitHub 机密。

首先,您需要在您的 GitHub 机密中设置 Conan 审计令牌。 然后,使用以下示例扫描软件包及其依赖项中的漏洞

.github/workflows/ci.yml
name: Nightly security scan
on:
  schedule:
    - cron: "0 0 * * *"

jobs:
  scan-vulnerabilities:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install and setup Conan
        uses: conan-io/setup-conan@v1
        with:
          audit_token: ${{ secrets.MY_CONAN_AUDIT_TOKEN }}

      - name: Scan for vulnerabilities with Conan Audit
        run: |
          conan audit scan .

此示例扫描当前目录中的 conanfile.py 中的所有依赖项。 请注意,它使用 GitHub 计划,以每天午夜运行扫描,这是在使用免费服务令牌的情况下,以避免达到每日限制,但仍然每天进行安全检查。

安装 Conan 配置和构建软件包

此示例从 URL 安装自定义 Conan 配置,从先前的构建还原缓存的软件包,构建在 conanfile.py 中定义的软件包,并将其上传到 Conan 服务器。

.github/workflows/ci.yml
name: Build and upload Conan package
on:
  push:
    branches:
      - 'main'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install and setup Conan
        uses: conan-io/setup-conan@v1
        with:
          config_urls: https://mycompany.com/conan/configs.git
          cache_packages: true

      - name: Build and upload package
        run: |
          conan create . -pr:a myprofile --build=missing
          conan remote login artifactory developer -p ${{ secrets.MY_CONAN_PASSWORD }}
          conan upload "*" --confirm --remote artifactory

在此示例中,操作的选项 cache_packages 设置为 true,因此 Conan 缓存中的所有软件包都会被缓存以供下一次构建使用。 远程信息预计来自选项 config_urls 指向的 URL 安装的配置。 远程身份验证使用 GitHub 机密来保证安全。 远程身份验证是使用 GitHub 机密完成的,这是一种存储敏感信息的安全方式。