Help us learn about your current experience with the documentation. Take the survey.

Conan v2 API

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

The availability of this feature is controlled by a feature flag. For more information, see the history.

For Conan v1 operations, see Conan v1 API.

使用此 API 与 Conan v2 包管理器进行交互。更多信息,请参阅包注册表中的 Conan 包Conan 2 包管理器客户端

通常,这些端点由 Conan 2 包管理器客户端使用,不适合手动调用。

  • 这些端点不遵循标准的 API 身份验证方法。请参阅每个路由以了解如何传递凭据的详细信息。未记录的身份验证方法将来可能会被移除。

  • Conan 注册表不符合 FIPS 标准,在启用 FIPS 模式时会被禁用。这些端点都返回 404 Not Found

创建身份验证令牌

创建一个 JSON Web Token (JWT),用作其他请求中的 Bearer 头部。

"Authorization: Bearer <authenticate_token>

Conan 2 包管理器客户端会自动使用此令牌。

GET /projects/:id/packages/conan/v2/users/authenticate
属性 类型 必需 描述
id string 有条件 项目 ID 或完整项目路径。仅对项目端点必需。

生成 base64 编码的 Basic Auth 令牌:

echo -n "<username>:<your_access_token>"|base64

使用 base64 编码的 Basic Auth 令牌获取 JWT 令牌:

curl --request GET \
     --header 'Authorization: Basic <base64_encoded_token>' \
     --url "https://gitlab.example.com/api/v4/packages/conan/v2/users/authenticate"

示例响应:

eyJhbGciOiJIUzI1NiIiheR5cCI6IkpXVCJ9.eyJhY2Nlc3NfdG9rZW4iOjMyMTQyMzAsqaVzZXJfaWQiOjQwNTkyNTQsImp0aSI6IjdlNzBiZTNjLWFlNWQtNDEyOC1hMmIyLWZiOThhZWM0MWM2OSIsImlhd3r1MTYxNjYyMzQzNSwibmJmIjoxNjE2NjIzNDMwLCJleHAiOjE2MTY2MjcwMzV9.QF0Q3ZIB2GW5zNKyMSIe0HIFOITjEsZEioR-27Rtu7E

验证身份验证凭据

验证 Basic Auth 凭据或从 Conan v1 /authenticate 端点生成的 Conan JWT 的有效性。

GET /projects/:id/packages/conan/v2/users/check_credentials
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
curl --request GET \
     --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/<project_id>/packages/conan/v2/users/check_credentials"

示例响应:

ok

搜索 Conan 包

在项目中搜索具有指定名称的 Conan 包。

GET /projects/:id/packages/conan/v2/conans/search?q=:query
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
query string 搜索查询。您可以使用 * 作为通配符。
curl --request GET \
     --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/search?q=Hello*"

示例响应:

{
  "results": [
    "Hello/0.1@foo+conan_test_prod/beta",
    "Hello/0.1@foo+conan_test_prod/stable",
    "Hello/0.2@foo+conan_test_prod/beta",
    "Hello/0.3@foo+conan_test_prod/beta",
    "Hello/0.1@foo+conan-reference-test/stable",
    "HelloWorld/0.1@baz+conan-reference-test/beta"
    "hello-world/0.4@buz+conan-test/alpha"
  ]
}

获取最新配方修订版

获取最新包配方的修订版哈希和创建日期。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/latest
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/latest"

示例响应:

{
  "revision" : "75151329520e7685dcf5da49ded2fec0",
  "time" : "2024-12-17T09:16:40.334+0000"
}

列出所有配方修订版

列出包配方的所有修订版。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions"

示例响应:

{
  "reference": "my-package/1.0@my-group+my-project/stable",
  "revisions": [
    {
      "revision": "75151329520e7685dcf5da49ded2fec0",
      "time": "2024-12-17T09:16:40.334+0000"
    },
    {
      "revision": "df28fd816be3a119de5ce4d374436b25",
      "time": "2024-12-17T09:15:30.123+0000"
    }
  ]
}

删除配方修订版

从注册表中删除配方修订版。如果包只有一个配方修订版,则包也会被删除。

DELETE /projects/:id/packages/conan/conans/:package_name/package_version/:package_username/:package_channel/revisions/:recipe_revision
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 要删除的配方修订版的修订版哈希。
curl --request DELETE \
     --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/2be19f5a69b2cb02ab576755252319b9"

列出所有配方文件

列出包注册表中的所有配方文件。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/files
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-username/stable/revisions/df28fd816be3a119de5ce4d374436b25/files"

示例响应:

{
  "files": {
    "conan_sources.tgz": {},
    "conanfile.py": {},
    "conanmanifest.txt": {}
  }
}

获取配方文件

从包注册表中获取配方文件。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/files/:file_name
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
file_name string 请求文件的名称和文件扩展名。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-username/stable/revisions/df28fd816be3a119de5ce4d374436b25/files/conanfile.py"

您也可以使用以下命令将输出写入文件:

curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-username/stable/revisions/df28fd816be3a119de5ce4d374436b25/files/conanfile.py" \
     >> conanfile.py

此示例将输出写入当前目录中的 conanfile.py

上传配方文件

将配方文件上传到包注册表。

PUT /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/files/:file_name
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
file_name string 请求文件的名称和文件扩展名。
curl --request PUT \
     --header "Authorization: Bearer <authenticate_token>" \
     --upload-file path/to/conanfile.py \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/upload-v2-package/1.0.0/user/stable/revisions/123456789012345678901234567890ab/files/conanfile.py"

示例响应:

{
  "id": 38,
  "package_id": 28,
  "created_at": "2025-04-07T12:35:40.841Z",
  "updated_at": "2025-04-07T12:35:40.841Z",
  "size": 24,
  "file_store": 1,
  "file_md5": "131f806af123b497209a516f46d12ffd",
  "file_sha1": "01b992b2b1976a3f4c1e5294d0cab549cd438502",
  "file_name": "conanfile.py",
  "file": {
    "url": "/94/00/9400f1b21cb527d7fa3d3eabba93557a18ebe7a2ca4e471cfe5e4c5b4ca7f767/packages/28/files/38/conanfile.py"
  },
  "file_sha256": null,
  "verification_retry_at": null,
  "verified_at": null,
  "verification_failure": null,
  "verification_retry_count": null,
  "verification_checksum": null,
  "verification_state": 0,
  "verification_started_at": null,
  "status": "default",
  "file_final_path": null,
  "project_id": 9,
  "new_file_path": null
}

列出所有包修订版

列出特定配方修订版和包引用的所有包修订版。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/packages/:conan_package_reference/revisions
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
conan_package_reference string Conan 包的引用哈希。Conan 生成此值。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/packages/103f6067a947f366ef91fc1b7da351c588d1827f/revisions"

示例响应:

{
  "reference": "my-package/1.0@my-group+my-project/stable#75151329520e7685dcf5da49ded2fec0:103f6067a947f366ef91fc1b7da351c588d1827f",
  "revisions": [
    {
      "revision": "2bfb52659449d84ed11356c353bfbe86",
      "time": "2024-12-17T09:16:40.334+0000"
    },
    {
      "revision": "3bdd2d8c8e76c876ebd1ac0469a4e72c",
      "time": "2024-12-17T09:15:30.123+0000"
    }
  ]
}

获取最新包修订版

获取特定配方修订版和包引用的最新包修订版的修订版哈希和创建日期。

GET /api/v4/projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/packages/:conan_package_reference/latest
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
conan_package_reference string Conan 包的引用哈希。Conan 生成此值。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/packages/103f6067a947f366ef91fc1b7da351c588d1827f/latest"

示例响应:

{
  "revision" : "3bdd2d8c8e76c876ebd1ac0469a4e72c",
  "time" : "2024-12-17T09:16:40.334+0000"
}

删除包修订版

从注册表中删除包修订版。如果包引用只有一个包修订版,则包引用也会被删除。

DELETE /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/packages/:conan_package_reference/revisions/:package_revision
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
conan_package_reference string Conan 包的引用哈希。Conan 生成此值。
package_revision string 包的修订版。不接受 0 值。
curl --request DELETE \
     --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/packages/103f6067a947f366ef91fc1b7da351c588d1827f/revisions/3bdd2d8c8e76c876ebd1ac0469a4e72c"

获取包文件

从包注册表中获取包文件。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/packages/:conan_package_reference/revisions/:package_revision/files/:file_name
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
conan_package_reference string Conan 包的引用哈希。Conan 生成此值。
package_revision string 包的修订版。不接受 0 值。
file_name string 请求文件的名称和文件扩展名。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/packages/103f6067a947f366ef91fc1b7da351c588d1827f/revisions/3bdd2d8c8e76c876ebd1ac0469a4e72c/files/conaninfo.txt"

您也可以使用以下命令将输出写入文件:

curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/packages/103f6067a947f366ef91fc1b7da351c588d1827f/revisions/3bdd2d8c8e76c876ebd1ac0469a4e72c/files/conaninfo.txt" \
     >> conaninfo.txt

此示例将输出写入当前目录中的 conaninfo.txt

上传包文件

将包文件上传到包注册表。

PUT /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/packages/:conan_package_reference/revisions/:package_revision/files/:file_name
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
conan_package_reference string Conan 包的引用哈希。Conan 生成此值。
package_revision string 包的修订版。不接受 0 值。
file_name string 请求文件的名称和文件扩展名。

在请求正文中提供文件内容:

curl --request PUT \
     --header "Authorization: Bearer <authenticate_token>" \
     --upload-file path/to/conaninfo.txt \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/packages/103f6067a947f366ef91fc1b7da351c588d1827f/revisions/3bdd2d8c8e76c876ebd1ac0469a4e72c/files/conaninfo.txt"

示例响应:

{
  "id": 202,
  "package_id": 48,
  "created_at": "2025-03-19T10:06:53.626Z",
  "updated_at": "2025-03-19T10:06:53.626Z",
  "size": 208,
  "file_store": 1,
  "file_md5": "bf996313bbdd75944b58f8c673661d99",
  "file_sha1": "02c8adf14c94135fb95d472f96525063efe09ee8",
  "file_name": "conaninfo.txt",
  "file": {
      "url": "/94/00/9400f1b21cb527d7fa3d3eabba93557a18ebe7a2ca4e471cfe5e4c5b4ca7f767/packages/48/files/202/conaninfo.txt"
  },
  "file_sha256": null,
  "verification_retry_at": null,
  "verified_at": null,
  "verification_failure": null,
  "verification_retry_count": null,
  "verification_checksum": null,
  "verification_state": 0,
  "verification_started_at": null,
  "status": "default",
  "file_final_path": null,
  "project_id": 9,
  "new_file_path": null
}

获取包引用元数据

获取包的所有包引用的元数据。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/search
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/search"

示例响应:

{
  "103f6067a947f366ef91fc1b7da351c588d1827f": {
    "settings": {
      "arch": "x86_64",
      "build_type": "Release",
      "compiler": "gcc",
      "compiler.libcxx": "libstdc++",
      "compiler.version": "9",
      "os": "Linux"
    },
    "options": {
      "shared": "False"
    },
    "requires": {
      "zlib/1.2.11": null
    },
    "recipe_hash": "75151329520e7685dcf5da49ded2fec0"
  }
}

响应包括每个包引用的以下元数据:

  • settings: 用于包的构建设置。
  • options: 包选项。
  • requires: 包所需的依赖项。
  • recipe_hash: 配方的哈希值。

按配方修订版获取包引用元数据

获取与特定配方修订版关联的所有包引用的元数据。

GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/search
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。
package_name string 包的名称。
package_version string 包的版本。
package_username string 包的 Conan 用户名。此属性是您项目的 + 分隔的完整路径。
package_channel string 包的通道。
recipe_revision string 配方的修订版。不接受 0 值。
curl --header "Authorization: Bearer <authenticate_token>" \
     --url "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/search"

示例响应:

{
  "103f6067a947f366ef91fc1b7da351c588d1827f": {
    "settings": {
      "arch": "x86_64",
      "build_type": "Release",
      "compiler": "gcc",
      "compiler.libcxx": "libstdc++",
      "compiler.version": "9",
      "os": "Linux"
    },
    "options": {
      "shared": "False"
    },
    "requires": {
      "zlib/1.2.11": null
    },
    "recipe_hash": "75151329520e7685dcf5da49ded2fec0"
  }
}

响应包括每个包引用的以下元数据:

  • settings: 用于包的构建设置。
  • options: 包选项。
  • requires: 包所需的依赖项。
  • recipe_hash: 配方的哈希值。