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: 配方的哈希值。