本地配方索引仓库¶
local_recipes_index 仓库是一种实验性的特殊仓库类型,你无法向其上传包或存储二进制文件。此远程仓库的目的是:
使贡献者能够与社区共享包配方,特别是对于那些可能不适合 ConanCenter 的库。
它还简化了从私有 conan-center-index 分支构建二进制文件的过程,允许对配方进行绝对控制、自定义和维护稳定的仓库快照。这确保了针对 ConanCenter 上游更改的健壮性。有关详细的设置和使用说明,请参阅 Conan DevOps 指南中的专用部分本地配方索引仓库。
设置¶
要设置一个本地配方索引仓库以共享你自己的配方,你需要将你的配方组织成一个类似于 conan-center-index 的文件夹结构。 要开始,你可以使用 conan new 命令的 local_recipes_index 模板。 为了演示目的,让我们使用 conan new 命令的 local_recipes_index 模板,为假设的 hello 库创建一个 local-recipes-index 仓库,该库的许可证与 Conan Center 不兼容
$ mkdir repo && cd repo
$ conan new local_recipes_index -d name=hello -d version=0.1 \
-d url=https://github.com/conan-io/libhello/archive/refs/tags/0.0.1.zip \
-d sha256=1dfb66cfd1e2fb7640c88cc4798fe25853a51b628ed9372ffc0ca285fe5be16b
$ cd ..
conan new local_recipes_index 命令创建一个模板,该模板假设 CMake 作为构建系统,并伴随其他一些强假设。 实际上,它将需要自定义,但对于此演示,它可以按原样工作。 它将创建一个与 conan-center-index GitHub 仓库相同的文件夹布局
.
└── repo
└── recipes
└── hello
├── all
│ ├── conandata.yml
│ ├── conanfile.py
│ └── test_package
│ ├── CMakeLists.txt
│ ├── conanfile.py
│ └── src
│ └── example.cpp
└── config.yml
设置仓库后,我们将其作为本地远程仓库添加到 Conan
$ conan remote add mylocalrepo ./repo --allowed-packages="hello/*"
请特别注意 –allowed-packages 参数。 此参数确保 Conan 丢弃除 hello 之外的所有包。 这可以用来最大限度地减少潜在的供应链攻击的范围。
现在,你可以列出并安装来自这个新仓库的包
$ conan list "*" -r=mylocalrepo
$ conan install --requires=hello/0.1 -r=mylocalrepo --build=missing
此时,你可以将此仓库推送到你的 GitHub 帐户并与社区共享。 现在,用户只需克隆 GitHub 仓库并将克隆的文件夹作为他们自己的本地仓库添加即可。
注意
请注意,正如我们之前评论的那样,此功能专门为某些库不适合 ConanCenter 的场景量身定制。请记住,“local-recipes-index”仓库存在局限性:它不是完全可重现的,因为它仅建模版本而不是修订版,并且不提供二进制文件。因此,在这些情况之外,建议使用远程包服务器,例如 Artifactory。
另请参阅