本地配方索引仓库

local_recipes_index 仓库是一种**实验性**的特殊类型的仓库,您不能向其中上传包或存储二进制文件。此远程仓库的目的是

  • 使贡献者能够与社区共享包配方,特别是对于可能不适合 ConanCenter 的库。

  • 它还简化了从私有 conan-center-index 分支构建二进制文件的过程,允许绝对控制配方、自定义和维护稳定的仓库快照。这确保了对 ConanCenter 上游更改的稳健性。有关详细的设置和使用说明,请参阅 Conan DevOps 指南中的专用部分 本地配方索引仓库

设置

要设置一个本地配方索引仓库来共享您自己的配方,您需要以模仿 conan-center-index 的文件夹结构来组织您的配方。您可以使用 conan new 命令的 local_recipes_index 模板来开始。为了演示目的,让我们为一个假设的 hello 库创建一个 local-recipes-index 仓库,该库的许可证与 Conan Center 不兼容,使用 conan new 命令的 local_recipes_index 模板

$ 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 参数。此参数确保除 hello 之外的所有包都被 Conan 丢弃。这可以用来最小化潜在的供应链攻击的攻击面。

现在您可以列出并安装来自此新仓库的包

$ conan list "*" -r=mylocalrepo
$ conan install --requires=hello/0.1 -r=mylocalrepo --build=missing

此时,您可以将此仓库推送到您的 GitHub 帐户并与社区共享。现在,用户只需克隆 GitHub 仓库并将克隆的文件夹作为本地仓库添加到他们自己的系统中即可。

注意

请注意,正如我们之前提到的,此功能专门针对某些库不适合 ConanCenter 的场景。请记住,“local-recipes-index” 仓库有一些限制:它不是完全可重现的,因为它只模拟版本而不是修订版本,并且它不提供二进制文件。因此,在这些情况之外,建议使用远程包服务器,例如 Artifactory